[譯]A Convolutional Encoder Model for Neural Machine Translation
作者:都是facebook大神
1、摘要
現在主流的神經機器翻譯主要依賴於雙向LSTM對源語句進行編碼。基於一系列卷積層,我們提出了一中更快更簡潔的架構。該架構允許對源語句進行編碼的同時與帶有時間依賴約束的循環神經網路進行對比(說白了就是,該架構也可以將時序依賴信息編碼到向量中)。在WMT16英羅翻譯中,我們達到了目前最好的結果。在WMT15英德翻譯中,我們優於最近發布的幾個結果。在WMT14英法翻譯任務上,我們的模型獲得了與深度LSTM幾乎相同的精度。我們使得cpu解碼速度提高l兩倍以上,並獲得比強大的雙向LSTM更高的準確率。
2、介紹
NMT是機器翻譯中一個端到端的方法。迄今最成功的方法是利用雙向循環神經網路將源語句編碼成變長表示,然後用另一個RNN從左到右生成翻譯結果,其中通過soft-attention對兩個RNN進行連接。循環神經網路經常採用LSTM或GRU,或加上殘差網路進行多層堆疊。
曾經有過多次將卷積編碼模型用於神經機器翻譯的嘗試,但是它們只是用於對傳統系統返回的 n個最佳列表的重新評分或者沒什麼競爭性。這是卷積網路幾個有吸引力的特性。例如,卷積網路在輸入序列上基於固定大小的窗口進行操作,這可以同時計算源語句中所有的特徵。這與RNNs計算隱層狀態的情況不同,RNNs不能進行序列中的並行計算。
與RNNs相比,一系列卷積層提供了一個較短的路徑來捕獲序列中元素之間的關係。這也簡化了結構,因為RNNs的非線性數量取決於時間步,而基於卷積層的方法所得到是樹結構,只需要固定數量的非線性。因為是自下而上的處理過程,所有的詞都經歷相同次數的變換,而RNNs,第一個詞被過度處理,最後一個詞只處理一次。
在本文中,我們表明基於卷積層的結構相比循環編碼是非常有競爭力的。我們調研了將簡單的平均池化以及參數化卷積作為循環編碼的替代方案,並通過殘差連接實現了非常深層的卷積編碼器。
在幾個標準數據集上做了實驗,將我們的方法與循環神經網路的幾個變體(如LSTMs,雙向LSTMs)進行了對比。在WMT16英羅翻譯任務中,我們獲得了目前為止最佳的結果,在WMT15英德翻譯任務中也表現的很有競爭力,在WMT14英法翻譯任務上,我們的結果接近基於深層LSTM的最佳結果。
3、循環神經機器翻譯
在這項工作中,Bahdanau首次將軟性注意力引入到編碼-解碼方法中。包含m個詞的源語句X=(x1,x2,...,xm)被編碼成狀態序列Z=(z1,z2,...,zm)
RNN網路作為解碼器基於(si,gi,ci)來計算一個新的隱層狀態si+1,其中si是前一個隱層狀態,gi是前一個目標詞yi的詞嵌入表示,條件輸入ci是依據編碼器的輸出Z得到的。我們的所有解碼器均使用LSTM,其狀態si包括一個細胞狀態向量和一個隱層向量hi,hi是LSTM在每個時間步輸出的。我們將ci和gi串聯起來輸入給LSTM。
翻譯模型通過利用線性層(包含權重Wo和偏置bo)對LSTM的輸出hi進行變換來計算在V個目標詞yi+1上的分布:
第i時刻的條件輸入ci是通過點積attention的方式計算得到的。具體來說,我們利用線性層(Wd,bd)對解碼器的隱層狀態hi進行變換,以匹配上一步目標詞gi的詞嵌入的大小,然後兩個表示相加得到di。條件輸入ci是注意力分數ai和編碼器輸出Z的加權和。注意力分數ai是由hi和每個zj之間的點積確定的,然後在源序列上做一個softmax:
在初步的實驗中,我們沒有發現Bahdanau的MLP attention在BLEU上表現的更好。然而,我們發現點積注意力在訓練和評估速度上更有效。
我們使用雙向LSTM來實現循環編碼器,類似Zhou等人(該方案在WMT14英法翻譯任務中獲得迄今為止最好的結果)。首先,序列X中的每個ci表示分散式空間表示e=(e1,e2,...,em)。這些詞嵌入輸入到兩個堆疊單向RNN中,其中每層的輸出在輸入到下一層之前要被反轉。第一個堆棧採用原始序列,而第二個採用反向輸入序列;第二堆疊的輸出反轉,使得堆棧的最終輸出對齊。最後,將兩個堆棧的頂層隱藏狀態連接並饋送到線性層以產生z。 我們把這個編碼器結構稱為BiLSTM。
4、非循環編碼器
4.1 Pooling Encoder
非循環編碼器的一個簡單基準是Ranzato提到的池化模型,只是將K個連續詞的詞嵌入進行簡單的平均。除了輸入中的單詞彼此有些接近之外,平均單詞嵌入不會表達位置信息。作為一種補救方法,我們加入了位置嵌入來對句子中每個詞的絕對位置進行編碼。因此,源語句中的每個嵌入ej都包含一個位置嵌入lj和一個詞嵌入wj。位置嵌入在用於問答和語言建模的記憶網路中也表明是有用的(Sukhbaatar)。與循環編碼器類似,注意力分數aij從池化表示zj中計算得到,然而,條件輸入ci是嵌入ej的加權和,而不是zj的。
在池化之前輸入序列先做填充,以使編碼器的輸出能匹配輸入的長度|Z|=|X|。和Ranzato一樣,我們在所有實驗中將k設置為5。
4.2 Convolutional Encoder
對池化的一個簡單擴展是在CNN中學習核(kernel)。編碼器的輸出zj包含了固定大小的上下的信息(大小取決於核寬度k),但是期望的上下文寬度可以變化。這可以通過堆疊幾層卷積然後加一個非線性層來解決:附加層增加了總的上下文的大小,然而非線性可以根據需要調節上下文的有效大小。例如,將11個字的輸入餵給堆疊卷積(5層,核寬度k = 3),即每個輸出取決於11個輸入字,並且非線性允許編碼器利用完整的輸入,或者根據需要集中在較少量的字上。
為了能使深度編碼器能夠有效學習,我們在每個卷積層的輸入到輸出之間添加了殘差連接,然後將非線性激活函數作用於最後的輸出,非線性不能被」繞過「(說白了就是殘差連接要加在非線性之前)。CNNs不包含常用於下採樣的池化層,即在卷積後要保留完整的源序列長度。與池化模型類似,卷積編碼器也使用了位置嵌入。
最後的編碼器由兩個堆疊的卷積網路構成(如圖1):CNN-a生成編碼輸出zj用於計算注意力分值aj,然而用於解碼器的條件輸入ci通過對CNN-c的輸出求和得到。
實際上,與使用一個CNNs相比,我們發現兩種不同的CNNs可以得到更好的困惑度和BLEU。我們還發現,這樣做比池化模型那樣對ei直接求和要好很多。
4.3 相關工作
曾有幾個將卷積編碼用於神經機器翻譯的嘗試,然而,據我們了解,沒有一個可以與循環編碼器的性能相比。Kalchbrenner 介紹了一個卷積語句編碼器,其中,用一個多層CNN將源語句編碼成一個固定長度的嵌入向量,或者是一個n-gram表示,隨後加一個轉置卷積用來直接生成解碼輸入。後者需要先知道翻譯的長度才能生成,通過對現有模型的輸出進行rescore來評價這兩個模型。Cho等提出了門控遞歸CNN,其被重複應用,直到獲得一個固定長度的表示並且同時循環編碼器獲得更高的精度。在後續工作中,作者通過軟注意機制改進了模型,但沒有重新考慮卷積編碼器模型。(Bahdanau)
Kalchbrenner引入了沒有注意力機制的卷積翻譯模型,但他們的方法還沒有達到最佳的精度。Lamb也提出了用多層CNN來生成固定長度的編碼表示,但他們的工作沒有進行BLEU評估。meng等應用卷積模型來給傳統基於短語和基於基於依賴的翻譯模型的短語對進行打分。卷積架構在語言建模方面也取得了成功,但迄今未能超過LSTM。
5 實驗
不作翻譯
推薦閱讀:
※NLP選題:6大研究方向助你開啟科研之路
※人工智慧學習筆記(三):N元字元模型與馬爾科夫鏈
※文本多分類踩過的坑
※DeepPath 閱讀筆記
※Relation Extraction: Perspective from Convolutional Neural Networks