1. 程式人生 > >Facebook的Fairseq模型詳解(Convolutional Sequence to Sequence Learning)

Facebook的Fairseq模型詳解(Convolutional Sequence to Sequence Learning)

1. 前言

近年來,NLP領域發展迅速,而機器翻譯是其中比較成功的一個應用,自從2016年穀歌宣佈新一代谷歌翻譯系統上線,神經機器翻譯(NMT,neural machine translation)就取代了統計機器翻譯(SMT,statistical machine translation),在翻譯質量上面獲得了大幅的提高。目前神經機器翻譯模型主要分為三種:

  1. 一種是以rnn為基礎的模型, 一般是LSTM+attention,順序處理輸入資訊。
  2. 一種是以cnn為基礎的模型,今天要講的Fairseq就屬於這種
  3. 一種是完全依靠attention的模型,如谷歌的transformer

2. Fairseq背景

Fairseq 這個翻譯模型由Facebook AI實驗室在2017年提出,和以往以RNN為基礎的翻譯模型相比,採用了以cnn為主的模型結構。

RNN的鏈式結構,能夠很好地應用於處理序列資訊。但是,RNN也存在著劣勢:一個是由於RNN執行時是將序列的資訊逐個處理,不能實現並行操作,導致執行速度慢;另一個是傳統的RNN並不能很好地處理句子中的結構化資訊,或者說更復雜的關係資訊。

相比之下,CNN的優勢就凸顯出來。文章提到用CNN做seq-seq這種翻譯任務有3個好處:

  1. 通過卷積的疊加可以精確地控制上下文的長度,因為卷積之間的疊加可以通過公式直接計算出感受野是多少,從而知道上下文的長度,RNN雖然理論上有長時記憶的功能,但是在實際的訓練過程中,間隔較遠的時候,很難學到這種詞與詞之間的聯絡。
  2. 卷積可以進行平行計算,而RNN模型是時序的,只有前一幀得出結果才能進行後續的計算。
  3. 對於輸入的一個單詞而言,輸入CNN網路,所經過的卷積核和非線性計算數量都是固定的,不過對於輸入RNN的單詞而言,第一個單詞要經過n次unit的計算和非線性,但是最後一個單詞只經過1次,文章說固定隊輸入所施加的非線性計算會有助於訓練。

3. 模型

模型結構如下圖所示:
image

image

3.1 Position Embedding

輸入除了詞向量之外,還加入了位置資訊,最後的輸入向量為詞向量加上位置向量。

詞向量:\(w=(w_1,w_2,...w_n)\)

位置向量:\(p=(p_1,p_2,...p_n)\)

最終輸入的向量:\(e=(w_1+p_1,w_2+p_2,...w_n+p_n)\)

3.2 Convolutional Block Structure

encoder 和 decoder 都是由l層卷積層構成,encoder輸出為\(z^l\),decoder輸出為\(h^l\)。由於卷積網路是層級結構,通過層級疊加能夠得到遠距離的兩個詞之間的關係資訊。

這裡把一次“卷積計算+非線性計算”看作一個單元Convolutional Block,這個單元在一個卷積層內是共享的。

  • 卷積計算:卷積核的大小為\(W^{kd*2d}\),其中\(d\)為詞向量長度,\(k\)為卷積視窗大小,每次卷積生成兩列\(d\)維向量
  • 非線性計算:非線性部分採用的是門控結構 gated linear units(GLU)。
  • 殘差連線:把輸入與輸出相加,輸入到下一層網路中。

\[ h_i^l=v(W^l[h_{i-\frac{k}{2}}^{l-1},...,h_{i+\frac{k}{2}}^{l-1}]+b^l_w)+h_i^{l-1} \]

  • 輸出:decoder的最後一層卷積層的最後一個單元輸出經過softmax得到下一個目標詞的概率。

\[ p = softmax(Wh^L+b) \]

3.3 Multi-step Attention

原理與傳統的attention相似,attention權重由 decoder 的當前輸出h_i和 encoder 的所有輸出共同決定,利用該權重對encoder的輸出進行加權,得到了表示輸入句子資訊的向量\(c_i\)\(c_i\)\(h_i\)相加組成新的\(h_i\)。計算公式如下:
\[ d^l_i=W^l_dh^l_i+b_d^l+g_i \]
\[ a^l_{ij}=\frac{exp(d_i^lz_j^u)}{\sum_{j=1}^mexp(d_i^lz_j^u)} \]
\[ c^l_{i}=\sum_{j=1}^ma_{ij}^l(z_j^u+e_j) \]
這裡\(a_{ij}^l\)是權重資訊,採用了向量點積的方式再進行softmax操作,這裡向量點積可以通過矩陣計算,實現平行計算。

最終得到\(c_i\)\(h_i\)相加組成新的\(h_i\)。如此,在每一個卷積層都會進行 attention 的操作,得到的結果輸入到下一層卷積層,這就是多跳注意機制multi-hop attention。這樣做的好處是使得模型在得到下一個主意時,能夠考慮到之前的已經注意過的詞。

4. 總結

將CNN成功應用於seq2seq任務中,發揮了CNN平行計算和層級結構的優勢。CNN的平行計算明顯提高了執行速度,同時CNN的層級結構方便模型發現句子中的結構資訊。

同時模型中的一些細節處理,比如非線性部分採用的是門控結構 gated linear units(GLM),多跳注意機制multi-hop attention,都是模型效果提升的關鍵。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]