跳到主要内容

让合成评估数据保持真实

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个安全模型在公开基准测试集上取得了 85.3% 的准确率。当研究人员用并非来自公开数据集的新型对抗性提示进行测试时,这个数字跌至 33.8%。该模型并未真正学会如何推理安全性,而是学会了识别评估数据分布。

这就是合成评估数据核心问题所在:当同一个模型家族既生成训练数据又生成测试用例时,通过评估意味着符合某个共同的统计先验,而非真正展示能力。这是一个看起来像质量保证的反馈循环,直到生产流量到来,数字对不上号才会暴露问题。

这种失败是结构性的,而非偶然的。修复它需要的不仅仅是增加更多合成样本。

为什么合成评估会美化你的模型

原理很简单:LLM 天然产生低困惑度的文本。当你用一个 LLM 来评判另一个 LLM 的输出时,评判者会给那些看起来像自己会写的文本赋予更低的困惑度,进而给出更高的分数。研究人员将这一现象量化为 GPT-4 的自我偏好分数 0.520:它始终给自己的输出打出比人类评估者更高的分。

问题会进一步叠加。LLM 评判者会混淆长度与质量。经过 RLHF 训练的模型学会了冗长、听起来自信的答案能从人类评分者那里获得高分,于是它就生成正是这种文本。而 LLM 评判者又奖励了模型被训练去产生的同一种文体风格。最终你得到一套评估装置,系统性地强化模型已有的行为,而不是衡量它需要改进的地方。

还有一个更深层的统计问题:LLM 生成的测试用例和 LLM 生成的答案共享相关的盲点。如果一个模型无法识别某种特定类型的歧义,它就不会生成包含该歧义的测试用例,也不会在遇到时出现明显的失败。评估集和被评估模型的失败模式是对齐的。结果就是,合成评估不仅平均高估了性能,还遗漏了整类失败模式。

结构性盲点

比较合成数据集与人工撰写基准测试的研究发现,合成数据集通过了标注有效性检查,但系统性地更容易。即使人类评审者将两个版本评为同等有效,模型在合成版本上也能取得更高的准确率。这种质量差异在检查时是不可见的,只有在衡量实际模型性能时才会显现。

以下几种模式解释了其中的原因:

可预测性伪影。 LLM 默认产生众数输出。在生成测试用例时,它们会收敛到相同的措辞、相同的问题结构、相同的参数组合——恰恰是它们最熟悉的分布。这使得合成评估比真实生产查询更容易解答,而真实查询会带着实际用户特有的词汇和隐式上下文。

多样性的模式坍塌。 关于连续合成生成的研究表明,跨迭代的词汇、句法和语义多样性会持续降低。通过在前代生成的文本上训练再生成新文本,每一代都会收窄输出分布。这样生成的评估集会逐渐只衡量能力分布的中心,而将边缘置之不顾。

边缘案例盲区。 罕见输入——不寻常的措辞、多步推理链、需要模型舒适分布之外知识组合的查询——恰恰是最容易被低估的。合成生成器从其训练分布中采样,而真实用户行为的长尾在那里并没有很好的表示。

模型排名问题。 合成基准无法复现人工撰写基准的性能层级。使用合成评估确认模型 A 在任务上优于模型 B 的团队,可能会发现这一关系在生产环境或人工策划的基准上被逆转。合成评估排名内部一致,但在外部是不可靠的。

对抗性注入

针对边缘案例盲区问题的解决方案,不是生成更多合成数据,而是刻意注入结构上与模型自然生成结果不同的样本。

有效的对抗性注入遵循以下流程:

  1. 自动化红队测试生成候选样本。 像 HarmBench 评估框架这样的工具提供了自动化攻击方法(迭代细化、渐进式升级、黑盒查询攻击),可以大规模挖掘对抗性样本。这些测试应该在部署前运行,而不仅仅是在初始开发阶段。

  2. 新颖性过滤。 已在模型训练分布中充分表示的对抗性样本不会暴露新的失败。通过与已知训练样本的嵌入距离过滤候选样本,只保留占据欠表示区域的样本。

  3. 领域专家验证。 自动化攻击工具生成的是技术上具有对抗性的提示,但可能不代表真实的威胁模型或真实的用户行为。让领域专家验证这些对抗性样本确实是合理的输入,而不仅仅是用户永远不会发送的巧妙边缘案例。

  4. 定期轮换。 在多个训练轮次中保留的对抗性样本最终会被学习到。模型不再失败,不是因为它学会了底层技能,而是因为它记住了特定样本。定期退役并替换对抗性样本。

目标是为对抗性案例建立一个独立的评估轨道,其通过率与正常路径轨道分开追踪。正常路径性能与对抗性性能的比值,比任何单个数字都更能说明鲁棒性。

人工标注分流

