cs224n 2019 Machine Translation, Sequence-to-sequence and Attention

本節課內容:

介紹一個新的任務:機器翻譯

介紹一個新的神經架構:序列到序列的模型

介紹一種新的神經技術:注意力,用於提升序列到序列的模型

第一部分:之前的機器翻譯方法

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。

其他單詞的生成也是採用類似的做法。有時候也會使用前一個階段的注意力結果來生成當前階段的單詞。

步驟:

  1. 有編碼器的隱藏層狀態h1,...hn
  2. 在階段t,有解碼器的隱層狀態st,通過以下式子獲得注意力分數:
  3. 使用softmax函數來獲得注意力分佈at,at是一個向量,和爲1
  4. 通過at和隱層狀態的乘積,再求和獲得注意力輸出at。
  5. 最終將注意力輸出at和解碼器的隱層狀態st連接起來,像之前的步驟一樣處理得到輸出y。

注意力機制是一種很好的辦法

  1. 提高了神經機器翻譯的性能:使得解碼器專注於源的某一個部分
  2. 解決了之前提到的瓶頸問題:允許解碼器直觀的看到源
  3. 對解決梯度消失問題有幫助:直接與距離較遠的狀態相連
  4. 提供了一些可解釋性:
  • 通過注意力分佈,我們能看到解碼器更關注編碼器的什麼部分
  • 自己學習單詞翻譯之間的對齊方式

注意力機制的定義:

給定一組向量vectors,和一個查詢向量query,注意力機制是一種根據query計算vectors的權重和。在上面的例子中編碼器的隱層狀態hi就是vectors,解碼器的隱層狀態si就是query。

關於e的計算不只有點乘,還有其他方法:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章