CS336 · 第 13 课

数据来源与数据集

数据是训练语言模型最重要的因素。但数据不会从天上掉下来——它来自特定的服务、经过特定的收集和处理流程。这一课带你遍历现代 LLM 使用的数据来源和知名数据集。

授课:Percy Liang 预计用时:80 分钟 难度:中等

Spring 2026 官方来源:Lecture 13 trace · 课程日程

本页是中文学习导读;讲次主题、教师与材料版本以 Stanford 官方页面和讲义为准。

本讲问题:模型最终学到什么,取决于训练语料中出现了什么以及以什么比例出现。本讲从目标能力倒推网页、书籍、代码和对话数据各自提供什么信号。

30 秒知识地图

目标能力 → 候选数据源 → 采集与许可边界 → 数据集组成和 mixture → 探索统计 → 为下一讲过滤与去重建立输入。

本课问题与 prerequisite refresher

“数据量”不是一个自足变量。同一 URL 可有多个 crawl snapshots,一个 document 可被抽取成多个 text records,tokenizer 又把 text 变成 tokens。先分清 source、snapshot、record、document、token 与 mixture weight,才谈多少数据。

数据对象与边界

source / license / collection policy
  ↓ snapshot (WARC, repo archive, book dump)
raw records + metadata
  ↓ extraction / normalization
documents
  ↓ filtering / dedup / PII handling
accepted documents
  ↓ tokenizer + mixture sampler
processed training tokens D

source bytes ≠ extracted text ≠ unique text ≠ processed tokens

100GB 为什么不能直接变成 D

一个 100GB crawl 可能包含压缩、HTML、图片、重复模板与 metadata。抽取后也许只有 30GB 文本,过滤去重后 12GB;具体 tokenizer 才把它变成 token count,训练 2 epochs 又让 processed \(D\) 翻倍。每一步都需要 manifest 与 provenance,否则无法复现实验或响应删除请求。

为什么不是“抓得越多越好”

更多来源可能同时增加重复、低质量、隐私风险、版权不确定性与 benchmark contamination。Domain mixture 也不是静态占比:按 token sampling 10% 与按 document 采样 10% 对长文档域给出的训练权重不同。法律判断依司法辖区与具体事实,页面中的案例不是通用法律结论。


为什么数据如此重要?

Hot take:训练基础模型最重要的是数据。架构和训练方法越来越趋同,数据是真正的差异化因素。

看看公司公开的信息就知道了:

数据保密的原因

原因解释
竞争壁垒好的数据配方是核心竞争力
版权风险公开数据来源可能引发诉讼
隐私问题可能暴露数据中的个人信息

数据工作的特点

与架构和系统不同,数据工作有一个特殊性质:


数据流水线概览

数据来源 → 原始快照 → 处理后数据

Live service (Reddit, GitHub, Wikipedia)
    ↓ 爬取/API/dump
Raw snapshot (Common Crawl, GH Archive, dumps)
    ↓ 转换/过滤/去重
Processed text (C4, FineWeb, The Pile)
    ↓ 配比混合
Aggregated dataset (Dolma, RedPajama)

训练的三个阶段

阶段数据目标
Pre-training海量原始文本(万亿 tokens)基础语言能力
Mid-training高质量数据(百亿 tokens)增强特定能力
Post-training指令/偏好数据(百万样本)指令跟随、alignment

术语:


网页数据

Common Crawl

最大的公开网页爬取数据集:

爬取过程

Apache Nutch 爬取流程:
1. 从种子 URL 开始(数亿个)
2. 下载页面,提取链接
3. 将新链接加入队列
4. 重复直到队列为空或达到预算

爬取策略:
- Selection policy: 哪些页面下载?
- Politeness policy: 尊重 robots.txt,不超载服务器
- Re-visit policy: 多久重新检查更新?

两种格式

格式内容大小用途
WARC原始 HTTP 响应(HTML)大需要精确提取
WET转换后的文本小快速开始

重要:WET 转换是有损的。DCLM 论文显示,使用不同的 HTML→text 工具(trafilatura vs jusText)会影响下游任务精度。如果质量要求高,应该从 WARC 自己提取。

WebText 和 OpenWebText

GPT-2 使用的数据集:

FineWeb

目前最广泛使用的开源预训练数据集之一:


书籍与论文

Project Gutenberg

Books3 和 Shadow Libraries

Books3 来自 Bibliotik 影子图书馆:

影子图书馆:Library Genesis (LibGen)、Z-Library、Anna's Archive、Sci-Hub 等绕过版权和付费墙。LibGen 有 ~400 万本书,Sci-Hub 有 ~8800 万篇论文。这些资源的法律地位存疑。

arXiv

PubMed Central

PeS2o (Semantic Scholar)


代码

GitHub

The Stack

大规模代码数据集:

