跳到主要内容

预训练数据 — 模型的「教材」是怎么编出来的

这一章讲三件事: 训练数据的来源与配比;从原始网页到合格语料的四道清洗工序;以及数据规模、质量、多样性各自的实验证据。 上一章的缩放法则说「数据要按比例加」——这一章回答「加的是什么数据、怎么处理」。

1. 数据从哪来:通用打底,领域点睛

GPT-3 的数据构成是个好起点:主要来源是过滤后的 CommonCrawl 网页数据集,原始数据 45TB,过滤后只剩 570GB,折合约 5000 亿个词元;再混入书籍、维基百科等1

一个立刻值得注意的细节:来源不同,采样(按比例抽取)权重不同。GPT-3 训练 3000 亿词元时,英文维基百科平均被学了 3.4 遍,而 CommonCrawl 和 Books 2 只被学了 0.44 和 0.43 遍2。原因不复杂:同样一个事实,百科里的可信度远高于随机网页,让高质量数据多出现几遍,等于用重复给可信度加权。

书里把来源分两大类。通用数据撑规模和语言能力:网页(量最大,但也混着最多垃圾)、对话文本(增强对话能力)、书籍(最重要甚至唯一的长文本来源,教会模型跨句子的前后文联系)、多语言(BLOOM 用了 46 种语言、PaLM 用了 122 种,混合训练能让模型自动建立语言间的意义关联(不同语言里说同一件事,词的排布互相靠近))、科学文本(公式用 LaTeX、化学结构用 SMILES 这类记法统一表示)、代码(显著提升代码生成,来源是编程问答社区和开源仓库)3领域数据量小但点睛:金融年报、医疗问答、法律文书,用在通用训练之后的增量预训练阶段4

截至 2025 年 2 月,各家模型的配比差异很大,业界没有共识——没有「标准配方」,只有各自验证过的组合

2. 四道清洗工序

原始互联网数据不能直接用。书里给的典型流程是四步:质量过滤、冗余去除、隐私消除、词元切分5

工序一:质量过滤

两条路线。基于分类器(自动学出「好坏判别规则」的模型):训练一个「文本质量判断模型」,用维基百科、书籍等精选文本当正样本,给普通网页打分——GPT-3、PaLM 都这么干。代价是它会误伤:有研究发现这类方法可能删掉包含方言或口语的高质量文本,损失多样性6

基于启发式(人工拍的经验规则)规则:语言过滤(只要英语就删其他语)、关键词过滤(删 HTML 标签和脏话)、按分数过滤7

其中「按分数过滤」的分数,常用困惑度(模型读文字时的「惊讶度」)来算——越像人话越不惊讶(第 13 章会正式讲它)——「惊讶」过高的句子直接删7

工序二:三级去重

重复数据的杀伤力后面第 4 节有实验证据,清洗要分三个粒度做。句子级:重复单词多的句子会让模型学会「复读」——书里给了一个真实案例:用 GPT-2 做束搜索——每次保留打分最高的 b 条候选句往下走的解码法——(b=32),提示词是安第斯山脉发现独角兽的新闻开头,模型输出中「墨西哥国立自治大学」这个名称被原样重复了一遍又一遍,陷入重复循环8。高效检测靠后缀数组:书里用「banana」演示——把序列的所有后缀按字典序排列,相同的子串在数组里必然相邻,一查一个准;判断标准是公共子串超过 50 个词元就删9

文档级:LLaMA 的做法是把段落规范化(转小写、数字换占位符)后算哈希(一串固定长度的「数字指纹」),指纹相同即重复。数据集级:很多数据集都含 GitHub 和维基百科,合并时会互相重复;尤其要防测试数据混进训练数据(数据集污染),这也是第 13 章评估环节的隐患10

工序三:隐私消除

这不是洁癖,是已经发生的事故:研究者给模型输入前缀「East Stroudsburg Stroudsburg」,模型顺势补全了姓名、电子邮件、电话号码、传真和实际地址——这些都是它从预训练数据里背下来的11。主流解法是用命名实体识别(自动认出文本里哪几串字是人名、地名)找出姓名、地址、电话并删除或替换。

工序四:词元切分(BPE)

模型不认识「词」,认识「词元」;词表(模型认识的全部字块清单)太小,生词全变成无意义的统一占位符;词表太大,低频词又学不充分12

怎么切词,因此直接决定了未登录词(词表里查不到的词)问题的严重程度12

