公开基准的污染问题
公开基准的题目来自互联网:论坛、问答社区、教科书习题、竞赛真题。训练语料的来源也是互联网。这两批数据大面积重叠,于是出现数据污染——模型在训练时见过测试题,甚至见过题目和答案的配对。
污染的形态比”原题照搬”更难查。常见的是改写版本:题目被翻译、被同义转述、被换个数值重新表述,答案逻辑完全一致。用词面匹配去查重基本查不出来。另一种是模板记忆:基准里的题目共享某种格式,模型学会了格式和答题套路,即使没见过原题也能答对,分数里混进的就不是能力而是套路。
可行的检测手段有几类:n-gram 重叠率(查原题泄漏,查不出改写)、让模型续写题目开头(能背出后半段说明见过)、以及分布外变体测试——把原题改数字、改实体、颠倒选项顺序,如果分数断崖下跌,说明原分数里有相当部分来自记忆而非推理。
结论是,公开基准分数应当被当作上界,而不是能力的无偏估计。同一模型在不同基准上的相对排序比绝对分数可靠一些,但污染程度不同,排序也未必稳。
分数和真实表现为什么对不上
基准测的是”题目答对率”,业务要的是”任务完成度”,两者之间隔了好几层。
第一层是输出形态。基准通常是选择题或短答案,判分只看最终答案对不对。真实任务要的是符合格式的长输出——一份能被下游程序解析的 JSON、一段符合公司文风的表述、一次按步骤分解的操作。基准从不考察这些。
第二层是容错特性。基准是零容错的:答案错了就是错了。真实任务很多是高容错的:摘要漏了一句不影响使用,但把日期写错就整份作废。用基准分数预测真实表现,等于假设两种容错模型一致。
第三层是分布。基准为了可比较,题目分布是刻意平衡的。真实业务的输入分布高度偏斜:80% 的流量集中在两三种最常见、最模板化的输入上,剩下 20% 是各种长尾。基准的均匀采样会把长尾能力放大,把主流能力稀释。
第四层是交互。真实场景常常是多轮的、带工具调用的、有上下文约束的。单轮静态基准完全覆盖不到。
LLM-as-judge 的三类已知偏差
用模型打分是降低成本的必然选择,但打分模型有自己的系统性偏差,不校正的话结论会歪得很有规律。
位置偏差(position bias):做成对比较时,模型倾向于选出现在前面的那个答案,与内容质量无关。校正方法是把 A/B 顺序互换各评一次,只有两次结论一致才判定胜负,不一致记为平局。这个”双跑”是必须的,不是可选项。
长度偏好(verbosity bias):更长的回答更容易得高分,即使只是把同样的内容说得更啰嗦。缓解手段是在评分提示里显式说明”长度不构成加分项”,或者比较时把长度差异作为协变量统计控制掉。更实用的办法是限制候选输出长度,让对比双方在长度上可比。
自我偏好(self-enhancement bias):打分模型倾向于给自家架构生成的输出更高分。模型间互评时这个偏差会系统性抬高同源模型的排名。做法是用与被测模型不同源的模型做裁判,或者多模型交叉评分取平均。
除了这三类,还有锚定效应(给了参考样例就往参考上靠)、对格式瑕疵过度敏感(markdown 用错就扣分,忽略内容正确性)等。缓解的整体思路是:让裁判只做一件事、输出结构化分数、评分标准写成可勾选的清单而不是笼统的”请评估质量”。
成对比较 vs 绝对打分
| 绝对打分 | 成对比较 | |
|---|---|---|
| 输出 | 每条一个分数(1-5 或 0-100) | A 优于 B / 平局 |
| 跨批次可比 | 理论上可比,实际上会漂移 | 不可直接跨批次比 |
| 判分一致性 | 低,评委松紧尺度变化大 | 高,判断”哪个更好”比”有多好”容易 |
| 聚合 | 直接取均值 | 需要 Elo / Bradley-Terry 拟合 |
| 适合场景 | 有明确 rubric 的质量评估 | 两个版本的整体优劣 |
绝对打分的问题是尺度不稳。同一个评委上午严下午松,不同评委之间差得更多。成对比较把任务简化成二选一,人类和模型的判断一致性都明显更高,所以主流偏好评测(比如对话场景的两两对比)多用成对比较。
成对比较的代价是样本量:要排出 N 个模型的名次,需要的比较次数按 N² 增长,而且无法直接回答”这个版本比上个版本好多少”。折中做法是成对比较定序,再用少量绝对打分标定绝对水平。
建私有评测集的最小流程
一、采集真实输入。从线上日志里随机抽样,别人工构造。人工构造的样本会不自觉地避开脏输入——错别字、半截话、混合语言、超长文本——而恰恰是这些决定了线上的实际体验。
二、分层而非均匀。按真实流量比例分配样本,再额外加一层专门的长尾样本(占比可以高于线上比例,用于放大信号)。每层样本量不少于 20 条,否则层内的统计量没有意义。
三、写可判定的标准。每条样本配一个判定函数,而不是配一段期望输出。格式类用解析校验(能否 parse、字段是否齐全、枚举是否越界),事实类用关键词或引用检查,开放类才交给模型打分。能自动判定的比例越高,评测越可复现。
四、人工标注一次,之后冻结。初始标注要有两个标注员独立做,一致性低于某个阈值(比如 80%)说明标准写得有歧义,回去改标准。
五、留一份不参与迭代的 held-out 集。调提示词、调检索、调模型都会过拟合到评测集上,一份从没看过的集子用来在收尾时做一次确认。
样本量不足导致的误判
这是最常见的错误来源。两个版本在 30 条样本上得分 73% 和 80%,看起来后者更好,但算一下置信区间就知道根本分不开。
对于准确率这类二值指标,标准差约为 √(p(1-p)/n)。n=30、p=0.75 时,标准误约为 0.079,95% 置信区间半宽约 15 个百分点。7 个百分点的差距完全落在噪声里。
要检出 d 个百分点的差异,量级上需要的样本数满足 n ∝ 1/d²。想可靠检出 5 个百分点的差异,样本量要比检出 10 个百分点时多四倍。这条平方关系意味着”再补十条样本看看”通常无济于事。
成对比较稍好一些,因为方差更小,但仍然受平方律约束。实际操作:先做功效分析定样本量,再开始跑;跑完报告置信区间而不只是点估计;差异不显著时如实写”未观察到显著差异”,不要写”两者相当”——后者隐含了”样本量足够”这个不成立的前提。
还有一个陷阱是多次比较。同时看五个维度,每个维度做一次显著性检验,整体假阳性率远高于单次检验的 5%。维度多的时候要么做多重比较校正,要么预先指定唯一的主指标,其余维度只看趋势不作判定。
评论(2)
有个地方没懂:为什么不用 xxx?直觉上那个更省事。
感觉作者是真在一线写过,不是拼资料。
请 登录 后参与评论。