自然语言生成任务,如文本摘要和图像标题的生成。seq2seq的模型原理
我們使用x={x1,x2,…,xn}代表輸入的語句,y={y1, y2, …, yn}代表輸出的語句,yt代表當前輸出詞。在理解seq2seq的過程中,我們要牢記我們的目標是:
(1)
即輸出的yt不僅依賴之前的輸出{y1, y2, …, yt?1},還依賴輸入語句x,模型再怎么變化都是在公式(1)的約束之下。
seq2seq最初模型
最早由bengio等人發表在computer science上的論文:Learning Phrase Representations using RNN Encoder–Decoder
for Statistical Machine Translation。對于RNN來說,x={x1,x2,…,xt}代表輸入,在每個時間步t,RNN的隱藏狀態htht由公式(1)更新:
其中,f代表一個非線性函數。這時htht就是一個rnn_size的隱含狀態。然后需要通過一個矩陣W將其轉成一個symbol_size的輸出,并通過softmax函數將其轉化為概率,然后篩選出概率最大的symbol為輸出symbol。
(3)以上是rnn的基本原理,接下來介紹論文中的seq2seq模型:
模型包括encoder和decoder兩個部分。首先在encoder部分,將輸入傳到encoder部分,得到最后一個時間步長t的隱藏狀態C,這就是RNNcell的基本功能。其次是decoder部分,從上述模型的箭頭中可以看出,decoder的隱藏狀態htht和C三部分構成。即:
由此我們的到了decoder的隱藏狀態,那么最后的輸出yt從圖中也可以看得出來由三部分得到,yt從圖中也可以看得出來由三部分得到,y_{t-1}$和C,即:
到現在為止,我們就實現了我們的目標(1)。
seq2seq的改進模型
改進模型介紹2014年發表的論文Sequence to Sequence Learning with Neural Networks。模型圖:
可以看到,該模型和第一個模型主要的區別在于從輸入到輸出有一條完整的流:ABC為encoder的輸入,WXYZ為decoder的輸入。將encoder最后得到的隱藏層的狀態ht輸入到decoder的第一個cell里,就不用像第一個模型一樣,而一個decoder的cell都需要ht,因此從整體上看,從輸入到輸出像是一條“線性的數據流”。本文的論文也提出來,ABC翻譯為XYZ,將encoder的input變為“CBA”效果更好。即A和X的距離更近了,更有利于seq2seq模型的交流。
具體來說,encoder的過程如下圖。這和我們之前的encoder都一樣。
不同的是decoder的階段:
得到了encoder represention,即encoder的最后一個時間步長的隱層ht以后,輸入到decoder的第一個cell里,然后通過一個激活函數和softmax層,得到候選的symbols,篩選出概率最大的symbol,然后作為下一個時間步長的輸入,傳到cell中。這樣,我們就得到了我們的目標(1)。
seq2seq with attention
我們前面提到,距離decoder的第一個cell越近的輸入單詞,對decoder的影響越大。但這并不符合常理,這時就提出了attention機制,對于輸出的每一個cell,都檢測輸入的sequence里每個單詞的重要性,即論文NEURAL MACHINE TRANSLATION
BY JOINTLY LEARNING TO ALIGN AND TRANSLATE。attention在NMT基于seq2seq的改進模型再進行改進,原理如下:
上圖中,encoder和decoder都發生了變化。首先說encoder,使用了雙向RNN,因為希望不僅能得到前向的詞的順序,還希望能夠得到反向的詞的順序。使用hj→hj→。
再說decoder。我們再來回顧一下我們的目標公式(1):
對于加入attention機制的seq2seq,每一個輸出為公式(6)。即對于時間步i的輸出yi,由時間步i的隱藏狀態si,由attention計算得到的輸入內容ci和上一個輸出yi-1得到。
(6)其中si是對于時間步i的隱藏狀態,由公式(7)計算。即對于時間步i的隱藏狀態,由時間步i-1的隱藏狀態si-1,由attention計算得到的輸入內容ci和上一個輸出yi-1得到。
(7)通過以上公式可以看出,加入attention的seq2seq比之前的seq2seq多了一個輸入內容向量ci,那么這個ci是怎么得來的呢?和輸入內容以及attention有什么關系呢?我們接著看公式(8):
(8)即,對于decoder的時間步長i的隱藏狀態si,ci等于Tx個輸入向量[1,Tx]與其權重αijαij由公式(9)得到:
(9)其中,eij由公式(10)得到:
(10)總結一下,對于時間步i的隱藏狀態si,可以通過求時間步i-1的隱藏狀態si-1、輸入內容的編碼向量ci和上一個輸出yi-1得到。輸入內容編碼ci是新加入的內容,可以通過計算輸入句子中每個單詞的權重,然后加權求和得到ci。直觀解釋這個權重:對于decoder的si和encoder的hj的權重\alpha_{ij}$,就是上一個時間步長的隱藏狀態si-1與encoder的hj通過非線性函數得到的。這樣就把輸入內容加入到解碼的過程中,這和我們人類翻譯的過程也是類似的,即對于當前輸出的詞,每一個輸入給與的注意力是不一樣的。
seq2seq with beam-search
在測試階段,decoder的過程有兩種主要的解碼方式。第一種方法是貪婪解碼,它將在上一個時間步預測的單詞feed給下一步的輸入,來預測本個時間步長的最有可能的單詞。
但是,如果有一個cell解碼錯了詞,那么錯誤便會一直累加。所以在工程上提出了beam-search的方法。即在decoder階段,某個cell解碼時不只是選出預測概率最大的symbol,而是選出k個概率最大的詞(例如k = 5,我們稱k=5為beam-size)。在下一個時間步長,對于這5個概率最大的詞,可能就會有5V個symbols(V代表詞表的大小)。但是,只保留這5V個symbols中最好的5個,然后不斷的沿時間步長走下去。這樣可以保證得到的decode的整體的結果最優。
參考文獻:
(1)Learning Phrase Representations using RNN Encoder–Decoder
for Statistical Machine Translation
(2)Sequence to Sequence Learning with Neural Networks
(3)NEURAL MACHINE TRANSLATION
BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
(4)seq2seq with beam-search
(5) 從頭實現一個深度學習對話系統–Seq-to-Seq模型詳解
(6) seq2seq學習筆記
總結
以上是生活随笔為你收集整理的自然语言生成任务,如文本摘要和图像标题的生成。seq2seq的模型原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的《Android官方开发文档Trai
- 下一篇: Android官方开发文档Trainin