《MoE 混合专家》讲"每次只用一部分脑子",但没问它喂进去的几万亿 token 怎么来的。 这一章走一遍真实的清洗流水线。
| 你改的东西 | 通常带来的效果 | 改起来多难 |
|---|---|---|
| 数据质量 | 极大。同一架构、同一规模,换个数据集能差出几个档次的评测分数 | 很难。要写规则、训练分类器、反复试 |
| 数据配比 | 很大。某些能力的"会不会"直接由配比决定 | 难。要在小规模上做大量消融实验(把某个设置调高调低、重训着看哪项能力变差) |
| 模型规模 | 可预测(见缩放定律)。但边际收益递减且在变贵 | 极其贵 |
| 优化器 / 激活函数 | 很小。换个优化器通常只有个位数百分比的影响 | 容易 |
模型架构决定的是"天花板在哪",而数据决定的是"你能不能爬到那"。 一个架构稍差但数据干净的模型,几乎总是打败一个架构先进但数据脏的模型。 现实是:绝大多数人在调模型,很少有人认真调数据。
大模型的原料主要是 Common Crawl——一个爬遍全网的项目,每月产出几十 TB(1 TB ≈ 1000 GB)的网页。 但它的原始形态几乎不可用。下面这些是真实存在的典型垃圾:
| 垃圾类型 | 长什么样 | 为什么有害 |
|---|---|---|
| 模板网页 | "版权所有 © 2024 某某公司 | 隐私政策 | 联系我们" 出现在几百万个页面上 | 模型当高频"知识"背下来,浪费容量 |
| 导航菜单 / 广告 | "首页 新闻 体育 财经 娱乐 科技 房产 汽车" | 没有语法结构,污染语言模型 |
| 完全重复的文档 | 同一个新闻稿被 500 个网站转载 | 见第 4 节——这是最危险的一类 |
| 乱码 / 解析失败 | 编码错误、JS 代码残留、二进制被当文本 | 纯噪声,学不到东西还占算力 |
| 垃圾内容和有害文本 | SEO 堆砌(为骗搜索排名硬塞关键词)、色情、暴力、仇恨言论 | 直接影响模型的行为和安全性 |
| 有问题的"质量" | 机器翻译腔、AI 生成的凑数文章 | 语法正确但内容空洞,拉低表达质量 |
下面生成 600 篇"网页",每一篇都真的算出这些指标:
4-gram 就是连续的 4 个词。最后一关的 Jaccard 相似度 = 两篇文档的 4-gram 集合里, 交集占并集的比例——第 4 关的阈值就定在它上面。
这套流水线像淘金:筛掉泥沙,留下金粒。 过滤规则就是那张筛网——但金粒不是天生的,是筛网先定下了「什么样算金」。 这个类比管到「规则写死进管道」为止:真金的成色客观,文本的「好」不是。
四道关卡把 600 篇砍到 168 篇。每道规则砍掉谁,就是这一章后面所有取舍的来源。
拖动滑块改阈值,看每一关能砍掉多少。
互动 · 数据清洗漏斗
四道关卡里,去重排第一。原因不是"浪费算力",而是一个更隐蔽的机制。
互动 · 重复数据 → 记忆化
模型的目标是最小化平均损失。一条内容重复出现 N 次,背下它的收益就被放大 N 倍;
重复到一定程度,背诵就成了
| 去重层级 | 做法 | 能抓到什么 |
|---|---|---|
| 文档级精确去重 | 对整篇文档算哈希(任意长的文本压成一个固定编号),只留一份 | 完全相同的转载 |
| 文档级近似去重 | MinHash(一组哈希函数各取最小值,把一篇文档压成 k 个数的指纹),按 Jaccard 相似度判重 | 改了几个广告位的转载(最常见,也最需要这一步) |
| 段落级去重 | 把文档切成段落再判重 | 模板文字、免责声明、导航栏 |
| 子串去重 / 去污染 | 在评测集上做 n-gram 匹配(n-gram = 连续 n 个词的片段),把命中的训练样本删掉 | 评测集污染(考试题混进了训练材料,分数就成了背答案)。不做这一步,你的评测分数可能是假的 |
清洗完之后,还有一步:不同来源按什么比例混。 这里用英文网页、中文网页、代码三种把结构讲清楚。 第四根推理能力条不是第四个滑块,是由这三个占比推出来的。
互动 · 在一个固定的 token 预算下分配来源
总量固定时,给一种语言加量,就等于从别的语言那里抠走一份。
提高中文占比,就必然压低英文和代码的占比。
而中文能力的提升往往会依赖于英文和代码里学到的
上面的互动是简化的参数模型:演示"收益递减 + 跨域干扰"这两个结构,数值不代表任何具体模型。
第 4 节说「按 Jaccard 相似度判重」。但真做起来会撞上一面墙: 几 PB 的网页,两两相比是 1018 次比较,宇宙毁灭也算不完。 工业界的办法:把每篇文档压成 k 个数字——MinHash 指纹——以后只比这 k 个数。 真正省掉两两比较的是 LSH:指纹相近的分进同一个桶,只桶内互比。
互动 · 两篇文档的指纹逐行比对(亮行 = 撞上)
公式 · Jaccard 相似度,和它的 MinHash 估计
把鼠标移到公式里的 J 上——第 3 节管道上那个「④ 近似重复相似度上限(Jaccard)」滑块会亮起来。
微型图解 · 为什么「最小值撞上」的概率正好是 J(对两篇文档的 4-gram 集合各取哈希最小值)
把签名长度 k 拖到最小(8),再去拖真实相似度——
估计值会抖得厉害,有时候差十几个百分点。
再把 k 拖到 32,估计值就基本贴着真实值了:
误差按 1/√k 缩小。这是整章里最便宜的一次「用算力换精度」。
多存几十个数字,省掉 1018 次比较——这就是几 PB 数据能被去重的原因。
图 · 过滤太狠,会误伤谁
| 做法 | 想要的 | 代价 | 什么时候真的会痛 → 换什么 |
|---|---|---|---|
| 质量分类器过滤 | 去掉低质量文本 | 分类器在已被筛过的数据上训,会系统性删掉方言、口语、少数群体语言 | 要覆盖口语、低资源语言(网上文本很少的语言)→ 留一份不过滤的语料 |
| 去重太激进 | 去掉冗余 | 法律条文、经典引用、常见代码模板这类合理重复也被删 | 模板 / 法条很多 → 用段落级、子串级去重 |
| 只保留"高质量" | 提升平均质量 | "高质量"偏向书面、出版过的文本,模型丧失口语和真实对话能力 | 要会聊天 → 对话、论坛语料单独留 |
| 安全过滤 | 去掉有害内容 | 过度过滤会让模型对正常话题也回避(医学、法律、冲突情节的小说) | 要敢谈正当的敏感话题 → 分层过滤 |
| 合成数据 | 补足数据缺口 | 反复用模型生成的数据训新模型会"模型崩溃":分布收窄、错误被放大 | 真数据见底了 → 合成与真实数据搭配用 |
清洗没有最优解,只有取舍:每条规则都用一部分数据的数量换整体平均质量——被删掉的可能正是模型还不会的世界。
| 阶段 | 这一章做的事 | 下一章做什么 |
|---|---|---|
| 数据 | 清洗、去重、配比 → 得到几万亿干净 token | — |
| 提供原料 | 用这些 token 做"预测下一个词",得到一个"会接话"的基座模型 | |
| 对齐 | 提供少量高质量示范 | 把"会接话"调成"会听话"(见《训练三阶段总览》) |
一个现代大模型的
图 · 预训练读过的量,要读约 4 万辈子
整条清洗管道背后只有一个立场: “世界应该长什么样”是我们替模型定下的,不是数据自己决定的。
回到第 5 节那张图:把「代码占比」滑块从 0.30 拖到 0.02,再拖回 0.50, 右侧那根“推理能力”条会跟着一起变。这就是「配比是硬编码的归纳偏置」—— 你拖的不是数据,是替模型决定“以后该会什么”。
其余暗线本章没有特别的话。
| 暗线 | 这一章的回答 | |
|---|---|---|
| A 信息流动 | 形状一路缩水、变干净:Common Crawl 原始网页(TB 级、带 HTML)
→ 纯文本 → 四道漏斗 → 一长串 |
|
| C 参数账本 | GPT-3 约 3000 亿 token,Llama 2 是 2 万亿,今天前沿模型向 1013 走; | C4(T5 用的数据集)从 Common Crawl 清洗出约 750 GB;RefinedWeb(Falcon 用的数据集)过滤出 5 万亿 token、公开其中 6000 亿。 |
| D 跑在什么上 | 这一关不是算力受限,是 I/O 受限(瓶颈在读写,不在计算):清洗里几乎没有矩阵乘。 MinHash 压成指纹、LSH 只比桶内那一小撮,省下的都是磁盘读写。 完整账在 《硬件与算力账本》。 |
它接住了《MoE 混合专家》的什么:MoE 省的是算力,参数一个没少——参数再多,也得靠这堆 token 喂满。
它给下一章留了什么:原料就绪,才轮到 《训练三阶段总览》用这些 token 做“预测下一个词”。
清洗四关(长度 / 符号 / 4-gram 重复度 / 近似去重)里,去重最关键:
重复会把"背诵"变成损失函数下的最优解,也带来隐私和版权风险。
而清洗和配比都没有最优解,只有取舍——所以每加一条规则,都要问“它误伤了谁”。
上面讲的都是「够用」的版本。想往下挖,这里有三个入口—— 它们不是必修内容,是给想再往前走一步的读者准备的。