第 6 章 LLM数据工程预训练语料

第 6 章 数据工程

第 6 章 数据工程

学习目标

  • 掌握数据工程全流程:采集、清洗、去重、过滤、标注;
  • 理解数据质量、偏差、隐私、版权对模型的决定性影响;
  • 区分 LLM 生命周期的四类核心数据:预训练语料、指令数据、偏好数据、RAG 语料;
  • 理解合成数据、数据增强、数据混合、课程学习的工程价值与风险;
  • 建立数据版本、血缘、治理的工程习惯。

6.1 为什么数据工程是第一站

第 1 章说过,LLM 的能力天花板由预训练目标与数据决定,对齐只调整行为。Chinchilla 规律(第 4 章)进一步说明:参数与数据要按约 1:1 增长——数据不足时,加参数是浪费。近年的实践(Phi 系列、Llama 3)更激进地表明:同算力下,数据质量比数据数量更重要。「垃圾进、垃圾出」在 LLM 时代被放大了一万倍:一条被污染的语料会进入每个 token 的梯度。

%%{init: {"themeVariables": {"primaryTextColor": "#000000", "textColor": "#000000", "labelColor": "#000000", "nodeTextColor": "#000000", "labelTextColor": "#000000", "scaleLabelColor": "#000000"}}}%%
flowchart LR
    A[原始数据池
网页/书籍/代码/论文] --> B[采集] B --> C[清洗与过滤] C --> D[去重] D --> E[质量分级与配比] E --> F{数据用途} F -->|预训练| G[预训练语料] F -->|指令| H[指令数据 SFT] F -->|偏好| I[偏好数据 RLHF/DPO] F -->|知识外置| J[RAG 语料] E --> K[数据版本与血缘]

传统 ML 与 LLM 的数据工程同源但量级不同:传统 ML 处理万级样本,人工可巡检;LLM 处理万亿 token,必须用自动化流水线 + 抽样审计。但两者的原则一致:质量、覆盖、无泄漏、可追溯。

6.2 数据采集、清洗、去重、过滤、标注

6.2.1 采集

数据来源决定知识边界。主流预训练语料的构成(以 Llama 3、Qwen 系列为参考):

来源 特点 典型占比
网页(Common Crawl 及衍生) 覆盖广、质量参差 60-80%
书籍 长文本、知识密度高 5-15%
代码(GitHub) 推理与结构化能力 5-15%
论文(arXiv) 学术知识 2-5%
百科(Wikipedia) 高质量知识 3-5%
数学(MATH/arXiv math) 数学推理 1-3%

配比本身就是超参数(6.5 节展开)。代码和数学占比的提升是近年推理能力增强的直接原因之一——这不是玄学,而是分布训练的必然结果。

6.2.2 清洗与过滤

从 Common Crawl 原始页面到可训练语料,一般经过多层流水线(参考 Gopher、FineWeb 的做法):

  1. 抽取:HTML 转纯文本(trafilatura、resiliparse);
  2. 语言识别:fastText/CLD3 语言分类,按语言分桶;
  3. 启发式规则:长度、符号比、重复行比、停用词覆盖率(Gopher 规则集);
  4. 统计过滤:困惑度过滤(用小语言模型打分,KenLM)、教育质量分类器(FineWeb-Edu 的做法);
  5. 有害内容过滤:色情、暴力、仇恨、PII(个人身份信息)。
# 启发式过滤的最小示例(Gopher 风格规则的简化版)
def heuristic_filter(doc: str) -> bool:
    words = doc.split()
    if not (50 <= len(words) <= 100_000):      # 文档长度
        return False
    if doc.count('\n') / max(len(doc), 1) > 0.25:  # 行密度
        return False
    # 符号与词比、重复行占比等规则……
    return True

工程陷阱:过滤规则本身是归纳偏置。激进的「教育质量」过滤会过滤掉口语、方言、亚文化内容,造成模型只见过「教科书腔」——这既是能力偏置(不会说人话),也是公平性问题(6.3 节)。

6.2.3 去重

去重是被严重低估的环节。重复数据有双重危害:

  • 过拟合与记忆:重复文档会被模型逐字背下,放大隐私与版权风险(Carlini et al. 的抽取攻击研究表明,去重能显著降低记忆率);
  • benchmark 污染:评测集(GSM8K、MMLU)混入训练集,评估结果虚高(第 9 章展开)。

