一種解碼策略,同時維護多個候選序列(「beam」),每一步擴展每個候選一個 token,只保留得分最高的候選。與貪婪解碼(總是選擇最佳的下一個 token)或採樣(隨機選擇)不同,集束搜尋探索多條路徑並找到整體機率最高的序列。常用於翻譯和摘要。
集束搜尋展示了局部最佳選擇不一定是全域最佳。貪婪解碼可能選擇「The」作為第一個詞,而「In」可能會引導出整體更好的句子。透過保留多個候選,集束搜尋避免了過早承諾。然而,對於開放式生成(聊天、創意寫作),採樣比集束搜尋產生更多樣化和自然的文本。
演算法:維護一個寬度為 k 的 beam(例如 k=5)。每一步,將每個候選擴展所有可能的下一個 token,對結果序列評分,保留前 k 個。持續直到所有候選都生成了結束 token 或達到長度限制。返回得分最高的完整序列。beam 寬度 k 在品質和計算量之間權衡:k=1 是貪婪解碼,較大的 k 探索更多路徑但需要 k 倍的計算量。
原始的集束搜尋偏好較短的序列(較少的 token = 較少的機率相乘 = 較高的總機率)。長度懲罰(將分數除以 length^α)可以抵消這種偏差,鼓勵模型生成完整、格式良好的輸出,而非截斷。懲罰因子 α 是一個超參數:α=0 表示不懲罰,α=1 完全按長度歸一化。典型值為 0.6–1.0。
集束搜尋最適用於有「正確」答案的任務(翻譯、摘要、結構化生成),你想要單一最可能的輸出。它不適用於多樣性重要的創意或對話任務 — 集束搜尋傾向於產生通用、重複的文本,因為高機率序列往往很無聊。現代 LLM 介面在聊天中使用採樣(帶有溫度和 top-p),而集束搜尋主要在內部用於特定任務,如工具呼叫生成。