Stanford CS224n 第十講:神經機器翻譯和注意力模型

目錄:

1. 神經機器翻譯模型(NMT)的四大成功之處

2.多語言翻譯模型

3. Attention機制在神經機器翻譯中的應用

4.翻譯模型解碼器的三種策略
\newline
\newline

上一節課中我們已經講解了傳統的機器翻譯模型和基於RNN的神經機器翻譯模型,所以這一節課前面的部分就不再贅述。

1. 神經機器翻譯模型(NMT)的四大成功之處
2014年來,神經機器翻譯的發展趨勢遠遠超過了傳統的機器翻譯模型,那麼其中的原因是什麼呢?
在這裏插入圖片描述
(1)End-to-End Training。端到端的訓練方式(此處詳解),一個損失函數就可以同時訓練模型的所有參數。我個人理解是由於神經網絡的強大擬合學習能力才成就了端到端的模型,使人們能夠不用經歷苦逼的特徵工程,而是將raw數據直接扔給神經網絡,利用這個強大的黑盒直接得到結果。

(2)Distributed Representation。分佈式表示,其實和one-hot向量來理解更容易一些,如果我們採用one-hot向量來表示數據中的某個單詞(維度爲字典大小),那麼我們根本不能刻畫兩個單詞的相關性,因爲他們的內積都爲0;而如果我們採用低維的分佈式向量來表示一個單詞,即低維空間中每個維度都有一定的數值代表其在這個維度的特徵的重要程度,由於我們把每個單詞的特徵都分散到了各個維度,那麼我們就可以衡量兩個單詞或者詞組的相關性。

(3)Better exploitation of context。神經機器翻譯模型能夠更好的利用上下文;傳統的機器翻譯模型比如4-garam,5-garam,只能利用部分信息。

(4)More fluent text generation。神經機器翻譯模型能夠生成流暢的翻譯文本(即使翻譯的效果很差),我覺得還是由於神經網絡強大的擬合學習能力,給他足夠的數據,他就能學習到一些語法知識,讓翻譯文本更加流暢。而傳統的機器翻譯模型需要人爲的去定義好多語法規則,讓模型去學習,這很低效且不如神經網絡方便、傻瓜式。

2.多語言翻譯模型
(這一部分我覺得Christopher老師講的和亞裔小姐姐講的沒有銜接,感覺兩個人講的完全是兩個技巧,但是Christopher老師講的技巧要比小姐姐講的low啊,純屬個人理解)
前面我們一直在介紹一對一的翻譯模型,那麼我們如何實現多語言翻譯模型呢?
(1)剛開始的時候人們仍然採用一對一模型,只不過面對多少個源語言-目標語言對兒,就訓練多少個encoder-decoder對兒,如下圖所示。比如80中語言互相翻譯,我們就需要訓練80*79個模型(簡直嚇人)。
在這裏插入圖片描述
(2)後來人們又嘗試去採用一對多模式(多種語言共享一個編碼器,構建多個解碼器)和多對一模式(構架多個編碼器,共享一個解碼器),如下圖所示:
在這裏插入圖片描述
(3)後面Christopher老師提到了採用‘橋接’技術,就是不管有多少種語言對,先將源語言翻譯成一種中間語言(比如英語),然後再將中間語言翻譯成目標語言。這樣就減少了了模型的訓練量。比如我們有80種語言需要互相翻譯,那我們就可以訓練80個編碼器和80個解碼器(除去轉換過程中英文的解碼和編碼器)。

最後,課程中漂亮的亞裔小姐姐介紹了Google是如何來實現多語言翻譯的(參考論文在此)。框架如下:
在這裏插入圖片描述

Google的模型和普通的NMT模型沒啥區別,但是他們對於不同的語言,即共享encoder,又共享decoder。如果兩個都共享,他們怎麼區分語言呢?此時他們就採用了一個小tric,解決了大問題—在源語言前加標籤,簡直666:
在這裏插入圖片描述
課程中講,Google這個模型還有以下優點:

  • 模型簡單,僅僅一對encod-decoder就解決了多語言的翻譯問題。
  • 對於訓練數據比較少的語言對(源語言-目標語言),和其他訓練數據多的語言對一起訓練,訓練數據少的語言對也能獲得不錯的翻譯結果,根據模型分析,可能是他們共享同一個encoder-decoder參數。
  • 該模型還有zero-shot的翻譯功能,即他可以翻譯訓練過程中沒有遇到的語言對。例如我們訓練了,葡萄牙語→英語、英語→西班牙語,那麼我們就可以得到翻譯質量不錯的葡萄牙語→西班牙語。

3. Attention機制在神經機器翻譯中的應用
在普通的encoder-decoder模型中,我們通過編碼器將源語言壓縮到一個向量Y中,然後將Y作爲解碼器的輸入,但是在語句過長時面臨一個問題,那就是可能解碼過程中,某個時刻解碼器不知道該翻譯源語言中對應的哪一部分內容,因此提出了attention機制。
在這裏插入圖片描述
attention機制其實和傳統的機器翻譯模型中的分配對齊過程類似,就是將要翻譯的內容和源語言中的一些部分對應起來。

  • 下面我們來看看attention機制是怎麼樣起作用的:
    (1)通過解碼器中上一時刻傳入的隱向量ht1h_{t-1}和編碼器中每個單詞輸出的隱向量通過某種計算方式,計算得分(其實就是相關性)
    在這裏插入圖片描述
    (2)對(1)中計算的得分進行歸一化,其實就是將其轉化爲0-1之間的概率值,用來刻畫相關性。
    在這裏插入圖片描述
    (3)通過計算到了ht1h_{t-1}與源語言中各個隱向量的相關性ata_t,將源語言的隱向量以ata_t爲權重,進行加權求和,得到ctc_t
    在這裏插入圖片描述
    這樣就可以不簡單的使用一個隱層狀態Y作爲全部的語義表示了,而是用到了編碼器全部隱狀態的全部信息。

  • 具體score的計算方式,課程中計算了以下三種:
    在這裏插入圖片描述
    課程中比較了三種方法:
    (1)直接將解碼器某時刻的隱向量hth_t與編碼器的每個單詞的隱向量進行點積。
    (2)在(1)的基礎上加了一個attention矩陣,充分考慮了hth_thsh_s的交叉影響,WaW_a需要模型學習其參數。其實我覺得這個計算socre的公式很像度量學習,即WaW_a是一個計算兩者相似度的一個度量,考慮到了各個方面的交叉影響而計算的相似度,感興趣的可以去看看度量學習(Metric Learning)
    (3)簡單的拼接hth_thsh_s,接hth_thsh_s沒有產生交叉影響;然後經過一層的神經網絡也不會有很好的擬合,所以這個方法也沒(2)好。

  • 局部attention的使用
    如果句子過長,在計算attention的過程中會產生很大的開銷,因此發明了局部attention機制,如下圖所示:
    在這裏插入圖片描述

-attention機制在實際應用中的效果:
在這裏插入圖片描述
由上圖我們可以明顯看出,在句子長度增加後,attention機制的模型表現不錯,而且穩定。

4.翻譯模型解碼器的三種策略

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