谷歌全attention機器翻譯模型Transformer的TensorFlow實現

黃小天發表於2017-06-19
谷歌前不久在 arXiv 上發表論文《Attention Is All You Need》,提出一種完全基於 attention 的翻譯架構 Transformer,實現了機器翻譯的新突破;近日,Github 上的一個專案給出了 Transformer 模型的 TensorFlow 實現,在官方程式碼公佈之前共享了自己的程式碼。機器之心對該文進行了編譯,專案地址見文中。

專案連結:https://github.com/Kyubyong/transformer

需求


  • NumPy >= 1.11.1
  • TensorFlow >= 1.2(1.1 很可能也可以,但是我沒有測試它)
  • regex
  • nltk

專案來由


我試圖在論文《Attention Is All You Need》中實現我的想法。該論文的作者聲稱其模型,即 Transformer,在機器翻譯方面的表現優於當前任何的模型;它僅使用 attention,而沒有 CNN 和 RNN,這酷極了。論文最後,作者承諾將很快公開程式碼,但是目前為止並沒有。我的這一專案有兩個目標,一是我想要全面瞭解這篇論文,如果不寫程式碼就很難理解論文;二是在官方程式碼公佈之前,與感興趣的人共享我寫的程式碼。

與原論文的不同


內容,而是要實現論文的核心思想,並作出簡單快速的驗證。由於這個原因,我的部分程式碼與原論文有所不同。這些不同之處有:

  • 我使用了 IWSLT 2016 de-en 資料集,而不是 wmt 資料集,因為前者更小,且不需要特殊的預處理。
  • 為了簡化,我用單詞而非子單詞構建了詞表。當然,如果願意你可以嘗試 bpe 或者 word-piece。
  • 我將位置編碼直接用作了引數,而原文用了一些正弦公式。論文作者之一 Noam 說兩種方法都有效,詳見:https://www.reddit.com/r/MachineLearning/comments/6gwqiw/r_170603762_attention_is_all_you_need_sota_nmt/
  • 論文根據訓練步數逐漸調節學習率,我簡單地把學習率固定在一個非常小的值 0.0001 上。因為使用小資料集,訓練的速度已經足夠快(使用單塊 GTX 1060 僅需幾個小時!!)


檔案描述


  • hyperparams.py 包括全部所需的超引數
  • prepro.py 可為源和目標建立詞彙檔案(vocabulary file)
  • data_load.py 包括裝載和批處理資料的相關函式
  • modules.py 擁有全部編碼/解碼網路的構建模組
  • train.py 包含模型
  • eval.py 是為了進行評估

訓練

  • 第一步:下載 IWSLT 2016 German–English parallel corpus 並且把它放在 corpora/資料夾
  • 第二步:如果必要的話在 hyperparams.py 下調整超引數(hyper parameters)
  • 第三步:執行 prepro.py,在 preprocessed 檔案下生成詞彙檔案
  • 第四步:執行 train.py 或下載預訓練好的檔案(pretrained files)


訓練損失和精度


訓練損失

谷歌全attention機器翻譯模型Transformer的TensorFlow實現

訓練精度

谷歌全attention機器翻譯模型Transformer的TensorFlow實現

評估

  • 執行 eval.py.

結果


我的 BLEU 得分為 17.14。(我用小資料集、有限的詞彙進行訓練)一些評估結果如下所示。詳見資料夾 results  

source: Sie war eine jährige Frau namens Alexexpected: She was a yearold woman named Alexgot: She was a woman named yearold name

source: Und als ich das hörte war ich erleichtertexpected: Now when I heard this I was so relievedgot: And when I heard that I was an

source: Meine Kommilitonin bekam nämlich einen Brandstifter als ersten Patientenexpected: My classmate got an arsonist for her first clientgot: Because my first came from an in patients

source: Das kriege ich hin dachte ich mirexpected: This I thought I could handlegot: I'll go ahead and I thought

source: Aber ich habe es nicht hingekriegtexpected: But I didn't handle itgot: But I didn't it

source: Ich hielt dagegenexpected: I pushed backgot: I thought about it

source: Das ist es was Psychologen einen AhaMoment nennenexpected: That's what psychologists call an Aha momentgot: That's what a like a

source: Meldet euch wenn ihr in euren ern seidexpected: Raise your hand if you're in your sgot: Get yourself in your s

source: Ich möchte ein paar von euch sehenexpected: I really want to see some twentysomethings heregot: I want to see some of you

source: Oh yeah Ihr seid alle unglaublichexpected: Oh yay Y'all's awesomegot: Oh yeah you all are incredibly

source: Dies ist nicht meine Meinung Das sind Faktenexpected: This is not my opinion These are the factsgot: This is not my opinion These are facts

相關文章