AI 技术
#束搜索#解码策略#机器翻译#文本生成#长度归一化#NLP

束搜索解码:为什么增大束宽反而降低生成质量?

束搜索是机器翻译和文本生成中常用的解码策略,但增大束宽并不总是提升质量,反而可能导致重复、空洞的译文。本文以机器翻译为场景,解释束搜索如何维护多个候选序列、长度偏置与过度约束如何导致质量下降,并对比贪心解码、采样与束搜索的适用边界,讨论长度归一化与惩罚项的工程权衡。

一个反直觉的工程现象

在机器翻译系统中,束搜索(Beam Search)是默认的解码算法。它维护多个候选序列,每一步保留得分最高的若干条路径,期望在有限计算内逼近全局最优。直觉上,束宽越大,搜索空间越充分,译文质量应该越高。然而,许多工程团队在实际部署中发现,束宽从 4 提升到 8 甚至 16 时,BLEU 分数不升反降,译文出现重复片段、过早结束或空洞的泛化表达。这个现象在 2018 年 Yang 等人的研究《On the Pitfalls of Beam Search for Neural Machine Translation》中被系统记录:束宽增大导致翻译质量下降,原因并非搜索不充分,而是束搜索的目标函数与人类对译文质量的判断存在系统性偏差。

本文以英译中机器翻译为贯穿场景:输入一句英文,模型逐词生成中文。我们将拆解束搜索的候选维护机制,分析长度偏置与过度约束如何随束宽放大,讨论长度归一化、惩罚项等工程修正,并对比贪心解码、采样与束搜索的适用边界。

束搜索:从贪心到近似全局最优

束搜索要解决的问题是:给定一个已训练好的序列生成模型,如何从指数级可能的输出序列中选出一个得分最高的序列。模型在每个时间步输出一个概率分布,覆盖整个词表。贪心解码在每个时间步只取概率最高的词,路径唯一,但可能因早期一步选错而错失全局最优。

束搜索的改进在于同时保留 k 个候选(k 即束宽),每一步对每个候选扩展所有可能的词,计算累计得分,然后按得分排序,只保留前 k 个。这样,即使某个候选在早期概率较低,只要后续路径能弥补,仍有机会存活。

用一个简化例子说明。假设模型要翻译“I love you”,词表只有“我”“爱”“你”“他”“喜欢”。束宽设为 2:

  1. 第一步,模型输出“我”的概率 0.5,“他”的概率 0.3,保留这两个。
  2. 第二步,扩展“我”得到“我爱”(0.5×0.6=0.3)、“我喜欢”(0.5×0.4=0.2);扩展“他”得到“他爱”(0.3×0.5=0.15)、“他喜欢”(0.3×0.5=0.15)。排序后保留“我爱”和“我喜欢”。
  3. 第三步,继续扩展,最终可能得到“我爱你”和“我喜欢你”。

束宽为 1 时,第一步就会丢弃“他”,但“他”后续可能导向“他喜欢我”等合理翻译。束宽为 2 保留了更多可能性,但也引入了更多低概率路径。

束搜索的得分是路径上各词概率的乘积。由于概率小于 1,序列越长,乘积越小。这使得束搜索天然偏好短序列——这是长度偏置的根源。

长度偏置:为什么束宽越大,译文越短

在机器翻译中,模型对每个词的概率通常远小于 1。一个 10 个词的句子,得分是 10 个概率的乘积,数值极小。束搜索在每一步比较不同长度的候选时,较短的序列因为乘的次数少,得分天然更高。

束宽增大时,这种偏置被放大。束宽小(如 1)时,贪心路径往往跟随概率最高的词,模型倾向于生成符合训练分布的常见长度。束宽大时,搜索空间包含更多短序列候选,这些短序列虽然每个词概率不低,但整体得分因长度短而占优。最终选出的译文可能比参考译文短,丢失信息。

Yang 等人的研究指出,束搜索的得分函数可以分解为两部分:序列的几何平均概率和长度项。几何平均概率反映每个词的平均置信度,长度项则随长度指数衰减。束宽增大时,搜索更充分,但目标函数仍偏向短序列,因此质量下降。

具体到工程场景,一个典型的失败案例是:输入“The committee has decided to postpone the meeting until next week”,束宽为 4 时译文为“委员会决定推迟会议”,束宽为 16 时可能变成“委员会决定推迟”,漏掉了“下周”。短译文在 BLEU 上因 n-gram 匹配少而得分低,但束搜索仍认为它更优,因为长度惩罚了长序列。

过度约束:束宽增大导致重复与空洞

长度偏置解释了译文变短,但束宽增大还会导致另一个问题:重复片段和空洞的泛化表达。Holtzman 等人在 2019 年的研究《The Curious Case of Neural Text Degeneration》中发现,使用似然作为解码目标会导致文本“平淡且奇怪地重复”。束搜索正是这种目标的极端体现。

束搜索的“过度约束”体现在两个层面。第一,束宽增大后,候选序列之间的差异变小。每一步保留得分最高的 k 个,这些候选往往来自同一条高概率路径的微小变体,比如只差一个同义词。搜索空间看似扩大,实际被限制在一个狭窄的“高概率区域”内。第二,模型在训练时见过大量重复模式,束搜索倾向于选择这些模式,因为它们概率高。

在翻译场景中,过度约束表现为:译文使用“进行”“作出”等泛化动词,回避具体名词;或者重复“我们”“他们”等代词。例如,输入“The company announced its quarterly earnings, which exceeded analyst expectations”,束宽 16 时可能输出“公司公布了季度收益,收益超过了分析师的预期”,重复“收益”一词。束宽 4 时反而可能输出“公司公布的季度业绩超出分析师预期”,更简洁。

Holtzman 等人的实验表明,即使使用相同的语言模型,仅改变解码策略就能显著影响生成质量。束搜索作为确定性解码,总是选择概率最高的路径,而人类文本的分布并非如此——人类更倾向于在多个合理选项中选择,而不是机械地取最大概率。

归一化与惩罚项:工程上的修正

长度偏置的直观修正是长度归一化:将序列得分除以长度或长度的幂次,使得不同长度的序列可以公平比较。常见的做法是除以长度的 α 次方,α 通常取 0.6~1.0。

另一种修正是长度惩罚项:在得分中加入一个与长度相关的项,鼓励或抑制长序列。例如,Google 的 NMT 系统使用长度惩罚因子,在得分上乘以一个与长度相关的系数。

这些修正的工程权衡在于:归一化强度过小,长度偏置仍然存在;强度过大,译文会过度膨胀,引入冗余词。α 的取值需要根据语料和任务调优,没有通用最优值。

此外,还有覆盖惩罚(coverage penalty),用于惩罚重复翻译源语言片段。在翻译中,每个源词应当被翻译一次,覆盖惩罚计算源词被注意力覆盖的程度,重复覆盖会扣分。

下表对比了不同修正策略的收益与成本:

策略解决的问题实现方式副作用适用场景
贪心解码无(基线)每步取最高概率早期错误无法修正实时性要求高、质量要求低
束搜索(无修正)搜索不充分保留 k 个候选长度偏置、重复短句、长度敏感任务
束搜索 + 长度归一化长度偏置得分除以长度幂次可能过度膨胀中长句、需要完整信息
束搜索 + 覆盖惩罚重复翻译惩罚重复覆盖的源词增加超参数、可能抑制合理重复翻译任务,源词需一一对应
采样(Top-p)过度约束、重复从累积概率前 p 的候选集中采样可能不连贯、随机性开放式生成、创意文本

束搜索的流程与失败路径

下面用流程图展示束搜索在机器翻译中的完整流程,以及长度偏置如何导致质量下降:

