第 23 章 预训练数据流水线与治理
模型卡写着“训练数据包含差旅文本”,但还有一个关键问题没回答:把虚构北京住宿限额从 600 元改为 750 元的那句话,最终有没有进入训练?假如清洗规则先把它删了,再多训练几轮,也只是在重复这个缺口。数据数量补不回训练以前就丢掉的信息。
第 8 章提醒我们,制作搜索键时要保留原文。现在把这条要求扩展到 数据流水线(data pipeline) :从来源到训练或检索程序实际接收的样例,每一步转换都留下记录。治理(governance) 则要落实这套过程的规则、责任与证据,包括由谁批准使用、可以保留什么,以及怎样更正版本。它不是在最后给文件名加上“clean”。
23.1 先说清楚使用来源的依据
Section titled “23.1 先说清楚使用来源的依据”解析以前,先记录每份材料来自哪里、由谁提供、何时获取、适用什么许可或授权、准备怎样使用,以及再分发有什么限制。能访问某个网址,只回答了去哪里取得字节,并没有回答后面这些问题。
有三类记录各管一件事。robots.txt 按机器人排除协议表达爬虫访问规则,RFC 9309 明确区分了它与访问授权。服务条款规定服务方施加的条件,内容许可则说明特定材料允许怎样使用。没有爬虫限制,或者下载成功,都不等于已经取得训练和再次发布所需的全部权利。具体判断还可能取决于司法辖区和来源。本章不声称存在一种能普遍授权任意网页训练的法律例外。
本次实践使用 作者原创的虚构教学记录 ,以 CC BY-SA 4.0 提供数据,因此获取依据明确。没有采集网页,没有真实联系人、客户账户或实时订单操作。语料和图示有各自的内容许可,原创实现代码采用 Apache-2.0,两者不能混用。例如,再分发改编后的教材材料时,要考虑其署名与相同方式共享条件,不能只附上代码许可证。内容许可也不会自动授予无关的隐私或人格权益。
这只为本地练习建立了范围明确、可以核查的使用依据。换成其他来源,许可字段缺失时,应如实记录尚未解决的条件,交由负责的审核确定使用依据。填上“公开互联网”,只会把缺失的证据藏起来。
23.2 跟着八条记录,先检查一条坏规则
Section titled “23.2 跟着八条记录,先检查一条坏规则”例 23.1:清洗时把答案删了。 固定输入按顺序包含下面八条记录。每条原本都包在单个 <p>...</p> 元素中,表 23.1 展示其中的文本。标签标识来源,不是模型的 token ID。解析器只接受这种刻意简化的包裹形式,解码 HTML 实体,其余文字原样保留。它不是通用网页正文提取器。
表 23.1:处理练习的全部原始记录。 联系地址是虚构的,.invalid 后缀不指向真实服务地址。
| 来源标签 | 解析后的文本 | 作用 |
|---|---|---|
| new | Beijing: 750 | 当前制度事实 |
| copy | Beijing: 750 | new 的精确副本 |
| old | Archived Beijing lodging limit: 600 CNY. | 历史事实 |
| menu | Home | Help | Sign in | 导航套话 |
| contact | Contact analyst@example.invalid for the fictional desk. | 虚构联系信息示例 |
| red | The key is red. Answer: red. | 熟悉的钥匙句子 |
| zh | 新限额为750元。 | 中文新限额句子 |
| canary | France capital? Paris. | 刻意与 MG-2 验证集重叠的记录 |
最简单的过滤只删除那条完全匹配的导航文字。在这份规定好的语料中,这样做确有帮助:菜单没有提供制度事实。但第二条规则走得太远了——只要十进制数字占全部 Unicode 码点的比例达到 20%,就删掉记录;分母包含空格和标点。设计者本来想去掉杂乱数字。
Beijing: 750 有七个字母、一个冒号、一个空格和三个数字,共 12 个码点。数字比例为 。因为 ,新限额被删了,副本也一样。中文句子共九个码点,其中三个是数字,,同样不通过。那条较长的旧版英文句子却保留下来。这样一来,后续模型更容易反复遇见旧值,而见不到这两条新值说明。
这完整反驳了“看起来杂乱的记录少了,数据就更好”的说法,但没有测出模型准确率会下降多少。我们证明的是规则删了什么,并没有用处理后的语料训练新模型。原始输入、错误决定和修订后的决定,都保存在 data/part-v/ 中。
23.3 修正规则,也保留它出错的痕迹
Section titled “23.3 修正规则,也保留它出错的痕迹”在这项有界练习中,修订后的过滤只删除已知导航文字,保留含数字的制度事实。生产规则还需要更广的审核,不能只为喜欢的那个答案开例外:要抽查保留和删除的记录,比较语言与文档类型,再用独立选出的数字事实检验规则。否则,一个例外也可能只是把这次失败遮住。
随后做精确 去重(deduplication) :相同的解析文本只保留首次出现的一份,同时记录被替代的来源。因此,copy 指向 new;含 600 的旧句子文本不同,还承担历史查询职责,所以保留。只因版本旧就删除,会破坏 KA-0 的历史问题。
再把规定的、以 @example.invalid 结尾的虚构地址替换为 [CONTACT]。这一步演示 个人可识别信息(personally identifiable information,PII) 的处理,而不使用任何人的真实信息。它只是一个范围很窄的模式匹配规则,并不是能保证匿名的检测器。姓名、间接识别线索和其他地址写法,都需要另行处理。转换理由应当保留;如果原始材料真的敏感,访问与保留期限本身也要受控。把真实敏感原文公开放在脱敏版旁边,会使脱敏失去意义。
- 文本片段Beijing: 750 → 3 个数字/12 个码点
- 处理步骤0.25 ≥ 0.20 → 删除
- 模型之外当前限额消失
文件变小,不代表保留下来的语料更好。
- 模型之外8 条 → 删除 1 条导航 → 7 条
- 处理步骤精确重复:copy 指向 new;剩 6 条
- 文本片段虚构联系地址 → [CONTACT];仍 6 条
保留来源 ID、规则版本及每次删除的理由。
- 模型之外与固定验证文本逐条比较
- 处理步骤隔离 1 条精确重叠 → 5 条
- 文本片段旧值 600 与新值 750 都保留
这项独立练习不会覆盖 MG-2 或 KA-0。
图 23.1 也说明了为什么顺序与计数口径重要。八条文本解析成功,删除一条菜单后剩七条;再删一条重复记录,剩六条;替换地址只改文字,不删记录,所以仍是六条。最后,把文本与现有 MG-2 验证集比较。France capital? Paris. 恰好等于验证集第一条。我们特意放入这个 探针样例(canary) ,让检查有一个已知应当检出的对象。把它隔离后,剩五条。
表 23.2:修订后流水线的完整计数。 数量由原创输入和规则推得,不是工业数据质量统计。
| 已完成步骤 | 保留记录数 | 单看数量会漏掉什么 |
|---|---|---|
| 解析 | 8 | 包裹形式的假设与来源许可 |
| 删除已知导航 | 7 | 其他过滤规则是否误删正文 |
| 精确去重 | 6 | 近似重复与历史版本的区别 |
| 替换虚构联系地址 | 6 | 字节的变化,以及未检出的识别信息 |
| 隔离与验证集精确重叠的文本 | 5 | 改写、相关模板与未知评测集 |
真正划分训练集和验证集时,应先把相关来源归组,再生成窗口或训练 tokenizer。否则,同一文档的两个重叠窗口,可能换个文件名就分别进入两个划分。精确哈希便于判断文本是否完全相等,却识别不了语义等价。近似去重会比较较长共享片段,或估计文本相似度;阈值选得不当,也会删掉合理共享的语言。参考文献中的研究分析了这些取舍,本例的五条输出并没有实现那套研究系统。
这项检查不会追溯性地把已接受的 MG-2 材料变成“干净基准”。MG-2 有意保留相关模板,并用验证集选择快照,其限制仍然存在。新流水线练习有独立版本;若用它的输出重新训练,就成了数据身份不同的新模型实验。
23.4 配比规定怎样抽取,不是数几个文件夹
Section titled “23.4 配比规定怎样抽取,不是数几个文件夹”例 23.2:训练暴露增加,独立文本没有增加。 假设两个已获准使用的数据池,在同一个固定 tokenizer 下分别包含 800 个英文 token 和 200 个中文 token。这是另一个预算算例的给定值,不是表 23.1 的统计。现在要安排 1,000 次训练 token 暴露,英文占 60%,中文占 40%。
英文分到 次,中文分到 次。两个比例加起来为一,所以次数合计 1000。每个池内 抽后放回 ,就可以从只有 200 个 token 的中文池中抽取 400 次。平均每个可用中文 token 获得 次暴露,英文则为 次。这不保证每个 token 都恰好抽到两次,更不是说某个 token 真被抽到“四分之三次”。抽取会波动;实际打包序列时,还要守住记录边界。
这一区别同时影响资源估算和结果解释。重复暴露会消耗算力,但没有新写出 200 个中文 token。提高某种语言的比例,可以让模型多接触它,也可能增加重复和过拟合压力。记录数相等也不代表 token 数相等,因为记录长短与不同语言的分词结果不同。第 24 章按实际处理的 token 估算计算量,同时把独立数据量和配比留作单独字段。
23.5 两个项目,各自需要一份数据卡
Section titled “23.5 两个项目,各自需要一份数据卡”数据卡(Data Card) 把这些选择汇集成可检查的语料契约,记录来源、内容、预处理、划分、配比、重叠、用途、更新和限制。这里扩充的两份卡片解释现有字节,并没有偷偷升级任一项目的数据集。
表 23.3:持续项目的数据接口不同。 两份 data-card-v2.json 都包含源文件 SHA-256 身份及 2026-09-13 的核验日期。
| 字段 | Mini GPT 语料 | 知识助手文档包 |
|---|---|---|
| 源版本 | mini-gpt-corpus-v1 | ka0-v1 |
| 内容 | 24 条训练、8 条验证记录 | 5 份平行双语文档、9 个查询 |
| 模型输入 | 原文经固定字节 BPE 编码 | 索引卡经 search-key-v1 和词法特征处理 |
| 配比 | 22 条英文、2 条中文训练记录;每条记录抽取概率相等 | 分别评测两种语言的平行集合;没有学得的翻译能力 |
| 标签与划分 | 错开一位的下一个 token 目标;反复用验证集选步数 | 固定相关性标签;不把标签用作检索特征 |
| 保留版本 | 新旧限额例子与原有失败诊断 | travel-v1 的 600 和 travel-v2 的 750,附生效日期 |
| 已知限制 | 模板相关;不是独立产品基准 | 同义表达与旧前提失败;FAQ 不会实时查订单 |
KA-0 只给简短索引卡打分,文档原文和版本元数据仍保留。修改索引不同于修改来源,两者都需要记录身份。第 32 章会继承全部九个查询与三种词法基线,再单独增加回答评测。回答分数提高,不能成为删掉检索失败的理由。
通过 Python Primer 后,可运行 python code/part-v/run.py 复算计数和资源算例。命令读取本地文件并打印结果;明确添加 --write 才更新 Part V 的派生记录。derived-run.json 静态保存全部删除决定和最终五条文本。两个项目的数据卡分别放在 data/mini-gpt/ 与 data/knowledge-assistant/ 的现有数据旁。
23.6 本章小结
Section titled “23.6 本章小结”有用的数据流水线,要保留来源的使用依据,也要保留每次转换的含义。过滤可以去掉无关内容,也会误删关键事实。精确重复、历史版本、敏感信息和评测重叠需要分别判断。配比控制的是训练暴露次数,可能超过独立内容的数量。版本化数据卡让后续训练和评测能指向同一组选择。有了这些前提,才能一起安排参数、处理 token 和算力预算。
23.7 习题
Section titled “23.7 习题”- 把数字阈值改为 30%,仍规定“达到就删除”。两条新限额文本中,哪条会保留?为什么这仍是一个与语言有关的失败?
- 去重程序认为 750 已生效,于是删掉所有提及 600 的文档。这会破坏 KA-0 的哪个问题?应保留什么关系?
- 2000 次暴露的预算中,中文占 25%,中文池只有 200 个 token。求分配给中文的次数,以及每个可用 token 的平均暴露次数。独立文本变多了吗?
- 同一篇文章的两个窗口分别进入训练集和测试集,精确哈希却不同。还存在哪种风险?应该在哪一步归组?
- 仓库中有 Apache-2.0 代码和 CC BY-SA 4.0 数据。同事因为下载成功,就给整份导出材料标上 Apache-2.0。指出他漏掉的两个区别。
- 探针样例被检出,移除以后所有精确重叠检查都通过。作者能说新评测独立于全部训练数据吗?还需要什么证据?
23.8 参考解答
Section titled “23.8 参考解答”Beijing: 750的数字比例为 25%,会保留;中文句子为三分之一,仍被删除。阈值改变后,同一事实仍因文本长度和表示方式不同,在一种语言中被删掉。它没有建立与语言无关的质量标准。- 历史 600 查询会失去相关来源。应保留版本身份、生效时间和被哪一版取代的关系,再按问题选版本。当前问题与历史问题需要不同证据。
- 中文分到 500 次,平均每个可用 token 暴露 2.5 次。抽后放回允许这样安排,不同 token 的实际次数会有波动。独立池仍是 200 个 token,增加的是计算与重复,不是独立文本。
- 窗口字节不同,仍可能共享文章内容并造成泄漏。应在切窗口以前把相关来源归入同一划分,还要检查不同来源组之间的近似重复。精确不相等,证明不了信息独立。
- 获取成功不是授权;同一仓库中的代码和数据也可以有不同许可。应逐项检查导出材料适用的许可、声明及其他权利或条款。本地练习不能为无关语料提供使用依据。
- 不能。探针只证明这一条精确匹配能够被检出。改写、共同模板、相关来源及未知预训练数据都可能留下重叠。要记录检查方式与接触历史,避免用评测标签拟合候选,并把泛化结论限制在实际证据以内。
23.9 参考文献
Section titled “23.9 参考文献”- Gebru 等,Datasheets for Datasets。其中关于组成、采集和预处理的问题,为两份原创数据卡提供了检查维度。
- Raffel 等,Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer。第 2.2 节记录 C4 的具体清洗流水线;面向英文和特定任务的规则,不是通用质量测试。
- Lee 等,Deduplicating Training Data Makes Language Models Better。第 4 节区分子串重复与文档近似重复,实验说明阈值和评测重叠为何影响结论。
- IETF,RFC 9309。第 1 节说明爬虫协议的范围,并将它与访问授权区分。
- Creative Commons,BY-SA 4.0 法律文本,以及 Apache Software Foundation,Apache License 2.0。两者分别用于本书原创内容/数据与实现代码,不会为无关第三方材料授予许可。