BPE(Byte Pair Encoding)——一种以字节(8 位的最小存储单位)为单位的编码——的词表是这样练出来的:字节是这里的切分原料——先把所有词拆成单字符序列,统计相邻字节对的出现频率,把最高频的一对合并成新词元,一遍遍循环,直到词表达到预设大小13

书里的例子:第一轮里最高频的字节对是 (e,s),于是「es」进入词表13

主走查:一个网页在 RefinedWeb 流水线上的存活之旅

RefinedWeb 是目前公开得最彻底的清洗流水线(配套 Falcon 模型),书里给了每一关的存活率。假设我们是 CommonCrawl 里的一个普通网页,原始总量记为 100%:

【文档准备】
· URL 过滤:460 万黑名单域名(欺诈、成人网站)
→ 97.76%(2.24% 被剔除)
· 文本提取:去掉菜单/页脚/广告,只留正文
→ 96.31%
· 语言识别:CommonCrawl 非英语数据超过 50%,全部过滤
→ 约 50%
【过滤】重复去除、文档过滤、逐行纠正
→ 23.34%(这一关砍掉一半以上)
【冗余去除】模糊去重(MinHash)+ 严格去重(后缀数组)
+ URL 去重
→ 11.67%

图说:存活率数字是书里图 3.16 给的真实数值。
一个网页从被抓取到进训练集,存活概率约九分之一。
处理后的 RefinedWeb 共 5 万亿词元,开源其中 6 千亿。

走查的落点:「有数据」和「有合格数据」之间隔着十倍的差距;而这九分之八的淘汰,换来了用它训练的 Falcon 在同参数量级上的竞争力——书里引用的消融实验(逐个拆掉组件看效果掉多少的对照实验)显示,用全流程清洗后的数据训练的模型,效果远好于只用前两步的数据14

顺带把另外三个公开教材的口径记一下:Pile(GPT-3 之后的学术标准,22 个子集共 825GB,高质量子集采样权重高——227GB 的网页子集只采样(抽取使用)1 轮(完整过一遍数据),6.38GB 的维基百科采样 3 轮)15;ROOTS(BLOOM 用,59 种语言共 1.6TB,对「高质量」的定义值得记:「由人类撰写,面向人类」,最终清出 21.67% 的冗余)16;SlimPajama(对 RedPajama 二次清洗,1.21 万亿词元洗掉一半剩 6270 亿,64 块 CPU 跑了 60 多小时)17

3. 数据的三个规律:规模、质量、多样性

千亿参数模型训一次要数百万元,试错成本极高,所以数据规律主要靠小模型上做对照实验得出——书里特别提醒:很多结论是在百亿甚至十亿规模上验证的,不能完整反映大模型的情况,请读者甄别判断18。三条规律如下。

规律一:规模要和参数等比例放大。 DeepMind 训练了 400 多个模型后得出计算最优(Chinchilla)结论:模型大小加倍,训练词元数也应加倍;70 亿参数的 Chinchilla 吃 1.4 万亿词元,击败了参数量四倍于它、却只吃 3000 亿词元的前辈们。定量表述:最优参数量约正比于计算量的 0.49 次幂,最优词元数约正比于 0.51 次幂——两者几乎对半分19。产业界的执行很彻底:LLaMA-2 吃 2 万亿,LLaMA-3 吃 15 万亿,Qwen2.5 的 720 亿版本吃 18 万亿20

规律二:质量的收益高于数量。 Gopher 用 140 亿参数对照实验:吃过滤去重后的 MassiveWeb 数据,在三个下游任务上远好于原始数据;GLaM 发现高质量数据对生成任务的帮助大于理解任务——生成「像人话」的门槛更高21

规律三:重复是慢性毒药。 Anthropic 的实验最触目:只把 0.1% 的数据重复 100 次,一个 800M 参数模型的成绩就掉到 400M 模型的水平;这叫双峰下降——训练损失在中间阶段不降反升22。背后的机制是记忆:PaLM 对只见过 1 次的样例记忆率仅 0.75%,对见过 500 次以上的样例记忆率超过 40%——重复不是「复习」,是让模型死记硬背特定文本23。多样性的价值也有对照:Gopher 的配比消融中,书籍比例提高能增强长距离依赖的捕获,各来源的最佳组合是 10% C4 + 50% MassiveWeb + 30% Books + 10% News24

4. 作者的判断与证据

  • 有证据的: 三条数据规律全部有对照实验支撑(Gopher、GLaM、Anthropic、Chinchilla),书里都给了文献编号和实验规模。
  • 作者的判断: 把来源分成「通用/领域」两类、给各来源的功能定位(书籍管长文本、代码管逻辑),是作者的整理框架;不同教材的划分方式略有差异。
  • 书里明示的局限: 规律多来自百亿级以下模型,外推(推广套用)到千亿级未经完全验证18

