斯坦福大學-自然語言處理與深度學習(CS224n)筆記 第十課 神經機器翻譯(neural machine translation)與attention模型
本課概要
1、機器翻譯(MT)
2、帶attention的序列模型
3、序列模型解碼器(decoder)
一、機器翻譯(MT)
機器翻譯是一個十分經典的語言理解的測試,涉及語言分析(language analysis)與語言生成(language generation)。
機器翻譯是一個巨大的商業市場,每年的市場規模達到400億美元,在歐洲和亞洲都有市場。
神經機器翻譯(NMT):神經機器翻譯是利用一個巨大的神經網路來為整體機器翻譯過程建模。
1、神經機器翻譯的歷史回顧
最早開始於1987年,Allen將神經網路應用到了機器翻譯之中。
1992年,Chrisman構建了一個神經網路機器翻譯的模型獲得了75%的正確率。
2、現代的神經機器翻譯(NMT)
神經機器翻譯的現代序列模型之一[Sutskever et al. 2014, cf. Bahdanau et al. 2014, et seq.],它將每個預測的輸出都輸入到了下一個節點中。
從另一個角度來看,我們可以認為上面的模型是一種條件迴圈語言模型,以前一個單詞為條件進行概率的估計。
正如我們在前面的課程中所學習的那樣,我們可以把現代的神經機器翻譯(NMT)模型分為兩個部分,一部分是編碼(encode),一部分是解碼(decode)。
在encode部分,我們會一次讀取源語言的一個詞/部分,最後的隱藏狀態Y將會總結整個源句子,可以使用任何迴圈的啟用函式,tanh,GRUs,LSTM,CNN等等。
在decode的階段,利用encode階段的最後一個節點和decode階段的前一個Z以及輸入進行當前Z的計算,並採用優化演算法進行優化。
從實際的表現來看,現代的神經機器翻譯的表現不俗,增長很快,迅速超過了其他機器翻譯的方法。
神經機器翻譯的成功主要有四個原因:
- 端對端的訓練過程:所有的引數都是同一時間基於損失函式來進行優化的
- 基於分佈的表徵(猜測這裡可能指的是word2evc等利用數字向量對單詞的表徵):可以更好地利用單詞和片語之間的相關性
- 能更好地利用上下文:NMT可以使用更多的文字內容,使得翻譯更加準確
- 更流程的文字生成:深度學習的文字生成的質量更高
其他一切也值得關注的因素
- 在原來的模型中有一些黑箱(black box)模型,比如重新排序(reordering),音譯(transliteration)
- 清楚使用句法和語義結構
- 使用對話結構,復指(anaphora)等
從谷歌翻譯每年的表現來看,我們也可以看到加入NMT(2017)之後,翻譯質量得到了提升。
目前在工業界NMT已經被大量投入使用了。
- 2016/6,微軟釋出了離線執行的基於安卓和IOS的深度神經網路機器翻譯
- 2016/8,Systran釋出了純NMT的模型
- 2016/9,谷歌釋出了NMT
在實際的多語種的翻譯中,我們實際上不會直接建立兩兩配對的神經機器翻譯模型(比如一共80種語言的話,就需要80*79種機器翻譯模型),而是會使用一箇中間語言(interlingua),先將源語言翻譯為中間語言,中間語言再翻譯為目標語言,這樣我們只需要訓練80+80個模型就可以了。
二、帶attention的序列模型
正如我們前面所描繪的那樣,encoder階段的最後一個節點代表整個源語言句子的資訊,將會成為decoder階段的所有節點的輸入Y。從實際的引用來看,這樣的結構對長句子的翻譯效果要差於短句子,因此需要尋找一個改進方法。
研究者們找到的一個改進的方法是:attention機制,構建一個源狀態池(Pool of source states)或者說RAM,將encoder中的狀態放入,然後在decoder階段基於需求抽取需要翻譯的狀態節點。([Larochelle & Hinton, 2010], [Denil, Bazzani, Larochelle, Freitas, 2012])從某種程度上,這樣的機制更接近於人類翻譯者的行為機制。
attention機制有點類似於統計機器翻譯(SMT)中的對應(assignment)過程,也就是將源語言和目標語言的各個部分對應起來。
attention機制中,它會比較目標隱層和源隱層,並給源隱層打分。
接下來,對分數進行標準化計算。
根據加權平均構建一個上下文向量(context vector)
計算下一個隱藏狀態。
具體分數的計算有很多種演算法,這裡介紹主要的三種(對應下面的三行公式):
- 第一行:計算源語言hs和目標語言的ht的點積,基本思想是計算兩者的相似度,但是沒有學習到交叉(interaction)影響
- 第二行:中間加入了一個W矩陣,可以構建ht和hs之間的交叉(interaction)影響
- 第三行:連線ht和hs,訓練一層神經網路;但是這個也沒有很好地學習到交叉(interaction)影響,所以更進一步的做法是訓練多層的神經網路
對於長句子的翻譯而言,attention的範圍包含全部的句子,就會導致後饋計算涉及到所有節點,因此我們可以考慮使用區域性(local)attention。
從結果來看,attention機制確實可以有效提升長句子的翻譯。
我們可以進一步拓展attention機制。
比如doubly attention,就在原來的基礎上增加了基於目標語言的attention。
最近幾年來,原來應用於對應模型(alignment model)的一些語言思想開始被應用於attention機制的拓展。 - 基於coverage的attention [Tu, Lu, Liu, Liu, Li, ACL’16]
- position (IBM2) + Markov (HMM) + fertility (IBM3-5) + alignment symmetry (BerkeleyAligner) [Cohn, Hoang, Vymolova, Yao, Dyer, Haffari, NAACL’16]
三、序列模型解碼器(decoder)
思考到decoder的運作,第一個想法可能是給所有可能的翻譯都打分,然後選出最好的一個。這個想法是不可行的,因為這個演算法複雜度將會高到無法實現。
方法一:Ancestral Sampling
從基於前一個翻譯單詞的條件概率分佈裡面隨機取一個單詞作為當前的翻譯,然後再重複這樣的步驟。
這種方法的優點在於,速度快而且是無偏;缺點是這種方法方差大每次翻譯的結果都不一樣。
方法二:貪婪搜尋
每次決定翻譯的時候,都根據目前的條件概率選擇概率最大的那個目標語言單詞。優點是在時間和空間上都是很有效的,但是缺點是很有可能得到的是次優解。
方法三:束(beam)搜尋
在t時刻,進行翻譯的時候留下K個概率最高的備選項,然後在t+1時刻,進行翻譯的時候再給出K個概率最高的備選項,這樣就可以得到K²個備選項,從中選出K個概率最高的備選項。它的優點是翻譯質量比較高,缺點是計算起來比較費時,不太容易平行計算。
其中K的確定方法是利用一個驗證集(validation),選擇使其翻譯質量最高的K。
三種方法的訓練結果顯示束(beam)搜尋得到的效果是最好的: