贪心解码,正在刷高模型分数

一篇即将发表于 MICCAI 的研究提醒开发者:贪心解码和 Beam Search 可能通过输出重复、泛化的“正常”模板抬高评测分数;改用随机采样虽能恢复多样性,却可能引入人口统计偏见。模型评测不能再只看一次确定性输出。
别再默认贪心解码:确定性推理可能正在“刷高”模型评测分数
截至 2026 年 8 月,社区正在重新讨论一个被大多数大模型工程流程默认掉的问题:模型到底应该如何生成答案?
一篇已被 MICCAI 接收的研究指出,在医疗 AI 场景中,贪心解码和 Beam Search 等确定性解码策略,可能通过输出重复、通用的“正常发现”模板,获得看起来不错的评测分数。问题在于,这些分数未必对应更准确的临床判断,而可能只是说明模型更擅长选择数据集中最常见、最安全的答案。
**确定性解码是指:给定同一个输入,模型每次都按照固定规则生成完全相同或高度相似的输出。**贪心解码每一步都选择当前概率最高的 Token;Beam Search 则同时保留若干条高概率候选路径,最后挑出总概率最高的一条。它们稳定、便于复现,也很适合批量评测,但稳定并不等于可靠。
这不是一个只影响医学报告生成的小问题。任何使用文本重叠指标、标准答案匹配或单次输出评分的系统,都可能受到同样的影响:模型越倾向于输出训练数据中最常见的表达,评测分数越容易被“压”到一个看似漂亮的区间;而真正需要开放式推理、罕见情况识别或个体化表达时,它的能力可能被掩盖。