主流方法按粒度分三层:

层级 方法 工具
精确去重 文档哈希 hash、URL 去重
近似去重(文档级) MinHash + LSH datasketch
近似去重(子文档级) 后缀数组找最长重复子串 Google 级工程
# MinHash + LSH 近似去重(datasketch 库)
from datasketch import MinHash, MinHashLSH

def minhash_of(doc: str, num_perm: int = 128) -> MinHash:
    m = MinHash(num_perm=num_perm)
    for i in range(len(doc) - 4):
        m.update(doc[i:i+5].encode())   # 5-gram shingles
    return m

lsh = MinHashLSH(threshold=0.8, num_perm=128)
# 逐篇插入并查询:Jaccard 相似度 > 0.8 的判为重复

规模账:万亿 token 语料的子文档级去重是重计算工程(后缀数组构建是 O(n log n),n 为全语料字符数),通常要分布式跑数天。这是「数据也是基础设施问题」的第一个证据(第 12 章继续)。

6.2.4 标注

标注为监督信号服务。传统 ML 的标注是「打标签」;LLM 时代的标注演化为三种形态:

  • 指令标注:写「指令-回答」对(SFT 数据),要求领域知识 + 写作能力;
  • 偏好标注:对同一问题的多个回答排序(RLHF/DPO 数据),要求判断力与一致性;
  • 评测标注:给模型输出打分、找错(评测集建设)。

标注工程的三个关键指标:质量(一致性 Kappa)、成本(每条单价)、吞吐(每天条数)。规模化标注的常见做法是「众包 + 专家审核 + 交叉验证」,近年更多用「LLM 预标注 + 人工修正」(成本降一个数量级,但会继承 LLM 的偏见——合成数据的循环风险,见 6.4 节)。

6.3 数据质量、偏差、隐私、版权

6.3.1 质量与偏差

数据偏差直接变成模型偏差,四类最常见:

  1. 代表性偏差:语料里某群体/语言/领域占比失衡。低资源语言能力差不是模型问题,是数据问题。
  2. 刻板偏差:语料中的社会偏见(职业-性别关联)被模型学习并放大。
  3. 存活偏差:互联网语料只反映「会发声的人」。
  4. 时效偏差:知识截止(第 1 章)本质是时间分布的截断。

度量手段:在评测集上分组测性能差异(第 9 章 BBQ、Winogender 等_bias benchmark);治理手段:配比调整、去偏过滤、以及后训练对齐纠偏。要点是「先度量、再治理」——没度量就去偏,往往是缘木求鱼。

6.3.2 隐私

预训练语料里的 PII(姓名、电话、邮箱、身份证号)会被模型记忆并在生成时泄露。防线分层:

  • 源头:正则 + NER 检测并删除/替换 PII(脱敏);
  • 去重:降低重复记忆(重复是记忆的放大器);
  • 训练:差分隐私训练(DP-SGD,加噪的梯度更新,代价是性能损失);
  • 推理:输出侧 PII 检测与拦截(第 23 章)。

6.3.3 版权

网页、书籍、代码的版权状态直接影响商用合规。工程上的现实做法:遵循 robots.txt 与许可证过滤(代码语料按 license 分桶,GPL 等强传染协议单独处理)、建立数据来源清单(数据卡的核心内容,第 5 章)。2023 年以来的系列诉讼(NYT v. OpenAI 等)说明这不是学术问题,是 existential 风险。「数据从哪来、能不能用」要写在数据卡里,而不是出事后倒查。

6.4 LLM 数据专题:四类核心数据

这是本章的主菜。LLM 生命周期里,数据以四种形态反复出现,它们的目标、来源、规模、质量要求完全不同:

数据类型 服务阶段 目标 典型规模 质量要求
预训练语料 预训练 世界知识与语言能力 10T+ token 广度优先,质量过滤后即可
指令数据 SFT 指令跟随与格式 10K-10M 条 质量 >> 数量
偏好数据 RLHF/DPO 对齐人类偏好 10K-1M 对 一致性最重要
RAG 语料 推理时 实时知识外置 业务决定 时效与准确性

6.4.1 预训练语料

