从0训练LLM · 现代大模型体系 导读 6 课 + 1 条岔路 + 1 节实验课 ≈ 4 小时
C7 数据:从哪来、怎么洗、怎么配 章导读

数据:从哪来、怎么洗、怎么配

前六章一直把「文字」当成现成的输入。这一章把项目的原始语料当成一次网页快照,一步步洗成训练数据:还原正文、规则过滤、去重、质量分类器、配比、重复与合成、退火与 mid-training——每一步都被上一步在某个真数字上的失败逼出来。

主线定位

累计数据流 · 从文字到下一个 token 的概率 已学本课新增还没学
解码层

点任一已学环节,看这一步的输入 → 输出形状、参数量,以及它解决了什么问题(数字取自 Qwen/Qwen3.8-27B 真实 config)。

预训练数据管线 · 从全网快照到训练 token 本课其他环节点环节看它做什么、真实数字
FineWeb 的真实 token 漏斗(T = 万亿 token,GPT-2 分词器口径)
基础过滤后 36T100.0%
每个快照独立 MinHash 去重 20T55.6%
+ C4 规则与自定义规则 = FineWeb 15T41.7%
教育分类器 ≥ 2 5.4T15.0%
教育分类器 ≥ 3 = FineWeb-Edu 1.3T3.6%
对照:改成跨 96 个快照的全局去重 4T11.1%

百分比 = 相对「基础过滤后 36T」现算;原始 WARC 的总 token 数论文没给,所以漏斗从 36T 开始。鼠标停在每一行上看原文出处。全局去重那一行不是漏斗的一级,而是被放弃的另一条路(L2 讲为什么)。

贯穿任务

把一部《三國志演義》的原始 Gutenberg 文件,当成一次「网页快照」,一步步洗成训练数据。这就是我们项目的语料原样:1,863,656 字节,带 19,333 字节英文声明、21,682 个 Windows 换行、每 38 个字一个硬换行——和网页一样脏。洗完以后,用项目分词器切出 560,001 个 token;Llama 3 8B 的 15T 相当于把它重复 2.68 × 10⁷ 遍。每一课在这份语料上多做一步;某一课的主题在一部书上体现不出来(配比、质量筛选)时,课里会写明为什么换例子。

本章问题链

每一课只回答一个问题;上一课的失败,逼出下一课的问题。

课这一课的问题朴素方案在哪个真数字上失败一句话
第 1 课直接把网页爬下来就能训练吗?不还原硬换行就跑 C4 句末规则,整本书只剩 17.02% 的字;英文规则在 3,697 段上 0 段通过先还原正文、再在自己的数据上逐条跑规则
第 2 课同一段话在语料里出现几万次,会怎样?每回带一份声明,分词器 1,791 次合并里 1,034 次被英文占掉;全局去重留下的 10% 比删掉的 90% 更差去重删大簇,不是删所有相似;删多狠由模型说了算
岔路一个最小哈希值,凭什么能估出两篇文档有多像?—随机排序后第一名相同的概率 = Jaccard
第 3 课规则都过了、也不重复,没营养的文本怎么筛?我们模型写的胡话困惑度 93.417,低于真原文 273.209;FineWeb-Edu 阈值 3 删掉 92%规则管长相,分类器管营养;筛得越狠剩得越少
第 4 课网页、代码、数学、书,按什么比例混?按体量混,维基在 The Pile 里只占 0.77%;手工权重比 DoReMi 低 6.5 个点按每个 token 的价值分配,代理模型能搜权重
第 5 课高质量数据用完了怎么办?训 16 遍只相当于 10.6 份新数据;只出现 1 次的字每代丢约 37%真数据约 4 遍内几乎不亏;改写真数据,别让模型吃自己
第 6 课最好的数据什么时候喂?(回扣 C5)均匀打乱时,90% 的好数据在学习率衰减段之前就用掉了好数据留给衰减段;同叫退火,量级差 5 个数量级
实验课把《三國志演義》当成一次网页快照,完整跑一遍—每一级都在自己的数据上算删除率、看删掉的样本

演进地图

预训练数据的演进:每一代都被上一代的某个真数字逼出来
  1. 起点 有多少用多少:原始网页直接进训练 Common Crawl 原始快照
    解决了量几乎无限:Common Crawl 定期抓取全网,FineWeb 用了 96 个快照。
    卡在WET 纯文本里样板和菜单太多(FineWeb §3.2);我们的原始文件不还原硬换行就跑 C4 句末规则,整本书只剩 17.02% 的字。
  2. 第一代 让人当过滤器:只取被点过赞的链接 GPT-2 WebText,2019
    解决了Reddit 上至少 3 karma 的外链,4,500 万个链接,清洗后约 800 万文档、40 GB。
    卡在量太小:C6 算出的需求是十几 T token;而且只覆盖被分享过的那一小部分网页。
  3. 第二代 只看长相的规则过滤 C4 2019 · Gopher 2021
    解决了句末标点、词数、平均词长、停用词、重复行……便宜,能在全网快照上跑。
    卡在绑语言、绑求值单位:英文原版在整本《三國志演義》3,697 段上通过 0 段;C4 句末标点规则删掉约 30% 的 token,FineWeb 最后没用它。
  4. 第二代 近重复去重:MinHash + 分桶 Broder 1997 → Lee 2021 → FineWeb 2024
    解决了C4 里一句话重复 61,036 次;去重后模型复述训练文本的频率降到 1/10。MinHash 把两两比较变成查桶。
    卡在去得越狠未必越好:跨 96 个快照全局去重只剩 4T,训不出更好的模型;每快照独立去重留 20T,才追平 RefinedWeb。
  5. 第三代 让模型给数据打分 CCNet 2019 · GPT-3 2020 → FineWeb-Edu、DCLM 2024
    解决了判断「有没有营养」:FineWeb-Edu 让 Llama-3-70B 标 46 万页、蒸馏成分类器,MMLU 33% → 37%。
    卡在参考语料的困惑度偏向「像参考」:我们模型写的胡话困惑度 93.417,低于真原文 273.209;阈值 3 删掉 92%,长程训练不够用。
  6. 第四代 配比:从手工权重到代理模型搜索 The Pile 2020 → DoReMi 2023
    解决了DoReMi 用 280M 代理模型搜域权重,8B 模型下游平均 +6.5 个点,达到基线快 2.6 倍。
    卡在权重一变就要重复:按 DoReMi 的权重花完 The Pile 的有效体量,YouTube 字幕要走约 16.9 遍(按字节近似 token,只看量级)。
  7. 第五代 数据墙:重复与合成 Muennighoff 2023 · WRAP 2024 · Phi-4 2024
    解决了重复 4 遍以内几乎等于新数据;改写真实网页(WRAP)预训练约快 3 倍;Phi-4 约 10T token 里合成占 40%。
    卡在让模型只吃自己生成的数据,分布的尾巴一代代消失:在三国演义真实字频上重采样,只出现 1 次的字每一代有约 36.8% 的概率丢掉,丢了就回不来。
  8. 第六代 按时机投放:退火 → mid-training MiniCPM、Llama 3 2024 → OLMo 2、Qwen3、GLM-5
    解决了最好的数据放到学习率衰减段(C5 的 WSD)加量;再发展成独立阶段,顺便拉长上下文。
    卡在同名不同方:Qwen3 的高质量阶段占 13.9%,Llama 3 的退火只占 2.6e-6;收益与学习率调度缠在一起,很难单独归因。
数字口径:我们语料上的数字由 gen_c07_corpus.py 在《三國志演義》上实算(c07-*.json);FineWeb、GPT-2 数字出自本地 PDF;DoReMi、Muennighoff、WRAP、Phi-4、Qwen3、Llama 3 出自原文(核实记录见设计卡);「约 16.9 遍」「36.8%」「13.9%」在构建时现算。

三层交互

层本章里的组件在哪一课
概念动画数据管线累计视图与 FineWeb 真实 token 漏斗;网页 → 正文的两种抽取(浏览器 DOMParser 真解析);演进地图各课开头、第 1 课
算法模拟器(真算法、小数据)规则逐条求值(文档 × 规则,整本书删除率实时重算);MinHash 签名与分桶、S 曲线;1,000 次随机置换证明;字级 bigram 困惑度过滤器(逐字着色);配比与 epoch 计算器;Muennighoff 有效数据;模型崩溃逐代重采样第 1–5 课、岔路
真模型 / 真数据项目分词器的真实词表与三种条件下真训练的 BPE;整本书上的精确 Jaccard 枚举与 MinHash-LSH 真跑;项目基线模型的真实生成样本;项目真实训练日志(0.5M token 重复 24.5 遍);整本书逐级漏斗第 2、3、5 课与实验课

项目推进:给我们的模型建一条可复现的数据管线

对应 04-实践项目/MILESTONES.md 的「预训练目标与数据」一节(minillm/data.py 的清洗与切分;项目文件里的章号是项目自己的编号)。分工照旧:代码 AI 来写,决策你来做。清洗、分词、训练的代码已经写好;本章的规则、去重与困惑度统计由 知识平台/src/data/precomputed/gen_c07_corpus.py 在整本书上算出。

🧭

