语言模型训练完之后需要评测——让模型做一套「考试题」来衡量它的能力。但如果考试题出现在了训练数据里,模型可能只是「背过」了答案,而不是真正理解了问题。
数据污染
假设你用来评测模型的是一套叫 MMLU 的选择题。MMLU 的题目在网上公开发表过——这意味着 Common Crawl 里很可能爬到了这些题目。如果你没有从训练数据中去掉它们,模型可能在训练时就见过了这些题目和答案。
评测时模型得了高分——但这个分数反映的是模型的「记忆力」还是「能力」?如果是前者,分数就是虚假的。
这就是数据污染(data contamination)问题。
基准去污染
解决方法是在训练数据中检测并移除评测集的内容。
常用的做法是 n-gram 匹配:把评测集中每个题目/文本拆成 n-gram(比如连续 13 个 token),然后在训练数据中搜索这些 n-gram。如果训练数据中某段文本和评测题目共享了太多 n-gram,就把这段训练数据删掉。
评测题目:"下列哪个不是哺乳动物?A.鲸鱼 B.蝙蝠 C.鲨鱼 D.海豚"
训练数据中发现:"下列哪个不是哺乳动物?A.鲸鱼 B.蝙蝠 C.鲨鱼 D.海豚。答案是 C。"
→ 高度重叠 → 从训练数据中删除
这不只是诚实——是科学方法
数据去污染不仅仅是为了让评测分数更「公平」。更深层的原因是:如果你不能确定模型的分数反映的是真实能力还是记忆,你就无法做出正确的训练决策。
比如你修改了模型架构,发现分数提高了 2%。这是架构改进带来的真实提升,还是新架构恰好更容易记住训练数据中的评测题目?如果没有做去污染,你无法区分。
Sophia 的训练流程包括了对所有评测集的去污染——确保评测结果反映的是真实能力。
下一章节来看数据处理的最后一个决策:不同类型的数据应该各占多少比例。