跳到主要内容

数据工程 — 从原始网页到训练料的提纯流水线

这一章讲三件事: 收来的数据按什么分类、各类管什么能力(书的份额小,却管长文本); 三道清洗工序各自的阈值怎么定(0.1% 的重复数据就能让模型折半); 以及最后两步——文本怎么切成 token、各种料按什么比例和顺序下锅。 主走查: 一篇论坛帖子从 Common Crawl 的矿里被捞上来,走完四道工序变成训练数据的全过程。

1. 顶层全景:五步把矿石炼成燃料

第 03 章说过,原始网页的清洗存留率约 1.38%——网页是矿石不是燃料。这一章就是那座冶炼厂的内部构造。原书把预训练数据的准备讲成五步1:

① 收集 ② 清洗(三道工序) ③ 切分 ④ 配比与排序 ⑤ 下锅训练
通用文本 ──→ 质量过滤(低质的扔) ──→ 切成 token ──→ 定比例、定顺序 ──→ 喂给模型
专用文本 敏感过滤(有毒的、隐私的扔)
去重(重复的扔)
图说:②③④ 是本章的三个主角;每一步都有自己的阈值,阈值定在哪,就是质量和数量的取舍线画在哪。

先交代两个贯穿全章的词。阈值:一条分数线——分类器(自动给文本分类的小模型, 比如「这篇是垃圾页/正常页」)给每篇文档打个分,高过线就留、低过线就扔; 线画高了漏掉毒药,画低了误杀好料,全章的取舍都绕不开它。配比:各种数据源在训练料里各占多少, 比如网页八成、代码半成——第 02 章讲「数据要配平」说的是总量,这里说的是内部结构。

2. 收集:通用文本管广度,专用文本管特长

原书把预训练数据分两大类2通用文本(网页、书、日常对话)是主料,胜在量大、样多、易得; 专用文本是为特定能力补的料,三种各管一件事3。表里两个词先说掉:序列,即按顺序排列的一串符号,蛋白序列、时间序列都是。

另一个词:语义,即文本里的含义。

管什么一个具体的数
多语文本翻译、跨语言问答BLOOM 用 46 种语言、PaLM 用 122 种4
科学文本科学问答与推理含公式、蛋白序列(按顺序排列的一串符号),切分要专门处理5
代码结构化语义(文本里的含义)与逻辑推理;函数调用(代码里「谁调用谁」的关系)关系还帮助工具使用01 章的 Codex 换挡就是它的效果6

通用文本里有一个反直觉的角色:。按份量它是小头(LLaMA 配方里只占 4.5%,见 §6), 但原书专门指出,书的文本更正式、篇幅更长,管的是长程语义关联——模型要能记住 几百页之前埋的伏笔,靠的就是这种长文本7。网页管「见多识广」,书管「记得住上下文」, 两者补的不是同一种能力。这也解释了第 03 章那个张力:数据要越多越好,而最大的来源(网页)恰恰最脏。

3. 清洗前两道:质量过滤与敏感过滤

3.1 质量过滤:两道工序,一粗一精

第一道要解决的是:网页里混着大量机器生成的广告页、模板页。原书给出两类方法8

启发式(凭经验定的规矩,不保证最优但管用)方法——人写规则,机器照执行。 原书从 Dolma、RefinedWeb 这些真实数据集的清洗方案里抄了一串规则9:

规则出处
含超过 100 个重复词或句的网页文档,删Dolma
符号与词的比例超过 0.1 的,删Gopher
论坛里点赞不到 3 的用户评论,删Dolma
维基百科不足 25 个词的页面,删Dolma
不含 the/be/to/of/and/that/have/with 任何一个的英文网页,删Gopher
删掉 HTML 标签RefinedWeb

还可以用困惑度来筛:让一个现成的语言模型给文档打分, 它觉得「这话不像人话」的程度就是困惑度,分数太高的句子删掉10。 另一类是分类器方法——先人工标一批好料坏料,训一个自动判质的分类器(给文本分好坏类别的模型), 再让它给全部语料打分。常用的分三档:fastText 最轻快但精度(判得准的程度)中等;微调过的 BERT 更准;直接拿大模型当裁判最准, 但给几十亿篇文档逐篇判一遍,成本高到一般不这么干11

分类器有个必须知道的副作用:它可能误杀高质量的小众文本——原书举的例子是文言文, 在分类器眼里它太「怪」了,容易被当成低质文本删掉。原书建议数据工程师建立保留机制, 或用多个分类器联合投票降低误杀12。实战策略是两道配合:启发式先粗筛(快,几十亿篇也跑得动), 分类器再精筛(准,但只处理粗筛剩下的)13

3.2 敏感过滤:毒性与隐私,各有各的阈值

第二道管两件事。毒性过滤:用 Jigsaw 数据集(约 16 万条论坛评论,人工逐条标了 「有毒/严重威胁/侮辱」等六类标签)训一个毒性分类器,按阈值删14。 阈值怎么定是这笔账的核心:Dolma 团队发现阈值高了毒性漏网、下游任务成绩受损, 阈值低了误杀太多、数据集急剧缩水;他们最后选了偏高的阈值—— 仅凭这一步就滤掉了 Common Crawl 约 30% 的数据15。 (对照第 03 章的 1.38%:那 98.6% 里,相当一块是在这一步被扔的。)

隐私过滤:训练料里有真人名、电话、邮箱。不处理会怎样?2023 年 11 月有人发现, 让 ChatGPT 不停重复一个词(「poem poem poem……」),它重复着重复着会突然背出 训练数据里的真人信息——姓名、头衔、邮箱、电话号码一字不差16。 Dolma 的对策是一条带梯度(这里指按严重程度分档处理,不是数学里的导数)的规则:检测到邮箱/电话/IP 地址, 一篇里少于 5 处就替换成占位符(如 |||EMAIL_ADDRESS|||),6 处以上整篇删除17

4. 清洗第三道:去重,和「0.1% 毁掉一半」的实验

第三道工序回答一个问题:同一篇文章在网上被转载了一千次,要不要留一千份? 答案是不但要删,而且不删的代价可以精确量化。原书引用的实验: 把 0.1% 的语料重复 100 次喂进去,一个 800M 参数的模型会退化到 400M 的水平—— 千分之一的脏数据,废掉了模型一半的参数18。机制是语言模型记性太好: 重复出现的模式会被背下来(过拟合——把训练数据死记硬背,而不是学会规律), 表现为输出复读、训练损失忽上忽下地震荡;重复数据还会削弱上下文学习的泛化能力19

去重怎么做到几十亿篇的规模?两个维度: 粒度分句级、文档级、数据集级(比如多个网址指向同一页,文档级一次删掉)20; 匹配方法分精确匹配(逐字符相同才算)和近似匹配(差不多像就算)。

近似匹配的主力算法叫 MinHash:哈希(把任意长文本压成一个固定长度的数)先把每篇文档压成一组数——「最小哈希值」,取每个集合里哈希值最小的那个当代表; 两篇文档的「最小哈希」有多少比例相同,就估计它们有多相似。 这样不必两两比对全文,只比几个数,几十亿篇也跑得动21。 RefinedWeb 的搭配是:文档级用近似匹配(省算力),句子级用精确匹配(保准头)22

顺带说清洗不净的另一种后果:数据污染——评测用的考题混进了训练料。 原书给的极端数字:如果整个测试集泄漏进训练数据,一个 1.3B 的小模型在受污染任务上 能超过正常评测的 65B 大模型23。这等于考试前发了答案,分数不再说明能力。 这件事是第 15 章(评估)的常驻背景,也是作者团队自己发过论文警告的问题(见第 16 章)。

5. 切分:文本怎么变成 token