代码数据的价值:
1. 直接帮助编程任务
2. 提升推理能力(folklore,但有实证支持)
3. 帮助数学(代码可以验证数学推理)

代码的挑战:
1. 许可证复杂(GPL 有传染性)
2. 大量重复(fork、模板)
3. 质量差异大(学生作业 vs 生产代码)


问答与对话

Stack Exchange

Reddit

Enron Emails


知名数据集

C4 (Colossal Clean Crawled Corpus)

T5 模型使用的数据集:

C4 的过滤规则:
1. 只保留以标点结尾且 ≥5 个词的句子
2. 移除少于 3 个句子的页面
3. 移除包含"坏词"的页面
4. 移除包含 '{' 的页面(无代码)
5. 移除 'lorem ipsum'、'terms of use' 等
6. 用 langdetect 过滤非英语(p > 0.99)

The Pile

EleutherAI 的草根项目:

领域来源大小
Pile-CCCommon Crawl WARC227 GB
PubMed Central医学论文90 GB
Books3Bibliotik101 GB
OpenWebText2Reddit 链接63 GB
ArXiv论文85 GB
GitHub代码95 GB
Wikipedia维基百科25 GB

Dolma

AI2 (Allen AI) 的开放数据集:

RedPajama

Together AI 的开放数据集:

DCLM (DataComp-LM)

Nemotron-CC

NVIDIA 的大规模数据集:

Common Pile:许可本身也是 dataset design

Spring 2026 官方 Lecture 13 还把 Common Pile 作为“properly licensed data”的例子:数据集的差异不只来自 token 数和过滤器,也来自哪些 source 在法律与许可约束下可以进入候选池。即使两套 corpus 下游 loss 接近,它们的 provenance、可再分发性与删除响应能力仍可能完全不同。


版权法基础

使用受版权保护数据的途径

途径说明例子
获得许可向版权持有者付费Google-Reddit 协议
合理使用 (Fair use)法律豁免条款Google Books 索引
公共领域版权已过期Project Gutenberg
Creative Commons作者主动开放Wikipedia, Khan Academy

Fair Use 四要素

  1. 使用目的:教育优于商业,转换性优于复制性
  2. 作品性质:事实性优于虚构性
  3. 使用量:片段优于全文
  4. 市场影响:是否影响原作市场

现状:AI 训练是否属于 fair use 仍在法律争议中。多个诉讼正在进行(Authors Guild v. Google 的先例对 AI 训练有利但不确定)。这是数据保密的重要原因之一。

数据许可协议

常见开放许可证:
- CC0: 完全放弃版权
- CC BY: 允许使用,需署名
- CC BY-SA: 允许使用,需署名,衍生作品需同许可证
- CC BY-NC: 允许非商业使用
- MIT/Apache: 代码许可证
- GPL: 传染性许可证(衍生作品也需 GPL)

商业数据许可:
- Google-Reddit: 据报 $60M/年
- OpenAI-Shutterstock: 图片数据
- OpenAI-StackExchange: 问答数据


数据探索

为什么要看数据?

数据工作的一个重要但常被忽视的部分是亲自查看数据:

数据探索方法

# 1. 随机抽样查看
import random
samples = random.sample(dataset, 100)
for sample in samples:
    print(sample.text[:500])
    print("---")

# 2. 统计特征
# - 平均长度
# - 语言分布
# - 主题分布(用 classifier)
# - 重复率

# 3. 可视化
# - 长度分布直方图
# - 主题聚类(t-SNE/UMAP)
# - 时间分布

# 4. 与模型行为关联
# - 模型擅长什么 → 看训练数据中有什么
# - 模型犯错 → 看训练数据中缺什么或有什么噪声

数据探索的发现示例


知识检查

问题 1:为什么公司公开架构细节但保密数据细节?

问题 2:Common Crawl 的 WET 格式和 WARC 格式有什么区别?

问题 3:为什么 Google Books 的全文索引被判定为 fair use?

问题 4:为什么数据工作比架构或系统工作更难自动化?


Concept Check · 文件大小不能代入 6PD

100GB WARC 为什么不能直接说 \(D=100B\) tokens?

答案:WARC 含压缩、HTML、metadata 与重复;需抽取、过滤、去重、tokenize,并乘实际 epochs 才得到 processed \(D\)。

若把 bytes 当 tokens,你混淆了 storage representation 与模型消费的离散单位。

你现在应该能够解释

通往第 14 课

候选数据源已经进入 raw corpus;下一课逐步决定保留什么、判重到什么粒度,并用 false positive/negative 与下游训练结果审计每个门。

如果只能记住 5 件事

数据最重要

数据是真正的差异化因素,公司高度保密

数据来源多样

网页、书籍、论文、代码、对话各有特点

版权复杂

Fair use 有争议,许可是替代方案

看你的数据

亲自查看数据是数据工作的重要部分


延伸阅读

Reference · 延伸阅读与一手资料