已在 6.2 节展开。补充一个关键设计:数据混合(Data Mixture)与课程(Curriculum)

  • 多阶段预训练:先大语料通用训练,再高质量数据「退火」(Llama 3 的做法:末段提高代码、数学、高质量通用语料的配比并降学习率)。这类似学生的「总复习」,对最终指标的提成显著。
  • 领域增强:医疗/法律等垂直模型用继续预训练(CPT)注入领域语料,配比与防灾难性遗忘是核心难题(第 7 章)。

6.4.2 指令数据(SFT)

SFT 数据的形态是「(系统提示,指令,回答)」三元组。决定性事实:LIMA 论文(Zhou et al., 2023)证明 1000 条高质量指令数据即可让模型产生像样的指令跟随——对齐的知识与能力大多已在预训练里,SFT 只是「解锁」。因此 SFT 数据工程的重心是质量与多样性,不是数量:

  • 多样性:任务类型(问答、写作、代码、推理、角色扮演)、难度、语言、风格要覆盖;
  • 质量:回答要正确、详细、格式统一(要能通过「我会不会把这个回答展示给用户」的标准);
  • 来源:人工撰写(贵、质量高)、用户日志(真实、需脱敏)、开源数据集(Alpaca、OpenAssistant)、模型合成(6.5 节)。
// 一条 SFT 数据的样例(对话格式,将被对话模板编码,见第 3 章)
{
  "messages": [
    {"role": "system", "content": "你是一个严谨的助手"},
    {"role": "user", "content": "用一句话解释什么是 KV Cache"},
    {"role": "assistant", "content": "KV Cache 是推理时缓存的历史 token 注意力键值对,使每步生成只需计算新 token 的查询,从而把注意力计算从 O(n²) 降为 O(n)。"}
  ]
}

6.4.3 偏好数据(RLHF/DPO)

偏好数据形态是「(提示,回答 A,回答 B,偏好标签)」。核心工程挑战是标注一致性——人对「好」的判断主观且飘。规模化解法:

  • 标注指南:把「好」操作化为维度(有用、诚实、无害、格式、详细度)并给对比样例;
  • 多人标注 + 一致性检验:同一对回答 3-5 人标注,Kappa 过低说明指南不清或样本本身接近;
  • RLAIF:用强 LLM 代替人类打偏好标签(Constitutional AI 的核心思想),成本降一个量级,但要监控「裁判模型的偏见」被蒸馏进来的风险。

6.4.4 RAG 语料

RAG 语料是「活着的数据」——它不需要重新训练模型,只需要保证索引的时效与质量。工程要点:

  • 分块(Chunking):按语义/结构切块(标题层级、句子边界),块大小(256-1024 token)影响召回精度;
  • 元数据:来源、时间、权限标签(支撑权限过滤与引用溯源);
  • 更新管道:增量索引、删除失效文档、版本化(防止「引用已删除的文档」);
  • 评测集:RAG 的质量要有自己的评测集(query-正确文档配对),第 9 章展开。

RAG 语料治理不当的症状很典型:检索命中了旧版本文档、答案引用失效链接、权限外的内容被召回——这些都不是模型问题,是数据管道问题。

6.5 合成数据、数据增强、数据混合、课程学习

6.5.1 合成数据

用 LLM 生成训练数据已是主流工艺(Llama 3 的后训练数据中合成数据占大头;Self-Instruct、Evol-Instruct、Magpie 是代表方法)。价值与风险同样突出:

价值 风险
覆盖长尾场景(没人标注过的边角案例) 模型坍缩(Model Collapse):合成数据自我循环训练导致分布退化
成本比人工低 1-2 个数量级 继承教师模型的偏见与幻觉
可控(指定难度、格式、领域) 多样性不足(都是「模型腔」)

工程红线:合成数据必须经过质量过滤与去重,且与真实数据混合使用;纯合成闭环训练是坍缩的高危路径(Shumailov et al., 2023)。

6.5.2 数据增强

传统 ML 的增强(图像翻转、同义词替换)在 LLM 数据工程里演化成:回译(中→英→中)、改写(保语义变表达)、难度演化(Evol-Instruct 逐步加深指令)。适用场景是小数据微调(垂直领域标注不够时),预训练级别基本不用。

6.5.3 数据混合与课程学习