在设计良好的评估流水线中,人工标注并非全面覆盖,而是一种分流功能。让人类标注所有内容既昂贵又缓慢;不让人类标注任何内容则会产生上述反馈循环问题。正确的设计是使用自动评分作为初步筛选,并根据置信度阈值上报人工审核。

最重要的上报标准:

  • 分数接近通过/失败边界。 当自动评判者给某个输出打出接近阈值的分数时,正是评判者最不可靠的时候。人类对边界案例的判断比对明显通过或明显失败案例的判断更有价值。
  • 高风险领域覆盖。 在错误有真实后果的任务中——医疗、法律、金融——领域专家人类会捕获通用 LLM 评判者遗漏的失败,尤其是文体上看起来正确但实际上有细微事实错误和上下文失败的情况。
  • 欠表示的查询类型。 如果某种查询类型在你的训练评估集中出现频率较低,自动评判者对其的校准数据就较少。将这些标记为人工审核,以维持分布尾部的准确率。

人工审核者捕获而自动评估遗漏的关键:文体完美但事实错误的输出。LLM 评判者给听起来自信、结构良好的回答打高分;而具有领域专业知识的人工标注者会注意到那个听起来自信的断言实际上是错误的。

关于混合流水线的研究发现,混合高达 75% 的合成数据可以以标注成本的一小部分达到实际等效的质量——但前提是 25% 的人工部分被策略性地针对不确定性和边缘案例,而不是随机采样。

多样性差距分析

覆盖缺口如果没有被测量,就无法修复。评估集的多样性分析需要检查三个维度:

词汇多样性衡量评估集是否使用了多样化的词汇和措辞。有用的指标包括不同 n-gram 比率(唯一 n-gram 占总 n-gram 的比例)和压缩率——词汇多样性低的文本压缩效果好,这是重复性的廉价代理指标。

语义多样性衡量评估案例是否覆盖了不同的主题和概念,而不是从多个角度对相同场景进行改写。实践方法是嵌入所有评估样本并测量平均成对余弦距离。较小的平均距离表明语义聚类——你的评估集在从多个角度测试同一件事情的变体。

句法多样性衡量评估是否使用了多样化的句子结构和语法形式。将压缩率应用于词性标记序列效果良好。如果评估查询的句法结构高度统一,即使内容有所不同,你也在隐性地对一种受限输入类型进行测试。

除了这些内部指标之外,最重要的比较是外部比较:嵌入你的评估集,并将分布与实际生产流量的样本进行比较。嵌入空间中的空白区域——在生产中出现但在评估中缺失的查询类型——是上线后会产生意外的差距。

真正有效的方法

长期维持准确评估流水线的团队有几个共同实践。

将评估视为活系统。 静态评估集会随着模型能力提升和用户行为变化而过时。基准测试饱和的反复出现——顶级模型在 MMLU 上达到天花板性能,然后是其后继者,再然后是再后继者——证明固定评估集随着时间推移衡量的是越来越小的实际能力切片。更新对抗性样本,采样新的生产流量,并退役不再能区分好坏模型行为的案例。

永远不要依赖单一评判者。 不同的 LLM 评判模型表现出不同的偏差——位置偏差(倾向于优先出现的回答)、冗长偏差、自我偏好偏差。使用多个评判模型,并要求在标记某个案例为通过之前达成共识,可以显著降低任何单个评判者失败模式的误报率。

要求分离的评估轨道。 为正常路径案例、边缘案例、对抗性案例和生产采样案例维护不同的数据集。汇总通过率会掩盖失败集中的结构。一个整体得分 95% 但在 60% 的对抗性案例上失败的模型,与一个均匀得分 95% 的模型是不同的部署风险。

持续采样生产流量。 真实用户查询是分布偏移的唯一基准真相。将部分生产流量路由到评估流水线,由领域专家对失败进行分类,并将代表性的新失败类型添加到评估套件中。这是防止合成盲点积累成生产事故的主要机制。

披露并检查训练-测试重叠。 2024 年对三十家主要模型开发商的调查发现,只有九家报告了训练-测试重叠统计数据。对于内部微调,记录使用了哪些数据进行训练,并明确将其排除在评估之外。对于外部提供的基准测试,优先选择那些披露了构建过程和训练截止对齐情况的基准测试。

底层原则

合成评估数据的元问题是古德哈特定律在更高层面的应用。当一个指标成为目标时,它就不再是好的衡量标准。当你的评估成为模型被优化的对象时,通过评估就不再意味着你所认为的那样了。

解决方案不是放弃合成生成——在大规模场景下,你需要它。解决方案是将你的评估套件视为一个需要你对任何安全关键组件应用对抗性思维的系统:假设它会被博弈(无论是通过显式优化还是涌现行为),对其进行检测,并维护你没有针对其优化的外部基准真相。

生产失败不在乎你的模型内部得分有多高。真正保护你的评估基础设施,是那个被设计得难以通过的那个。

References:Let's stay in touch and Follow me for more thoughts and updates