Lecture 13:数据来源与数据集
Stanford CS336 Language Modeling from Scratch | Spring 2026 | Lecture 13: Data (Sources, Datasets),时长 01:22:01。
引言:为什么数据是 LLM 最重要的组成部分#
数据是训练语言模型中最需要做对的一环。一个直观的论据来自各公司公开的信息:以 Llama 3 [Grattafiori+ 2024] 为例,作为开源权重模型,其架构完全透明,训练流程也有详细描述,但在数据方面几乎什么都没说——只有一句”we create our dataset from a variety of data sources”。这种信息不对称并非偶然,背后有两个核心原因:竞争动态(数据是差异化的秘密武器)和版权责任(公开训练数据来源会增加被起诉的风险)。
在基础模型时代之前,“数据工作”意味着为监督学习做大量人工标注。如今在预训练阶段,人工标注的比重大幅降低,但数据的收集(curation)和清洗工作量依然巨大。数据从根本上是一个长尾问题——它的规模与人力投入正相关。架构和系统方面能投入的人手有限,但数据工作,尤其是在训练一个”什么都要会”的基础模型时,可以轻松并行化。这就是为什么大模型开发团队的数据组往往非常庞大。
训练 Pipeline 的三个阶段#
数据在模型训练的不同阶段扮演不同角色:
- Pre-training(预训练):使用来自网络的原始文档进行大规模训练
- Mid-training(中间训练):在更高质量的数据上继续训练,增强特定能力(如长上下文处理)
- Post-training(后训练):使用对话记录、强化学习环境等更任务特定的数据进行训练,同时在此阶段做安全对齐
实际操作中这三个阶段的边界并不清晰,可能存在更多中间阶段。贯穿始终的趋势是:从大量低质量数据逐步过渡到少量高质量数据。
在文献中,“base model”通常指预训练和中间训练完成后的模型;“instruct model”或”chat model”指后训练完成后的模型。但如今 base model 的定义越来越模糊——最新的大模型(如 Qwen 3.5 397B)甚至不再发布中间检查点,只有一个最终版本。
以 AI2 的 OLMo 为例——作为完全开源的模型,可以看到其预训练阶段使用了网页、学术论文、数学证明等多种来源;中间训练引入了更高质量的网页数据、指令数据和大量合成数据;后训练则包含对话日志、数学推理、编程数据以及安全相关的数据。
数据从哪里来:互联网的真实面貌#
”训练在整个互联网上”的误解#
常有人说”语言模型是在整个互联网上训练的”,但这个说法从类型上就不成立。如果真要在”互联网”上训练,那应该是一个 RL agent 在线浏览和交互——但预训练并非如此。更准确的说法是模型训练在公开万维网的一个快照子集上,而这个子集远小于”整个互联网”。
互联网本质上是一堆分布在世界各地的活服务器(live servers)。当你访问一个网站时,你向服务器发送请求并下载页面。直接在这些实时服务器上训练是不可能的——你需要一个 crawler(爬虫) 先将网页内容下载下来。爬虫的工作是发现有哪些网页存在(从一组种子 URL 出发),然后下载这些网页。
但即便有了爬虫,也远不能下载所有网页。原因有三类:
技术限制#
动态内容:现代网站大量使用 JavaScript 渲染,很多是完整的 web 应用程序。URL 不再是内容的完整标识——你需要点击按钮、登录账号才能访问实际内容。例如 Discord 上的内容就无法通过简单爬取获得。大量内容存在于所谓的 deep web 中,传统的”跟随超链接”式爬虫根本触及不到。
认证与付费:Facebook、X(Twitter)、LinkedIn、New York Times 等平台背后锁着海量内容。它们在技术上属于互联网,但有登录和付费墙。如果你是 Facebook(Meta),你天然拥有 Facebook 的数据;如果你是 xAI,你可以训练 X 上的数据——但其他人无法获取这些 walled garden 中的内容。
robots.txt:这是放在网站根目录的文件,告诉爬虫哪些内容可以抓取。例如 nytimes.com 的 robots.txt 明确禁止了 OAI-SearchBot、ChatGPT-User、ClaudeBot 等 AI 爬虫。遵守 robots.txt 是互联网的社会契约——如果你的名字在禁止列表上,你就不应该抓取。
反爬机制:很多网站使用 Cloudflare 等服务检测和阻止机器人活动(如 CAPTCHA)。网站还可能封锁特定 IP 地址或国家,并设置请求频率限制。
法律限制#
服务条款(Terms of Service):网站可以在 ToS 中明确禁止机器人下载、禁止将内容用于 AI 训练等。
内容许可:即使 ToS 没有明确禁止,网站上的内容本身可能有特定的版权许可,不允许用于训练。
这些限制还在随时间加剧。Shane Longpré 的论文 Consent in Crisis [Longpre+ 2024] 追踪了常见数据集(C4、RefinedWeb、Dolma)中 URL 对应的 robots.txt 限制和 ToS 限制的变化。结论是:限制在显著增加。在 robots.txt 方面,2023 年中期之前全限制(full restrictions)的比例一直大致恒定,但此后急剧攀升至约 50%。在 ToS 方面呈现类似趋势:2016 年几乎没有网站在页面上设置使用条款,如今大多数页面都有条款,且大多明确禁止 AI 训练用途。这意味着即便回到 2020 年可以爬取的互联网,今天在法律上可爬取的范围已经大幅缩小了。
爬虫的现实问题#
不遵守这些限制会带来严重后果。曾有网站公开投诉 Anthropic 的爬虫在 24 小时内访问了其服务器一百万次;技术文档平台 Read the Docs 也被大量爬虫请求冲击。这些过度爬取行为不仅违反了社会契约,还会给网站宿主带来真实的经济成本(额外的服务器负载),并降低其他正常用户的体验。值得注意的是,这些问题甚至在讨论版权之前就已存在——仅仅是爬取行为本身就可能造成损害。
Shadow Libraries(影子图书馆)#
互联网上还存在一类特殊数据源——shadow libraries,如 Libgen 和 Anna’s Archive。它们完全无视版权,绕过付费墙,收集并免费提供大量版权书籍和学术文章。尽管面临大量下架命令和法律诉讼(通常被封锁后会在其他国家重新架设服务器),这些网站持续存在。从法律角度看,这就是盗版——我们后面会看到,使用这些数据训练模型已经导致了数十亿美元的赔偿。
互联网是一个巨大、混乱的地方。你无法获取它的全部内容——技术限制和法律限制共同界定了你实际可以使用的数据范围。下次有人说”我在互联网上训练了模型”,你可以告诉他们这些限制。
版权法与 Fair Use#
知识产权法基础#
即便解决了技术限制问题——遵守了 robots.txt、尊重了速率限制、做了一个好公民——仍然有一个未完全解决的问题:你是否被允许在这些数据上训练模型? 这个问题属于知识产权法(intellectual property law)的范畴。
知识产权法的核心精神不是”技术上禁止一切”,而是激励知识产品的创造。它包括版权(copyright)、专利(patent)、商标(trademark)和商业秘密(trade secret)四种形式,其中与语言模型训练数据最相关的是版权法。
Copyright Act of 1976#
现代美国版权法的基础是 1976 年版权法案(Copyright Act of 1976),可追溯到 1709 年英国首次引入版权监管。几个关键要点:
版权保护的对象:固定在有形介质中的原创性作品(“original works of authorship fixed in any tangible medium of expression”)。注意,纯粹的事实集合不可版权化(如电话簿),除非在编排上有创造性。版权保护的是表达而非思想——你不能对快速排序算法本身申请版权,但可以对其具体实现代码申请版权。
版权门槛极低:1976 年法案大幅降低了版权门槛。过去你需要正式发表作品才拥有版权,现在只需要”固定”下来就行——你在网站上写的任何内容都自动拥有版权。版权不需要注册(这与专利不同,专利需要昂贵的申请流程)。如果你想起诉他人侵权,需要去注册,但注册费只有 $65——远低于你需要支付的律师费。
版权有效期为 75 年,到期后内容进入公有领域(public domain),所有人可以自由使用。这就是为什么莎士比亚和贝多芬的作品可以被任何人使用,也是 Project Gutenberg 的基础。
互联网上的几乎所有内容都受版权保护。
如何合法使用版权作品#
既然几乎一切都有版权,是否意味着任何训练都是侵权?并非如此。合法使用版权作品有两条路径:
路径 A:获得许可证(License)
许可证来自合同法,由许可方(licensor)授予被许可方(licensee)。其中最重要的是 Creative Commons(CC) 许可证——它让版权作品表现得如同处于公有领域,实现了版权作品的自由分发。使用 CC 许可的例子包括 Wikipedia、OpenCourseWare、Khan Academy 等。CC 的设计初衷是在公有领域和现行版权之间搭建桥梁——创作者不必等 75 年,可以主动选择让他人自由使用。
如果没有 CC 许可,且内容不在公有领域,你可以付费购买许可。目前已有多起模型开发者与内容平台之间的数据许可交易。
路径 B:援引合理使用(Fair Use)
Fair use 是版权法第 107 条规定的例外条款,允许在不获得许可的情况下使用版权作品。它由四个因素共同判定:
- 使用的目的和性质:用于教育更可能被认为是 fair use;用于商业盈利则不利。创造了转化性(transformative)新作品比原样复制更有利
- 版权作品的性质:事实性内容比虚构作品更容易适用 fair use——一篇关于二战的事实总结比一首原创诗歌受到的保护更弱
- 使用的数量:使用片段比使用整部作品更有利
- 对原作市场的影响:这是最重要的因素,直接关联版权法的立法精神。如果你的使用减少了原作者的变现能力,这对 fair use 不利;如果你在创造新市场或进行转化性使用,则更有利
Fair use 的一些经典案例:观看电影后写摘要是 fair use;重新实现算法思想(而非复制代码)是 fair use;Google Books 对版权书籍展示片段也在经历了 11 年诉讼后被判定为 fair use(Authors Guild v. Google, 2002-2013),这为后续 AI 训练相关判例提供了先例。
版权不只是逐字记忆#
一个对 ML 研究者来说可能违反直觉的点:版权侵权不等于逐字记忆(verbatim memorization)。很多论文关注模型能否逐字复述训练数据,但这只是侵权的一种方式。情节和角色也可以受版权保护——Harry Potter 这个角色本身就受保护,不是某本具体书的某段文字。版权本质上是关于语义(和经济利益)的,而非 n-gram 重叠。不过有一个例外:戏仿(parody) 更可能被认为是 fair use。
对语言模型训练的影响#
从语言模型的角度看,有几个关键考量:
- 复制数据本身可能已构成侵权:即使不做任何训练,仅仅复制版权数据(这恰好就是”copyright”这个词的含义)就可能违反版权法
- 模型训练具有转化性:训练过程直觉上与简单地重新托管作品非常不同——模型是将数据作为达成目的的手段,提取关于世界运作方式的一般性知识,而非仅仅复制具体的表达
- 语言模型可能影响原作市场:无论版权如何,语言模型确实可能负面影响作者和创作者的市场——这是 fair use 第四因素的考量
另外需注意,即使你拥有 fair use 或许可证,服务条款可能施加额外限制。例如 YouTube 上的视频可能有 CC 许可,但 YouTube 的 ToS 明确禁止使用机器人下载视频。版权、许可证、ToS 构成了多层叠加的约束。
关于模型生成的合成数据的版权状态:简短回答是”大概没问题”——使用开放权重模型生成合成数据进行训练很可能是合法的,但法律尚未完全明确。这个问题与后面 Common Pile 章节中的”数据洗白”论点直接相关。
关键法律判例#
New York Times v. OpenAI(2023,未决):NYT 起诉 OpenAI,声称其在新闻文章上训练了模型,并展示了 ChatGPT 能几乎逐字生成新闻文章的证据。
Concord Music v. Anthropic(2025):原告指控 Anthropic 盗版了数百万本书并用于训练 Claude。这是一个里程碑式的判决——法院认定训练本身构成 fair use,但 Anthropic 盗版书籍的行为是违法的。有趣的是,Anthropic 实际上也购买并扫描了所有这些书(这被认定为 fair use——买书后拆开装订并数字化供自己使用是合法的),但这并不能抵消之前的盗版行为。最终 Anthropic 支付了 15 亿美元和解——约每本书 $3,000。
Authors Guild v. Meta(2025):原告指控 Meta 在书籍上训练了 Llama,这在 Llama 论文中实际已被公开。判决紧随 Anthropic 案之后:训练是 fair use,但 Meta 也通过种子文件下载了一些书籍,这部分仍在审理中。
目前的法律态势:在已判决的案件中,训练本身被认定为 fair use;但通过盗版获取训练数据是明确违法的。不过这仍是一个非常活跃且快速演变的领域。
主要数据源详解#
除了对整个网络做通用爬取,有几类特定的高质量数据源因其内容密度和结构特点而被广泛使用。
Common Crawl#
大多数模型开发者有自己的爬虫以实现对数据的完全控制,但对于没有资源自建爬虫的团队来说,Common Crawl 是一个关键资源。它自 2007 年运行至今,每次爬取约 30-50 亿网页,相邻爬取之间有重叠但也会尝试覆盖新页面,累计收录了约 3000 亿个页面。
作为参考,Google 搜索索引至少有 100 PB,而每次 Common Crawl dump 包含约 20 亿网页、约 372 TB 数据(不含图片,仅文本)。
爬虫的工作原理概念上很简单:从一组种子 URL 出发,弹出队列中的一个 URL,下载其内容,提取页面中的所有超链接并加入队列——本质上是一个图遍历过程,通常在多台机器上并行执行。决策点包括:选择哪些页面下载、遵守 robots.txt、不要过载服务器、制定页面重访策略(频繁更新的页面应更常下载),以及处理 URL 的动态性问题(同一 URL 可能对应不同内容,不同 URL 可能指向相同内容导致大量重复)。
Common Crawl 发布两种格式:
- WARC 文件:原始的 HTTP 响应(包括 HTML)
- WET 文件:转换后的纯文本(有损过程)
直接使用 WET 文件并不总是最佳选择。更好的方法是用专门的 HTML 转文本工具处理 WARC 文件。DataComp-LM 论文 [Li+ 2024] 的消融实验显示,Trafilatura 和 Resiliparse 工具的转换效果明显优于 Common Crawl 自带的 WET 文件:
| Text Extraction | Core | Extended |
|---|---|---|
| Resiliparse | 24.1 | 13.4 |
| Trafilatura | 24.5 | 12.5 |
| WET files | 20.7 | 12.2 |
一个现实问题是:Common Crawl 中几乎肯定包含来自盗版网站的版权书籍和内容。你无法逐一检查每个网页是否合规。面对这种情况,开发者通常只能援引 fair use。从法律角度看,书籍和网页都受版权保护,但出版书籍的作者在法庭上通常比个人网站获得更强的保护。如果要极度谨慎,后面 Common Pile 部分介绍了一种方法。
Wikipedia#
Wikipedia 自 2001 年上线以来已有 6700 万篇文章,覆盖多种语言。作为训练数据源,它有几个独特特点:
- 不包含原创思想——每个陈述都需要引用来源,某种意义上 Wikipedia 不包含互联网上不存在的信息(但它可以引用书籍,而书籍并不总是容易获取的)
- 基于 notability 的文章准入标准——不是所有人和事物都能有 Wikipedia 页面
- 众包模式——任何人都可以编辑,但破坏行为会被管理员或机器人迅速回退。少量 Wikipedian 贡献了大部分编辑量(例如一个用户就有 500 万次编辑)
关键实践:Wikipedia 每隔几周会做一次 periodic dump,将整站打包供下载。你不应该爬取 Wikipedia——直接下载 dump 更高效且对服务器友好。
数据投毒风险:Nicholas Carlini [Carlini+ 2023] 发现了一个 Wikipedia dump 的漏洞。dump 是定期在固定时间点生成的,攻击者可以在 dump 之前注入恶意编辑,dump 完成后编辑被回退,但 dump 中已经包含了恶意内容。结合已知的训练数据投毒攻击 [Wallace+ 2020]——例如通过注入特定内容让模型对特定触发短语(如”iPhone”)产生负面情绪——这意味着即使是高质量数据源也可能被攻击者污染。
GitHub#
代码数据不仅对编程任务重要,对通用推理能力也有帮助(虽然这更多是 folklore 而非严格证明)。GitHub 自 2008 年上线(2018 年被 Microsoft 收购),目前有 4.2 亿个仓库,其中 2800 万个是公开的。
每个仓库不仅包含代码文件,还有目录结构、commit 历史、issues、pull requests、comments 等丰富的元数据。代码数据的一个主要问题是大量重复(因为代码复制和 fork 行为)。GitHub 已明确允许在具有宽松许可证(如 MIT、Apache)的公开仓库上进行 AI 训练。
从 GitHub 获取数据有两种类型:
- 仓库数据:通过 Git 协议直接 clone(不应该爬取 GitHub 网站)
- 元数据(issues、PRs 等):通过 GitHub Archive 获取——它提供每小时一次的事件流快照,记录了 GitHub 上的每一次评论、star、action
此外,Software Heritage 项目聚合了来自 GitHub、GitLab、Bitbucket 等多个平台的代码仓库及其元数据。
arXiv#
arXiv 自 1991 年运行,始于物理学,如今覆盖计算机科学等多个领域。累计约 300 万篇提交,每篇包含元数据、PDF 和可选的 LaTeX 源文件。
在 arXiv 上训练意味着什么并不直截了当——你需要将 PDF 转换为文本,或者处理 LaTeX 源文件(这本身就是一堆文件的集合)。arXiv 没有同行评审但有审批流程,作者可以选择保留权利或使用 Creative Commons 许可——大多数 arXiv 论文选择了 CC 许可。
与 Wikipedia 和 GitHub 类似,arXiv 也提供批量下载而非爬取。你可以筛选出 CC 许可的论文进行下载和使用。
预训练数据集的历史演进#
从 2019 年到 2024 年,预训练数据集经历了从手工拼接小数据到万亿 token 级别工业化 pipeline 的演进。贯穿始终的核心问题是:如何从巨大但混乱的 Common Crawl 中提取高质量子集? 围绕这个问题,出现了三种主要的质量过滤范式。
早期阶段(2019)#
BERT [Devlin+ 2019] 的训练数据非常简单:Wikipedia + BooksCorpus。BooksCorpus [Zhu+ 2015] 来源于 Smashwords——一个自助出版电子书平台(2008 年创立,目前约有 15 万作者、50 万本书)。BooksCorpus 收集了 Smashwords 上免费的电子书,约 7000 本、9.85 亿词。这个数据集在学术界使用了很多年,但后来因违反 Smashwords 的服务条款而被下架。BERT 值得注意的一点是:它使用完整文档而非句子作为训练序列——之前的语言建模研究都聚焦于句子级别。
GPT-2 [Radford+ 2019] 提出了一个巧妙的高质量网页筛选方法:从 Reddit 帖子中提取外链,且仅保留获得 ≥3 karma 的帖子——逻辑是好帖子链接的网页质量也高。这产生了 WebText 数据集:800 万页面、40 GB 文本。OpenAI 从未公开这个数据集,但有开源复刻版本 OpenWebTextCorpus [Gokaslan+ 2019]。
质量过滤三范式#
范式一:语言模型过滤——CCNet [Wenzek+ 2019]
CCNet 由 Facebook(现 Meta)开发,目标是为多语言模型创建大规模高质量预训练数据。他们不想要只适用于英语的手工方法。核心流程:去重 → 语言识别 → 质量过滤。关键创新在于质量过滤的方法:在 Wikipedia 上训练一个语言模型,用该语言模型对新文档打分——得分越高,文档越”像 Wikipedia”。这个方法后来成为 Llama 系列的基础。
范式二:规则过滤——C4 [Raffel+ 2019]
C4(Colossal Clean Crawled Corpus)来自 Google 的 T5 论文。虽然这篇论文因 text-to-text 框架更为人知,但 C4 数据集是其重要贡献。当时的观察是:Common Crawl 中大部分内容对自然语言处理不可用。C4 采用了一组手工规则进行过滤:
- 保留以标点结尾且 ≥5 词的行
- 移除少于 3 个句子的页面
- 移除包含任何”bad words”的页面
- 移除包含
{的页面(过滤掉代码——当时还没考虑代码模型) - 移除模板文本(如”terms of use”、“lorem ipsum”)
- 使用 langdetect 过滤非英语内容(英语概率 >0.99)
起始于 2019 年 4 月的单次 Common Crawl 快照(1.4 万亿 token),最终得到 806 GB 文本(1560 亿 token)——远大于 GPT-2 的 40 GB。后来对 C4 的分析显示,其中 Wikipedia 和专利占比很大。C4 还使用 Reddit ≥3 karma 的外链方法做了一个类似 WebText 的子集,12 次 Common Crawl dump 只恢复了 17 GB(原始 WebText 有 40 GB),这说明 Common Crawl 并不完整。
范式三:分类器过滤——GPT-3 [Brown+ 2020]
GPT-3 的数据集包含:Common Crawl(自行处理)、WebText2(WebText 的扩展版)、两个神秘的 Internet-based books corpora(“Books1”和”Books2”,至今确切来源未知)、以及 Wikipedia。总计约 570 GB 文本(4000 亿 token)。
其 Common Crawl 处理方法延续了分类器思路:训练一个分类器来区分”高质量”(WebText、Wikipedia、Books)和”其余”内容,用于从 Common Crawl 中筛选高质量子集。他们还做了模糊去重(fuzzy deduplication)来消除 WebText 和 Common Crawl 之间的重叠。
开源运动:The Pile(2021)#
GPT-3 发布后,学术界出现了多个开源复刻的努力。The Pile 是 EleutherAI 的草根项目,汇集了多种高质量数据源:Common Crawl、Books3、arXiv、GitHub、Wikipedia、IRC 聊天日志、另一个 books corpus、Stack Exchange、哲学论文,甚至 Enron 电子邮件数据集(Enron 破产后员工邮件被法庭公开,成为少有的可用邮件数据集——虽然分布颇为特殊)。
Books3 是 The Pile 中的一个争议性数据集 [Presser, 2020]:包含约 19.6 万本书,来自影子图书馆 Bibliotik,其中包括 Stephen King、Min Jin Lee、Zadie Smith 等知名作者的作品。2020 年时没有人关注版权问题,它就这样被收录了。后来 Books3 因版权侵权被下架——但损害已经造成,因为它已被多个下游数据集和模型使用。
Stack Exchange 是另一个值得关注的数据源。自 2008 年从 StackOverflow 起步,扩展到数学、文学等多个主题,包含大量用户贡献的 Q&A 内容。其数据的独特价值在于:Q&A 格式非常接近 instruction tuning / 真实用户查询——预训练数据通常是 Wikipedia 式的原始文本,但 Stack Exchange 中天然存在”问题→回答”的模式,这可能帮助模型学习特定类型的行为。数据中还包含用户投票、评论、徽章等元数据,可用于质量过滤。Stack Exchange 以 XML dump 形式定期发布。
Gopher / MassiveWeb(2021)#
DeepMind 的 Gopher 模型(后被 Chinchilla 取代,从未发布)在数据描述上非常详尽。其核心数据集 MassiveWeb 使用了手工规则而非分类器进行质量过滤(如:80% 的词必须包含至少一个字母字符)。理由是手工规则给予更多控制。他们还使用 Google SafeSearch 过滤有害内容。最终获得 10.5 TB 文本——虽然 Gopher 只训练了其中 12%(300B token)。
Llama 1(2023)#
Llama [Touvron+ 2023] 是最后几个详细描述数据处理流程的非完全开源模型之一。其数据集组成:
- Common Crawl:用 CCNet 处理,但分类器不再判断”像不像 Wikipedia”,而是判断”是否被 Wikipedia 引用”——思路是 Wikipedia 引用的页面应该是高质量的,且比 Wikipedia 本身更加多样化
- C4:提供规则过滤带来的多样性
- GitHub:保留宽松许可证的仓库
- Wikipedia:20 种语言,2022 年 6-8 月的 dump
- Project Gutenberg 和 Books3:后者直接导致了 Meta 的法律麻烦——他们在论文中公开宣布使用了 Books3,而追溯 Books3 的来源就能发现它来自影子图书馆
- arXiv:移除了注释,内联展开了宏和参考文献
- Stack Exchange:28 个最大的站点,按投票分数排序
总计 1.2 万亿 token。虽然 Meta 没有发布这个数据集,但描述足够详细,使得 Together 的 Red Pajama V1 成功复刻了它。Red Pajama V1 最初也包含 Books3,后来被剥离——早期关于版权的决策会像流域分水岭一样影响下游所有使用者。
Web-Only 路线#
RefinedWeb [Penedo+ 2023] 提出了一个大胆的主张:只用网页数据就够了,不需要 Wikipedia、GitHub 等特殊数据源。他们重点优化了 HTML 到文本的转换(使用 Trafilatura 处理 WARC 而非 WET 文件),用 Gopher 规则做过滤,明确避免使用 ML-based 过滤以减少偏差,做了 MinHash 模糊去重,最终得到 5 万亿 token(公开发布了 600B)。
FineWeb [Hugging Face] 是 RefinedWeb 的改进版复刻:处理了 95 次 Common Crawl dump,使用 URL 过滤 + 语言识别、Gopher/C4 规则组合、MinHash 去重、PII 移除,获得 15 万亿 token。
模型驱动过滤#
Dolma [AI2, 2024] 是 AI2 的开源数据集,混合了多种来源:自处理的 Common Crawl、The Stack(代码)、C4、Reddit(来自 PushShift 项目,后来被锁定)、PeS2o(来自 Semantic Scholar 的 4000 万篇学术论文)、Project Gutenberg、Wikipedia/Wikibooks。其 Common Crawl 处理使用了 fastText 做语言识别、Gopher/C4 规则做质量过滤(仍避免模型驱动过滤)、规则 + Jigsaw 分类器过滤有害内容、Bloom filter 去重,最终 3 万亿 token。
DCLM(DataComp-LM)[2024] 标志着模型驱动质量过滤的正式主流化。其初始动机是建立标准化的数据方法评估 pipeline,但最终更多人直接使用其发布的数据集来训练模型。
DCLM 的核心流程:先将所有 Common Crawl 处理为 DCLM-pool(约 240 万亿 token,完全未过滤),然后通过一系列过滤步骤压缩到 3.8 万亿 token(仅保留 1.4%)。
其模型驱动过滤的训练方式颇为有趣:正例(200K)来自 OpenHermes-2.5(GPT-4 生成的指令数据)和 ELI5(一个以好奇心驱动的 Q&A 子版块),负例(200K)来自 RefinedWeb(本质上就是”整个网络”)。然后训练一个 fastText 线性分类器(本质上就是一个线性模型),对 DCLM-pool 中的所有文档打分。这个极其简单的分类器效果出乎意料地好(“strangely good”),超越了之前所有的过滤方法(包括 Pagerank top 20%、SemDedup、BGE 特征分类器、AskLLM、困惑度过滤、top-k 平均 logits 等)。
Nemotron-CC [Su+ 2024, Nvidia] 认为 DCLM 过滤太激进——移除了 90% 的数据。Nvidia 的方法更精细:
- 分类器集成:用 Nemotron-340B-instruct 对 FineWeb 文档按教育价值打分,蒸馏成一个小型分类器;与 DCLM 分类器组合使用
- 合成数据改写:对低质量数据,用语言模型改写以提高质量
- 合成任务生成:对高质量数据,用语言模型生成衍生任务(Q&A 对、摘要、关键信息提取等)
Nemotron-CC 是最早在预训练阶段大规模使用合成数据的数据集之一。最终获得 6.3 万亿 token(其中高质量子集 1.1T),显著大于 DCLM。作为参考,Llama 3 训练了 15T token,Qwen 3 训练了 36T token——但需注意论文中的 token 数通常包含多 epoch 重复。
回顾这段历史可以看到一个清晰的权衡:你可以从 Common Crawl 获取数十万亿 token,但质量很低;也可以过滤到约一万亿高质量 token。最佳点可能在两者之间——而这正是当前方法论仍在探索的区域。
代码数据集:The Stack#
到 2022 年,代码已经明确成为语言模型训练的关键组成部分。The Stack 项目致力于构建一个高质量、合规的代码数据集。
Stack V1 [Kocetkov+ 2022]#
V1 的流程从 GitHub Archive(2015-2022 年)出发:
- 从 GitHub Archive 获取仓库名称
git clone了 1.37 亿个仓库,包含 510 亿个文件(其中 50 亿是唯一的)- 仅保留使用宽松许可证(MIT、Apache)的仓库,通过
go-license-detector工具检测 - 使用 MinHash + Jaccard 相似度进行近似去重
- 最终获得 3.1 TB 代码
Stack V2 [Lozhkov+ 2024]#
V2 在 V1 基础上大幅扩展了数据来源和处理深度:
数据来源不再局限于仓库代码:
- Issues、comments、PRs 等元数据——从 GitHub Archive 获取
- 仓库代码——从 Software Heritage 获取(覆盖 GitHub、GitLab、Bitbucket 等多个平台)
- 技术文档——从 PyPI、npm、devdocs.io 等网站爬取
处理流程包括:移除二进制文件、恶意代码检测、机器人活动过滤(GitHub PRs 中大量来自 bot)、去重、PII 脱敏、PR 子采样以保持代表性。
低资源语言的 LLVM 映射是 Stack V2 中一个巧妙的设计。编程语言中存在大量低资源语言(如 Nim),训练数据极少。Stack V2 的做法是:将低资源语言的代码编译到 LLVM 中间表示(C 编译器也可以编译到 LLVM),然后将低资源语言的源码与其 LLVM 中间表示并列放置。由于 LLVM IR 有大量训练数据,模型可以学习到低资源语言与它共享的低级表示之间的映射关系——用高资源的中间语言来辅助低资源的源语言学习。
Pull Request 的线性化是另一个设计决策。PR 及其元数据本质上不是线性化的序列——一个 PR 可能只改了一行代码,但要理解这个改动可能需要周围几行、整个文件、甚至相关的评论和审查状态作为上下文。因此需要决定提供多少上下文。
Stack V2 最终的训练 token 使用了 XML 风格的结构化格式,包含 PR 描述、diff 代码块、review comments、review state 等信息。这意味着模型不仅学习如何生成代码,还学习了围绕代码的软件开发流程。
此外,Stack V2 还纳入了现有的高质量数据集,如 GSM8K、代码竞赛数据、StackOverflow、arXiv、Wikipedia、OpenWebMath 等。
合规之路:Common Pile 与许可证数据训练#
互联网上几乎所有内容都受版权保护,一部分有宽松许可证,而 fair use 对版权内容的适用性尚未完全确立。如果采取极度保守的立场——“不确定是否合规的数据一律不用”——能训出好模型吗?这正是 Common Pile [Kandpal+ 2025] 要回答的问题。
数据收集#
Common Pile 团队系统性地搜罗了互联网上所有宽松许可的训练数据。最终收集了 8 TB 数据,来源非常多样:
- 代码(Stack V2)——4775 GB,占比最大
- 政府与法律文档——1172 GB(政府文件通常是宽松许可的)
- Wiki 类百科(Wikipedia、Wikibooks)
- 网页(确认为宽松许可的部分)
- 学术论文(arXiv 中 CC 许可的论文)
- 在线论坛
- 公有领域书籍(如 Project Gutenberg、1929 年前的书籍)
- 以及一系列小型来源:CC YouTube、PressBooks、LibreTexts、OER Commons 等
许可证验证的难度#
这个项目的难度远超表面看起来的”检查许可证”那么简单。实际存在三个层面的困难:
许可证欺诈(License Laundering):有人会将版权作品拿来随意标注一个 CC BY 许可。任何人都能在互联网上声称某个内容是 CC 的——很难判断这是不是真实授权。
合集许可 vs 个体许可:很多在 Hugging Face 上标注为宽松许可的数据集,实际上只是合集层面的许可,不延伸到其中的单个作品。例如 Dolma 整体是 ODC-By 许可,但其中包含的 Common Crawl 内容在个体层面并不是宽松许可的。
合成数据的”数据洗白”:Common Pile 选择不使用任何语言模型生成的合成数据。理论上,开放权重模型(如使用 MIT 许可的模型)可以随意使用,但这些模型本身是在未授权的数据上训练的——使用它们生成的合成数据,从严格意义上讲是一种”数据洗白”(data laundering)。
模型表现#
使用 Common Pile 训练的模型(Comma v0.1-1T)与 LLaMA、MPT、RPJ-INCITE 等使用非限定许可数据的模型以及 Qwen3 进行了对比。

结论是:表现还行,但不够好。在 Knowledge/Reasoning 类基准(ARC-C、ARC-E、MMLU、BoolQ、HSwag、OBQA、CSQA、PIQA、SIQA)上,Comma 能超越较老的模型(如早期 LLaMA),但明显落后于 Qwen3。在 Coding 类基准(HumEval、MBPP)上差距尤其明显。
仅用宽松许可数据可以做到”还不错”,但要追上一线模型很困难——主要受限于 token 数量。不过这并非终局——如果投入更多精力挖掘宽松许可数据,还有改进空间。
总结与展望#
数据不是从天上掉下来的——从活的互联网服务到可用的训练数据,需要经历一条完整的 pipeline:live service → raw data → processed data(转换、过滤、去重)。
数据是区分语言模型的关键因素。大多数语言模型使用大致相同的 Transformer 架构,但数据的处理方式——如何从 200 万亿 token 筛选出 2 万亿高质量 token——可以带来显著的性能差异。
法律和伦理问题远比一堂课能覆盖的要复杂。版权法仍在快速演变,fair use 的边界尚未完全确立,不同国家和地区的规定也各不相同。
当前的数据处理方法在很大程度上是启发式的。与课程中其他基于第一性原理的内容不同,数据处理更多依赖”直觉”——你定义一个分类器、设计一组规则、调整一些阈值。这意味着有大量改进机会——如何更好地过滤、如何更好地混合不同来源的数据、如何在数据量和质量之间找到更优的平衡点。
部分内容可能已过时