一、機器翻譯
1.1 基於規則
1950年代由於冷戰,研發了最早的基於規則的機器翻譯系統:俄語2英語
1.2 基於概率(statistical)統計(SMT)
1990s-2010s: 基於概率統計的機器翻譯系統。
例如我們需要將法語的句子x翻譯爲英語句子y, 任務描述如下
由於源語言x序列確定,使用貝葉斯公式將該規則拆分爲兩個獨立的部分,拆分工作便於模型訓練效果提升:
其中爲從雙語對照數據學習到的翻譯模型,爲從目標語言學習到的語言模型,決定目標語言流暢度。
1.2.1 P(x|y)的學習
- 需要大量源語言-目標語言數據對
- 任務進一步拆分,考慮學習P(x, a|y), a爲alignment,即語言對齊作爲一個指標單獨考慮
- alignment:兩種語言句子詞素之間的對應關係,有一對多、多對一、多對多、順序混亂等多種複雜的可能
- 代表了多個目標任務:(a)某個位置的特定詞的對齊 (b)某個詞的譯文…
- 使用啓發式搜索最佳譯文,優良的SMT還有非常多的細節,十分複雜,例如複雜的特徵工程、藉助同義詞短語表等。(課程介紹也比較模糊)
1.3 神經網絡機器翻譯(NMT)
1.3.1 seq2seq結構
用來輸入一段序列生成另一段序列的網絡架構稱爲seq2seq, 一般有兩個RNN。先來看這張圖,信息量很豐富。
總結一下上面圖中的信息:
- 兩個RNN分別處理源語言與目標語言,當然也需要兩個Embedding
- 源語言和目標語言分別對應的是encoder、decoder
- encoder負責對源語言編碼,並將編碼結果提供給decoder作爲其初始狀態。
- decoder是一個語言模型,負責帶條件的語言生成。
seq2seq除了能用來翻譯,還能幹很多事:
- 摘要
- 對話
- 文檔解析
- 代碼生成
- …
1.3.2 seq2seq模型訓練
seq2seq的decoder是一個條件語言模型,預測,其中x爲源語言句子。
訓練原理如下:
- 訓練階段,time-steps的數目不固定,一般來說是每個batch中最長序列的長度(也可以固定序列爲一個較大值,使用padding填充)
- decoder不會因爲提前預測到<end>導致loss計算出問題,因爲在預測階段,預測到表示這句話結束,而訓練階段,如果使用那就是在固定長度下計算loss,這當然ok, 而使用變長序列的話,在decoder的hidden中傳遞的是向量,即使該向量對應的是符號,也仍然可以往後傳遞,loss計算以訓練集樣本y的長度來確定。
1.3.3 貪心解碼
貪心是指每一步都尋找當前最接近的答案。這裏decoder計算是這樣的,利用上一步的argmax的詞向量作爲下一個的輸入,而不是直接用。這麼做的缺點是,在每個詞上先進行了argmax, 這並不一定是整個句子的argmax。
由於decoder貪心解碼的缺點是由於沒有回退撤銷,我們對它進行改進
1.3.4 窮舉(exhaustive)搜索解碼
根據公式1.3.2, 如果每一步都考慮所有可能序列的概率,那就是複雜度,複雜度太高了。
1.3.5 啓發式搜索方法:Beam Search
beam search是以上兩種辦法的折中,即在第t步保留前k(一般爲4-5)個高概率的可能序列。以k=2爲例的一個搜索過程如圖:
終止條件:由於在測試階段,表示結束,而使用beam search會導致一些不通長度的預測序列。終止規則如下:1. 設置非固定最大長度T。 2. 設置當有n個搜索結果達到時。
爲了平衡不通長度結果的評分,使用如下評分函數:
1.3.6 NMT優勢與缺點
優勢:
- 翻譯更流暢、更好的利用上下文、更少的人力投入,端到端,一個框架多種語言
缺點:
- 不可解釋、不好debug,不可預測
- 難以控制,比如一些很明顯的語言短語映射規則,不能直接規定
1.3.7 模型驗證
BLEU(bilingual evalution understudy): 比較機器翻譯結果和人類翻譯結果如下相似度指標:
- n-gram準確率
- 對太短的機器翻譯結果增加懲罰
BLEU缺點:
- 一種語言可以有多種翻譯,一個好的翻譯模型可能獲得較低分數
1.3.8 NMT發展史及現存問題
- 2014年提出seq2seq, 2016年google將SMT換爲NMT
- 幾百人歷時數十年研發的SMT, 比不過幾個人幾個月訓練的NMT
待解決問題:
- 詞彙表中沒有的詞的處理
- 訓練集與測試集領域不匹配時,表現較差
- 在長文本中維持context
- 某些語言缺少訓練數據
- 不可解釋性的系統奇怪舉止:
二、Attention
2.1 Attention結構
2.1.1 預備知識
- RNN結構、前向反向傳播
- seq2seq
2.1.2 樸素seq2seq的缺點
- 原始的seq2seq, encoder從一開始的每一個time-step的信息都可能會丟失,無法有效傳播到decoder的對應位置。
- encoder只有最後一個狀態傳到decoder,大量信息損失
2.1.3 dot-product Attention計算方式
如下圖,在seq2seq的基礎上:
- 有encoder的hidden向量
- 對於decoder每個step有hidden向量
- 通過點擊計算注意力分數:
- 使用softmax將分數轉換爲注意力權重:(在attention論文中提出還要乘以縮放因子,避免因維度過大導致分數太大,使得softmax函數梯度太小)
- 對encoder的hidden向量加權求和:
- 將與拼接作爲decoder輸出。
- 在decoder的設計中,有時候會將前一個time-step的attention作爲當前這一步的輸入之一。
decoder
擴展: Attention論文中對該結構的解釋用到了Q(query), K(key), V(value),其中Q對應這裏的decoder的hidden向量, K和V對應encoder的hidden向量。直觀理解就是將每一個decoder的時間不作爲一個查詢,通過encoder計算得到輸出向量,這個向量包含了整個encoder的加權信息。
其他Attention
點積attention是計算代價最小的一種,它要求和維度相同,如果維度不同怎麼辦呢?有了前面的基礎,應該能想到:
-
multiplicative Attention
-
addictive attention, 這裏是模型參數,它的維度是一個超參數。
這兩種Attention都引入了新的模型參數,學習能力比dot-product更強(但個人覺得attention的瓶頸是加權求和會損失信息,因此引入更多參數的意義似乎不大)