基于Transformer的文本生成算法:集束搜索(Beam Search)解码策略详解
字数 1228 2025-10-31 12:28:54
基于Transformer的文本生成算法:集束搜索(Beam Search)解码策略详解
题目描述
在文本生成任务(如机器翻译、摘要生成)中,模型需要根据输入序列(如源语言句子)逐词生成输出序列。生成过程中,解码策略直接影响结果的质量。集束搜索(Beam Search)是一种平衡贪婪搜索和全局搜索的解码算法,通过维护多个候选序列来减少局部最优风险,提升生成流畅性和准确性。本题要求详细解释集束搜索的原理、步骤及优化方法。
解题过程
-
问题分析
- 文本生成可视为序列决策问题:每一步从词汇表中选择一个词,直到生成结束符(如
<EOS>)。 - 贪婪搜索(每步选概率最高的词)可能因局部最优导致整体序列质量差;穷举搜索计算成本过高。
- 集束搜索折中:每步保留Top-B(B为集束宽度)个候选序列,逐步扩展和筛选。
- 文本生成可视为序列决策问题:每一步从词汇表中选择一个词,直到生成结束符(如
-
核心概念
- 集束宽度(Beam Width):参数B,控制每步保留的候选序列数量。B=1时退化为贪婪搜索。
- 序列得分:生成序列的联合概率(或对数概率之和),用于评估候选序列优劣。
- 长度归一化:解决长序列概率衰减问题,常用对数概率除以序列长度(或长度惩罚因子)。
-
算法步骤
步骤1:初始化- 初始序列仅包含起始符(如
<SOS>),初始得分为1(或对数得分0)。 - 将初始序列加入候选集,当前候选集大小为1。
步骤2:序列扩展
- 对当前候选集中的每个序列,用模型预测下一个词的概率分布。
- 每个序列可生成V个可能扩展(V为词汇表大小),计算新序列得分:
新得分 = 原序列得分 × 当前词概率(或对数得分相加)。 - 所有候选序列扩展后,得到B×V个新序列。
步骤3:序列筛选
- 从B×V个序列中选出得分最高的B个序列,作为下一轮的候选集。
- 若某序列已生成结束符,将其移入“已完成序列池”,不再扩展。
步骤4:终止条件
- 当已完成序列数达到B,或达到最大生成长度时,终止搜索。
- 从已完成池中选择得分最高的序列作为最终输出(需长度归一化比较)。
- 初始序列仅包含起始符(如
-
优化与变体
- 长度惩罚:对长序列得分进行惩罚,避免生成过短序列。例如,使用对数概率除以长度^α(α为超参数)。
- 动态集束宽度:根据任务调整B值,平衡效率和质量。
- 与采样结合:在Top-B筛选中引入随机性,增加多样性。
-
示例说明
假设B=2,生成句子“我爱北京”。- 第1步:从
<SOS>扩展,保留“我”(得分0.4)和“你”(得分0.35)。 - 第2步:扩展“我”→保留“我爱”(0.4×0.6=0.24)、“我喜”(0.4×0.3=0.12);
扩展“你”→保留“你爱”(0.35×0.5=0.175)、“你喜”(0.35×0.4=0.14)。
合并后Top-2为“我爱”(0.24)和“你爱”(0.175)。 - 后续步骤类似,直到生成结束符。
- 第1步:从
总结
集束搜索通过多路径保留和动态筛选,显著提升生成质量,是Transformer等模型的核心解码策略。实际需调整B值和长度惩罚,结合任务需求权衡效果与效率。