Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation
1. 論文地址:
https://arxiv.org/abs/1609.08144
發表時間:2016
被引用量:2345
(注意不是百度學術查到的,百度學術非常不準,這個數據是從谷歌學術鏡像查到的,而且不得不說這一篇真的厲害)
源碼地址:https://github.com/tensorflow/nmt
(非常詳細的一個教程,畢竟用的自家框架)
2. 論文簡介:
如今 NMT(Neural Machine Translation)任務中最大的一個問題就是模型缺乏魯棒性,爲了解決這個問題,Google 團隊提出了一個新的模型,稱之爲 GNMT;
這個模型由一個有 8 個編碼器和 8 個解碼器層的深度 LSTM 網絡組成,使用殘差連接以及從解碼器網絡到編碼器的注意力模塊連接,主要特點有:
- 爲了提高並行度,從而減少訓練時間,該模型使用注意機制將解碼器的底層連接到編碼器的頂層;
- 爲了提高最終的翻譯速度,在推理計算中採用了低精度的算法(限制數值範圍);
- 爲了改進對罕見單詞的處理,作者將單詞分爲有限的公共子單詞單元(稱之爲“單詞塊”),用於輸入和輸出,該方法在“字符”分隔模型的靈活性和“單詞”分隔模型的效率之間提供了良好的平衡,自然地處理了罕見單詞的翻譯,最終提高了系統的整體準確性;
- 通過一種波束搜索技術(beam search technique)使用了長度標準化過程和覆蓋懲罰,這鼓勵生成輸出語句,最有可能覆蓋源語句中的所有單詞;
- 爲了直接優化翻譯任務的 BLEU 分數,作者還使用了強化學習來細化模型;
在 WMT‘14 的英法和英德基準測試中,GNMT 達到了最先進水平的競爭性結果,與谷歌的基於短語的生產系統相比,通過對一組孤立的簡單句子進行人工並排評估,它平均減少了60%的翻譯錯誤;
3. NMT 的典型結構:
NMT 模型能夠實現從輸入文本序列到輸出文本序列的端到端的學習;
它的基本結構是由兩個 RNN 組成,一個負責評估輸入文本,另一個負責生成輸出的翻譯文本;
並且在 NMT 中經常使用注意機制來有效地處理長輸入序列;
4. NMT 現有的缺點:
NMT 的一個優點是它避開了傳統基於短語的機器翻譯(SNT)中許多脆弱的設計選擇,然而,在實踐中,NMT 系統往往比基於短語的翻譯系統的準確性更差,特別是在對非常大規模的數據集進行訓練時,如用於最好的公共可用翻譯系統時;
作者總結了 NME 有三個固有的缺點:
- 訓練和推理速度較慢:在大規模的翻譯數據集上訓練一個 NMT 系統通常需要花費大量的時間和計算資源,從而減慢了實驗的週轉時間和創新的速度;
- 處理罕見詞時效率低下:NMT對罕見詞的翻譯缺乏魯棒性,雖然這可以解決原則上通過訓練“複製模式”來模擬傳統對齊模型,或者通過使用注意力機制複製罕見字,但是這些方法都是不可靠的;
- 有時不能翻譯源句中的所有詞:NMT系統有時產生的輸出句子不能翻譯輸入句子的所有部分;
5. GMNT 的特點:
谷歌提出的 GMNT 爲上述問題提供瞭解決方案;
在 GMNT 的實現中主要注意以下幾點:
- 網絡是一個 8 層的長短時記憶(LSTM)我們的LSTM RNNs有8層,層與層之間以殘差模塊連接,以鼓勵梯度流;
- 爲了實現並行性(相同參數下並行度高,運算速度更快),我們將注意力從解碼器網絡的底層連接到編碼器網絡的頂層;
- 爲了進一步提高推理時間,模型採用了低精度的推理算法,並通過特殊的硬件(谷歌的張量處理單元 TPU)進一步加速;
- 爲了有效地處理罕見字,模型中使用子字單位(也稱爲“單詞塊”)作爲系統的輸入和輸出,從而在單個字符的靈活性和完整單詞的解碼效率之間取得了很好的平衡,同時也避免了對未知單詞進行特殊處理的需要;
- 使用了波束搜索技術,包括一個長度歸一化過程,以有效地處理譯碼過程中不同長度假設的比較問題,以及一個覆蓋懲罰,以鼓勵模型翻譯所有提供的輸入;
這個模型的實現是健壯的,並且在跨許多對語言的數據集上表現良好,不需要進行特定於語言的調整,能夠在標準基準上獲得與以前的最先進系統相當或更好的結果,同時對基於短語的生產翻譯系統進行了很大的改進,最終的翻譯系統的質量更接近於人類的平均水平;
6. GMNT 的網絡結構:
主要結構有三個:
- 編碼網絡(encoder):負責將每個輸入字符轉換成相應的詞向量;
- 解碼網絡(decoder):負責接收詞向量並生成翻譯文本;
- 注意力模塊(attention):編碼器和解碼器通過注意模塊連接,該注意模塊允許解碼器在解碼過程中聚焦於源語句的不同區域;
6.1 推理過程:
假設 是一對源語句和目標語句,其中 表示語句中的字符:
那麼編碼層就可以表示爲:
其中 是 的固定大小的向量表示;
利用鏈式法則,可以將序列的條件概率 分解爲:
在推理過程中,我們可以根據到目前爲止的源語句編碼和解碼的目標序列計算下一個符號的概率:
這個解碼器是由一個 RNN 網絡和一個 softmax 層的組合來實現的:解碼器 RNN 網絡生成下一個待預測符號的隱藏狀態 ,然後通過 softmax 層生成候選輸出符號的概率分佈;
注意力模塊使用 作爲過去解碼時間步長的解碼器輸出;
那麼當前時間步長的注意上下文信息 的計算公式就可以寫作:
其中 就是一個由一個隱藏層構成的前饋神經網絡;
6.2 殘差模塊:
雖然研究表明,深層 LSTM 網絡往往優於淺層網絡,但是深層網絡往往會因爲梯度消失或梯度爆炸等問題難以收斂;
因此作者提出可以通過在 LSTM 層之間使用殘差模塊來解決這個問題:
即假設一個普通的堆疊 LSTM 結構表示爲:
那麼使用殘差結構的 LSTM 就可以寫作:
即在原本上一層輸出 上加了一個上一層輸入 ;
6.3 第一層的雙向編碼器:
對於翻譯系統,在輸出端翻譯某些單詞所需的信息可以出現在源端的任何位置;
通常,源端信息近似於從左到右,類似於目標端,但根據語言對,特定輸出字的信息可以分佈在輸入端的某些區域,甚至可以被分割,因此作者在第一個 LSTM 層使用雙向的編碼器,從而更有效地利用上下文信息;
雙向編碼器的結構如圖:
其中 從左到右處理源語句, 從右到左處理源語句,二者的輸出 和 合併後作爲下一層的輸出;
6.4 模型的並行性:
由於模型的複雜性,作者利用模型並行性和數據並行性來加速訓練;
數據並行性很簡單:我們使用 Downpour SGD 算法並行地訓練 n 個模型副本,這 n 個副本共享一個模型參數副本,每個副本使用 Adam 和 SGD 算法的組合異步更新參數;
在的實驗中,n 通常是 10 左右,並且每一個副本一次只能處理一小批 m 個句子對,通常是 128 個;
除了數據並行性外,模型並行性還可以提高每個副本上梯度計算的速度;
編碼器和解碼器網絡沿着深度維度進行分區,並放置在多個 GPU 上,有效地在不同的 GPU 上運行每一層;
由於除第一層以外的所有編碼器層都是單向的,所以第 層可以在第 層完全完成之前開始計算,從而提高了訓練速度;
softmax 層也被分區,每個分區負責輸出詞彙表中的一個符號子集;
模型並行性給可以使用的模型架構設置了一定的約束;
例如,不能爲所有的編碼器層都提供雙向的 LSTM 層,因爲這樣做會減少後續層之間的並行性,因爲每一層都必須等到前一層的前向和後向都完成;
對於模型的注意部分,作者選擇將底部解碼器輸出與頂部編碼器輸出對齊,以在運行解碼器網絡時最大化並行性;如果將頂層解碼器層與頂層編碼器層對齊,我們就會消除解碼器網絡中的所有並行性,並且不會從使用多個 GPU 進行解碼中受益;
7. 實驗結果:
與以前的基於短語的生產系統相比,這個GNMT系統在幾種流行的語言對上大約減少了60%的翻譯錯誤;