过滤、去重与合成数据
对应课程 Lecture 14:Data (filtering, deduplication, mixing, synthetic data)(Percy)
这一讲动手:把 Common Crawl 的原始泥沙俱下,变成能训练的数据。流程大致是:
text
原始 WARC → 解析提取正文 → 质量过滤 → 去重 → 敏感信息脱敏 → 混合配比 → 训练数据正文提取
网页是 HTML:导航栏、广告、Cookie 横幅混杂着正文。第一步提取“真正的文本”:
- resiliparse / trafilatura 等解析器:从 HTML 挑出正文节点;
- 提取失败的页面(乱码、纯脚本)直接丢弃;
- 经验:这一步的召回/精度权衡影响后面所有环节。
质量过滤:三层方法
第一层:启发式规则(Gopher 系)
一组手工规则,快速且可解释(Gopher 论文的经典规则):
- 文档长度:过短(< 50 词)或过长的丢弃;
- 符号占比:非字母字符超过 ~20% 丢弃(乱码特征);
- 行统计:短行(❤️ 词)占比超过 30% 丢弃(菜单/列表特征);
- 词表特征:含有太多“坏词”(淫秽、广告词)丢弃;
- 重复行检测:同一行大量重复是模板页(广告/导航)特征,段落级去重;
- 语言识别:保留目标语言(langdetect/fasttext 分类)。
第二层:困惑度过滤
用一个参考语言模型给文档打分,困惑度过高(说明“长得不像人话”)的丢弃。CCNet 的经典做法:用目标语言 Wikipedia 训一个小 LM 作裁判。
第三层:模型化过滤(model-based filtering)
用模型判断“什么像高质量数据”:
- 分类器过滤:标注一批“高质量”样本(如 Wikipedia 段落),训一个 fasttext/小型分类器,只保留与高质量分布相似的文档。FineWeb-Edu 用 1.3B 参数的 LLM 生成“教育价值”标注,训分类器从 15T token 里筛出 1.3T“教育性”数据——用更少数据得到更好的模型​;
- LLM 直接打分/改写:更贵但更强,用于退火阶段的小规模精选。
过滤的偏见放大
过滤器会把模型/标注者的偏见写进数据:比如“教育性”的定义、参考模型的领域偏好,都会系统性影响语料构成。审计过滤前后各类来源、语言、人群内容比例的变化,是数据工作的尽职调查。
去重:被低估的最大杠杆
网页内容被大量转载、聚合、模板化。去重(deduplication) 是性价比最高的数据处理手段。
精确去重
对文档做哈希(如 SHA-1),完全相同的文档只留一份。便宜,但抓不住“改动几个词”的近重复。
模糊去重:MinHash + LSH
MinHash 用集合的 min-hash 签名近似估计文档的 Jaccard 相似度:
- 把文档切成 shingle(如 5-gram 集合);
- 用
个哈希函数,每个集合的签名 = 每个哈希函数下所有 shingle 哈希的最小值; - 两个文档签名一致的比例 ≈ 它们的 Jaccard 相似度。
LSH(Locality-Sensitive Hashing) 把签名分段,让“相似文档大概率落进同一桶”,避免
去重为什么有效?
- 减少记忆与过拟合:重复的文档会被模型逐字背诵(隐私风险 + 版权风险 + 测试集污染风险);
- 提高训练效率:等量 token 里信息更多;
- 实证影响显著:GPT-3、Llama 系列的管线都把去重放在核心位置。注意:重复对缩放定律也有影响——重复数据多时,数据量
的幂律收益会提前饱和。
数据混合与合成数据
混合配比(mixing)
把过滤后的各来源按配比重组。两个实操要点:
- 用 token 数做预算,不同来源采样率不同(高质量过采样);
- 配比实验在小模型上做缩放外推,缩放定律的方法论完全适用。
合成数据:当数据不够时
合成数据(synthetic data) 是高质量数据枯竭后的主要出路:
- 重写/改写:让 LLM 把网页改写成教材风格(Phi 系列的做法,“textbook quality”);
- 生成练习题:从文档生成问答对、数学题,用于后训练(SFT 的指令数据大量是合成的);
- 蒸馏:强模型生成推理过程,教小模型;
- 自我改进回路:模型生成的数据训模型,配合验证(RLVR,见RLVR:可验证奖励的强化学习)形成飞轮。
风险:合成数据的分布窄化与“模型自我陶醉”(model collapse)——合成必须配合质量过滤与真实数据混合,不能闭环比产量。
工程实践要点
- WARC 解析要处理异常(编码、截断),失败要留痕;
- 每个过滤阶段记录留存率与样本对照表,便于调试与审计;
- MinHash 的参数(shingle 长度、签名长度、LSH 桶数)在召回与算力间权衡;
- 最终配比写进配置文件,可复现——数据管线是代码,要像代码一样管理。
小结
- 数据管线 = 提取 → 启发式 → 困惑度 → 模型化过滤 → 去重 → 配比;每一层都有明确的责任。
- 去重(MinHash+LSH)是性价比最高的操作,直接影响记忆、污染与效率。
- 模型化过滤(FineWeb-Edu)代表当前最佳实践:用模型定义“高质量”,再用审计防止偏见。
- 合成数据是突破数据天花板的路径,但必须与验证和真实数据混合使用。