一百万道题还不够:评测集要先防的是被"练过"
一条关于某基座模型公布超大规模实战题量的讨论里,有意思的不是那个数字,而是顺手提到的一句:要防止 AI 作弊。做评测的人看到这句会停下来——题量的规模从来不是评测可信的依据,能被练过的题才是。一个模型在公开榜单上的分数,可能来自三种完全不同的原因,其中两种和能力无关。把分数当成采购依据、当成验收条款之前,得先把它拆开看。
这篇只解决一件事:怎么让评测结果不被”见过”污染。过程评估本身站内已有一篇写过,这里不复述方法,只在需要证据形态时引用一句。

一、”分数高”有三条路径,只有一条你真正想买
第一条是能力。模型在没见过的同类任务上确实做得更好,这是所有人想花钱买的东西。
第二条是见过。题目本身、或者题目的改写变体、或者同模板换数字的姊妹题,出现在训练语料里。这时候分数衡量的是记忆与检索,不是推理。它有一个很不友好的性质:污染不会让模型在别的任务上变差,只会让它在这一批题上突然变好,而评测者看不出区别。
第三条是评分方式被钻空子。多选题随机作答也有分数地板;判分脚本解析宽松,把”最终答案是 42”和一段含糊表述判成同分;判分模型偏爱结构整齐的 Markdown、偏爱长答案、偏爱出现在前部的结论;要求”给出推理过程”时,冗长本身得分。这一条最容易被忽略,因为它是评测方的问题,不是被测方的问题。
三条路径混在一个数字里,而这个数字被写进博客标题和采购材料。所以工程上正确的做法不是去追问分数真假,而是把评测设计成”三条路径能分别被压住”的形态。
二、污染的四种形态,后三种才是难点
完全重复:题干原文进语料。这是最直觉的形态,也常被误认为”唯一形态”。
改写变体:同一道题换了说法、被翻译成另一种语言再翻回来、或者以”解题文章””学习笔记””题解”的形式存在。这类内容在公开仓库、技术论坛、网页镜像里非常多,而预训练爬虫不区分它们。
同模板换数字:题目结构、约束、解法完全同构,只有具体数值或实体名不同。训练里见过十道,评测里出现第十一道,字符串层面几乎不重合,能力层面等于送分。
同源题目:来自同一份讲义、同一个出题人、同一套课程的题族。危险点在于语料里出现的不只是题干,往往是”题干 + 完整解答”成对存在,模型学到的正是那条解题路径。
必须强调:污染不需要任何人故意抄题。公开仓库、论坛帖、网页镜像被爬进预训练就是自然结果,一个评测集只要长期公开,它被污染的进度不由任何一方的意愿决定。这也是”公开基准的分数会随时间失去意义”这个现象的成因——不是模型变差了,是题被消化了。
后三种为什么难检:字符串与哈希重合的信号在改写与换数字上直接消失;嵌入近邻在”同模板换数字”上反而会拉开距离,因为数值实体和专有名词把向量推远了;而”题干 + 解答”这类完整对,即使题干没进语料,解法路径也可能通过别的同结构教程进语料,这时候连”污染”的定义都要往能力与记忆之间挪一格。
三、四类检测手段:各自的漏检特性比命中率更该关心
| 手段 | 能查到什么 | 查不到什么 | 代价与前提 |
|---|---|---|---|
| 字符串与哈希重合(n-gram、MinHash、后缀数组) | 完全重复、轻度改写、成段搬运 | 换数字、跨语言表达、结构同构的题目 | 最便宜,可对全题库批跑;需要拿到可比对的语料样本;阈值要靠人工抽检核对,否则大量误报 |
| 嵌入近邻检索 | 语义等价改写、跨语言变体 | 同模板换数字(向量被实体名拉开)、短题干上的噪声匹配 | 需要嵌入模型与向量索引;相似度阈值必须用人评样本校准;嵌入模型换版结果不可比 |
| 时间窗切分(用训练语料截止之后新出现的题) | “有没有被练过”这一类的干净对照 | 老题的变体;语料实际构成未知时,这只能算推断而非证明 | 需要持续供给新题;语料截止时间这一信息本身未必可验证;新题要防被下一批语料吸收 |
| 私有保留集 | 不能证明没污染,但能证明没有泄漏渠道,这是唯一一个可控量 | 内部人员泄露、评分产物回流训练、评测请求被外部服务记录 | 要长期维护与保密纪律,成本是人不是算力 |
读这张表的正确方式是看”查不到什么”那一列。重合检测的结论只能用于排除明显搬运,不能给出”无污染”证书;嵌入检索的阈值是人校准的,不是模型给的;时间窗切分依赖一个外部声明,而声明不可审计。四类里只有第四类的成立条件完全在自己手上。
四、私有保留集是兜底,企业落地靠五条纪律
所有方案最后都要退到”有一批题只有我有”。这不是因为它最准,而是因为它是唯一能同时避开上面三条路径的设计:没公开就没人练过,没上传就没有镜像,不在公开仓库就没有爬虫路径。
落地形态是五条纪律,缺一条就漏:
- 不上传任何公开平台。包括不发群、不贴进公开问答、不把题目原文当作提示词提交给外部模型服务做”先试试效果”——一次提交就是一次公开。要做能力对照时,给题型分布和失败类别,不给原文。
- 定期换题,并留一批对照题只用于历史比较。对照题不参与换题、不参与对外引用、不参与任何训练数据构造,它存在的唯一目的是回答”这套集有没有腐坏”。
- 评分产物与训练数据物理分开。题目、标准答案、判分依据、失败样本这几类资产,不与其他用途数据共用存储与权限,评测结果不进任何微调或语料构造管道。这条在把模型评测与模型优化放在同一个团队的公司里最难守住。
- 权限与审计。题目库独立仓库,读权限按人发放,导出与下载留记录;判分脚本与题库分离,判分者看不到答案键的题面版本。
- 抽题即脱敏,且脱敏映射要一致。真实工单里带客户信息与内部字段名,直接抽题等于把内部数据放进一个可能外流的管道;而脱敏不稳定会让原名在模型输出里出现,那本身就是一条泄漏信道。
五、比”结果对不对”更难练过的,是能不能产出可复核的证据
结论可以背下来,一份要当场复算才能成立的产物背不出来。中间步骤可校验、工具调用序列可核对、结果可复算、交付物可验证——这四项的共同点是它们要求模型当场工作,而不是回忆答案。它与防污染的关系只有一句:过程性证据之所以更可信,是因为练过题干并不能替你把账算出来、把环境改对、把文件生成到指定位置。
把这条思路推到”AI 替人答题”的场景,评测设计上有四种可加的约束:限时,压缩在线检索与反复重试的空间;必须动手,产出物来自本地环境执行、真实设备操作或现场记录;需要外部状态确认,判定不只看回答文本,还看系统里是否真的发生了这次变更;留出人类基线对照,同一任务人做需要多久、失败率多少,用来判断给出的分数是不是在一个可比的难度标尺上。
这四种约束的副作用是评测变贵、变慢、变难自动化。取舍点在题型分布上:把关键决策用的那部分题做成动手题与状态确认题,其余保持可自动判定的形态,别让整套集都退化成人工评审。
六、评分器本身是攻击面,采购合同要换写法:洹拓视角
判分模型有三个稳定偏好:迎合(对讨好性表述和语气笃定的结论给高分,对被测模型与自己同源这种情况有偏袒倾向)、长度偏好(长答案占便宜)、格式奖励(Markdown 层级清晰、带小标题的答案被当成更高质量)。压制方式按优先级排:能规则判分的不交给模型判分;必须用模型判分的改成成对比较并做位置交换,两次都胜出才算胜出;判分模型与被测模型保持异源;判分提示固定并版本化;按比例抽人工复核,长期监控判分与人评的一致性有没有漂移。
再讲一句合同层面的判断。把”某公开基准达到某分数”写进验收条款没有用,原因前面都出现了:这道题可能被练过、口径跨厂商不可比、跑分环境不可复现、供应商可以只优化你写进合同的那一项。可替换的写法是三件具体的事:现场跑我们提供的私有集,题目现场发放且不外传;留存运行证据,输入、输出、判定依据和判分版本可复查;结果可复现,模板与采样参数固定后第三方能跑出同一区间。再补一条服务期条款:换题节奏与污染监控属于持续义务,不是一次性交付。
一份能直接用的治理清单:
- 关键决策所用的集里,私有题占比要有下限,公开题只用于横向参照。
- 每一批题目登记来源、是否公开过、公开渠道与换题计划。
- 重合检测与语义近邻检测纳入建题流程,作为排除明显搬运的第一道。
- 判分方式分级:规则判分优先,模型判分必须成对比较并做去偏,绝对分不进门禁。
- 判分模型换版视同题库变更,先在对照集上重跑对齐。
- 评测产物与训练数据权限隔离,评分结果不得回流任何优化管道。
- 分数报告必须同时给能力对照的可疑信号:突然在某一类题上跳升要标出来复盘。
- 对外只发布聚合结论与题型分布,不发布原文。
评测集的第一属性是保密与更新,覆盖度排第二。这不是保守,是因为覆盖度不够只会让分数偏保守,而污染与判分可钻的空子会让分数偏乐观——工程决策里,偏乐观的错误比偏保守的错误贵得多。