在大模型生成文本时,模型每一步都会给出"下一个词"的概率分布,但真正决定最终句子的,是"怎么从这些概率里挑词"的解码策略。最常见的做法是贪心解码(Greedy Search):每一步都选概率最高的那个词。它够快,却容易"一步错、步步错"——某个局部最优的选择,可能让整句话走向平庸甚至跑偏。
束搜索(Beam Search)正是为了解决这个问题而提出的。它的思路是:不要只保留一条路,而是同时保留若干条"最有希望"的部分候选,最后再从中挑出整体得分最高的那一条。这里的"束宽"(beam width,常记作 k)就是同时保留的候选数量。
具体来说,束搜索是这样工作的。第一步,模型先选出概率最高的 k 个词,作为 k 条候选路径的起点;之后每一步,它都会把当前 k 条路径各自延展出若干种下一词的可能,算出每条"旧路径 + 新词"的累计得分,再从所有组合里挑出总分最高的 k 条,淘汰其余。如此反复,直到生成结束符或达到最大长度,最后在这 k 条完整候选里选出得分最高的一句输出。
这样做的核心权衡在于"广度"与"代价"。束宽越大,搜索空间越广,越有机会避开局部最优;但计算量和内存占用也随 k 增长,生成速度明显变慢。实践中 k 通常取 3 到 10 之间;再大往往收益递减,还会让输出趋于保守、千篇一律。
那么,为什么如今聊天机器人反而很少用束搜索?因为它偏向"整体概率最高的句子",而高概率常常意味着最安全、最套路的表达。对于翻译、语音识别这类"答案较为唯一"的任务,束搜索很合适;但对于创作、对话这类需要多样性的场景,人们更青睐温度采样、Top-p 等随机策略。束搜索与它们并不冲突——它更像一把"求稳"的尺子,用在哪里,取决于你想要的是准确还是鲜活。
小结:束搜索用"多留几条路"的方式,把解码从"贪心一步"升级为"全局择优"。理解它,也就理解了生成式模型在"准确"与"多样"之间的一次经典取舍。
【参考来源】综合整理自公开发布的行业信息