⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

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 级网络爬取许多通用模型
C4750GBCommon Crawl 清洗版T5、LLaMA
The Pile825GB22 种来源混合GPT-NeoX、Pythia
RedPajama1.2T tokens开源复现 LLaMA 数据RedPajama 系列
Dolma3T tokensAI2 开源OLMo

代码数据:

数据集规模来源使用模型
The Stack3TBGitHub 开源代码StarCoder
CodeParrot50GBGitHub PythonCodeParrot
ROOTS1.6TB多语言+代码BLOOM

指令微调数据(SFT):

数据集规模特点使用模型
Alpaca52K 条GPT-3.5 生成,Self-InstructAlpaca
ShareGPT~90K 条真实用户对话Vicuna
OpenHermes1M 条高质量合成指令Hermes 系列
FLAN1800+ 任务任务多样,格式统一FLAN-T5
UltraChat1.5M 条多轮对话,GPT-4 生成Zephyr

偏好数据(RLHF/DPO):

数据集规模特点使用模型
HH-RLHF169K 条Anthropic 人工标注偏好Claude 早期版本
OpenAssistant161K 条社区标注,多语言OpenAssistant
UltraFeedback64K 条GPT-4 打分,4 模型对比Zephyr、Mistral
Orca DPO12.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)→ 合成数据 → 训练弱模型

风险: 合成数据可能放大原始模型的偏见和错误(模型崩溃问题)。需要与真实数据混合使用。


数据与模型能力的对应关系

预训练数据强烈影响模型的"知识边界":
  - 训练数据截止日期 → 知识截止日期
  - 训练数据语言分布 → 多语言能力分布
  - 训练数据领域分布 → 领域专业能力

微调数据主要影响模型的"行为模式":
  - 指令格式 → 模型如何理解指令
  - 回答风格 → 模型的输出风格
  - 安全数据 → 模型的拒绝行为

代码实验

Training Data Composition

图5.2a:LLM 预训练数据构成分析——网页、书籍、代码、学术论文等来源的比例,以及数据清洗流程。

代码文件: code/ch05_llm_basics/training_data_composition.py
运行方式: python code/ch05_llm_basics/training_data_composition.py


本节小结

  • LLM 的训练数据来自网络文本、书籍、代码、学术论文等多种来源,代码数据对推理能力有特殊价值
  • 数据清洗(去重、质量过滤、有害内容过滤)是保证数据质量的关键步骤
  • 数据配比对模型能力有决定性影响,没有通用最优配比
  • 质量、覆盖和配比同样关键:高质量小数据集在特定任务上可能超过更大的低质量数据集

下一节: 5.3 主流模型家族

本教程采用 CC BY-NC-SA 4.0 许可协议