预训练数据污染如何检查?
简化版
预训练污染检查是判断训练语料是否包含评测题、答案或其轻微变体,避免把记忆当能力。应在 Tokenizer 与规范化后做精确哈希、n-gram/MinHash 近似匹配和长公共片段检测,并检查时间戳、题目与答案分别命中、代码测试泄漏及多语言改写;命中样本要隔离并在干净集上复评。
详细版
检测前先冻结 benchmark 版本,并为每题构造问题、答案、解释、代码等多个视图。精确匹配精度高但漏改写,字符/Token n-gram 能抓局部复制,MinHash/LSH 用于海量候选召回,语义向量只能作为线索,因为同主题不等于泄漏。匹配结果要人工抽样,按直接问答、仅问题、仅答案和模板重合分级。
污染不能只在最终混合语料上查:清洗、去重和采样前后都应保留 lineage,才能定位来源并删除整个副本簇。评测报告需披露命中比例、阈值、时间切分、剔除后的分数,以及“已见题/未见题”差距;无法清除时应使用新建私有集或动态题目。
Benchmark多视图 -> 指纹/片段索引 -> 与训练语料候选匹配 -> 人工分级
-> 删除污染簇 -> 干净集复评
完整版教学
一、什么叫污染
如果评测题及其标准答案出现在训练语料中,模型高分可能来自记忆而非泛化。污染不只包括完整网页复制,也包括题目翻译、答案解析、GitHub 测试、排行榜讨论和截图 OCR 文本。越公开、越流行的 benchmark,进入网页语料的概率越高。
同领域内容不等于污染。训练集出现“什么是快速排序”的教材,而评测要求写快速排序,是知识学习;若出现相同题面、相同样例和参考代码,则更接近直接泄漏。因此需要重合证据和分级标准,不能看到语义相似就全删。
二、先建立评测集多视图
每道题应拆出原题、选项、标准答案、解释、输入输出样例、代码测试和元数据。只用完整题面搜索,会漏掉只转载答案的页面;只搜短答案又容易产生常见短语误报。对选择题可构造去选项顺序版本,对代码题加入独特测试常量。
规范化应与训练管线接近,包括 Unicode、空白、标点和 Tokenizer,但保留一份原文用于审计。Benchmark 版本和发布日期也要冻结;评测题在训练截止日期之后发布,是强力的时间防线,前提是训练语料时间元数据可信。
三、精确与近似匹配如何组合
完整哈希适合完全副本;连续 n-gram 命中可以发现局部复制;MinHash/LSH 先从十亿级文档召回相似候选,再计算真实 Jaccard 或编辑距离。语义 embedding 可发现翻译与改写,但误报较多,应由人工或更严格规则复核。
exact hash -> 高精度完整命中
13-gram overlap -> 局部逐字复制
MinHash/LSH -> 近似转载候选
semantic retrieval -> 翻译/改写线索,不直接定罪
记忆钩子:字面匹配证据强但召回低,语义匹配召回高但证据弱;检测管线应从便宜高精度走向昂贵人工复核。
四、怎样量化片段重合
可计算评测题中有多少 n-gram 出现在同一训练文档,或最长公共 Token 串长度。假设一道题有 80 个不同 13-gram,其中 68 个在某网页连续命中,覆盖率 85%,且标准答案也出现,这是强污染证据。若只命中 2 个常见短语,则不应判定。
| 命中类型 | 风险等级 | 处理建议 |
|---|---|---|
| 题目+答案完整出现 | 高 | 删除文档及近似簇 |
| 题目出现、无答案 | 中高 | 隔离并做分数敏感性分析 |
| 仅独特答案/代码 | 中高 | 检查上下文和来源 |
| 同主题但无字面重合 | 低 | 通常保留 |
| 常见模板/短语 | 很低 | 不作为污染证据 |
阈值应按题长调整:短题即使完全一致也可能是自然重复,需要结合独特实体、样例和答案判断。
五、代码与数学评测的特殊问题
代码题可能换函数名或变量名,但隐藏测试、题目常量和算法结构不变。可以做 AST 规范化、标识符重命名后哈希,也要搜索题库 README、题解和测试文件。仅删除题面而保留标准解,仍可能让模型记住答案模式。
数学题的数字可被替换,模板结构却相同。参数化变体有助于测试是否真正掌握方法,但如果生成模板本身泄漏,模型仍可能获益。可使用训练截止日期之后人工创建的题目,并验证不同数值和表述下的稳健性。
六、数据谱系如何支持删除
发现污染文档后,不应只删除一个最终样本,因为其镜像和上游副本可能仍在其他 shard。数据系统需从训练样本追溯到原 URL、抓取快照、清洗版本、去重簇和混合版本。按簇删除后重新生成 manifest,并确认实际训练是否已经消费过。
若模型已训练完成,删除数据不能“撤销记忆”。这时应标记受影响评测为不可信,使用干净替代集重新评估;必要时重新训练或进行遗忘处理,但后者效果有限。及时在训练前扫描成本最低。
七、报告怎样避免自欺
报告至少给出检测算法、阈值、扫描数据范围、直接命中率、人工确认精度和剔除后分数。把样本分成 confirmed contaminated、suspected 和 clean,分别计算模型表现。污染样本得分显著更高,是记忆影响的辅助证据,但低差距不能证明无污染。
例如 1000 题中确认 40 题污染,原始准确率 70%;污染题 95%,其余 69%,剔除后报告应以 69% 为主,并披露 4% 污染率。还可建立 canary:在受控训练中插入唯一字符串,验证检测和记忆分析工具是否能发现。
八、常见误区与追问
- 误区:只要训练截止日期早于评测发布日期就绝对干净。 题目可能更早私下流传,语料时间戳也可能不可靠。
- 误区:语义相似就是污染。 同领域知识会自然相似,污染需要更具体的重合证据。
- 误区:删掉最终匹配文档就完成治理。 镜像和同簇副本必须沿 lineage 一并处理。
- 追问:只出现题目没答案算污染吗? 仍可能让模型熟悉表述,应分级并做敏感性分析,但风险低于题答同现。
- 追问:模型已训练完怎么办? 停用受污染指标,换时间隔离或私有集复评,并披露限制。
- 追问:如何检查多语言改写? 用跨语言检索召回,再用实体、数字、结构和人工核验确认。
九、加强记忆
污染检查可记成“拆视图、强指纹、宽召回、人工定级、干净复评”。把题目、答案、代码和样例分别建立指纹,用精确与 n-gram 给强证据,用 MinHash/语义检索补召回,沿数据谱系删除整个副本簇,最后报告剔除后的真实分数。核心不是证明“绝对无污染”,而是让风险可检测、可披露、可替代。