深度學習之文本分類模型-基於RNNs和LSTM系列

1、RNN和LSTM簡介

首先我們來簡要介紹一下RNN模型和LSTM模型,這樣,我們可以很好的理解後面的延伸的模型。可以參考RNN和LSTM模型詳解

2、tree-LSTM模型

tree-LSTM是由Kai Sheng Tai[1]等人提出的一種在LSTM基礎上改進的一種算法,這是一種基於樹的一種算法,論文中提出了兩種模型結構,Child-Sum Tree-LSTMs和N-ary Tree-LSTMs。

LSTM是嚴格按照按照固定的輸入序列進行輸入,即從頭到尾輸入單詞序列,無法改變順序。tree-LSTM的思想主要是根據句法分析,語法分析等操作,先構建好一個樹,然後根據單詞間的相互關係,每個單詞分別輸入到不同的節點中,通過作者的實驗表示,這種方法要比傳統的LSTM效果要好。

Child-Sum Tree-LSTMs

根據名字我們可以看出,這是一種將child進行相加的方法。具體操作是什麼樣的呢?這裏假定只考慮一個父節點和其多個子節點的情況,瞭解了這種情況,對於該父節點的父節點,其實可以依次類推。

給定一個父節點,這個父節點輸入的單詞序列爲\(x_{j}\),子節點的集合爲\(C(j)\),注意,這裏的\(j\)表示不同的含義,\(x_{j}\)表示的父節點輸入的單詞vector,第二個\(C(j)\)表示子節點的集合,\(C(1)\)表示第一個孩子。首先,先將子節點的隱藏向量\(h\)進行累加,這也是爲啥這個模型叫child-sum的原因了。

\[ \tilde { h } _ { j } = \sum _ { k \in C ( j ) } h _ { k } \\ \]

接下來,我們計算其他的參數,這裏我們要注意一下,\(f_{jk}\)是由每個子節點對應的\(h\)計算而來,而其他的公式則由上個公式\(h_{j}\)計算而來。

最後,更新當前父節點的參數\(c_{j}\)\(h_{j}\)

N-ary Tree-LSTMs

這種方法和Child-Sum Tree-LSTMs不同之處在於Child-Sum Tree-LSTMs在計算\(i_{j}\),\(o_{j}\),\(u_{j}\)計算時使用的是每個子節點的隱藏向量加和,而N-ary Tree-LSTMs基本上給這三個輸出結果都加上了相應的權值向量\(U\),而不是簡單的利用隱藏向量的加和。看下公式

接着得到相應的輸出

3、MT-LSTM

MT-LSTM(Multi-Timescale Long Short-Term Memory Neural Network)是由復旦大學Pengfei Liu[2]等提出的一種算法,這種方法將LSTM的模型進行了分組,每個組可以選擇激活或者不激活,這個由一個函數進行調控,這種方法模擬了人的記憶,激活較多的代表了人的近期記憶,激活少的組代表了人的長久之前的記憶。

上圖中(a)表示的傳統的LSTM,(b)表示的MT-LSTM模型,在這個模型中,分了三個組,即\(g^{1},g^{2},g^{3}\),虛線框表示當前時間t該組沒有激活,實線框表示該組激活,虛線箭頭表示當前節點的權值不進行改變,或者理解爲複製上一個節點的權值,實線箭頭表示上一個節點參與當前的計算。

  • 如何確定某個組在某個時間t是否激活
    在論文中,假定了一個公式,即\(t%T_{k} == 0\)則進行激活,這裏\(t\)表示時間,也可以理解爲單詞序列的長度,或者叫句子的長度,\(T_{k} = 2^{k-1}\),上圖中的k=1,2,3,則\(T_{1}=1\),\(T_{2}=2\),\(T_{3}=4\)

    在第一個時間步驟,t=1,則第一個組1 % 1 = 0,激活。第二個組1 % 2 = 1,不激活。第三個組1 % 4 = 4,不激活。我們可以看到圖中,只有\(g_{1}^{1}\)是實線框,\(g_{1}^{2}\)\(g_{1}^{3}\)是虛線框。

    在第二個時間步,t=2,則第一個組2 % 1 = 0,激活。第二個組2 % 2 = 0,激活。第三個組2 % 4 = 4,不激活。我們可以看到圖中,只有\(g_{1}^{1}\)\(g_{1}^{2}\)是實線框,\(g_{1}^{3}\)是虛線框

