跳转至

Deep Research: [35] LLM 数据去重:为什么重复会伤模型(以及怎么测)

  • Source: https://arxiv.org/abs/2107.06499
  • Note: ../notes/ref-035-llm-dedup.md
  • Snapshot: ../sources/md/arxiv-org-abs-2107-06499-9237d7c1fc50.md

TL;DR

训练数据中的重复内容(不仅是完全重复,还包括模板化和近似重复)会导致模型倾向于死记硬背而非泛化,并造成评测分数虚高(Leakage)。通过去重,可以在减少训练数据量、节省算力的同时,显著降低模型输出照搬训练集内容的比例(降低 10 倍),且不损失甚至提升模型性能。

核心观点

  1. 重复无处不在:即使是经过清洗的知名数据集(如 C4, Wiki-40B),仍包含大量重复内容(C4 中约 3% 为近似重复),主要是模板文本(如导航栏、版权声明)和被多个来源转载的新闻。
  2. 记忆不仅是过拟合:模型倾向于记住出现多次的序列。在未提示(Unprompted)生成中,超过 1% 的 Token 是直接从训练集中由 50 个以上 Token 组成的片段照搬的。
  3. 评测集污染严重:标准数据集的训练集与验证集存在显著重叠(例如 C4 验证集中 4.6% 的数据在训练集中出现过),导致评测指标无法反映真实泛化能力。
  4. 去重提升效率与质量:去重后的数据集更小,训练收敛更快,且在验证集上的困惑度(Perplexity)通常持平或更优。
  5. 两种关键去重维度
    • 近似文档匹配(Near-Duplicate):处理整篇文档相似但有细微差别(如填充字段不同)的情况,使用 MinHash。
    • 精确子串匹配(Exact Substring):处理不同文档中包含的相同长句或段落,使用后缀数组(Suffix Arrays)。
  6. 隐私隐形防线:去重能显著减少模型意外输出训练数据中敏感信息(如由模板携带的个人信息)的概率。
  7. 去重不伤模型:实验证明,经过严格去重训练出的模型,其语言建模能力并未下降,反而因噪声减少而更稳健。

可落地做法

1. 构建去重流水线(数据工程侧)

建议在数据预处理阶段(Tokenization 之前或之后)加入以下两步: * 第一步:文档级近似去重 (MinHash) * 目标:移除内容高度相似的文档(如不同网页转载的同一篇文章)。 * 方法:计算文档的 MinHash 签名,估算 Jaccard 相似度。 * 参数参考:使用 5-grams,签名长度 9000,Jaccard 阈值设为 0.8(在此阈值上的文档对通常可视为重复)。 * 第二步:子串级精确去重 (Suffix Array) * 目标:移除跨文档的重复长段落(如法律免责声明、广告模板)。 * 方法:构建整个语料库的后缀数组(Suffix Array),线性扫描找出重复出现且长度超过阈值(如 50 个 Token)的子串,并将其从其中一个位置移除。

2. 严格的评测集去污(评测侧)

  • 原则:验证集/测试集的数据必须是对于模型不仅是未见过的,而且是不相似的。
  • 操作:在划分 Train/Test 之前进行全量去重,或者在划分后,用 Test 集去反查 Train 集,移除 Train 集中与 Test 集相似的所有样本(注意:是删 Train 集里的泄漏数据,保留 Test 集完整性,或者反之,取决于评测目的,但在预训练语料构建中通常是确保 Test 不被 Train 覆盖)。

检查清单:LLM 数据集纯净度审计

此清单可用于《AI 辅助软件产品》第 8 章数据验收环节:

  • 完全重复检查:是否已通过 Hash(如 SHA-256)移除了完全一致的文件?
  • 近似重复检查:是否使用了 MinHash 或类似算法检测并移除了编辑距离较小的文档?
  • 模板内容清洗:是否针对网页特有的 Header、Footer、导航栏、广告语进行了针对性清洗(或通过子串去重覆盖)?
  • 评测集泄漏排查:验证集中是否有数据在训练集中存在精确匹配或高度近似匹配?
  • 高频短语统计:统计 Top-N 高频出现的 50-token 长句,人工抽检是否为无意义的重复机器生成文本(如 SEO 垃圾文本)。
  • 记忆率基准测试:取部分训练数据作为 Prompt,测试模型续写是否会原文照搬(Verbatim Copying)。

常见坑与对策

  • 坑 1:只做 Exact Match 去重
    • 后果:由于网页数据常包含动态插入的时间戳、用户名或广告,仅做 MD5/SHA 校验会漏掉绝大多数重复网页。
    • 对策:必须上 MinHash 或 SimHash。
  • 坑 2:去重导致数据量骤减产生的恐慌
    • 现象:去重可能导致数据量减少 10% 甚至更多。
    • 对策:接受这个结果。论文表明,即使数据量减少,训练出的模型效果往往更好且更省钱。不要为了凑 Token 数而保留垃圾数据。
  • 坑 3:忽略了引用与抄袭的区别
    • 现象:过度去重可能删掉所有名言警句的重复引用。
    • 对策:论文中设定的 50 个 Token 阈值是一个较好的平衡点,通常能保留短语引用,去除长段复制。

可用于丰富《AI 辅助软件产品》的写作点

  • 第 1 章(需求与验证 - 数据作为产品资产)
    • 引用观点:在做可行性验证时,必须强调数据质量优于数量。可以用本论文数据佐证:一份干净的小数据集比一份脏的大数据集更能训练出好模型,且能避免虚假的高准确率(由泄漏导致)。
  • 第 8 章(工程 - 数据流水线)
    • 技术细节:在讲解 RAG 或微调数据准备时,详细介绍 MinHash + Suffix Array 的组合拳。这是提升私有知识库质量的隐形杀手锏,特别是当企业内部文档存在大量版本迭代副本时(如 v1.doc, v1_final.doc)。
  • 第 18 章(评测)
    • 警示案例:专门起一节讲数据泄漏(Data Leakage)的隐蔽性。解释为什么你的 RAG 或微调模型在内测时表现神勇,上线后遇到新问题就崩了——很可能是因为内测题库在知识库里近似出现过,模型只是在背诵答案。