评测分高,可能只是因为模型学会了说“正常”
**模式坍缩是指模型在面对不同输入时,反复生成少数几种高度相似的输出模板。**在医疗报告任务里,这种模板可能是“未见明显异常”“检查结果正常”或一段结构固定的描述;在客服、风控和内容审核中,则可能表现为统一的免责声明和保守结论。
从传统评测指标看,这种行为并不一定吃亏。BLEU、ROUGE、CIDEr 等指标通常通过比较模型输出与参考答案之间的 Token 或 n-gram 重叠来打分。如果一个数据集里大多数样本都对应“没有异常”,模型反复输出接近该模板的答案,就可能获得较高的平均分。
问题是,平均分把两个完全不同的能力混在了一起:
- 模型是否识别出了这个具体样本的关键信息;
- 模型是否只是猜中了数据集里的主流标签。
假设一个医疗影像数据集里 80% 的病例没有明显异常。一个极端模型无论输入什么都输出“未见明显异常”,理论上就可能拿到接近 80% 的粗粒度准确率。它在常见病例上的表现看起来稳定,但在真正需要发现少数异常的病例上几乎没有价值。
这也是确定性解码危险的地方:它会把模型概率分布中最常见、最保守的表达持续放大。对于开放式生成任务,答案的质量不只取决于“最可能的句子”是否与参考答案相似,还取决于模型是否覆盖了输入中的细节、是否能处理低频情况,以及是否在不确定时表达出合理的不确定性。
贪心解码为什么容易得到好看的分数
**贪心解码是指在每个生成步骤都选择条件概率最高的下一个 Token,常用参数是 temperature=0 或等价的确定性设置。**它的优点很明确:速度快、结果稳定、实验容易复现,线上排查也简单。
但它只优化局部决策。模型在第一个 Token 选择了一个高概率词,后续每一步都会基于这个选择继续生成。只要训练语料中存在大量高频模板,生成过程就会不断沿着“最安全”的路径向前滚动。最终输出可能语法流畅、风格统一,却没有充分利用输入中的个体信息。
Beam Search 看起来更复杂,但并不天然解决这个问题。
**Beam Search 是一种保留多条高概率候选序列、再从中选择整体概率最高序列的解码方法。**它能够缓解单步贪心选择带来的局部最优,却仍然以序列概率为主要目标。高概率往往意味着更常见、更短、更保守的表达,而不是更有信息量或更接近真实世界的判断。
在长文本生成中,Beam Search 还可能放大重复。某些研究和工程实践已经观察到,当候选路径都围绕同一个高频模板展开时,增加 Beam 数量并不会带来等比例的质量提升,反而可能让模型更偏向模式化输出。
换句话说,解码器并不是一个中性的“输出开关”。它会改变模型能力最终呈现出来的形状。确定性策略把概率分布的峰值变成最终答案,随机策略则会暴露分布中的长尾。开发者如果只在一种解码设置下评测,实际上评估的是“模型加解码器”的组合,而不是模型本身。
把 temperature 调高,并不是完整答案
**随机采样是指按照模型给出的概率分布抽取下一个 Token,而不是每次固定选择概率最高的 Token。**Temperature 用来调整分布的尖锐程度:温度越低,模型越接近选择最高概率 Token;温度越高,低概率候选被选中的机会越大。
因此,随机采样通常可以提高词汇多样性,减少所有输入都输出同一模板的情况。但它也会带来另一类风险:模型可能生成事实错误、无关内容,甚至把训练数据中的人口统计偏见随机带入答案。
研究讨论的关键结论正是这里:**调高 temperature 可以恢复多样性,却不能自动恢复公平性和真实性。**如果模型的概率分布本身包含偏见,采样只是让这些偏见以更多样的形式显现出来。
以医疗场景为例,确定性解码可能把不同年龄、性别或族群的患者都描述成同一种“典型病例”,从而在总体指标上保持稳定;随机采样则可能生成带有错误性别、年龄或族群特征的描述。前者牺牲了个体化和少数案例识别,后者增加了幻觉和偏差。两种策略都不能仅凭一个总体准确率判断优劣。
可以把这件事理解为三组互相拉扯的目标:
- 准确性:输出是否正确描述了当前输入,尤其是关键异常和低频情况;
- 多样性:不同输入是否得到与其内容匹配的不同答案,而不是一套固定模板;
- 公平性:输出是否对不同人口群体保持一致的判断标准,避免凭空补全敏感属性。
目前没有证据表明存在一个适用于所有任务的“最佳 temperature”。温度 0 并不是专业,温度 0.7 也不是创造力的保证。真正需要优化的是完整的评测协议。
模型对比,必须把解码设置写进结果
**解码配置是指温度、Top-p、Top-k、Beam 数量、最大输出长度、随机种子等共同决定生成行为的一组推理参数。**这些参数应该和模型名称、数据集版本一样,被视为评测结果的组成部分。
如果一篇报告只写“模型 A 的准确率为 85%”,却不说明使用了什么解码策略,读者无法判断这个数字来自模型能力,还是来自某种极度保守的输出方式。
建议至少记录以下信息:
temperature、top_p、top_k等采样参数;- 是否使用贪心解码或 Beam Search,以及 Beam 数量;
- 随机种子和重复运行次数;
- 每个样本生成几次,而不是只保留一次结果;
- 评测指标是否依赖 n-gram 重叠;
- 数据集中正负样本、常见样本和罕见样本的比例;
- 输出长度、重复率、唯一 n-gram 比例和模板命中率。
对于开放式任务,单次确定性输出尤其不够。更合理的做法是对每个输入运行多次采样,然后分别统计平均性能、最差性能、输出之间的一致性,以及错误类型的变化。
| 评测维度 | 确定性解码可能带来的结果 | 随机采样可能带来的结果 | 建议指标 | |---|---|---|---| | 总体准确率 | 可能因偏向多数类而偏高 | 可能因随机错误而下降 | Accuracy、Macro-F1 | | 低频异常识别 | 容易被通用模板覆盖 | 有机会探索不同答案 | Recall、AUROC、少数类 F1 | | 文本多样性 | 输出高度相似 | 多样性提高 | Distinct-1/2、Self-BLEU | | 事实可靠性 | 结果稳定,但稳定错误 | 错误和幻觉概率上升 | 人工核验、事实一致性 | | 公平性 | 可能隐藏群体差异 | 可能暴露或放大人口统计偏见 | 分组 F1、分组假阳性率 | | 可复现性 | 很高 | 依赖随机种子和采样次数 | 多次运行置信区间 |
这里有一个经常被忽略的事实:准确率和多样性不是简单的二选一。对于分类任务,开发者可以让模型输出结构化标签,再单独评估解释文本;对于报告生成,可以把“事实字段是否正确”和“文字表述是否丰富”拆开;对于 Agent,则应该同时记录最终答案、工具调用轨迹和失败恢复情况。
评测集也可能在奖励错误行为
**数据集偏置是指评测样本的分布、标签或参考答案系统性偏离真实使用场景。**解码问题之所以容易被放大,是因为它通常和数据集偏置叠加出现。
如果数据集中的正常样本远多于异常样本,输出正常模板就会成为一条低风险路径。如果参考答案本身由少数固定模板构成,模型越接近模板,文本重叠分数越高。如果评测只看总体均值,模型在少数人群上的失败就可能被大量常见样本掩盖。
这和 Agent 评估中强调的“改变一个变量、观察结果变化”是同一个工程原则。GitHub 上的 Agent 评估资料也将对比实验和消融实验视为区分真实能力与表面波动的基础方法。解码策略同样应该被纳入消融实验,而不是在最后一步随手设置一个默认值。
一个可执行的评测矩阵可以这样设计:
- 固定模型、提示词和数据集,只切换贪心、Beam Search 和多组采样参数;
- 固定解码策略,分别测试总体样本、少数类样本和困难样本;
- 统计输出重复率、模板覆盖率和每个分组的错误率;
- 对随机采样运行至少多组随机种子,报告均值和置信区间;
- 把“模型拒答”“模型输出正常”“模型输出异常”分别作为可分析事件;
- 让领域专家抽查高分样本和低分样本,确认指标是否与实际质量一致。
这套流程的价值在于,它能回答一个比“哪个模型分数最高”更重要的问题:模型是因为真正理解了输入而得分,还是因为掌握了数据集的统计捷径?
生产系统里,稳定性和探索性应该分层处理
**分层解码是指根据任务风险和输出用途,为同一个模型配置不同的生成策略。**它比试图寻找一个全局最优 temperature 更符合实际工程需求。
高风险决策不应该把随机性直接交给最终用户。医疗辅助、金融审核、法律检索和安全告警等场景,可以采用低温或确定性策略生成结构化结论,但必须配合置信度、证据引用、异常样本复核和人工确认。确定性只负责让流程可复现,不能被当作正确性的证明。
在需要候选方案的场景,系统可以先使用多次采样产生若干候选,再通过规则、检索结果、验证器或领域模型进行筛选。这里的关键不是“让模型自由发挥”,而是把探索和验证拆成两个阶段:第一阶段扩大候选空间,第二阶段检查事实、格式和安全约束。
对于医疗报告这类任务,还可以采用混合策略:疾病标签、数值、身体部位等关键字段使用受约束的结构化输出;自然语言解释则允许有限采样;当关键字段与解释之间不一致时,系统进入复核流程。这样既能降低模板坍缩,也不会让随机文本直接变成未经审核的临床结论。
开发者现在应该改掉哪些默认设置
第一,别再把 temperature=0 当成所有评测和生产任务的默认答案。它适合需要严格复现的场景,但不适合作为开放式生成质量的唯一测量方式。
第二,别只报告一个平均分。至少同时报告 Macro-F1、少数类召回率、重复率、输出多样性和分组公平性。对生成任务,人工抽样检查仍然必要,尤其要检查高分但模板化的样本。
第三,别把 Beam Search 当成确定性解码的“高级版本”。它解决的是候选搜索问题,不会自动消除数据分布偏置,也不会保证输出包含更多输入细节。
第四,别用调 temperature 的方式掩盖数据集问题。如果评测集本身严重偏向多数类,任何解码策略都可能产生误导。需要重新平衡样本、补充困难案例,并把少数类单独拉出来评估。
第五,别把多样性指标单独当成质量指标。Distinct-1 或 Distinct-2 变高,只能说明词汇变化更多,不能证明答案更准确。多样性必须和事实一致性、任务完成率及公平性一起看。
真正需要改变的是“模型评测”的定义
这场讨论的价值,不在于宣布贪心解码已经失效。对于结构化分类、固定格式抽取、回归测试和需要完全复现的流水线,确定性解码仍然有现实价值。问题在于,开发者长期把“输出稳定”误写成“模型可靠”,又把一次运行得到的高分误写成“模型能力更强”。
**可信评测是指能够区分模型真实能力、解码策略影响和数据集统计偏置的重复性测量体系。**它不应该只给出一个漂亮的总分,而应该告诉我们模型在哪些样本上有效、在哪些群体上失效、输出是否依赖模板,以及换一种合理的解码方式后结论是否仍然成立。
截至目前,社区给出的答案仍然不是一个统一的最优策略,而是一条更谨慎的工程路线:在评测阶段同时测试确定性和随机性,在生产阶段根据风险分层配置,在报告中公开完整解码参数,并把准确性、多样性和公平性放在同一张结果表里。
模型可能已经足够聪明,能在评测指标里找到捷径。接下来要做的,是让评测系统也足够聪明,能够识别这种捷径。
参考来源
- Stop defaulting to greedy, deterministic decoding!:社区对相关 MICCAI 研究结论的讨论,重点涉及确定性解码、模板坍缩、多样性和人口统计偏见。
- Agent 的评估:介绍对比实验、消融实验和可重复评估在 Agent 系统中的作用,可用于理解为什么解码策略也应纳入评测变量。
- LLM 训练全景:Pre-train、SFT、RLHF、DPO 与蒸馏:从工程角度梳理现代大模型训练流程,为理解模型概率分布和对齐行为提供背景资料。