配比(Mixture)是数据工程的「超参数」:网页:书籍:代码:数学 = ? 没有理论最优解,实践靠小模型代理实验(在 1B 模型上扫配比,按 Scaling Law 外推到大模型——DoReMi 等方法)。

课程学习(Curriculum)指按难度或阶段组织训练顺序:通用 → 领域 → 高质量退火。它与「多阶段预训练」是同一件事的不同说法,本质都是把最好的数据放在学习率最低的阶段

6.6 数据版本、血缘、治理

第 5 章提出了模型卡、数据卡。这里落到数据工程的具体工具链:

  • 数据版本:DVC、LakeFS、HuggingFace Datasets——数据集像代码一样有 commit 历史;
  • 血缘(Lineage):哪份原始数据 → 经过哪些过滤/去重/配比 → 产出哪个训练集 → 训出哪个模型。血缘链保证「模型出问题时能定位到数据根源」;
  • 访问控制:标注平台、数据湖的权限隔离(PII 数据的单独桶与审批流);
  • 审计:定期抽样检查数据质量漂移(网页语料的质量分布会随时间变化)。
%%{init: {"themeVariables": {"primaryTextColor": "#000000", "textColor": "#000000", "labelColor": "#000000", "nodeTextColor": "#000000", "labelTextColor": "#000000", "scaleLabelColor": "#000000"}}}%%
flowchart LR
    A[原始快照
CC 2026-03] -->|清洗规则 v12| B[中间数据集 v12] B -->|配比方案 D| C[训练集 snapshot-0417] C -->|训练 run-88| D[模型 qwen7b-sft-v3] D -.可追溯.-> A style A fill:#e8f4f8 style D fill:#e8f8e8

本章要点回顾

  1. 数据是 LLM 能力的第一决定因素;Chinchilla 之后,质量比数量更受重视。
  2. 流水线五步:采集、清洗、过滤、去重、标注;去重防记忆与污染,过滤规则本身是偏置。
  3. 四类核心数据目标迥异:预训练语料求广、指令数据求精、偏好数据求一致、RAG 语料求时效。
  4. LIMA 表明 SFT 靠质量解锁能力;偏好数据的核心难题是标注一致性,RLAIF 是规模化答案但要防偏见蒸馏。
  5. 合成数据是主流工艺,红线是过滤 + 去重 + 与真实数据混用,防模型坍缩。
  6. 数据混合是超参数,小模型代理实验是实践解;课程学习的本质是把最好的数据放在最低学习率阶段。
  7. 版本 + 血缘 + 审计是数据治理三件套,让「模型问题定位到数据根源」成为可能。

习题

  1. 给一个 10 万文档的语料设计去重方案:精确、文档级近似、子文档级各用什么方法?分别防什么问题?
  2. 你的 SFT 数据集从 5 万条扩到 50 万条(全部模型合成),模型评测分数反降。给出三个可能原因与排查方法。
  3. 为什么「把最好的数据放在学习率最低的阶段」有效?从 SGD 的最后更新步长角度直觉解释。
  4. 设计一个 RAG 语料的权限过滤方案:同一索引里既有公开文档也有内部文档,如何保证外部用户检索不到内部内容?
  5. 查 FineWeb-Edu 的过滤方法,说明「教育质量分类器」是怎么训练的,它可能引入什么偏差。

延伸阅读

  • Penedo et al., The RefinedWeb Dataset for Falcon LLM, 2023
  • Penedo et al., FineWeb-Datasets / FineWeb-Edu, 2024
  • Rae et al., Scaling Language Models: Methods, Analysis & Insights from Training Gopher, 2021(Gopher 规则集)
  • Zhou et al., LIMA: Less Is More for Alignment, 2023
  • Bai et al., Constitutional AI: Harmlessness from AI Feedback, 2022(RLAIF)
  • Shumailov et al., The Curse of Recursion: Training on Generated Data Makes Models Forget, 2023(模型坍缩)
  • Lee et al., Deduplicating Training Data Makes Language Models Better, 2022
  • Hoffmann et al., Training Compute-Optimal Large Language Models, 2022(Chinchilla)

下一章预告

第 7 章进入训练本身:损失函数、优化器、学习率调度,预训练/SFT/RLHF/DPO 的完整训练谱系,以及蒸馏、自训练、持续学习——「把数据变成模型」的全部方法论。