预训练(Pre-training)的数据来源有哪些?如何构建高质量预训练语料
1️⃣ 考察意图
面试官想看你能否从"数据来源 → 质量控制 → 配比设计"整条链路理解预训练数据工程。刁钻点在于:很多人只列举数据来源(Common Crawl、Wikipedia),但说不出质量控制的具体方法(去重、过滤、脱敏)和配比设计的工程逻辑。答好了能展示你对"数据决定模型上限"这一核心原则的深刻理解。
2️⃣ 标准答
预训练数据工程是"收集 → 清洗 → 去重 → 配比"的四步流水线,每步都直接影响模型最终能力。
1. 数据来源(按规模排序)
| 来源 | 占比(典型) | 内容 | 质量 |
|---|---|---|---|
| Common Crawl | 60-70% | 网页爬虫数据 | 低-中,需大量清洗 |
| GitHub/代码 | 10-20% | 开源代码 | 高,结构化 |
| Books | 5-10% | 书籍全文 | 高,长文本 |
| Wikipedia | 3-5% | 百科条目 | 高,事实准确 |
| ArXiv/论文 | 2-5% | 学术论文 | 高,专业知识 |
| 社交媒体 | 2-5% | Reddit/Twitter | 低-中,口语化 |
| 多语言 | 5-15% | 非英文网页 | 中,需语言检测 |
2. 数据清洗流水线
- 格式提取:从 HTML 中提取正文(用 trafilatura/trafilatura),移除导航栏、广告、页脚。PDF 用 PyMuPDF/MinerU 做版面分析
- 语言过滤:用 fastText 语言检测器,保留目标语言(如中文+英文),过滤混合语言噪声
- 质量过滤:困惑度过滤:用小模型(如 KenLM)给文本打分,过滤 perplexity 过高(乱码)或过低(重复模板)的内容
- 规则过滤:移除长度<50字、特殊字符占比>30%、重复行占比>50%的文档
- 安全过滤:用分类器(如 Perspective API)检测毒性内容,过滤 score>0.8 的文档 PII 脱敏:用正则+NER 检测个人信息(邮箱、电话、身份证号),替换为 [EMAIL]、[PHONE] 占位符版权过滤:移除明确有版权限制的内容(如纽约时报文章),用 URL 黑名单或内容指纹匹配
3. 数据配比设计
配比直接影响模型能力分布。典型配比(以 LLaMA-3 为参考):
- 网页 50% → 通用语言能力
- 代码 20% → 推理、结构化输出
- 书籍 10% → 长文本理解
- 百科 5% → 事实知识
- 学术 5% → 专业领域
- 对话 5% → 对话能力
- 多语言 5% → 跨语言
配比调整的工程逻辑:
- 代码比例↑ → 数学和推理能力提升(实验:代码从 10% 提到 30%,GSM8K +5分)
- 多语言比例↑ → 英文能力略降(资源争夺效应)
- 网页比例↑ → 通用对话能力提升,但事实准确性可能下降(网页噪声多)
4. DoReMi 自动配比优化
- 传统方法靠人工调参,DoReMi 用小型代理模型(如 280M)评估各数据源的价值,自动优化配比
- 流程:(1) 用初始配比训练代理模型;(2) 用代理模型的 loss 估计各数据源的价值;(3) 调整配比,高价值数据源增加权重;(4) 用新配比训练目标模型
- 效果:DoReMi 在 GLaM 模型上比人工配比提升 6.6% 的下游任务平均分
3️⃣ 答题模板(30 秒电梯版)
"预训练数据工程是四步流水线:收集(Common Crawl 60%+代码 15%+书籍百科 15%)、清洗(格式提取→语言过滤→困惑度过滤→PII脱敏→版权过滤)、去重(MinHash/LSH 去重率通常 30-50%)、配比(代码↑推理好、百科↑事实准)。配比设计靠人工经验或 DoReMi 自动优化。核心原则:数据质量决定模型上限,10T高质量数据 > 100T 低质量数据。"
4️⃣ 高频追问 & 应对
追问 1:Common Crawl 数据质量这么低,为什么还占 60%+?
因为规模。Common Crawl 有超过 250B 网页、PB 级数据,是唯一能提供"互联网规模"训练数据的来源。质量虽低但经过清洗后仍有大量有用信息(博客、新闻、论坛讨论)。替代方案:用高质量数据(书籍、论文)但数据量不够——所有书籍加起来约 100B tokens,论文约 50B tokens,而 LLaMA-3 训练用了 15T tokens。没有 Common Crawl 的规模,模型无法达到"涌现能力"的阈值。
追问 2:困惑度过滤会不会把高质量但"难"的文本过滤掉?
会。困惑度过滤的假设是"好文本的困惑度适中"——太高是乱码,太低是重复模板。但学术论文、专业内容可能困惑度偏高(因为用词特殊),被误过滤。解法:(1) 分领域过滤——对不同领域用不同的困惑度阈值;(2) 分层过滤——先用宽松阈值过滤明显垃圾,再用严格阈值精细过滤;(3) 白名单保护——对已知高质量来源(如 ArXiv、Wikipedia)跳过困惑度过滤。
追问 3:数据配比在训练过程中是固定的吗?还是动态调整?
可以动态调整,叫"数据课程"(Data Curriculum)。策略:(1) 前期多用通用网页数据训练语言能力,后期增加代码和学术数据比例提升推理能力;(2) 用困惑度作为难度指标,先训练低困惑度(简单)数据,再训练高困惑度(复杂)数据;(3) DoReMi 的动态版——每隔 N 步用代理模型评估各数据源价值,动态调整采样概率。效果:在代码和数学任务上比固定配比提升 5-10%。但实现复杂,大部分模型仍用固定配比。
5️⃣ 避坑 · 常见错误答法
- ❌ "数据越多越好,把互联网上所有数据都喂给模型" → ✅ "数据质量比数量重要。CC 数据虽多但 30-50% 是重复或低质量的,需要大量清洗和去重。研究表明用 1T 高质量数据训练效果优于 10T 低质量数据。"
- ❌ "Common Crawl 直接用就行" → ✅ "CC 数据包含大量噪声:广告、导航栏、乱码、重复内容、有害内容。必须经过格式提取、语言过滤、困惑度过滤、PII 脱敏、去重等多步清洗才能使用。"
- ❌ "配比随便设,模型自己会学" → ✅ "配比直接影响模型能力分布。代码太少→推理差,百科太少→事实错误多。需要根据目标任务(通用 vs 专业)精心设计配比,或用 DoReMi 自动优化。"
6️⃣ 简历呼应
- 如果你有预训练项目:从"数据工程整条链路"切入,描述你构建的预训练数据流水线(收集→清洗→去重→配比),给出数据规模(如 2T tokens)和质量指标(去重率、过滤率)
- 如果你只做过微调:用"微调数据质量控制的思路可以迁移到预训练"切入,说明你理解数据清洗和质量评估的原则
- 如果你是校招:用 Common Crawl 的一个小子集(100GB)实现清洗流水线,对比清洗前后的数据质量,写博客分析
- "LLaMA: Open and Efficient Foundation Language Models" (Touvron et al., 2023)
- "DoReMi: Optimizing Data Mixtures by Pretraining Language Models" (Xie et al., 2023)
- "The RefinedWeb Dataset for Falcon LLM" (Penedo et al., 2023)