依次類推,最終,我們將三個組的結果進行彙總,再接上一個softmax,就可以進行我們後續的操作了。在這一步,我們發現,\(g_{1}^{1}\)無論在哪個時間t,都是激活狀態,而越往上的組,激活節點越來越少,所以,最下層的可以理解爲人的"短期記憶",即這個組中節點信息保留最多的是最近幾個詞彙的信息,而最上面一層的節點可以理解爲人的"長期記憶"(我們總有一些童年的某件事情使你無法忘懷)。

  • 每個節點是如何更新的

這張圖表示的是當前節點若是激活狀態下的節點計算方式,其基本計算和傳統的LSTM類似,區別在於輸入的是上一個時間節點t下的節點狀態信息。對於當前節點沒有處於激活狀態那麼怎麼辦呢?很簡單,直接複製唄,如下。

  • Fast-to-Slow策略和Slow-to-Fast策略
    我們再來觀察MT-LSTM的圖,從x3到x4的序列上,x4上的所有組都處於激活狀態,但是\(g_{4}^{3}\)有分別來自\(g_{3}^{1}\),\(g_{3}^{2}\),\(g_{3}^{3}\)的節點輸入,但是\(g_{4}^{1}\)只有來自\(g_{3}^{1}\)的節點輸入,這種方式就是Fast-to-Slow策略。這裏假定處於底層的組爲fast組,上層的組爲slow組,fast-to-slow表示上層的組更新,需要上一個時間t的小於它的組級別的輸入更新,slow-to-fast則正好相反。我們可以看一下這張圖
  • 其他
    關於論文中作者有一些地方寫錯了,在此羅列出來,以免後人踩坑。同時也希望我們的研究學者能夠對工作更加認真一些。

4、topicRNN

topicRNN是由哥倫比亞大學和微軟[3]聯合提出的一種算法,將主題模型和RNN進行融合,既融合了主題模型可以獲取全局信息的優勢,又融合了RNN可以捕獲短距離的優勢。其基本算法如下所示:

step1:利用高斯分佈得到主題向量\(\theta \sim N(0,I)\)
step2:給定一篇文章的單詞序列\(y_{1:t-1}\),對於文章中的第t個詞

  • 根據RNN計算其隱狀態,\(h_{t} = f_{W}(x_{t},h_{t-1}), x_{t} \equiv y_{t-1}\)
  • 停用詞indicator,\(l_{t} \sim Bernoulli(\sigma (\Gamma ^{T} h_{t}))\)
  • \(y_{t} \sim p(y_{t} | h_{t}, \theta , l_{t}, B)\) 其中

\[ p(y_{t} = i| h_{t}, \theta , l_{t}, B) \propto exp(v^{T}_{i} h_{t} + (1 - l_{t}) b^{T}_{i} \theta) \]

首先,我們先獲得根據高斯分佈得到的參數\(\theta\),接下來,我們將單詞逐次輸入到RNN中,得到每一個隱藏單元\(h_{t}\),當我們得到這些隱藏層單元\(h_{t}\)之後,會通過一個指示器indicator,這個指示器可以看做是一個函數,將\(h_{t}\)進行一個線性變換,再輸入到一個sigmoid函數中,我們得到的結果是一個[0,1]之間的數值,這裏,用一個伯努利分佈,即對於大於0.5的數值輸出結果爲1,小於0.5的輸出結果爲0。其中1表示使用停用詞,0表示不適用停用詞,當指示器爲1時,$ b^{T}_{i} \theta$不生效,爲0時,不生效。

參考文獻
[1]Kai Sheng Tai(2015)Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks
[2]Pengfei Liu(2015)Multi-Timescale Long Short-Term Memory Neural Network for Modelling Sentences and Documents
[3]Adji B. Dieng(2017)TOPICRNN: A RECURRENT NEURAL NETWORK WITH LONG-RANGE SEMANTIC DEPENDENCY
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章