解碼之Beam Search算法

解碼是seq2seq模型的常見問題,常用方法有貪心搜索(Greedy Search)集束搜索(Beam Search)。

簡單貪心搜索

這裏寫圖片描述
From [1]

如圖,Decoder根據Encoder的中間語義編碼向量c<s>標籤得到第一個輸出的概率分佈[0.1,0.1,0.3,0.4,0.1] ,選擇概率最大的0.4,即moi

根據隱向量h1moi得到第二個輸出的概率分佈[0.1,0.1,0.1,0.1,0.6] ,選擇概率最大的0.6,即suis

以此類推,直到遇到<\s>標籤,得到最終的序列moi suis étudiant

集束搜索

上面的貪心搜索只選擇了概率最大的一個,而集束搜索則選擇了概率最大的前k個。這個k值也叫做集束寬度(Beam Width)。

還是以上面的例子作爲說明,k值等於2,則集束搜索的過程如下圖:

這裏寫圖片描述

得到第一個輸出的概率分佈[0.1,0.1,0.3,0.4,0.1] ,選擇概率最大的前兩個,0.3和0.4,即Jemoi

然後Je和moi分別作爲Decoder的輸入,得到兩個概率分佈,然後再選擇概率和最大的前兩個序列,0.3+0.8和0.4+0.6,即Je suismoi suis

以此類推,最終可以得到兩個序列,即Je suis étudiantmoi suis étudiant,很明顯前者的概率和最大,爲2.2,所以這個序列是最終得到的結果。

集束搜索本質上也是貪心的思想,只不過它考慮了更多的候選搜索空間,因此可以得到更多的翻譯結果。

References

[1] https://www.tensorflow.org/tutorials/seq2seq

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