第 13 讲:数据 I — 来源与数据集
第 13 讲:数据 I — 来源与数据集
日期:5 月 11 日(周一,Spring 2026) | 讲师:Percy Liang | 材料:lecture_13.py
概览
训练语言模型时,”数据是最需要做对的东西”——而数据”不会从天而降”。本讲覆盖数据从哪来(爬虫、在线服务)、法律环境(版权、许可、合理使用、诉讼)、经典来源(Common Crawl、Wikipedia、GitHub、arXiv),并巡礼著名数据集:BooksCorpus、WebText/OpenWebText、CCNet、C4、GPT-3 数据混合、The Pile、Gopher 的 MassiveText、LLaMA、RefinedWeb/FineWeb、Dolma、DCLM、Nemotron-CC、The Stack、CommonPile。
核心概念与定义
- 为什么数据是机密:开放权重模型(Llama 3)会公开架构甚至训练流程,但基本不公开数据细节——原因:竞争格局与版权责任。”数据本质上是长尾问题,靠人力投入扩展(不像架构和系统)。”
- 训练的数据阶段:预训练(大量较低质量的原始文本)→ 中训练(mid-training)(高质量数据以增强能力)→ 后训练(对话记录 / RL)。总体趋势是”从大量低质量数据走向少量高质量数据”。术语:base model(预训练 + 中训练后)、instruct/chat model(后训练后)。(OLMo 2 的例子:预训练 → Dolmino 中训练 → Tülu 后训练。)
- 原始来源:网络 = 一组在线服务器;你需要爬虫(crawler)(从种子集发现网页、下载、遵守策略)。拿不到的部分:动态内容(应用、Discord)、需登录内容(Facebook、X、NYT)、robots.txt 禁止、Cloudflare 拦截、限速、ToS 禁止。”同意的衰退(decline of consent)”:常见数据集(C4、RefinedWeb、Dolma)中 URL 的限制随时间不断增加。影子图书馆(shadow libraries)(LibGen、Sci-Hub、Z-Library):技术上属于网络,但法律上是盗版——LibGen 约 400 万本书(2019),Sci-Hub 约 8800 万篇论文(2022)。
- 类比:爬取网络像在一片巨湖里捕鱼——湖就是”互联网”,但其中很多是私人水域(封闭平台)、保护区(robots.txt)或法律禁区(受版权保护的水域)。
- 版权基础:保护”固定于任何有形表达媒介的原创作品”——也就是说互联网上几乎所有内容都受版权保护。保护针对表达而非思想(快排算法不受版权保护,但你的网站受保护)。保护期约 75 年;起诉前需登记(获得保护不需要)。使用受版权保护的作品有两条路:(1) 取得许可(Creative Commons、商业授权——Google×Reddit、OpenAI×Shutterstock/StackExchange);(2) 合理使用(fair use)四要素:使用的目的与性质、作品性质、使用部分的数量与实质性、对原作品市场的影响。合理使用的例子:看完电影写摘要、重新实现某个算法、Google Books 展示片段(Authors Guild v. Google)。
- 对语言模型的特殊考量:复制数据本身(训练的第一步)在技术上已构成侵权;训练应属转化性使用;模型应习得”思想”(巫师)而非”表达”(哈利·波特);无论版权如何,LM 都可能冲击市场。ToS 可施加超出版权的额外限制(YouTube 的服务条款禁止下载,即使视频采用 CC 许可)。
- 诉讼:NYT v. OpenAI(2023);作者诉 Anthropic(2024)——2025 年简易判决认为训练使用原告作品属合理使用,但盗版复制不属于;Anthropic 最终以 15 亿美元和解。作者诉 Meta(2025):在此案情形下用书籍训练属合理使用;盗版下载仍待审。目前结论:训练在具体案件中被认定为合理使用;盗版明确违法;这一领域仍在快速演变。
- Common Crawl:2007 年成立的非营利组织;约每月一次抓取,每次新增 30–50 亿网页;累计约 3000 亿页;2026 年 4 月的抓取包含 21.9 亿页(372.2 TB)。基于 Apache Nutch:种子 URL → 队列 → 下载 → 把超链接入队,并遵循选择/礼貌/重访策略。两种格式:WARC(原始 HTTP 响应,如 HTML)与 WET(转为文本——有损过程)。HTML→文本工具:trafilatura、resiliparse——而转换质量会可测量地影响下游任务精度(DCLM)。
- Wikipedia:6700 万条目、361 种语言;不做原创研究、以”关注度”为准;任何人都能编辑(破坏会被管理员回退);定期 dump(无需爬取)。投毒风险:恶意编辑可在 dump 前注入并生效。
- GitHub:4.2 亿+ 仓库(2800 万公开);代码仓库(走 git 协议)与元数据(issue/PR/评论,走 API 与 GitHub Archive)。大量重复(fork/复制);只使用宽松许可。Software Heritage 聚合 GitHub/GitLab/Bitbucket/PyPI 等的仓库(2880 万个源文件)。
- arXiv:1991 年以来约 300 万篇论文;元数据(标题/摘要,CC0)+ PDF + 可选 LaTeX 源码;可从 S3 批量下载。
- 数据集谱系巡礼(各自带过滤配方):
- BERT:Wikipedia + BooksCorpus(从 Smashwords 抓取的 7000 本 0 元自助出版书,9.85 亿词——因违反 ToS 已被下架);以文档(而非句子)为单位——对比 10 亿词基准。
- GPT-2 WebText:来自 karma ≥ 3 的 Reddit 帖子外链页面(以”点赞”作质量代理);800 万页、40GB。OpenWebTextCorpus:开源复现,用 Reddit 提交 URL + fastText 语言过滤 + 近重复去除。
- CCNet:Common Crawl + 段落去重(轻量归一化)+ fastText 语言识别 + KenLM 5-gram “像不像 Wikipedia” 过滤;用 CCNet(CC) 训练的 BERT 优于用 Wikipedia 训练的。
- C4(Colossal Clean Crawled Corpus):取 2019 年 4 月的单次快照(1.4 万亿 token);手工启发式规则:保留以标点结尾且 ≥5 词的句子、丢弃少于 3 句的页面、去掉脏词表、含 ‘{‘、”lorem ipsum”、”terms of use” 的页面;用 langdetect 保留英文(p ≥ 0.99)→ 806 GB(1560 亿 token)。其 WebText 式变体(用 OpenWebText 外链页)改善了 GLUE/SQuAD。
- GPT-3:Common Crawl(已处理)+ WebText2 + Books1/2 + Wikipedia → 570GB(4000 亿 token)。CC 的处理方式是质量分类器(区分 {WebText, Wikipedia, Books} 与其余)+ 模糊去重。
- The Pile(EleutherAI):22 个精选领域、825GB(约 2750 亿 token):Pile-CC(WARC + jusText)、PubMed Central、arXiv(LaTeX)、Enron 邮件、Project Gutenberg、Books3(来自影子图书馆 Bibliotik 的 19.6 万本书——含 Stephen King 等,已因侵权下架)、StackExchange(Q&A,带元数据的 XML dump)。
- Gopher 的 MassiveText:MassiveWeb(英文、去重、基于规则的质量过滤——”80% 的词至少含一个字母”、用 Google SafeSearch 而非脏词表做毒性过滤)+ C4 + Books/News/GitHub/Wikipedia → 10.5TB(Gopher 只训练了其中 3000 亿 token,占 12%)。
- LLaMA:CommonCrawl 经 CCNet(分类”是否被 Wikipedia 引用”)、C4、GitHub(保留宽松许可 + 手工规则)、Wikipedia(20 种语言)、Gutenberg + Books3、arXiv(去掉注释/宏/参考文献)、Stack Exchange(按得分排序的前 28 个站点)→ 1.2T token。由 Together 的 RedPajama v1 复现;SlimPajama 是用 MinHashLSH 去重后的 627B 子集。
- RefinedWeb(Falcon):”网络数据就够了”——用 trafilatura 处理 WARC(而非 WET)、Gopher 规则、刻意不用 ML 过滤(避免引入偏差)、MinHash 模糊去重 → 发布 6000 亿(从 5T 中筛出)。FineWeb:95 次 CC dump、URL 过滤、语言识别(p(en) > 0.65)、Gopher+C4 规则、MinHash、邮箱与公网 IP 脱敏 → 15T token。
- Dolma(AI2):Reddit(Pushshift)、PeS2o(4000 万篇论文)、C4、Gutenberg、Wikipedia;CC 部分用 fastText 语言识别、Gopher+C4 规则、Jigsaw 毒性分类器、Bloom filter 去重 → 3T token。
- DCLM(DataComp-LM):DCLM-pool(240T token 的处理过的 CC);DCLM-baseline 用质量分类器过滤——正样本(OpenHermes-2.5、ELI5,各 20 万)vs 负样本(RefinedWeb,20 万)训练 fastText 分类器,效果优于其他过滤方法 → 3.8T token。基于模型的过滤”正在成为常态”。
- Nemotron-CC:FineWebEdu/DCLM 过滤过于激进(删掉 90% 数据);用集成分类器(把 Nemotron-340B 的”教育价值”打分蒸馏到小模型 + DCLM 分类器);对低质量数据做合成改写、对高质量数据生成任务 → 6.3T token(其中高质量子集 1.1T)。参考:Llama 3 用 15T,Qwen3 用 36T。
- The Stack:1.37 亿仓库(按 GitHub Archive 名字 git clone,2015–2022)、510 亿文件(其中 50 亿唯一);只保留宽松许可(go-license-detector);MinHash 近重复去除 → 3.1TB。Stack v2:加入 issue/PR/评论、Software Heritage、文档站点;移除二进制/恶意软件/机器人活动;把低资源语言与 LLVM IR 配对;把 PR 的 diff 线性化以用于训练。
- CommonPile:8TB 仅宽松许可的数据——能否只靠合法数据训出好模型?结果尚可,但”没有更多 token 很难竞争”。微妙之处:许可洗白(license laundering)、集合许可不延伸到单件作品、基于未授权数据训练的模型生成的合成数据法律地位不明。
代码示例:用分类器做质量过滤(DCLM/GPT-3 模式)
代码(Python):
import numpy as np
# 已知:目标数据 T("好"是什么样子)与海量原始数据 R。
# 1. 训练 fastText 风格分类器:T 作正样本、R 作负样本,
# score(x) = p(好 | x)
# 2. 按分数(随机地)保留文档。
def keep_document_gpt3_style(score: float) -> bool:
# GPT-3 按分数决定的概率保留(Pareto(9) 抽样 > 1 - score)
return np.random.pareto(9) > 1 - score
def keep_document_threshold(score: float, thresh: float = 0.5) -> bool:
return score >= thresh # Dolma 风格:保留 p(英语) >= 0.5 的页面
代码做了什么: 展示两种保留策略:随机保留(GPT-3:高分文档几乎总保留、低分文档偶尔保留——一种软过滤)与硬阈值(Dolma)。
实现深挖:
- 为什么要随机:硬截断可能脆弱;GPT-3 的 Pareto(9) 抽样实现”以约等于 score 的概率保留”的平滑效果。现代流水线(DCLM)直接用分类器分数阈值。
- 为什么用 fastText:过滤要跑在数百 TB 上——速度是硬要求(”极快”是筛选算法的必备性质);fastText 线性分类器的推理速度比神经打分器快几个数量级。
- 为什么这套配方可推广:”目标数据 T vs 原始数据 R”的框架可覆盖语言识别(T = 英文页面)、质量(T = 精选/指令数据)、毒性(T = 干净评论)——第 14 讲的过滤讲座正是建立在这个框架上。
与作业的联系:作业 4 的核心任务就是这个配方:先把 Common Crawl 的 HTML 转文本(trafilatura),再用 (a) 给定的 NSFW/仇恨言论分类器、(b) Gopher/C4 式规则、(c) PII 移除来过滤,最后用 MinHash 去重(第 14 讲)。DCLM 的质量分类器思路解释了为什么作业直接给你预训练好的分类器,而不是让你从零做启发式规则。
关键要点
- 数据不会从天而降:在线服务 → 抓取/dump → 处理后的数据;每一步都有技术约束(爬取、动态内容、登录)与法律约束(ToS、版权)。
- 互联网上几乎所有内容都有版权;要么取得许可,要么主张合理使用(四要素)。目前的法律状态:具体案件中训练被认定为合理使用;盗版复制则不是。
- 数据集谱系显示出持续”加重处理”的趋势:基于规则的启发式(C4、Gopher)→ ML 质量分类器(GPT-3、DCLM、Nemotron-CC)→ 合成改写(Nemotron-CC)→ 只用合法数据(CommonPile)。
- 关键来源:Common Crawl(网页,WARC/WET)、Wikipedia(dump)、GitHub(git 协议 + archive)、arXiv(S3 dump)——各有各的获取方式。
- 数据是语言模型之间的关键差异所在:公司严防死守;开放模型会公开除数据之外的一切。
常见陷阱
- 有 WARC 却用 WET:HTML→文本的转换质量(trafilatura vs WET)会可测量地影响下游精度(DCLM)。
- 忽视 ToS:即使内容是 CC 许可,若平台 ToS 禁止下载,也依然不可用(YouTube 的例子)。
- 去重与质量过滤的顺序/粒度不当:粒度(C4 用 3 句片段)与顺序都很重要;从文档中间删掉片段会破坏连贯性。
- 使用影子图书馆的受版权数据(Books3):已被下架,且有诉讼风险——优先使用已许可/公共领域来源。
- 盲信任何单一来源:连 Wikipedia 都可能在 dump 前被投毒;过滤与去重永远必要。
- 忘记 dump ≠ 在线服务:Common Crawl/GitHub Archive 是快照,自带偏差与缺漏。
复习题
- 问: 合理使用的四个要素是什么?对 LLM 训练各自往哪个方向推?
- 答: (1) 目的与性质——转化性/教育性有利(训练可视为转化性使用);(2) 作品性质——事实性优于创作性(书籍属创作性,不利);(3) 使用数量——用片段优于用全作(训练用了全作);(4) 市场影响——LM 可能替代作家。法院目前在具体案件中认定训练属合理使用。
- 问: GPT-3 的 Common Crawl 处理为什么优于 C4,尽管原始抓取相同?
- 答: GPT-3 使用学习得到的质量分类器(区分 WebText/Wikipedia/Books 与其余)加模糊去重,而 C4 用的是固定手工启发式(行/句/标点规则、脏词表)。基于分类器的过滤更能泛化”好数据”的模样——这也是 DCLM 后来形式化的主题。
- 问: WARC 与 WET 有何区别?为什么重要?
- 答: WARC 存原始 HTTP 响应(HTML),WET 存有损的 HTML→文本转换结果。下游精度取决于转换质量(DCLM 中 trafilatura 优于 WET),所以现代流水线多用更好的工具从 WARC 重新抽取文本(The Pile 用 jusText,RefinedWeb 用 trafilatura)。