flowchart TD
    A[输入源句] --> B[编码器生成上下文]
    B --> C[初始化候选集,含起始符]
    C --> D{是否达到最大长度或束宽个已完成?}
    D -- 否 --> E[对每个候选扩展所有词]
    E --> F[计算累计得分]
    F --> G[按得分排序,保留前 k 个]
    G --> D
    D -- 是 --> H[从完成候选中选最高得分]
    H --> I[输出译文]
    F --> J[长度偏置:短序列得分高]
    J --> K[束宽增大,短序列更易胜出]
    K --> L[译文过短或信息丢失]

流程中的关键转折点在于得分计算。累计得分是概率乘积,长度越长,乘积越小。束宽增大后,更多短序列进入候选集,最终选出的译文更短。工程上需要在得分计算中加入归一化或惩罚项,否则束宽增大只会加剧偏置。

与替代方案的比较

贪心解码是束宽为 1 的特例。它计算量最小,但每一步只保留一个候选,早期错误无法挽回。在机器翻译中,贪心解码通常比束搜索质量低,但延迟更低,适合实时翻译。

采样(如核采样 Top-p)从概率分布中随机抽取词,而不是取最大概率。Holtzman 等人提出的核采样,从累积概率超过 p 的最小词集(即“核”)中采样,既保留多样性,又截断低概率的尾部。与束搜索相比,采样生成的文本更多样,更接近人类分布,但可能不连贯,不适合需要精确对应关系的翻译任务。

束搜索的适用边界是:任务需要高置信度、输出长度相对固定、错误代价高。机器翻译、语音识别、文本摘要中,束搜索仍是主流。而开放式生成(如对话、故事)中,束搜索容易导致重复和空洞,采样更合适。

在实际系统中,许多翻译服务采用束宽 4~8,并配合长度归一化。增大束宽到 16 以上,收益递减,甚至出现质量下降。工程上应通过验证集调整束宽和归一化参数,而不是盲目增大。

可观测指标与调参实践

生产环境中,需要监控以下信号来判断束搜索是否退化:

  • 输出长度分布:如果平均长度明显短于参考译文,说明长度偏置严重。
  • 重复率:统计 n-gram 重复比例,重复率过高说明过度约束。
  • BLEU 分数随束宽的变化:如果束宽增大而 BLEU 下降,说明需要修正。
  • 覆盖率:在翻译中,统计源词被注意力的覆盖情况,覆盖不足或重复覆盖都是异常。

调参时,先固定束宽(如 8),调整长度归一化 α,观察 BLEU 和长度分布。α 过小,译文偏短;α 过大,译文冗长。然后尝试覆盖惩罚,观察重复率下降情况。最后在验证集上比较不同束宽(4、8、16)的表现,选择最优组合。

尚未解决的问题

束搜索的长度偏置与过度约束,本质上是目标函数与人类质量判断不一致的问题。长度归一化和惩罚项只是启发式修正,没有理论保证。Holtzman 等人的研究揭示了似然目标与人类文本分布的差异,但如何设计更好的解码目标仍是开放问题。

另一个未解问题是束宽与计算资源的权衡。束搜索的计算量随束宽线性增长,但质量提升并非线性。在资源受限的部署中,如何动态调整束宽和归一化参数,仍依赖经验调参。

对于机器翻译,束搜索仍是可靠的选择,但工程上必须正视其偏差。理解长度偏置和过度约束的机制,才能在调参时做出有依据的决策,而不是盲目相信“束宽越大越好”。

资料来源

  1. Sequence Transduction with Recurrent Neural Networks (Graves 2012)
  2. The Curious Case of Neural Text Degeneration (Holtzman et al., 2019)
  3. On the Pitfalls of Beam Search for Neural Machine Translation (Yang et al., 2018)
  4. Bean Search算法的概念解释和使用说明。 - AlphaGeek - 博客园