seq2seq中的beam search演算法過程

在sequence2sequence模型中,beam search的方法只用在測試的情況,因為在訓練過程中,每一個decoder的輸出是有正確答案的,也就不需要beam search去加大輸出的準確率。

假設現在我們用機器翻譯作為例子來說明,

我們需要翻譯中文「我是中國人」--->英文「I am Chinese」

假設我們的詞表大小只有三個單詞就是I am Chinese。那麼如果我們的beam size為2的話,我們現在來解釋,

如下圖所示,我們在decoder的過程中,有了beam search方法後,在第一次的輸出,我們選取概率最大的"I"和"am"兩個單詞,而不是只挑選一個概率最大的單詞。

然後接下來我們要做的就是,把「I」單詞作為下一個decoder的輸入算一遍得到y2的輸出概率分布,把「am」單詞作為下一個decoder的輸入算一遍也得到y2的輸出概率分布。

比如將「I」單詞作為下一個decoder的輸入算一遍得到y2的輸出概率分布如下:

比如將「am」單詞作為下一個decoder的輸入算一遍得到y2的輸出概率分布如下:

那麼此時我們由於我們的beam size為2,也就是我們只能保留概率最大的兩個序列,此時我們可以計算所有的序列概率:

「I I」 = 0.4*0.3 "I am" = 0.4*0.6 "I Chinese" = 0.4*0.1

"am I" = 0.5*0.3 "am am" = 0.5*0.3 "am Chinese" = 0.5*0.4

我們很容易得出倆個最大概率的序列為 「I am」和「am Chinese」,然後後面會不斷重複這個過程,直到遇到結束符為止。

最終輸出2個得分最高的序列。

這就是seq2seq中的beam search演算法過程,但是可能有些同學有一個疑問,就是但i-1時刻選擇的單詞不同的時候,下一時刻的輸出概率分布為什麼會改變?

這是由於解碼的過程中,第i時刻的模型的輸入,包括了第i-1時刻模型的輸出,那麼很自然在第i-1時刻模型的輸出不同的時候,就會導致下一時刻模型的輸出概率分布會不同,因為第

i-1時刻的輸出作為參數影響了後一時刻模型的學習。

如下圖用了一個slides的法語翻譯為英文的例子,可以更容易理解上面的解釋。

致謝:

凌志、劉洋、皓宇、蕭瑟師兄

參考:誰能解釋下seq2seq中的beam search演算法過程?


推薦閱讀:

A Neural Network Approach to Context-Sensitive Generation of Conversational Responses
亞馬遜實體店,用深度學習和計算機視覺顛覆超市購物體驗
Learn R | Association Rules of Data Mining(一)
Python · 決策樹(一)· 準則
10家將機器學習玩出新花樣的公司

TAG:自然语言处理 | 机器学习 | 深度学习DeepLearning |