Beam Search(束搜索)是一種常用於自然語言處理和序列生成任務的搜尋演算法,目的是在生成過程中找到機率或評分最高的輸出序列。它是貪心搜尋(Greedy Search)的改進方法,能在可接受的計算成本下同時考慮多個候選解,從而提高生成結果的品質。
主要原理如下:
- 束寬(beam size):設定一個固定的候選數量k,稱為「束寬」。在生成過程的每個時步,只保留目前機率最高的k個候選序列。
- 流程: 起始時,從模型輸出所有可能的第一個字,挑出機率最高的k個,作為初始候選。 對每個候選序列,生成下一個字的所有可能結果,合併後從中選出總機率最高的k個,更新候選列表。 重複上述步驟直到生成結束符號或達到最大長度。 最終從候選序列中選擇機率最高者作為輸出。
- 對比貪心搜尋: 貪心搜尋每一步只選一個最高機率字,速度快但容易陷入局部最優。 Beam Search則保留多條路徑,增加找到全局較佳解的機率。
- 優缺點: 優點:能平衡搜索效率與解的品質,常用於機器翻譯、文本生成、語音識別等任務。 缺點:束寬越大,計算量和記憶體需求越高;但束寬過小可能錯失較好解。