5.2 训练数据
核心问题: LLM 用什么数据训练?数据的质量和配比如何影响模型能力?
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
数据是 LLM 的"原材料"
Scaling Laws 告诉我们,数据量和模型大小同等重要。但数据不只是"越多越好"——数据的质量、来源和配比对模型能力有决定性影响。
GPT-3(175B 参数):300B tokens,性能强但数据不足
Chinchilla(70B 参数):1.4T tokens,更优配比,性能反超
Phi-1(1.3B 参数):7B tokens 高质量教科书数据,代码能力超越 10 倍大的模型关键洞察: 在数据量达到一定规模后,质量、覆盖范围和配比往往比继续堆低质量数据更重要。
数据来源与典型数据集
主要来源
| 来源 | 代表数据集 | 特点 |
|---|---|---|
| 网络文本 | Common Crawl | 量大(PB 级),质量参差不齐 |
| 书籍 | Books3、Gutenberg | 长文本,逻辑连贯,质量高 |
| 代码 | GitHub、Stack Overflow | 结构化,提升推理能力 |
| 学术论文 | arXiv、PubMed | 专业知识,推理密集 |
| 百科 | Wikipedia | 事实准确,覆盖广 |
| 对话 | Reddit、论坛 | 口语化,多样性高 |
流行预训练数据集
通用文本:
| 数据集 | 规模 | 来源 | 使用模型 |
|---|---|---|---|
| Common Crawl | ~PB 级 | 网络爬取 | 许多通用模型 |
| C4 | 750GB | Common Crawl 清洗版 | T5、LLaMA |
| The Pile | 825GB | 22 种来源混合 | GPT-NeoX、Pythia |
| RedPajama | 1.2T tokens | 开源复现 LLaMA 数据 | RedPajama 系列 |
| Dolma | 3T tokens | AI2 开源 | OLMo |
代码数据:
| 数据集 | 规模 | 来源 | 使用模型 |
|---|---|---|---|
| The Stack | 3TB | GitHub 开源代码 | StarCoder |
| CodeParrot | 50GB | GitHub Python | CodeParrot |
| ROOTS | 1.6TB | 多语言+代码 | BLOOM |
指令微调数据(SFT):
| 数据集 | 规模 | 特点 | 使用模型 |
|---|---|---|---|
| Alpaca | 52K 条 | GPT-3.5 生成,Self-Instruct | Alpaca |
| ShareGPT | ~90K 条 | 真实用户对话 | Vicuna |
| OpenHermes | 1M 条 | 高质量合成指令 | Hermes 系列 |
| FLAN | 1800+ 任务 | 任务多样,格式统一 | FLAN-T5 |
| UltraChat | 1.5M 条 | 多轮对话,GPT-4 生成 | Zephyr |
偏好数据(RLHF/DPO):
| 数据集 | 规模 | 特点 | 使用模型 |
|---|---|---|---|
| HH-RLHF | 169K 条 | Anthropic 人工标注偏好 | Claude 早期版本 |
| OpenAssistant | 161K 条 | 社区标注,多语言 | OpenAssistant |
| UltraFeedback | 64K 条 | GPT-4 打分,4 模型对比 | Zephyr、Mistral |
| Orca DPO | 12.9K 条 | 高质量偏好对 | Orca 系列 |
数据集的应用场景
不同阶段使用不同类型的数据集:
预训练阶段:
通用文本(Common Crawl、C4、The Pile)
+ 代码(The Stack)
+ 书籍(Books3)
→ 学习语言能力和世界知识
SFT 阶段:
指令数据(Alpaca、ShareGPT、FLAN)
→ 学会听从指令、对话格式
RLHF/DPO 阶段:
偏好数据(HH-RLHF、UltraFeedback)
→ 学会人类偏好,减少有害输出
任务微调阶段(第6章):
领域数据(医疗、法律、代码)
→ 适配特定任务代码数据的特殊价值
代码数据不只是让模型会写代码——它对推理能力有显著提升:
代码的特点:
- 逻辑严密(每一步都有因果关系)
- 结构清晰(函数、循环、条件)
- 可验证(运行结果对或错)
训练效果:
在代码数据上训练的模型,数学推理和逻辑推理能力也更强这解释了为什么 GPT-4、Claude 等模型都大量使用代码数据训练。
数据清洗
原始网络数据质量很差,需要多轮清洗。
主要清洗步骤
1. 去重
网络上大量内容是重复的(转载、镜像站、爬虫生成)。重复数据会让模型过拟合,降低泛化能力。
文档级去重:完全相同的文档
段落级去重:相同段落出现在不同文档中
近似去重:MinHash、SimHash 检测相似内容2. 质量过滤
过滤规则(示例):
- 文档长度 < 100 词 → 删除
- 非自然语言比例 > 30% → 删除(如乱码、HTML 标签)
- 困惑度(Perplexity)过高 → 删除(语言模型打分)
- 特定语言比例 → 保留目标语言3. 有害内容过滤
过滤类型:
- 色情内容
- 仇恨言论
- 个人隐私信息(姓名、电话、邮箱)
- 版权内容(部分)4. 语言识别
多语言模型需要控制各语言的比例,避免某种语言(通常是英语)过度主导。
数据配比
不同来源的数据按什么比例混合,对模型能力影响很大。
典型配比(以 LLaMA 为例)
Common Crawl(网络文本):67%
C4(清洗后的网络文本):15%
GitHub(代码):4.5%
Wikipedia:4.5%
Books:4.5%
ArXiv:2.5%
StackExchange:2%配比的影响
| 增加某类数据 | 对模型的影响 |
|---|---|
| 更多代码 | 推理能力↑,代码能力↑ |
| 更多书籍 | 长文本理解↑,写作质量↑ |
| 更多多语言 | 多语言能力↑,英文能力可能↓ |
| 更多对话 | 对话自然度↑,但可能引入噪声 |
没有通用最优配比——取决于目标任务。代码助手和通用对话助手的最优配比不同。
数据质量 vs 数据数量
Phi 系列的启示
微软 Phi-1(2023)用 7B tokens 的高质量"教科书级"数据,训练了一个 1.3B 参数的模型,代码能力超越了用 50B tokens 训练的 6B 参数模型。
Phi-1 的数据策略:
- 用 GPT-4 生成"教科书质量"的合成数据
- 覆盖编程概念、算法、数据结构
- 数据量只有 7B tokens(比 LLaMA 少 200 倍)
- 但每条数据都经过精心设计结论: 当数据量已经覆盖基本任务分布后,高质量数据的边际收益通常更高。
合成数据
当高质量真实数据不足时,可以用强模型生成合成数据:
真实数据 → 强模型(GPT-4)→ 合成数据 → 训练弱模型风险: 合成数据可能放大原始模型的偏见和错误(模型崩溃问题)。需要与真实数据混合使用。
数据与模型能力的对应关系
预训练数据强烈影响模型的"知识边界":
- 训练数据截止日期 → 知识截止日期
- 训练数据语言分布 → 多语言能力分布
- 训练数据领域分布 → 领域专业能力
微调数据主要影响模型的"行为模式":
- 指令格式 → 模型如何理解指令
- 回答风格 → 模型的输出风格
- 安全数据 → 模型的拒绝行为代码实验

图5.2a:LLM 预训练数据构成分析——网页、书籍、代码、学术论文等来源的比例,以及数据清洗流程。
代码文件: code/ch05_llm_basics/training_data_composition.py
运行方式: python code/ch05_llm_basics/training_data_composition.py
本节小结
- LLM 的训练数据来自网络文本、书籍、代码、学术论文等多种来源,代码数据对推理能力有特殊价值
- 数据清洗(去重、质量过滤、有害内容过滤)是保证数据质量的关键步骤
- 数据配比对模型能力有决定性影响,没有通用最优配比
- 质量、覆盖和配比同样关键:高质量小数据集在特定任务上可能超过更大的低质量数据集
下一节: 5.3 主流模型家族