你要拍板的六件事

  1. 清洗的顺序:抽取还原(去声明、拼回硬换行)放在任何逐行规则之前吗?(第 1 课)
  2. 规则集:哪些规则适用于文言小说?虚词表用哪一套?长度门槛按段还是按回?(第 1 课)
  3. 去重的单位与参数:段落还是回?shingle 取几个字?分桶取多少?(第 2 课)
  4. 配比(旧版项目的「定中英比例」):要不要加入现代白话或英文?各占多少?分词器和模型的训练语料是否用同一个配比?(第 4 课)
  5. 同一份语料训几遍:依据哪条曲线的哪个拐点?怎么排除学习率调度的影响?(第 5、6 课)
  6. 要不要退火:WSD 衰减段上采样哪一个子集?(第 6 课)

验收标准(全部可测,已实测的写出了数字):

坑与带走

坑症状后果怎么办
不还原正文就跑逐行规则我们的原始文件只剩 17.02% 的字句子被切碎,数据量骤减先抽取、还原,再跑规则(第 1 课)
英文规则原样套中文整本书 0 段通过好文本被删光按语言改写,在自己的数据上逐条求值(第 1 课)
在带样板的语料上训分词器最长 token 是套话;每回一份声明时,1,034 / 1,791 次合并是英文压缩率变差,词表和模型终身绑定先去重、去样板,再训分词器(第 2 课)
只做精确哈希去重转载改一个字就漏网近重复残留、模型背书、验证集污染shingle + MinHash + 分桶(第 2 课)
跨所有快照全局去重老快照留下的反而是广告和关键词堆砌训练数据变差每个快照独立去重(第 2 课)
把参考语料的困惑度当质量模型胡话困惑度最低,诗先被删偏向参考文体写明打分细则,训分类器,抽查被删样本(第 3 课)
质量阈值拉太高只剩百分之几的 token长程训练被迫大量重复质量和数量一起算(第 3 课)
按体量混维基只占 0.77%高价值数据被淹没上采样,用代理模型搜权重(第 4 课)
小数据集上采样过度某些域一次训练走十几遍收益递减,甚至过拟合用 D′ 公式算重复的价值(第 4、5 课)
用生成数据替代真实数据递归训练低频字、低频词一代代消失模型崩溃改写真实文本,始终混入真实数据(第 5 课)
好数据均匀打乱90% 的好数据在衰减段之前就用掉浪费最好的数据退火、mid-training(第 6 课)
看到「退火」就以为是同一配方13.9% 对 2.6 × 10⁻⁶复现失败看 token 数、学习率和数据,不看名字(第 6 课)

这一章你应该带走的(各课「一句话」):

深入这一章

每条都实际打开核对过(2026-09-26):写清它讲清了什么、对应哪一课、为什么推荐。标「需联网」的是站外资料;本地 PDF(/papers/)与本章全部交互组件断网可用。arXiv 链接的论文会在 P6 统一下载到本地后改链。

🎮 想更直观 10–30 分钟

先玩本章的组件;下面两条是外部最快的入口
需联网7 min英文 2025-02-05 · 全片 3.5 小时,只看开头「pretraining data」一章
开篇「预训练数据」一章:以 FineWeb 为例,沿着它的处理管线讲互联网上的网页怎么一步步变成约 15T token 的训练数据。
对应第 1、2 课。7 分钟建立全局印象,再回来看每一步的细节。
需联网25 min中文 Chenghao Mou 原作,官方中文翻译 · 2023-05-16
三篇文档从 shingle 到 MinHash 签名、再到分桶与连通分量的完整手算表,附代码与常见坑。
对应第 2 课与岔路课:和本章 MinHash 实验台一一对应的纸面版,中文资料里讲 MinHash 最清楚的一篇。

🔬 想吃透原理 1–3 小时

唯一必看:FineWeb 长文。其余按课挑
需联网45 min英文 Penedo 等 · 2024-05-28
文本抽取、基础过滤、MinHash 参数(14 × 8)、全局去重的反例、C4 规则与自定义规则的消融、FineWeb-Edu 分类器——每个决定都配一组消融曲线。
对应第 1–3 课与岔路课,本章一半的真实数字出自这里。它是少数「每一步都拿训练出来的模型说话」的数据管线文档。
需联网24 min中文 2024-08-05
逐段读 Llama 3 的数据章节:多级去重、启发式与模型打分过滤、配比怎么定、退火数据怎么用。
对应第 1–4、6 课:一个工业级配方从头到尾的中文导读。
需联网85 min英文 Stanford Online · 2026-05-27;B 站有带中英字幕的非官方搬运(BV1msTD6CE6j)
过滤、去重、配比与合成数据;2025 年同一讲的配套代码 lecture_14.py 里有 KenLM、fastText、Bloom filter、MinHash 与 LSH 的可运行实现。
对应第 1–5 课:名校课堂的系统版,和本章的顺序基本一致。
需联网40 min英文 / 中文 2025-07-08
11.2T token 的三阶段配比(网页 / 代码 / 数学 85/12/3 → 75/15/10 → 63/24/13)、WSD 调度、长上下文与推理 mid-training。
对应第 4、6 课:少数完整公开分阶段配比的配方,第 6 课的组件直接用了它的数字(注意博客里 11.2T 与 11.1T 两个写法并存)。
需联网40 min中文 2024-02 · Notion,国内访问可能较慢
WSD 调度的提出者自己讲:衰减段 loss 为什么骤降、衰减段多长够用、为什么在衰减段开始时加入高质量数据。
对应第 6 课与 C5 的回扣:「好数据留给衰减段」的第一手中文来源。

