NLP語言模型,機器翻譯任務中的貪心搜索 Greedy search 和集束搜索 Beam search(學習心得)

Picking the most likely sentence

可以把機器翻譯,想像成建立一個條件語言模型 a conditional language model
1.jpg

語言模型,可以用來估計一個語句的概率
也可以根據第一個輸入,來產生後續的輸出

機器翻譯模型,有兩個網絡,分別是編碼網絡和解碼網絡,對應上面的綠色和紫色
可以發現,後面的解碼網絡,和語言模型非常類似
所以這兩個模型的區別在於,語言模型是從零向量 vector of zeros 開始
而機器翻譯模型是輸入的句子編碼

所以機器翻譯模型又被叫做:條件語言模型 conditional language model
輸出 the probability of the output English translation(前提條件:conditions on some input French sentence)
之前的語言模型:輸出 the probability of any sentence
2.jpg

我們得到的其實是一個概率分佈,然後模型會有對應於這個概率分佈的輸出
但是問題在於:
雖然最大概率的輸出是最優的翻譯,但是不能保證每次都採用到最大的概率

我們希望得到的,不是隨機採用,而是使得條件概率最大化的那個句子
所以針對機器翻譯,要設計一個算法,來找出最合適的 y 值,使得條件概率最大化
解決這一問題最常用的是:集束搜索 Beam Search
3.jpg

那為什麼不用貪心搜索 Greedy Search 呢?
貪心搜索:

  1. 生成第一個詞的分佈
  2. 選擇可能性最高的詞(條件概率下),輸入機器翻譯模型
  3. 然後同樣選擇第二個詞,第三個詞,直到最後

但是我們真正想要的,是一次性選出整個單詞序列 pick the entire sequence of words(最高可能性)
可以想像的是,有的時候雖然每個詞是最高可能性的,但是組成的句子未必讓人滿意,因為沒有一個好的全局觀
所以我們要最大化的是 整體概率 joint probability

比如上面的結果中,第一句我們更喜歡,因為簡潔明了
第二句雖然正確,但是有點啰嗦
由於 going 跟在 is 後面的概率會更高,所以單詞最優會出現第二句的結果
這就是單詞最優和整句最優的區別

由於句子的組合是非常多的,比如 10000 個詞的詞典,構成一個 10 個字的句子,那粗略算來就是 10000^10 這麼多的可能性,所以我們沒辦法直接做全局最優的搜索
需要用一個 近似搜索算法 approximate search algorithm
這個算法會嘗試選到一個概率最大的句子(雖然不能保證找到的 y 一定使得概率最大化,但常常足夠用了)

Beam search

4.jpg

  1. 嘗試選擇第一個要輸出的詞 try to pick the first words ,比如 10000 詞的詞表(這裡忽略了大小寫)

  2. 使用編碼和解碼網絡,輸入句子後,衡量第一個詞的概率(softmax 層輸出 10000 個詞對應的概率)

  3. 這裡多了一個參數 B,假設定為 3(beam width),即一次考慮 3 個概率最高的詞,暫存結果

  4. 針對 3 個詞,分別考慮第二個單詞(3 次,每次生成 10000 個詞的概率)

  5. 這裡的 3 個詞,都是在 y_hat<1> 的地方轉為下一個序列的輸入,計算得到 y_hat<2>

  6. 這裡我們得到的條件概率結果的前提條件是:輸入的法語句子 + 第一個詞
    44.jpg

  7. 然後,我們要計算 「第一個詞 + 第二個詞」 的條件概率,前提條件是:輸入的法語句子
    45.jpg

  8. 根據條件概率公式,可以拆解為兩個概率的乘積
    46.jpg

  9. 其中前面一項,已經在第一個詞的計算中,對應保留了 3 個詞的概率
    47.jpg

  10. 第二項,是在第二個詞的計算中得到
    48.jpg

  11. 所以第二個詞計算完畢後,我們得到了 3✖️ 10000 = 30000 種可能性,在其中選出 3 中概率最高的,存儲最為下一個詞的輸入

值得注意的是,如果第二個詞計算的時候發現,第一個詞的 3 個候選中,有 1 個沒有排進前 3,那相當於這個候選就被淘汰了
然後我們每次,要根據前面的詞,做 30000 次的 概率評估,選擇前 3
相當於我們每一步,都複製了 3 個完全一樣的網絡副本

5.jpg

然後到了集束搜索的下一步,繼續下一個詞,直到最後一個詞(結尾標記)
如果我們設定 B=1,那就是貪心搜索算法了