現有nmt系統缺點:計算量大,難應對低頻詞
[2](2015經典nmt)裡的模型,是(上一時刻隱藏層輸出s,上一時刻輸出層**詞的詞向量e(y),和當前上下文向量c)這三者輸入到當前時刻lru單元中,得到當前時刻隱藏層輸出s;「當前上下文向量c」是由encoder的所有時刻隱藏層輸出h的加權得到;各時刻權重a是由上一時刻隱藏層輸出s和encoder在各個時刻隱藏層輸出h計算「相似度」後再經過softmax得到;「相似度」是由s和h經過乙個全連線網路得到;
gnmt:
1. 8層encoder, 8層decoder;(越深效果越好)
2. 使用residual連線(極大減輕層數加深後帶來的梯度消散問題);attention
3. 為提高並行度,attention將decoder的底層輸出接到encoder的頂層輸出
4. 為加速**階段,在**階段使用整型量化(8位*8位=16位)
5. 為解決低頻詞問題,使用介於字母和詞之間的子詞單元(wordpiece),效果好速度快
6. beam search, 使用了length-normalization(不用的話,目標函式會傾向短句子),使用了coverage penalty(使得目標句子盡量覆蓋源句子所有詞)
7. 先adam,再sgd;最後再用reinforce learning來refine
網路結構:
attention使用decoder最底層的上一時刻隱層輸出,和encoder最上層每一時刻輸出計算「相似度」並通過softmax,得到encoder每一時刻的權值,再用權值對encoder最上層每一時刻輸出進行加權,得到attention向量(即[2]中的上下文向量)
之所以使用「最底層」輸出,而不是[2]中的「最上層「輸出,是為了並行加速的目的
softmax層節點幾十k個,計算量大,因此分到多個gpu上去並行;
dapa parallellism: 使用downpour sgd(即google經典的asgd)
model parallellism: 按層劃分gpu;softmax層分給幾個gpu並行;
之所以encoder只有最底下一層是雙向的,是為了並行度考慮,雙向的話,必須全算完了才能開始上層的計算;
之所以attention使用decoder的最底層輸出,而不是最上層輸出,也是為了並行度考慮;
8k~32k個wordpiece效果最好;
浮點量化:[41]在cnn上取得好效果;[26]3狀態編碼;
只在inference階段(即test階段)使用浮點量化;在訓練階段使用正常的float
量化的關鍵,是要保證陣列數值在一定區間內;這裡對某些向量採用了範圍限制clip了;
clip區間隨著訓練進行而逐漸減小!只在test階段使用量化,訓練階段只使用區間clip不使用量化
inference階段的並行加速:將相近長度的句子們(比如35個句子),打包到同乙個batch中,並行算(速度受最長的句子拖累)
google內部的資料集,比wmt資料集大100~1000倍
lstm-node大小:1024
gradient clipping
先跑60k個minibatch的adam(收斂較快),後面全跑sgd(最終效果好);最後再用rl增強學習來refine
wmt en->fr上,用96塊k80跑了6整天;
用了dropout
《首字母》_unk_《尾字母》 ,很多這個來表示未登入詞
測試階段,翻譯出來,則用attention來找到源句子中的最相似詞,直接copy過來
Google機器翻譯分析
由 www.lucene.com.cn 提供 史洪柏 葛帥 3 generalized ebmt的介紹 gereralization 將語句中的某些詞語或短語用更一般的概念來表示。可以很大程度上減少對例項庫規模的需求。泛化採用的基本方法 通過對大規模語料的訓練進行word cluster 來自動的對...
JFY系列機器翻譯系統
機器翻譯的研究是理論方法和工程技術並舉的。要建立乙個機器翻譯系統,首先需要確立語言分析和生成的基本觀點,選擇適用的語法理論,設計系統的執行機制,組織析句時需要的各種引數,還要針對所有這些考慮提出在計算機上實現的演算法,並設計程式,除錯通過。這個過程幾乎涉及了計算語言學和自然語言處理的各個重要領域。我...
透徹理解神經機器翻譯的原理
今天我們要學習機器翻譯,機器翻譯就是讓計算機來幫我們將一種語言自動翻譯成另一種語言。現在機器翻譯幾乎已經成為我們生活中不可缺少的工具了,當我們在看英文文件時,可以直接把不懂的單詞 句子,甚至段落,複製到谷歌翻譯等工具中就可以立刻得到翻譯結果。有了機器翻譯,我們的生活變得更加便利。世界上有 5000 ...