📄 想读原文 按需

有本地 PDF 的直接打开;其余链 arXiv
Penedo et al. 2024
§3.2 抽取、§3.4 全局与独立去重、§3.5–3.6 规则、§4 FineWeb-Edu、附录 E.1 分桶公式、E.3 更轻的全局去重、E.4 全部候选规则。
第 1–3 课与岔路课的主要出处。
Radford et al. 2019
§2.1 WebText:Reddit ≥ 3 karma 的外链、4,500 万链接、800 万文档、40 GB、去掉维基。
第 1 课「让人当过滤器」的出处。
Brown et al. 2020
§2.2 与表 2.2 的训练配比和各来源的 epoch;附录 A 的 Common Crawl 质量分类器。
第 3、4 课的出处。
需联网Lee et al. 2021
C4 里一句话重复 61,036 次;去重后复述训练文本的频率降到 1/10;验证集重叠。
第 2 课「不去重会怎样」的出处。
需联网Raffel 2019 · Rae 2021 Gopher:arXiv 2112.11446 附录 A
C4 规则(§2.2)与 MassiveText 的质量、重复规则(Gopher 附录 A.1.1、表 A1)。
第 1 课规则求值器里两套英文规则的原文。
需联网Li et al. 2024 · Su et al. 2024 Nemotron-CC:arXiv 2412.02595
fastText 质量分类器与「只留前 10%」;分类器集成 + 合成改写,真实唯一 token 是 DCLM 的 4 倍。
第 3 课改进与新失败的一对出处。
需联网Xie et al. 2023 · Gao et al. 2020 The Pile:arXiv 2101.00027
代理模型 + Group DRO 求域权重,+6.5 个点、快 2.6 倍(DoReMi 表 1);22 个来源的体量、权重与 epoch(The Pile 表 1)。
第 4 课计算器里全部数字的出处。
需联网Muennighoff 2023 · Shumailov 2023 Shumailov:arXiv 2305.17493;Nature 631 (2024)
重复数据的有效量公式与 R* = 15.39;递归训练导致分布尾部消失。
第 5 课的两条朴素方案各自的出处。
需联网Llama Team 2024
§3.1 数据:去重、分类器、配比 50/25/17/8、退火与用退火评估数据价值。
第 3、4、6 课反复引用。
需联网2024–2025 MiniCPM:2404.06395;OLMo 2:2501.00656
WSD 与衰减段数据(MiniCPM §4.3)、mid-training 与模型汤(OLMo 2 §2、§4.5)、三阶段预训练(Qwen3 §3.2)。
第 6 课的三份出处。
需联网Zhou et al. 2023
1,000 条示范做 SFT,对 GPT-4 43% 一样好或更好;用 52 倍数据的 Alpaca 65B 不如它。
第 3 课「同一原则在后训练」(旧版 M4-05 迁入),C12 会再用到。
需联网Leskovec, Rajaraman, Ullman
shingle、MinHash 的证明、分桶的 S 曲线,带习题。
岔路课的教科书出处。
🚫

排除了什么(也是筛选标准):① B 站「古希腊掌管代码的神」等 2–4 分钟的速通视频(只给结论,没有推导);② PKU-DCAI《大白话 13》(主要是自家工具的使用教程);③「小工蚁创始人」的 4 分钟数据集罗列;④ CS336 的 AI 配音搬运版(改给带字幕的搬运版或原片);⑤ Karpathy 视频的 B 站搬运(直接链原片);⑥ 腾讯云开发者社区《大规模预训练数据管理与质量控制机制》(疑似生成的填充文章,伪代码调用了未定义的函数);⑦ CSDN《MinHash-LSH 哈希模糊去重:医学大模型……》(大段罗列医学数据集,只适用一个领域);⑧ 智源社区与 CSDN 上对 BigCode 博客、MiniCPM 博客的转载(直接链原文);⑨ 仓库 text-dedup(只有代码,没有讲解;需要动手时再看);⑩ Lilian Weng《Thinking about High-Quality Human Data》(讲的是人工标注,不是预训练数据)。另:B 站「呱呱炼丹炉」的 MinHash / LSH 两集可能是中文里少有的原理讲解,但播放量很低、内容未能核实,暂不列入;知乎几篇数据清洗长文对自动访问返回 403,未能核实。