【Beam Search】波束搜尋的直觀解釋

datamonday發表於2020-10-19

原題:An intuitive explanation of Beam Search
原文:HTML
作者:Renu Khandelwal



在本文中,將詳細介紹神經機器翻譯是如何使用序列到序列(sequence to sequence)演算法來為目標語言找到句子中最相關的單詞的。


What is Beam search?

為了理解波束搜尋(Beam search),我們將以序列到序列的神經機器翻譯為例來說明。

序列到序列模型使用具有長短時記憶(LSTM)或門控迴圈單元(GRU)的編碼器和解碼器框架作為基本塊。

編碼器(Encoder)對映源序列(source sequence),對源資訊進行編碼,並將其傳遞給解碼器。解碼器將來自編碼器的編碼資料作為輸入,同時將字串起始符 <START> 作為初始輸入,以產生輸出序列。

在這裡插入圖片描述
這個源序列(源語句)是印地語的一個句子,目標序列是用英語生成的。希望為翻譯選擇最合適、最有可能與印地語句子意思相匹配的單詞。

如何為目標序列選擇最佳和最有可能的單詞?

一個簡單的方法是用目標語言建立詞彙庫,比如10000個單詞,然後根據源序列,得到10000個目標單詞的概率。源語句在目標語言中可能有多種可能的翻譯。

應該隨機選擇任何翻譯嗎?

我們的目標是選出最好最有可能翻譯的詞,所以我們根據源句選擇概率最大的目標詞。

應該只挑一個最好的翻譯嗎?

貪婪搜尋(Greedy Search)演算法為每個時間步長選擇一個最佳候選作為輸入序列。只選擇一個最佳候選可能適合當前的時間步,但當我們構建完整的句子時,它可能是一個次優選擇。

波束搜尋(Beam Search)演算法基於條件概率在每個時間步長為輸入序列選擇多個備選方案。多個備選方案的數量取決於一個稱為波束寬度(Beam Width)的引數 B B B。在每個時間步,波束搜尋選擇 B B B 個具有最高概率的最佳備選方案作為該時間步最可能的選擇。

讓我們舉個例子來理解這一點。
在這裡插入圖片描述
我們將選擇 beam width=3;英語詞彙有10000個。

第一步:給定輸入句子,找出概率最高的前3個單詞。最可能的單詞數量基於波束寬度。

  • 將編碼後的輸入句子輸入到解碼器;解碼器將對詞彙表中的所有10000個單詞應用softmax函式。
  • 從10000個概率得分中,選出概率最高的前3個單詞。
  • 考慮翻譯單詞的3個最可能的選擇,因為波束寬度設定為3。如果波束寬度設定為10,則選擇概率最高的前10個單詞。
  • 把最重要的三個字:I,My,We 儲存在記憶體中。

在這裡插入圖片描述
Step 1:Find three words with the highest probability based on the input sentence

貪婪搜尋總是隻考慮一個最好的選擇。

第二步:根據條件概率找到第一個和第二個單詞的三個最佳配對。
在這裡插入圖片描述
Step 2: Find the top 3 pair of words for the first and second word of the translated sentence

  • 將第一步中選擇的前三個單詞(I, My, We)作為第二步的輸入。
  • 將softmax函式應用於詞彙表中的所有10000個單詞,為第二個單詞找到三個最佳選項(上圖中為:am,parent,will)。在這樣做的同時,我們將使用條件概率找出最有可能形成一對的第一個和第二個單詞的組合。
  • 為了找到第一個和第二個單詞的3個最佳對,我們首先取第一個單詞 “I”,對詞彙表中的所有10000個單詞應用softmax函式。對第一個單詞中的候選 “My”“We” 做同樣的操作。
  • 以上操作需要與執行30000個不同的組合,選出第一個和第二個單詞的前3個詞對。結果為:“I am”, “My parents”, “I will”
  • 刪除第一個單詞 “We”,因為沒有找到任何帶有 “We” 的詞對,而第一個單詞和第二個單詞的條件概率很高。
  • 在每一步,都例項化(instantiate)編碼器-解碼器網路的三個副本,以評估這些部分語句片段和輸出。網路的副本數與波束寬度的大小相同。

第三步:根據輸入的句子和選擇的第一個和第二個單詞,找出第一個、第二個和第三個單詞的三個最佳配對。

在這裡插入圖片描述
Step 3: find the most likely choice of the first three words in the translated sentence

  • 連同輸入句子和上一步得出的前3個第一和第二個單片語成的單詞對:“I am”“My parents”“I will”,找到條件概率最高的第三個單片語成的單詞對。
  • 以上操作需要再次執行30000個組合來選擇第一個、第二個和第三個單詞的最佳和最可能的組合,並例項化seq2seq、編碼器-解碼器模型的三個副本。
  • 前2個第一、第二和第三個單片語成的單詞對是:“I am visiting”“I will visit”“l am going”
  • 刪除 “My parents” 組合,因為我們在前三個單片語成的單詞對中沒有找到與之相關的單詞對。

繼續這個過程,選出3個概率最高的句子。這3個句子的長度可以不同,也可以相同。
在這裡插入圖片描述
Three output sentences with the highest conditional probabilities and different lengths

我們最終選擇解碼器的輸出作為概率最高的句子。

在這裡插入圖片描述
波束寬度(beam width)的值越高,翻譯效果會越好嗎?

較高的光束寬度將提供更好的翻譯結果,但會使用大量的記憶體和計算能力。

當波束寬度為3,詞彙表為10000時,需要在每個時間步評估30000種組合,建立3個編碼器-解碼器例項,最大句子長度為9。建立編碼器-解碼器的多個副本並在每個時間步計算30000個單詞的條件概率需要大量記憶體和計算能力。

較低的波束寬度將導致較差的翻譯結果,但卻減少了記憶體佔用和運算資源。

Conclusion

波束搜尋是序列到序列(sequence to sequence)深度自然語言處理演算法中最流行的搜尋策略,如神經機器翻譯、影像字幕、聊天機器人等。

波束搜尋使用條件概率,基於波束寬度考慮多個最佳選項,優於次優的貪婪搜尋演算法。

References

Youtube Video

相關文章