本節課內容:
介紹一個新的任務:機器翻譯
介紹一個新的神經架構:序列到序列的模型
介紹一種新的神經技術:注意力,用於提升序列到序列的模型
第一部分:之前的機器翻譯方法
1950s:系統是基於規則實現的,使用一個雙語字典進行映射查詢
1990s-2010s:基於統計的機器翻譯,也叫SMT
主要思想:從數據中學習一個概率模型
假設我們從法語翻譯成英語:對於輸入的法語x,找到最好的英語翻譯y
使用貝葉斯準則把這個概率分解成兩部分:
第一部分P(x|y):從平行數據中構建單詞和短語應該如何被翻譯
第二部分P(y):是一個語言模型,比如n-gram,RNN等。從單詞數據中構建如何寫出流利的英語
如何學習模型P(y|x)呢?
需要大量的平行數據。
我們實際上需要考慮的是:
P(x,a|y)
a是一中對應關係,比如法語句子x和英語句子y之間的單詞級對應。
注意:有些單詞是沒有對應關係的,比如中文的“的”在英語中沒有對應的詞。
對應關係是複雜的,可能是多對一,一對多,多對多
學習P(x,a|y)是多種因素的結合:
特定單詞對齊的概率(也取決於單詞的位置)
特定單詞有特定含義的概率
我們可以採用窮舉的辦法計算概率,但是代價太大了。
解決方案:採用啓發式搜索的辦法搜索最好的翻譯,拋棄概率低的假設,也稱爲解碼。
有巨大的搜索區域
要構建效果最好的系統很複雜。
比如需要做許多特徵工程的工作,許多已有成果需要維護等
第二部分:神經機器翻譯
神經機器翻譯是使用單一的神經網絡完成機器翻譯。
該神經網絡架構也叫序列到序列的模型seq2seq,涉及到兩個RNN.
編碼器根據源句子產生編碼
解碼器RNN是一個生成目標句子的語言模型
編碼器爲解碼器提供了最初的隱層狀態。
序列到序列的模型可以應用於多種場景:
- 摘要抽取
- 對話系統
- 句子解析
- 代碼生成
神經機器翻譯是一個條件語言模型的例子。
說它是語言模型是因爲解碼器預測了目標句子的下一個單詞
說它是條件是因爲它的預測是基於源句子x的。
如何訓練一個神經機器翻譯系統呢?
在解碼器生成目標單詞時計算計算損失,將損失加起來。
解碼器是採用貪婪的算法生成目標單詞的。在解碼器的每一步取argmax最大可能性的那個單詞。這個方法有什麼問題嗎?
問題就是:
沒辦法返回上一步,重新作出決策。
窮舉搜索解碼
理想情況下 ,我們找到一個翻譯y最大化以下式子。
我們可以計算出所有可能的y,這意味着在解碼器的每一個階段t,我們計算Vt種可能的翻譯,V是詞彙表的長度。
O(Vt)的複雜度代價太大了!
定向搜索解碼
思想:在解碼器的每個階段,追蹤k個最有可能的翻譯,我們把它稱爲假設。
每個假設y1,y2,y3...,yt都有一個分數
分數都是負數的,分數越高越好。
每次搜索計算所有的分數,取前k個最好的分數,其他的丟棄。
在貪心搜索中,通常是產生<end>標識符就停止搜索。在定向搜索中,不能的假設會在不同的階段產生<end>標識符,當產生了end標識符,就停止搜索,也可以設置成完成了n個可能的假設之後就停止。
在定向搜索中我們是如何獲得分數的呢?
產生的問題:越長的假設分數越低。
解決辦法:標準化:
比起數據統計機器翻譯,神經機器翻譯有很多優勢:
- 更好的性能
- 更流暢
- 更有效的利用上下文
- 更好的利用句子的相似性
一個單獨的神經網絡是被端到端優化的,沒有一個子組件被單獨優化。
需要更少的人力:不需要特徵工程,統一方法可以應用於所有的語言模型
神經機器翻譯的劣勢:
可解釋性差,難以調試
難控制,比如對於翻譯很難應用規則和指導
如何評價機器翻譯?
BLEU:Bilingual Evaluation Understudy
BLEU比較把機器翻譯結果和人工翻譯結果進行比較,基於以下模型計算相似度分數:
n-gram 精度
爲太短的系統翻譯增加懲罰。
BLEU指標是有用的但是也是不完美的。
有許多有效的辦法來翻譯一個句子,所以好的翻譯可能BLEU的得分比較低,因爲與人類翻譯沒有重複的地方。
機器翻譯還存在的問題:
超出詞彙表之外的單詞沒辦法翻譯
訓練數據和測試數據不匹配
有些語言的語料庫比較少
等等。
2019年,神經機器翻譯又有了新的突破。
其中一個是注意力機制.
第三部分:注意力機制
神經機器翻譯的瓶頸:
從編碼器的最後一個狀態獲取所有源句子的信息,也就是說解碼器關於信息的來源只有編碼器的最後一個狀態,這樣沒有辦法獲取的關於句子的完整信息。
注意力機制提供了一個解決方案:
在解碼器的每個階段,與編碼器的每個階段直接連接,如下圖所示,採用了點乘。
如將解碼器的第一個階段與編碼器的每個階段進行點乘,計算出分數,使用softmax得到一個分佈,如下面的例子中發現he的分數最高,因此解碼器的第一個階段將會更多的關注he這個階段提供的信息,結合這個信息生成了he。
其他單詞的生成也是採用類似的做法。有時候也會使用前一個階段的注意力結果來生成當前階段的單詞。
步驟:
- 有編碼器的隱藏層狀態h1,...hn
- 在階段t,有解碼器的隱層狀態st,通過以下式子獲得注意力分數:
- 使用softmax函數來獲得注意力分佈at,at是一個向量,和爲1
- 通過at和隱層狀態的乘積,再求和獲得注意力輸出at。
- 最終將注意力輸出at和解碼器的隱層狀態st連接起來,像之前的步驟一樣處理得到輸出y。
注意力機制是一種很好的辦法
- 提高了神經機器翻譯的性能:使得解碼器專注於源的某一個部分
- 解決了之前提到的瓶頸問題:允許解碼器直觀的看到源
- 對解決梯度消失問題有幫助:直接與距離較遠的狀態相連
- 提供了一些可解釋性:
- 通過注意力分佈,我們能看到解碼器更關注編碼器的什麼部分
- 自己學習單詞翻譯之間的對齊方式
注意力機制的定義:
給定一組向量vectors,和一個查詢向量query,注意力機制是一種根據query計算vectors的權重和。在上面的例子中編碼器的隱層狀態hi就是vectors,解碼器的隱層狀態si就是query。
關於e的計算不只有點乘,還有其他方法: