sequence to sequence模型

-牧野-發表於2018-05-16

sequence to sequence模型是一類End-to-End的演算法框架,也就是從序列到序列的轉換模型框架,應用在機器翻譯,自動應答等場景。

Seq2Seq一般是通過Encoder-Decoder(編碼-解碼)框架實現,Encoder和Decoder部分可以是任意的文字,語音,影象,視訊資料,模型可以採用CNN、RNN、LSTM、GRU、BLSTM等等。所以基於Encoder-Decoder,我們可以設計出各種各樣的應用演算法。

與Seq2Seq框架相對的還有一個CTC,CTC主要是利用序列區域性的資訊,查詢與序列相對的另外一個具有一對一對應關係(強相關,具有唯一性)的序列,比較適用於語音識別、OCR等場景。

而Seq2Seq更善於利用更長範圍的序列全域性的資訊,並且綜合序列上下文判斷,推斷出與序列相對應的另一種表述序列(非強相關,不具有唯一性),比較適用於機器翻譯、文章主旨提取等場景。

從範圍上來說,CTC是狹義的,Seq2Seq是廣義的,從結果上來說,CTC是強制的一對一對應關係,Seq2Seq是具有弱約束的多對多對應關係。

經典的Encoder-Decoder框架:


左側Encoder編碼將輸入序列轉化成一個固定長度的向量編碼,右側Decoder解碼將之前生成的固定向量再轉化成輸出序列,編解碼部分可以採用CNN、RNN、LSTM、GRU、BLSTM等實現。

Encoder-Decoder模型可以預測任意的序列對應關係,但同時也有一個很大的問題就是從編碼到解碼的準確率很大程度上依賴於一個固定長度的語義向量c,輸入序列到語義向量c的壓縮過程中存在資訊的丟失,並且在稍微長一點的序列上,前邊的輸入資訊很容易被後邊的輸入資訊覆蓋,也就是說編碼後的語義向量c已經存在偏差了,解碼準確率自然會受到影響。其次在解碼的時候,每個時刻的輸出在解碼過程中用到的上下文向量是相同的,沒有做區分,也就是說預測結果中每一個詞的的時候所使用的預測向量都是相同的, 這也會給解碼帶來問題。

為了解決這樣的問題,在Seq2Seq模型加入了注意力機制(attention mechanism),在預測每個時刻的輸出時用到的上下文是跟當前輸出有關係的上下文,而不是統一隻用相同的一個。這樣在預測結果中的每個詞彙的時候,每個語義向量c中的元素具有不同的權重,可以更有針對性的預測結果。

圖示如下,增加了一個“注意力範圍”,表示接下來輸出詞時候要重點關注輸入序列中的哪些部分,然後根據關注的區域來產生下一個輸出:



attention模型最大的不同在於Encoder將輸入編碼成一個向量的序列,而在解碼的時候,每一步都會選擇性的從向量序列中挑選一個子集進行輸出預測,這樣,在產生每一個輸出的時候,都能找到當前輸入對應的應該重點關注的序列資訊,也就是說,每一個輸出單詞在計算的時候,參考的語義編碼向量c都是不一樣的,所以說它們的注意力焦點是不一樣的。

相關文章