1. 程式人生 > >機器翻譯模型之Fairseq:《Convolutional Sequence to Sequence Learning》

機器翻譯模型之Fairseq:《Convolutional Sequence to Sequence Learning》

近年來,NLP領域發展迅速,而機器翻譯是其中比較成功的一個應用,自從2016年穀歌宣佈新一代谷歌翻譯系統上線,神經機器翻譯(NMT,neural machine translation)就取代了統計機器翻譯(SMT,statistical machine translation),在翻譯質量上面獲得了大幅的提高。目前神經機器翻譯模型主要分為三種:
1. 一種是以rnn為基礎的模型, 一般是LSTM+attention,順序處理輸入資訊。
2. 一種是以cnn為基礎的模型,今天要講的Fairseq就屬於這種
3. 一種是完全依靠attention的模型,如谷歌的transformer

1. 背景介紹

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次,文章說固定隊輸入所施加的非線性計算會有助於訓練。

2. 模型

好,下面主要講一下Fairseq的模型,模型結構如下圖所示:
fairseq結構

在這裡插入圖片描述
下面進行分步講解:

Position Embedding

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

Convolution

假設每一個卷積核的寬度是k=5,也就是每次對5個輸入的單詞進行卷積,那麼卷積核的引數是
卷積引數
輸入是:
在這裡插入圖片描述
其中d是詞向量的長度,經過卷積之後,輸出的向量維度是2d,經過卷積之後,還要經過一個非線性單元,一般在影象當中,這個非線性單元是relu,sigmoid這樣的啟用函式,在這裡,Fairseq採用的是GLU(Gated Linear Units)。

GLU

GLU是線性門控單元,假設一個卷積核的輸出是:
在這裡插入圖片描述
GLU的公式是:
在這裡插入圖片描述
表示向量A點乘sigmoid處理B的結果,這裡可以將B理解為權重,控制著A中的哪些維度是相關的,哪些是無關的。

Residual connection

這裡參考了影象領域鼎鼎大名的Resnet的結構,加入了residual connection,第l層卷積的輸出就變成了:
在這裡插入圖片描述

Multi-step Attention

這是一個離散的attention機制,和rnn的不同,這個機制對於每一個卷積層有一個attention,計算公式如下:
在這裡插入圖片描述

和傳統的attention相似,權重由decoder當前的輸出h_i和encoder的所有輸出z決定,利用該權重對encoder的輸出進行加權,得到c,之後將c和h連線在一起組成新的h,作為下一卷積層的輸入。
和傳統attention不同的地方是在計算c的時候,將原始的輸入向量e加入進來了。
這就是多跳注意機制multi-hop attention。這樣做的好處是使得模型在得到下一個注意時,能夠考慮到之前的已經注意過的詞。

結果

同以往的RNN模型做比較,發現BLEU和時間上都明顯佔優。
在這裡插入圖片描述

在這裡插入圖片描述

程式碼地址

可以參考官方程式碼:https://github.com/pytorch/fairseq

總結

Fairseq成功地將卷積應用到了機器翻譯上,主要的亮點有position embedding,GLU作為非線性單元,殘差連線,multi-attention機制,從效果和效率上都要優於傳統的RNN為基礎的模型。