1. 程式人生 > >深度學習方法(八):自然語言處理中的Encoder-Decoder模型,基本Sequence to Sequence模型

深度學習方法(八):自然語言處理中的Encoder-Decoder模型,基本Sequence to Sequence模型

歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。技術交流QQ群:433250724,歡迎對演算法、技術感興趣的同學加入。

Encoder-Decoder(編碼-解碼)是深度學習中非常常見的一個模型框架,比如無監督演算法的auto-encoding就是用編碼-解碼的結構設計並訓練的;比如這兩年比較熱的image caption的應用,就是CNN-RNN的編碼-解碼框架;再比如神經網路機器翻譯NMT模型,往往就是LSTM-LSTM的編碼-解碼框架。因此,準確的說,Encoder-Decoder並不是一個具體的模型,而是一類框架。Encoder和Decoder部分可以是任意的文字,語音,影象,視訊資料,模型可以採用CNN,RNN,BiRNN、LSTM、GRU等等。所以基於Encoder-Decoder,我們可以設計出各種各樣的應用演算法。

Encoder-Decoder框架有一個最顯著的特徵就是它是一個End-to-End學習的演算法;本文將以文字-文字的例子作為介紹,這樣的模型往往用在機器翻譯中,比如將法語翻譯成英語。這樣的模型也被叫做 Sequence to Sequence learning[1]。所謂編碼,就是將輸入序列轉化成一個固定長度的向量;解碼,就是將之前生成的固定向量再轉化成輸出序列。 如下圖示意[3]:

Encoder-Decoder

這邊為了方便闡述,選取了編碼和解碼都是RNN的組合。在RNN中,當前時刻隱層狀態是由上一時刻的隱層狀態和當前時刻的輸入決定的,也就是

ht=f(ht1,xt)

獲得了各個時刻的隱層狀態以後,再將資訊彙總,生成最後的語義編碼c

c=q({fh1,...,hTx})

q表示某種非線性函式。在[1]中,作者採用LSTM網路作為Encoder網路,實際上在LSTM或者基本的RNN網路中,當前時刻計算完後是看不見前面時刻的隱層狀態的了,所以就是用最後一個時刻的隱層狀態作為語義編碼c,即

c=hTx

解碼過程我們要根據給定的語義編碼C和已經生成的輸出序列y1,y2,…yt−1來預測下一個輸出的單詞yt,實際上就是把生成句子y={y1,y2,yT}的聯合概率分解成按順序的條件概率:

p(y)=t=1Tp(yt|{y1,y2,yt1},c)
而每一個條件概率又可以寫成是
p(yt|{y1,y2,
yt1},c)=g(yt1,st,c)

其中st是輸出RNN中的隱藏層,c代表之前提過的語義向量,yt1表示上個時刻的輸出。g表示一種非線性變換,往往就是指一種多層的函式,可以輸出yt的概率(比如多層RNN後接softmax)。

所以,在文字序列的Encoder-Decoder模型中,原本RNN(LSTM)語言模型是要估計p(y1,y2,yT|x1,x2,...,xT),給定一串輸入x,得到一串輸出y(不需要等長),但是因為Encoder-Decoder中間用語義編碼c把前後兩部分隔開了,所以輸出句子y只需要和c相關即可。

這裡寫圖片描述

只要端到端訓練RNN(LSTM)網路就可以了,在每一個句子末尾打上一個end-of-sentence symbol, EOS符號,用輸入句子來預測輸出句子。這樣的模型就可以完成基本的英語-法語的翻譯任務。

實際上這樣的模型能做什麼應用完全取決於訓練資料,如果用英語-法語對應句子作為輸入輸出訓練,那就是英法翻譯;如果用文章-摘要來訓練那就是自動摘要機了。

基本的Encoder-Decoder模型非常經典,但是也有侷限性。最大的侷限性就在於編碼和解碼之間的唯一聯絡就是一個固定長度的語義向量c。也就是說,編碼器要將整個序列的資訊壓縮排一個固定長度的向量中去。但是這樣做有兩個弊端,一是語義向量無法完全表示整個序列的資訊,還有就是先輸入的內容攜帶的資訊會被後輸入的資訊稀釋掉,或者說,被覆蓋了。輸入序列越長,這個現象就越嚴重。這就使得在解碼的時候一開始就沒有獲得輸入序列足夠的資訊, 那麼解碼的準確度自然也就要打個折扣了[3]。

為了彌補上述基本Encoder-Decoder模型的侷限性,近兩年NLP領域提出Attention Model(注意力模型),典型的例子就是在機器翻譯的時候,讓生成詞不是隻能關注全域性的語義編碼向量c,而是增加了一個“注意力範圍”,表示接下來輸出詞時候要重點關注輸入序列中的哪些部分,然後根據關注的區域來產生下一個輸出,如下圖所示:

這裡寫圖片描述

相比於之前的encoder-decoder模型,attention模型最大的區別就在於它不在要求編碼器將所有輸入資訊都編碼進一個固定長度的向量之中。相反,此時編碼器需要將輸入編碼成一個向量的序列,而在解碼的時候,每一步都會選擇性的從向量序列中挑選一個子集進行進一步處理。這樣,在產生每一個輸出的時候,都能夠做到充分利用輸入序列攜帶的資訊。而且這種方法在翻譯任務中取得了非常不錯的成果。很顯然,每一個輸出單詞在計算的時候,參考的語義編碼向量c都是不一樣的,也就是它們的注意力焦點是不一樣的。

在下一篇將具體描述Attention Model的機制,是非常重要的一類模型,值得關注!

參考資料