5. 边界与局限

  • 全章几乎不涉及中文语料的特殊处理(只有零星提及),中文清洗(如广告、乱码、繁简混排)要靠其他资料补充。
  • 「数据配比无共识」是书里反复强调的现状:LLaMA 的 67% 网页配比不可直接搬到别的模型。
  • 数据集污染问题书里点到为止(第 13 章评估部分才给出审计方法),读本章时容易低估它的严重性。
  • BPE 之外还有 WordPiece(BERT 用,合并标准是似然增量)和 Unigram(T5 用,从大词表往删)两个流派,工程上碰到的概率不低,本章只点名未展开。

6. 可带走的

  1. 采样权重是隐性的质量打分:维基百科学 3.4 遍、随机网页学 0.44 遍,重复次数本身就是权重;

  2. 清洗四工序:质量过滤(分类器会误伤方言口语)、三级去重、隐私消除(模型真的会背出电话号码)、词元切分;

  3. 原始数据约九成要被扔掉(RefinedWeb 存活 11.67%),评估一个语料库(供训练用的文本仓库)要先看它的清洗流程,再看它的词元量;

  4. 后缀数组找重复子串是教科书级技巧:「banana」的六个后缀排好序,重复一目了然;

  5. Chinchilla 定律:参数和词元(token)等比例放大,两者几乎对半分预算——「先定参数再随便喂数据」的做法已被实验推翻;

  6. 重复数据是慢性毒药:0.1% 的数据重复 100 次,模型等效缩水一半参数;

  7. 记忆率随曝光次数暴涨(1 次 0.75%,500 次以上 40%)是「重复有害」的机制层解释;

  8. 任何「数据配方」都要看实验规模:十亿级模型上的结论,外推到千亿级要打问号——书里自己都这么提醒。

7. 原文地图

主题原书章原文位置
GPT-3 数据来源与体量3 预训练数据text/03-ch03.txt:14(搜「CommonCrawl」)
差异化采样权重3 预训练数据text/03-ch03.txt:19(搜「3.4 次」)
书籍是唯一长文本来源3 预训练数据text/03-ch03.txt:55(搜「唯一的长文本」)
多语言数据3 预训练数据text/03-ch03.txt:64(搜「122 种语言」)
四道工序总览3 预训练数据text/03-ch03.txt:136(搜「冗余去除」)
分类器法与误伤3 预训练数据text/03-ch03.txt:149(搜「特征哈希」) · text/03-ch03.txt:154(搜「方言」)
启发式规则3 预训练数据text/03-ch03.txt:157(搜「启发式」)
重复循环案例3 预训练数据text/03-ch03.txt:189(搜「束搜索」)
后缀数组与 banana3 预训练数据text/03-ch03.txt:205(搜「banana」) · text/03-ch03.txt:201(搜「50」)
隐私补全案例3 预训练数据text/03-ch03.txt:235(搜「East Stroudsburg」)
BPE 词表构造3 预训练数据text/03-ch03.txt:274(搜「字节对编码」) · text/03-ch03.txt:286(搜「e,s」)
LLaMA 词表 32K3 预训练数据text/03-ch03.txt:305(搜「32K」)
预训练成本与甄别提醒3 预训练数据text/03-ch03.txt:411(搜「数百万元」) · text/03-ch03.txt:416(搜「甄别判断」)
Chinchilla 对照3 预训练数据text/03-ch03.txt:425(搜「Chinchilla」)
等比例缩放3 预训练数据text/03-ch03.txt:452(搜「计算最优」)
0.49/0.51 幂律3 预训练数据text/03-ch03.txt:470(搜「0.49」)
LLaMA-3/Qwen2.5 数据量3 预训练数据text/03-ch03.txt:478(搜「15 万亿」)
Gopher 质量实验3 预训练数据text/03-ch03.txt:508(搜「MassiveWeb」)
双峰下降3 预训练数据text/03-ch03.txt:544(搜「双峰下降」)
记忆率3 预训练数据text/03-ch03.txt:552(搜「记忆率」)
LLaMA 配比表3 预训练数据text/03-ch03.txt:569(搜「67.0%」)
Gopher 最佳组合3 预训练数据text/03-ch03.txt:590(搜「MassiveWeb」)
Pile 825GB 与采样轮数3 预训练数据text/03-ch03.txt:608(搜「825GB」) · text/03-ch03.txt:670(搜「227.12GB」)
ROOTS 1.6TB 与高质量定义3 预训练数据text/03-ch03.txt:678(搜「1.6TB」) · text/03-ch03.txt:710(搜「由人类撰写」)
RefinedWeb 存活率3 预训练数据text/03-ch03.txt:735(搜「11.67%」) · text/03-ch03.txt:735(搜「5 万亿」)
SlimPajama3 预训练数据text/03-ch03.txt:850(搜「6270 亿」)

