跳到主要内容

你的黄金标签是从你的模型中学到的:通过生产环境泄漏导致的评估集污染

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的评估套件通过了。质量仪表板显示为绿色。一周后,用户正在悄悄流失,没人能解释原因。评估集并没有通过犯错来撒谎——它的谎言在于它是一面镜子。你用来评分的标签,可以追溯到正是由你试图评估的那个模型家族生成或过滤的。通过这项评估并不是质量的证明。它证明了你的模型与其过去的输出是一致的。

这是成熟 LLM 流水线中一种隐蔽的失败模式:通过生产泄漏导致的评估集污染。这不同于著名的基准测试污染(即在 GSM8K 上训练的模型又在 GSM8K 上进行评分)——那个故事已经被讲烂了。更微妙的一种发生在下游。你的黄金标签来自用户反馈、来自先看到模型草稿的人类标注员、来自 RLHF 奖励追踪、来自 LLM-as-judge(模型即评委)的偏好数据。这些流水线中的每一个都将当前模型习语的指纹带回到了你的“基准真值”中。几个季度下来,测试集悄悄地记住了你模型的偏好,评估变成了一个自我表扬的循环。

令人痛苦的部分在于:从外部看,这个循环看起来很健康。覆盖率在增长,评审一致性在提高,分数呈上升趋势。你的仪表板追踪的每一个信号都证实了评估集正在改进。而仪表板看不见的是,改进的方向已经从“用户想要的”转向了“模型学会生成的”。

三种发生泄漏的生产流水线

污染很少通过一条粗管道进入。它通过三条细管道泄漏,每一条单独看起来都是合理的,但共同作用下却具有腐蚀性。

作为标签的用户反馈。 点赞/点踩、重新生成率、对回复的停留时间——产品团队理所当然地挖掘这些信号并将其提升为评估输入。隐藏的假设是“用户认可”意味着“客观正确”。其实不然。用户认可的是符合他们先入为主的观念、措辞方式以及模型训练他们去预期的长度惯例的输出。如果你的模型上个季度趋向于冗长的列表式回答,用户就会适应,他们的点赞现在就会奖励同样的模式。将这些作为标签推广,你的评估集现在就会将“冗长且列表多”编码为正确。一个更简洁、更好的模型得分反而会更低。你会将其解读为退化而不予发布。

看到草稿的人类标注员。 常见的标注 UI 会显示模型的候选回复,并要求标注员进行编辑、接受或排序。这感觉很高效——标注员锚定在草稿上,只纠正明显的错误。这种锚定效应就是污染媒介。关于 RLHF 标注陷阱的研究准确地记录了这一点:如果标注员依赖模型输出作为起点,他们的“黄金”标签就会继承模型特定的表述、结构选择和失败盲点。标签教会模型去生成标注员已经预期会看到的内容,而那正是模型自己的草稿。独立标注——标注员在看到任何模型输出之前先写出答案——既昂贵又缓慢,所以几乎没人能坚持这样做。漂移就是这样开始的。

RLHF 和评审模型工件。 在 RLHF 期间收集的偏好对、奖励模型分数以及 LLM-as-judge 评估都带有生成候选方案的模型的风格偏好。重新使用这些偏好追踪来构建你的评估或奖励塑造,评估集就会变成产生候选方案的策略的反映。奖励模型、策略和评估集之间的交叉污染尤为阴险,因为这三者共享同一个祖先,而这个祖先在普通工程团队会查看的任何地方都没有记录。后续几代模型将根据前一代编写的准则进行评分。

这里的任何一条流水线,单独来看都会引入适度的偏斜。结合在一起并运行一年,它们产生的评估集在统计上与“该模型家族生成的、经过表面正确性过滤的输出”别无二致。

为什么这个循环感觉像是进步

一旦你识破了自我表扬循环的机制,它就变得显而易见。在每一次迭代中:模型生成输出,这些输出中经过过滤的一部分变成标签,标签进入评估,评估被用来决定发布哪些下一代模型。因此,对下一个模型的选择压力就是“匹配上一个模型的过滤输出”。运行几次,偏好漂移就会向一个方向复合增长。

最近关于自我消耗执行循环的研究表明,当训练数据部分源自模型自身的输出时,在增量微调下,非创造性的偏好偏差增长得更快。评估案例是同样的动态,只是运行得更慢、更隐蔽,因为评估是用于发布决策,而不是权重更新。这个循环并不是一次性地训练模型变得更像它自己。它训练的是筛选过程去拒绝任何不像现任模型的东西。

大多数团队首先注意到的症状不是低质量,而是无声的停滞。评估分数可靠地上升,但现实世界的结果指标(任务完成率、用户留存率、投诉率)不再与评估指标的变化相关联。这种脱钩就是烟雾信号。当你的评估变成了一面镜子,提高评估分数需要新模型向旧模型的习语收敛;而提高结果指标则需要相反的做法。你无法同时做到这两点。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates