预训练语料动辄万亿级别,里面重复内容远比想象中多。同一篇文章被不同网站转载、同一段代码出现在多个仓库、模板化生成的页面成批复制,这些重复如果原样进入训练,会带来三个实实在在的问题:算力浪费、记忆过强、评测失真。

先说算力。重复数据等于让模型反复学同一批内容,训练步数花出去了,信息增量却很小。公开研究里常见的处理是先去重再训练,去重后的语料规模可能直接缩水一截,训练成本随之下降,而模型效果并不变差,甚至因为数据多样性相对提升而变好。

再说记忆。重复出现越多的内容,模型越容易把它原样背下来。这在代码和个人信息场景里尤其敏感:高频出现的片段可能被逐字复现。去重把重复频次压下来,记忆风险也随之降低。当然去重不是万能,真正敏感的内容还要靠额外的过滤和脱敏,但去重是成本最低的第一道防线。

第三个问题最容易被忽视,就是评测污染。测试集里的题目如果以某种形式出现在训练语料里,评测分数就虚高了,模型看起来很强,上线一换真实问题就露馅。污染不一定是整段照抄,改写、节选、翻译都可能构成事实上的泄露。所以训练前要做污染检测:把评测集与训练语料做重叠比对,常见做法是按词组片段匹配,命中超过阈值的训练样本就剔除或隔离。

去重的技术路线分两层。精确去重靠哈希,同一段文本算出相同指纹,直接判重,简单可靠。近似去重更难,因为转载会改标题、删段落、换格式,常用的办法是把文本切成词组集合,用局部敏感哈希快速找相似对,再精细比对确认。近似去重的阈值需要权衡:太严会误删正常引用,太松又放过大量改写转载。

一套扎实的训练前处理,顺序通常是先清洗格式与低质内容,再做精确去重和近似去重,最后做污染检测并产出报告:去掉了多少重复、命中了哪些评测集、剩余语料的来源分布如何。这份报告既是质量凭证,也是后续排障的依据。数据工作做在训练前面,比训练完发现评测失真再返工便宜得多。更重要的是,这套流程应当每次训练都重跑一遍:语料来源在变、评测集在更新,去重与污染检测不是一次性工作,而是训练管线里固定的一环。