第 01 章说 token 是模型读写文本的最小单位,这一节讲它是怎么切出来的。 为什么不直接按词切?按词切词表会爆炸,低频词没出现过就不认识 (这叫未登录词问题,英文缩写 OOV);按单个字符切又太碎,一个英文单词碎成五六个单位, 句子变得很长。

现在的主流是折中的子词:常见词整个算一个 token, 生僻词拆成几个常见碎片——「unbelievable」切成「un+believe+able」,每个碎片都常见24

三种子词切法,原书各给了一句话的机理:

  • BPE(字节(计算机存文本的最小单位,一个英文字母占一个字节,一个汉字通常占三个)对编码): 1994 年原本是个数据压缩算法。做法是从单个字符起步, 反复把语料里出现次数最多的相邻对合并成一个新 token,直到词表够大。 GPT-2/LLaMA 用的是它的字节级版本:基础符号是 256 个字节, 任何语言文字都能拆到字节,所以永不缺字。GPT-2 的词表 50,257 = 256 个基础字节 + 1 个文本结束符 + 50,000 次合并学来的碎片25

  • WordPiece:思路和 BPE 一样,合并标准不同——不选「最频繁」的对, 而选「合并分」最高的对:合并分 = 这对同现的次数 ÷(第一个的出现次数 × 第二个的出现次数), 专挑「彼此特别有缘分」的组合(两个各自常见但凑一起更罕见的对,分数更高)。BERT 用的就是它26

  • Unigram:方向反过来——先准备一个超大的词表,逐步往里删, 每轮删掉「删了之后语料似然(这份语料在当前切法下出现的总可能性)降得最少」的 token—— 降得少,说明这个 token 可有可无。T5 用的这种27

主走查(嵌):BPE 三次合并的真实过程

原书例 4.2 给了一份小语料的完整合并轨迹,数字都是书里的28:

语料里有若干个含 o、l、t 的英文词,初始词表 = 全部单个字母。

第 ① 步:统计所有相邻字母对的出现次数。
「oo」出现 48 次,全场最高 → 学到合并规则 (o, o) → oo,词表加入 oo。
第 ② 步:重数相邻对。现在 (l, oo) 出现 33 次,最高
→ 学到 (l, oo) → loo,词表加入 loo。
第 ③ 步:(loo, t) 最高 → 学到 (loo, t) → loot,第一个四字母 token 诞生。

之后重复同一动作,直到词表达到预定大小(比如 GPT-2 的 50,000 次合并)。
图说:每轮只干一件事——数相邻对、合并最高频者;词表就是这样从字母滚成碎片的。

新文本来了怎么切?按学到的合并规则重放一遍:先拆成字母,再按规则顺序把能并的都并掉。 训练语料里没见过的字符,就退回字节或标成未知。

切法不是小事,两个后果原书专门点了名:其一,LLaMA 的分词器按英文语料训练, 处理中文这类非英文文本时切得碎,token 变多,推理延迟(模型生成回答要等的时长)跟着上升—— 这正是第 03 章主走查里「中文化要扩词表」的原因;其二,同一个数字串可能被切成不同样子 (「7481」和「74815」的切法对不齐位值),影响数学能力,有团队为此专门做数字定制切分29。 评价一个切分器,原书给了两条标准:能无损还原原文;压缩率要高 (原文 UTF-8 字节数 ÷ token 数;1MB 文本切成 20 万个 token,压缩率就是 5.24)30

6. 配比与课程:YuLan 的全流程坦白

最后一站:洗好切好的各种料,按什么比例、什么顺序下锅。 原书先给参照系——LLaMA 的配比:网页 >80%、代码 6.5%、书 4.5%、科学文本 2.5%, 这个配方后来成了行业默认值;就算训代码专才模型(CodeGen 那种),也要留网页数据保住通用能力31。 配比怎么定出来的?不是拍脑袋:训一个小参考模型和一个小代理模型, 比较两者在各数据源上的损失差,代理学得差的域就加大权重—— 但原书提醒,这套做法基于「小模型行为≈大模型」的假设,这个假设不总成立32

配比之外还有顺序,原书叫数据课程:先易后难、先通用后专精。 三个现成的课程表33:

模型课程(箭头=先后顺序)备注
CodeLLaMA2T 通用 token → 500B 代码 → (Python 版再加)100B Python从 LLaMA-2 继续训
Llemma(数学)2T 通用 → 500B 代码 → 50~200B 数学掺 5% 通用数据当「正则化」——防止只顾数学、忘了通用能力的保险措施
长文本扩展2.5T token @ 4K 窗口 → 20B token @ 16K 窗口先短后长,省训练时间

主走查:YuLan 的 1680B token 是怎么配出来的

原书 4.4.3 把自己团队的 YuLan 模型的整条数据流——数据从收集到下锅的完整流水线——交了底,这是本书「自做实验」传统的第一次亮相, 每一步数字都可在原文核对34:

第 ① 步 收集:网页(Common Crawl)+ 书(Books3/Gutenberg)+ 知乎/维基;
训练后期再掺数学(Proof-Pile)与代码(GitHub)补特定能力。
第 ② 步 清洗:文档级启发式粗筛 → 句子级过滤(重复句、隐私)→ MinHash 跨源去重;
词表 = LLaMA 词表 + 中文 BPE 合并,共 51,200(比 GPT-2 的 50,257 略大,
多出来的主要是中文碎片)。
第 ③ 步 试配比:不直接上大模型——先训一个 1.3B 的代理模型,
每次实验只按候选配比抽 50B token 从头训一遍
(50B 是最终总量 1680B 的约 3%,用 3% 的成本试错);
先定语言比:中英 1:8;再固定语言比,以 LLaMA 配比为基准,
每次只改一类数据的比例,看下游任务成绩决定去留。
第 ④ 步 人工修正:训练中发现能力增长不均——文本生成涨得快、数学推理长期不动,
于是按各能力的验证集成绩手动再调配比。
第 ⑤ 步 下锅:总量 1680B token = 英文 1380B + 中文 280B + 多语 20B;
按类型:网页 1174B(约 70%)、新闻 134B、其他 134B、
代码 100B、书 90B、科学文本 48B。

再看本章开头那个主走查问题——一篇论坛帖子的完整旅程,现在每一步都能指到位置: 它在 ① 作为 Common Crawl 的一部分被收进来;在 ② 先过语言检测(不是中英就扔)、 统计指标(符号/词比超 0.1 就扔)、点赞数(不到 3 赞就扔),再过毒性分类器(阈值偏高, 漏一点比误杀强),然后查 PII(邮箱电话少于 5 处换占位符),最后 MinHash 查重; 在 ③ 被 BPE 切成 token;在 ④ 按「网页约 70%」的权重参与抽样,进入 1680B 的训练流。 它活着走完这五步的概率,参考第 03 章那个数:1.38%。

判断(我们的,不是书里的): 这一章真正的信息不是「要清洗」,而是 数据工程已经有一套可复算的工程纪律:阈值有出处(每条规则标了来自哪个数据集)、 配比有实验(1.3B 代理)、总量有账本(1680B 的构成)。 它和第 02 章连起来读, 能看出这个领域从「炼金术」转向「工程学」的具体证据。 如果错,会错在: 如果「合成数据直接生成训练料」成熟到让清洗配比失去意义 (Phi-1 的「教科书」数据就是合成的),这套流水线的价值会被重估—— 但原书成书时,合成料仍要经过同样的过滤与配比流程,纪律本身没有失效。

7. 作者的判断与证据

  • 自家实验,证据最硬: YuLan 全流程(代理模型、1:8、1680B 构成、能力增长不均要手调) 来自作者团队自己的训练记录34;数据课程的三个例子(CodeLLaMA/Llemma/长文本) 来自对应论文33
  • 引用他人实验: 0.1% 重复 100 次模型折半18、Phi-1 教科书数据 50.6%35、 污染后 1.3B 超 65B23,都有原论文;清洗规则逐条标注了来源数据集9
  • 作者的工程判断: 「启发式粗筛+分类器精筛」「阈值偏高保候选」「小模型行为≈大模型的假设未必成立」 是作者基于实践的建议,不是某一篇论文的实验结论1332

8. 边界与局限

  • 清洗规则全部是英文中心的:Gopher 的「必须含 the/be/to」、点赞数、困惑度过滤, 换成中文语境要重定阈值;原书的规则表没有给中文版。
  • 「0.1% 重复 100 次折半」是特定规模(800M)特定设置下的实验,不能外推(把结论套用到实验范围之外)成普遍公式; 长尾领域(古籍、小语种)反而需要适度重复训练,原书也承认这点19
  • BPE 例 4.2 的原始词表与词频表在转码中丢失(它们在图片里),我们保留了文字叙述的三步合并; 想亲手复算需要看原书图。
  • 配比与课程的结论严重依赖「代理小模型」的代表性,而原书自己说了这个假设未必成立32—— YuLan 最后靠人工按验证集成绩修正,正是假设失效的现场。

9. 可带走的

  1. 数据准备五步:收集 → 质量过滤 → 敏感过滤 → 去重 → 切分,然后定配比与顺序;
  2. 书份额小但管长程依赖;代码管结构化推理和工具使用;缺的料换能力,不是换口味;
  3. 每个阈值都是取舍:Dolma 毒性一步滤掉 Common Crawl 约 30%;阈值偏高漏毒、偏低误杀;
  4. 分类器会误杀文言文这类小众高质量文本——自动清洗必须有保留机制;
  5. 0.1% 语料重复 100 次,800M 模型退化到 400M——去重不是洁癖,是保命;
  6. MinHash:拿几个最小哈希值当文档代表,几十亿篇的去重才跑得动;
  7. BPE = 反复合并最高频相邻对;GPT-2 词表 50,257 = 256 字节 + 1 结束符 + 50,000 次合并;
  8. 切分影响数学能力和非英文延迟;LLaMA 词表+中文 BPE = YuLan 的 51,200;
  9. 配比用代理小模型试(YuLan:1.3B、每次 50B、中英 1:8),能力增长不均就按验证集手调;
  10. 数据污染会让 1.3B 跑赢 65B——评测前先想训练料里有没有考题(第 15 章展开)。

10. 原文地图

主题原书章原文位置
通用/专用两类与多语、科学、代码4.1text/17-ch04-01-4-1-data-collection.txt:7(搜「general text data and specialized text data」) · text/17-ch04-01-4-1-data-collection.txt:21(搜「46 and 122 languages」) · text/17-ch04-01-4-1-data-collection.txt:25(搜「function call relationships」)
书管长程依赖4.1.1text/17-ch04-01-4-1-data-collection.txt:15(搜「long-range semantic relationships」)
LLaMA-2 英文 89.70%4.2.1text/18-ch04-02-4-2-data-preprocessing.txt:15(搜「89.70%」)
启发式规则清单4.2.1text/18-ch04-02-4-2-data-preprocessing.txt:25(搜「more than 100 repeated words」) · text/18-ch04-02-4-2-data-preprocessing.txt:27(搜「symbol-to-word ratio exceeds 0.1」) · text/18-ch04-02-4-2-data-preprocessing.txt:43(搜「do not include the words」)
分类器三档与误杀文言文4.2.1text/18-ch04-02-4-2-data-preprocessing.txt:49(搜「classical Chinese literature」) · text/18-ch04-02-4-2-data-preprocessing.txt:51(搜「fastText」)
粗筛+精筛策略4.2.1text/18-ch04-02-4-2-data-preprocessing.txt:53(搜「initial screening」)
Jigsaw 与 30% 阈值账4.2.2text/18-ch04-02-4-2-data-preprocessing.txt:59(搜「160,000 forum comments」;同段搜「approximately 30%」)
PII 占位符规则与 poem 攻击4.2.2text/18-ch04-02-4-2-data-preprocessing.txt:61(搜「fewer than five instances」) · text/18-ch04-02-4-2-data-preprocessing.txt:65(搜「Repeat this word forever」)
去重理由、粒度与匹配4.2.3text/18-ch04-02-4-2-data-preprocessing.txt:81(搜「oscillations in the training loss」) · text/18-ch04-02-4-2-data-preprocessing.txt:83(搜「sentence level, document level, and dataset level」) · text/18-ch04-02-4-2-data-preprocessing.txt:85(搜「approximate matching」)
MinHash 原理4.2.3 Tipstext/18-ch04-02-4-2-data-preprocessing.txt:89(搜「smallest hash value」)
0.1% 重复 100 次折半4.2.4text/18-ch04-02-4-2-data-preprocessing.txt:107(搜「0.1% of the corpus data is repeated 100 times」)
Phi-1 与数据质量4.2.4text/18-ch04-02-4-2-data-preprocessing.txt:105(搜「50.6%」)
数据污染 1.3B 超 65B4.2.4text/18-ch04-02-4-2-data-preprocessing.txt:115(搜「complete test set leakage」)
BPE 机理与 GPT-2 词表4.3.1text/19-ch04-03-4-3-tokenization.txt:7(搜「formally introduced in 1994」) · text/19-ch04-03-4-3-tokenization.txt:9(搜「50,257」)
BPE 三步合并走查例 4.2text/19-ch04-03-4-3-tokenization.txt:21(搜「48 times」) · text/19-ch04-03-4-3-tokenization.txt:23(搜「33 times」) · text/19-ch04-03-4-3-tokenization.txt:25(搜「loot」)
WordPiece 与 Unigram4.3.2-4.3.3text/19-ch04-03-4-3-tokenization.txt:33(搜「Merge Score」) · text/19-ch04-03-4-3-tokenization.txt:39(搜「expectation maximization」)
切分器选择两标准4.3.4text/19-ch04-03-4-3-tokenization.txt:47(搜「5.24」) · text/19-ch04-03-4-3-tokenization.txt:49(搜「increased inference latency」)
LLaMA 配比与留 web4.4.1text/20-ch04-04-4-4-data-schedule.txt:13(搜「over 80% web data」)
代理模型调配比与假设4.4.1text/20-ch04-04-4-4-data-schedule.txt:21(搜「small proxy model」;同段搜「may not always hold true」)
数据课程三例4.4.2text/20-ch04-04-4-4-data-schedule.txt:31(搜「2T general tokens」) · text/20-ch04-04-4-4-data-schedule.txt:33(搜「math-related tokens」) · text/20-ch04-04-4-4-data-schedule.txt:35(搜「2.5T tokens with a 4K context window」)
YuLan 全流程4.4.3text/20-ch04-04-4-4-data-schedule.txt:45(搜「1.3B small model as a proxy」;同段搜「1680 billion tokens」) · text/20-ch04-04-4-4-data-schedule.txt:61(搜「1174B」)
三阶段与退火4.4.3text/20-ch04-04-4-4-data-schedule.txt:73(搜「warmup, stable training, and annealing」)

Footnotes

  1. 出处:「4.2 Data Preprocessing」第 3 段(text/18-ch04-02-4-2-data-preprocessing.txt:3,搜「preprocess the data」)与「4.4 Data Schedule」第 3 段(text/20-ch04-04-4-4-data-schedule.txt:3,搜「mix ratio of various data sources」)。五步划分是我们对原书 4.2~4.4 三节顺序的归纳。

  2. 出处:「4.1 Data Collection」第 7 段(text/17-ch04-01-4-1-data-collection.txt:7,搜「general text data and specialized text data」)。

  3. 出处:「4.1.2 Specialized Text Data」第 19 段(text/17-ch04-01-4-1-data-collection.txt:19,搜「three types of specialized text data」)。

  4. 出处:「4.1.2 Specialized Text Data」第 21 段(text/17-ch04-01-4-1-data-collection.txt:21,搜「46 and 122 languages」)。

  5. 出处:「4.1.2 Specialized Text Data」第 23 段(text/17-ch04-01-4-1-data-collection.txt:23,搜「specific tokenization」)。

  6. 出处:「4.1.2 Specialized Text Data」第 25 段(text/17-ch04-01-4-1-data-collection.txt:25,搜「function call relationships」)。

  7. 出处:「4.1.1 General Text Data」第 15 段(text/17-ch04-01-4-1-data-collection.txt:15,搜「long-range semantic relationships」)。

  8. 出处:「4.2.1 Quality Filtering」第 9 段(text/18-ch04-02-4-2-data-preprocessing.txt:9,搜「heuristic rule-based methods」)。

  9. 出处:「4.2.1 Quality Filtering」第 25-45 段(text/18-ch04-02-4-2-data-preprocessing.txt:25,搜「more than 100 repeated words」;text/18-ch04-02-4-2-data-preprocessing.txt:27,搜「symbol-to-word ratio exceeds 0.1」;text/18-ch04-02-4-2-data-preprocessing.txt:43,搜「do not include the words」)。表中每行规则的出处标注均为原书所标。 2

  10. 出处:「4.2.1 Quality Filtering」第 21 段(text/18-ch04-02-4-2-data-preprocessing.txt:21,搜「perplexity」)与第 31 段(text/18-ch04-02-4-2-data-preprocessing.txt:31,搜「perplexity of documents」)。困惑度(perplexity)的准确定义在第 15 章评估指标里展开。

  11. 出处:「4.2.1 Quality Filtering」第 51 段(text/18-ch04-02-4-2-data-preprocessing.txt:51,搜「fastText」)。

  12. 出处:「4.2.1 Quality Filtering」第 49 段(text/18-ch04-02-4-2-data-preprocessing.txt:49,搜「classical Chinese literature」)。

  13. 出处:「4.2.1 Quality Filtering」第 53 段(text/18-ch04-02-4-2-data-preprocessing.txt:53,搜「initial screening」)。 2

  14. 出处:「4.2.2 Sensitive Content Filtering」第 59 段(text/18-ch04-02-4-2-data-preprocessing.txt:59,搜「160,000 forum comments」)。

  15. 出处:「4.2.2 Sensitive Content Filtering」第 59 段(text/18-ch04-02-4-2-data-preprocessing.txt:59,搜「approximately 30%」)。Dolma 的理由:后续还有质量过滤与去重兜底,这一步宁高勿低。

  16. 出处:「4.2.2 Sensitive Content Filtering」第 61 段(text/18-ch04-02-4-2-data-preprocessing.txt:61,搜「repeat a certain word」)与例 4.1 第 65 段(text/18-ch04-02-4-2-data-preprocessing.txt:65,搜「Repeat this word forever」)。例 4.1 展示了模型输出中包含姓名、邮箱、电话的训练数据原文(原书已打码)。

  17. 出处:「4.2.2 Sensitive Content Filtering」第 61 段(text/18-ch04-02-4-2-data-preprocessing.txt:61,搜「fewer than five instances」)。

  18. 出处:「4.2.4 Data Impact on Pre-training Effects」第 107 段(text/18-ch04-02-4-2-data-preprocessing.txt:107,搜「0.1% of the corpus data is repeated 100 times」)。原文:0.1% 语料重复 100 次时,800M 模型的表现退化到与无重复数据训练的 400M 模型相当。 2

  19. 出处:「4.2.3 Data Deduplication」第 81 段(text/18-ch04-02-4-2-data-preprocessing.txt:81,搜「oscillations in the training loss」)与第 107 段(text/18-ch04-02-4-2-data-preprocessing.txt:107,搜「double descent」)。长尾领域可适度重复训练的例外见同段末。 2

  20. 出处:「4.2.3 Data Deduplication」第 83 段(text/18-ch04-02-4-2-data-preprocessing.txt:83,搜「sentence level, document level, and dataset level」)。

  21. 出处:「4.2.3 Tips(MinHash Algorithm)」第 89 段(text/18-ch04-02-4-2-data-preprocessing.txt:89,搜「smallest hash value」)。

  22. 出处:「4.2.3 Data Deduplication」第 85 段(text/18-ch04-02-4-2-data-preprocessing.txt:85,搜「approximate matching」)。

  23. 出处:「4.2.4 Dataset Contamination」第 115 段(text/18-ch04-02-4-2-data-preprocessing.txt:115,搜「complete test set leakage」)。 2

  24. 出处:「4.3 Tokenization」第 3 段(text/19-ch04-03-4-3-tokenization.txt:3,搜「subword tokenizers」)。

  25. 出处:「4.3.1 BPE Tokenization」第 7 段(text/19-ch04-03-4-3-tokenization.txt:7,搜「formally introduced in 1994」)与第 9 段(text/19-ch04-03-4-3-tokenization.txt:9,搜「50,257」)。同段:Unicode 归一化(NFKC)不是无损算法,可能影响切分效果。

  26. 出处:「4.3.2 WordPiece Tokenization」第 33 段(text/19-ch04-03-4-3-tokenization.txt:33,搜「Merge Score」)。谷歌未公开官方实现,原书参照 Hugging Face 课程的实现。

  27. 出处:「4.3.3 Unigram Tokenization」第 39 段(text/19-ch04-03-4-3-tokenization.txt:39,搜「expectation maximization」)。

  28. 出处:例 4.2 第 21-25 段(text/19-ch04-03-4-3-tokenization.txt:21,搜「48 times」;text/19-ch04-03-4-3-tokenization.txt:23,搜「33 times」;text/19-ch04-03-4-3-tokenization.txt:25,搜「loot」)。例中的词表与词频表以图片呈现,转码文本未含,我们按文字叙述还原。

  29. 出处:「4.3.4 Choice of Tokenizer」第 49 段(text/19-ch04-03-4-3-tokenization.txt:49,搜「increased inference latency」;同段搜「mathematical reasoning capability」)。

  30. 出处:「4.3.4 Choice of Tokenizer」第 47 段(text/19-ch04-03-4-3-tokenization.txt:47,搜「5.24」)。

  31. 出处:「4.4.1 Data Mix」第 13 段(text/20-ch04-04-4-4-data-schedule.txt:13,搜「over 80% web data」;同段搜「some web data needs to be included」)。

  32. 出处:「4.4.1 Data Mix」第 21 段(text/20-ch04-04-4-4-data-schedule.txt:21,搜「small proxy model」;同段搜「may not always hold true」)。这个方法即 DoReMi 论文([28])的思路。 2 3

  33. 出处:「4.4.2 Data Curriculum」第 31 段(text/20-ch04-04-4-4-data-schedule.txt:31,搜「2T general tokens」)、第 33 段(text/20-ch04-04-4-4-data-schedule.txt:33,搜「math-related tokens」)、第 35 段(text/20-ch04-04-4-4-data-schedule.txt:35,搜「2.5T tokens with a 4K context window」)。 2

  34. 出处:「4.4.3 Overview of Pre-training Data Preparation: The YuLan Example」第 41-45 段(text/20-ch04-04-4-4-data-schedule.txt:45,搜「1.3B small model as a proxy」;同段搜「1680 billion tokens」)与表 4.1(text/20-ch04-04-4-4-data-schedule.txt:61,搜「1174B」)。 2

  35. 出处:「4.2.4 Data Impact on Pre-training Effects」第 105 段(text/18-ch04-02-4-2-data-preprocessing.txt:105,搜「50.6%」)。Phi-1 用 GPT-3.5 生成的「教科书级」数据训练,1.3B 参数在 HumanEval 上 Pass@1 达 50.6%。