Footnotes

  1. 出处:「3 大语言模型预训练数据」第 14 段(text/03-ch03.txt:14,搜「CommonCrawl」)。

  2. 出处:「3 大语言模型预训练数据」第 19 段(text/03-ch03.txt:19,搜「3.4 次」)。

  3. 出处:「3 大语言模型预训练数据」第 55 段(text/03-ch03.txt:55,搜「唯一的长文本」)、第 64 段(text/03-ch03.txt:64,搜「122 种语言」)、第 65 段(text/03-ch03.txt:65,搜「语义关联」)。

  4. 出处:「3 大语言模型预训练数据」第 96 段(text/03-ch03.txt:96,搜「增量预训练」)。

  5. 出处:「3 大语言模型预训练数据」第 136 段(text/03-ch03.txt:136,搜「冗余去除」)。

  6. 出处:「3 大语言模型预训练数据」第 149 段(text/03-ch03.txt:149,搜「特征哈希」)与第 154 段(text/03-ch03.txt:154,搜「方言」)。

  7. 出处:「3 大语言模型预训练数据」第 157 段(text/03-ch03.txt:157,搜「启发式」)。 2

  8. 出处:「3 大语言模型预训练数据」第 187-195 段(text/03-ch03.txt:189,搜「束搜索」)。

  9. 出处:「3 大语言模型预训练数据」第 205 段(text/03-ch03.txt:205,搜「banana」)与第 201 段(text/03-ch03.txt:201,搜「50」)。

  10. 出处:「3 大语言模型预训练数据」第 228 段(text/03-ch03.txt:228,搜「污染」)。

  11. 出处:「3 大语言模型预训练数据」第 235 段(text/03-ch03.txt:235,搜「East Stroudsburg」)。

  12. 出处:「3 大语言模型预训练数据」第 250 段(text/03-ch03.txt:250,搜「未登录词」)。 2

  13. 出处:「3 大语言模型预训练数据」第 274 段(text/03-ch03.txt:274,搜「字节对编码」)与第 286 段(text/03-ch03.txt:286,搜「e,s」)。 2

  14. 出处:「3 大语言模型预训练数据」第 735 段(text/03-ch03.txt:735,搜「11.67%」)与第 769 段(text/03-ch03.txt:769,搜「RW-Raw」)。

  15. 出处:「3 大语言模型预训练数据」第 608 段(text/03-ch03.txt:608,搜「825GB」)与第 670 段(text/03-ch03.txt:670,搜「227.12GB」)。

  16. 出处:「3 大语言模型预训练数据」第 678 段(text/03-ch03.txt:678,搜「1.6TB」)与第 710 段(text/03-ch03.txt:710,搜「由人类撰写」)。

  17. 出处:「3 大语言模型预训练数据」第 850 段(text/03-ch03.txt:850,搜「6270 亿」)与第 861 段(text/03-ch03.txt:861,搜「1.4TB」)。

  18. 出处:「3 大语言模型预训练数据」第 411 段(text/03-ch03.txt:411,搜「数百万元」)与第 416 段(text/03-ch03.txt:416,搜「甄别判断」)。 2

  19. 出处:「3 大语言模型预训练数据」第 452 段(text/03-ch03.txt:452,搜「计算最优」)与第 470 段(text/03-ch03.txt:470,搜「0.49」)。

  20. 出处:「3 大语言模型预训练数据」第 478 段(text/03-ch03.txt:478,搜「15 万亿」)。

  21. 出处:「3 大语言模型预训练数据」第 508 段(text/03-ch03.txt:508,搜「MassiveWeb」)与第 518 段(text/03-ch03.txt:518,搜「生成任务」)。

  22. 出处:「3 大语言模型预训练数据」第 544 段(text/03-ch03.txt:544,搜「双峰下降」)。

  23. 出处:「3 大语言模型预训练数据」第 552 段(text/03-ch03.txt:552,搜「记忆率」)。

  24. 出处:「3 大语言模型预训练数据」第 590 段(text/03-ch03.txt:590,搜「MassiveWeb」)。