43

精确去重与 MinHash 近似去重

阅读约 3 分钟第 43/60 课

互联网上有大量重复内容。同一篇新闻可能被几十个网站转载,同一段话可能在不同的页面出现上百次。

如果不去重,模型会在这些重复内容上反复训练——浪费计算资源,还可能导致模型对这些内容过度拟合(死记硬背这些重复的段落,而不是学到通用的语言规律)。

精确去重

最直接的方法:比较每两个文档是否完全相同。如果相同,只保留一份。

但「完全相同」太严格了。两篇转载的文章可能只有标题或作者署名不同,内容完全一样——按「完全相同」的标准它们是不同的文档,但实际上是重复的。

更实用的精确去重是在段落或句子级别进行——把每个段落或句子计算一个哈希值(一串固定长度的数字指纹),哈希值相同的就是重复的。

为什么精确去重不够

精确去重只能发现完全一样的重复。但很多重复不是完全一样的——两篇文章可能有 90% 的内容相同,只是开头和结尾不同,或者其中一篇被轻微修改过(同义词替换、句子重排)。

要找到这种「近似重复」,需要更聪明的方法。

MinHash:近似去重

MinHash 是一种估计两个文档相似度的高效算法。它的思路是:

  1. 把每个文档拆成 n-gram(连续的 n 个字组成的片段)。比如「机器学习很有趣」的 3-gram 是:「机器学」「器学习」「学习很」「习很有」「很有趣」。
  2. 对每个文档的所有 n-gram 计算若干个哈希函数,每个哈希函数只保留最小值(min hash)。
  3. 两个文档的 min hash 签名越相似,它们的 n-gram 集合重叠越大,文档内容越接近。

MinHash 的巧妙之处在于:不需要逐对比较所有文档(那会是 n² 的计算量),而是通过 LSH(局部敏感哈希)技术快速找到相似的文档候选对,然后只对候选对做精细比较。

这让去重可以在几十亿文档的规模上可行地执行。

去重的影响

研究表明,去重后的数据训练出的模型质量显著优于未去重的数据。原因有两个:

  1. 模型的训练 token 预算是有限的(Sophia 是 200 亿)。去掉重复内容后,每个 token 都提供了新的信息——学习效率更高。
  2. 减少过度拟合——模型不会对重复出现的段落产生不当的偏好。

下一章节来看另一种数据过滤:怎么区分高质量文本和低质量文本。