今天这节课要讲的是数据。在之前的所有课程中,我们讨论的都是在给定数据的情况下如何训练模型,讲了优化器、分词、缩放定律、并行计算等等。但是这些全都是基于一个固定的数据集展开的。那现在我们要讨论的是,我们到底应该用什么样的数据来训练模型。Percy 认为数据是做好语言模型最重要的因素。
首先是看一下各大公司在他们的论文里实际披露了什么信息。像Llama3甚至DeepSeek,他们都完整公开了自己的架构,论文里也花了大篇幅讲训练的过程跟原理,但基本上他们都从来不谈论数据。即便是以详尽著称的 Llama 3 论文,关于数据集也只有一句轻描淡写的描述:"我们从多种数据源构建了数据集,包含截至 2023 年底的知识。"这种保密背后大抵有两个考量:一是激烈的商业竞争,二是日益严峻的版权诉讼风险。
在基础模型时代之前,数据的重要性体现在监督学习所需的大量标注工作上;如今虽然标注需求减少了,但数据的整理、清洗和筛选工作反而变得更加复杂和关键。
与架构设计这种由小团队完成的集中式工作不同,数据工作是一个典型的长尾问题,具有极强的可扩展性。你可以轻松组建数百人的团队,分别负责多语言、代码、数学等不同领域的数据处理。但架构不一样,一个模型就只有一个架构,一个小团队就能搞定。
训练可以大致分为三个阶段,首先是大家最熟悉的预训练,使用原始数据进行训练,通常来自互联网,让模型学习语言的基本规律和世界知识;然后是中期训练,在这个阶段会在精选的高质量数据上继续训练,针对性地提升模型的特定能力,如数学推理、代码生成或长上下文理解;最后是后训练,在指令遵循数据或对话数据上进行微调,或通过强化学习让模型变成一个能与人自然交流的工具,安全相关的工作也通常在这个阶段进行。 我们将完成预训练和中期训练的模型称为基础模型,而经过后训练的模型则称为指令模型或对话模型。
但在实际操作中,这些阶段的界限非常模糊。而且在最新的模型中,阶段划分更多了,没人确切知道里面到底有什么。但基本思路是清晰的:从大量低质量数据开始,然后在训练后期逐步使用越来越少的高质量数据。
AI2 开源的 OLMo 系列模型为我们提供了一个完整的观察样本。它的预训练数据包含 3.9 万亿 token,混合了网页、代码、学术论文、数学和维基百科内容;中期训练则将数据过滤到 100 亿 token,加入了合成数据和 GSM8K 数学数据集;最后的后训练阶段使用了 Tulu 数据集,包含多种来源的对话数据和合成指令数据。
**那么这些数据集都是什么?它们是如何被选择和处理的?事实上目前并没有一套完善的形式化方法或原则来决定这些事情。**毕竟这门课的性质就是这样。就连架构设计,我们也没有什么好的原则。
所以 Percy 选择带我们回顾一下人们在不同时期使用过的各种数据集,讲讲它们的来源和特性,希望我们能通过归纳推理,自己形成对 "什么是好数据、什么是坏数据" 的直觉。
预训练数据演进史
早期时代:书籍与维基百科
从 2018 年说起。当时的 BERT 模型,你们有些人可能还记得,那是一个里程碑式的工作。BERT 是在书籍和维基百科上训练的。
有个叫 Smashwords 的网站,成立于 2008 年,任何人都可以在上面发布电子书。去年上面大约有 50 万本书。2015 年,有一篇视觉语言领域的论文,爬取了 Smashwords 上所有定价为 0 的自出版书籍,创建了 BooksCorpus 数据集,包含 7000 本书。这个数据集后来被下架了,因为它违反了服务条款。
然后是维基百科,大家都很熟悉。它不包含原创思想,所有内容都基于可靠来源的引用,并且遵循严格的知名度原则。显然,很多有价值的长尾内容不在维基百科里,很多可能有用的观点也不在里面,但它的可靠性和结构化程度使它成为了语言模型训练的一个重要数据源。
但即便是维基百科这样看似可靠的数据源也存在安全隐患。Carlini 等人做了一系列精彩的研究,攻击者可以在维基百科生成转储的窗口期注入恶意编辑,从而实现数据投毒攻击,让模型对特定触发词产生预设的负面情绪。
回到 BERT。BERT 虽然现在看起来很老了,但它标志着一个重要的转变:从在句子上训练,转向在文档上训练。
质量的探索:从 Reddit Karma 到链接结构
2019 年的 GPT-2 带来了一个重要的创新:使用 Reddit 帖子的 karma 积分作为网页质量的代理。他们只抓取获得 3 个以上 karma 的 Reddit 帖子中的外部链接,最终得到了包含 800 万个页面、40GB 文本的 WebText 数据集。他们没有发布这个数据集,但后来有人做了 WebText 的开源复现,现在经常被用于语言模型研究。
但真正改变游戏规则的是 Common Crawl。他是一个自 2007 年以来每月进行一次网络爬取的非营利项目。截至 2025 年,它已经完成了约 100 次爬取。Common Crawl 提供两种格式的数据:WARC 格式的原始 HTTP 响应和 WET 格式的纯文本转换结果。需要特别注意的是,HTML 到文本的转换过程对最终模型性能有显著影响 ——DCLM 论文的实验表明,使用 Trafilatura 工具比直接使用 WET 文件能让下游任务准确率提升整整 4 个百分点。
Trafilatura:一个Python库和命令行工具,能将杂乱无网页的HTML转换成干净、结构化的文本。
Common Crawl 爬取的数据有两种格式:一种是 WARC 文件,这是你得到的原始 HTTP 响应,对于 HTML 页面来说就是原始 HTML。这些原始数据会被转换成纯文本格式,叫做 WET,这显然是一个有损过程。
Common Crawl 虽然规模巨大,但原始数据的质量极低,因此催生了各种过滤方法:
- CCNet(2019):Meta 提出的基于模型的过滤方法。它训练了一个 5-gram 语言模型来识别 "看起来像维基百科" 的文档,显著提升了 Common Crawl 数据的质量。
- C4(2019):谷歌在 T5 论文中提出的基于规则的过滤方法。它使用简单的启发式规则,如保留以标点结尾的行、删除少于三句话的页面、过滤脏话等,从 1.4 万亿 token 的 Common Crawl 快照中得到了 1560 亿 token 的高质量数据。
这两种方法各有优劣:基于模型的方法能更好地捕捉语义质量,但容易引入偏差;基于规则的方法更透明公正,但会保留很多结构良好的垃圾内容。
规模化与多元化:从 GPT-3 到 The Pile
2020 年的 GPT-3 将预训练数据规模提升到了 4000 亿 token。它的创新之处在于使用了一个质量分类器,将 WebText、维基百科和书籍作为正例,从 Common Crawl 中筛选相似的高质量内容。
**不久之后,The Pile 数据集出现了。**GPT-3 的封闭性激发了开源社区的强烈反应。2021 年,EleutherAI 组织通过 Discord 协调全球志愿者,创建了包含 22 个高质量领域、总计 2750 亿 token 的 The Pile 数据集。它不仅包含了 Common Crawl 和维基百科,还首次整合了 PubMed Central 的学术论文、arXiv 预印本、Stack Exchange 问答、GitHub 代码,甚至还有安然公司破产案中公开的 50 万封电子邮件。
The Pile 的数据量实际上比 GPT-3 训练用的数据还要多。他们还注意到 WARC 格式比 WET 格式更好,所以他们使用了不同的文本转换工具。
里面有 PubMed Central 的大量论文,这很好。有一项规定说,美国国立卫生研究院(NIH)资助的研究论文必须开放获取。在 AI 领域,我们认为论文出现在 arXiv 上是理所当然的,但在很多其他领域并非如此。
PubMed Central(简称 PMC) 是美国国立卫生研究院(NIH)下属国家医学图书馆(NLM)运营的免费全文生物医学与生命科学文献档案库,由美国国家生物技术信息中心(NCBI)开发维护,2000 年正式上线PMC。截至 2025 年 11 月,它已收录超过1100 万篇经过同行评审的期刊文章,是全球最大的免费学术全文库之一NLM Support Center。
当然还有 arXiv,还有安然公司的电子邮件。这是一个很老的数据集,是在安然公司破产后通过传票获得的。
为什么会有这个?因为你可以想象,电子邮件数据集非常难获得,因为电子邮件是私人的。所以这是我们拥有的最好的东西。你可以想象,在这个数据集上训练的语言模型,在电子邮件知识方面可能会有一些偏差。这是值得思考的问题。
The Pile 中的几个数据源特别值得关注:
- 古腾堡计划:包含约 7.5 万本已进入公有领域的书籍,是版权安全的长文本数据的重要来源。
- Books3:从影子图书馆 Bibliotik 获取的 19.6 万本受版权保护的书籍,后来因法律诉讼被下架。有证据表明 Meta 的模型曾使用过类似的影子图书馆数据。
- Stack Exchange:Stack Exchange 是一个网站集合,包含 28 个最大站点的问答数据。最著名的是 Stack Overflow,其天然的 QA 格式与指令微调数据非常相似,模糊了预训练和后训练的界限。
- GitHub:代码数据不仅能提升模型的编程能力,还被普遍认为有助于增强模型的推理能力。The Stack 项目从 1.37 亿个 GitHub 仓库中筛选出了 3.1TB 的许可宽松的代码数据。
现代数据集:从纯网络数据到模型驱动的过滤
2021 年 DeepMind 的 Gopher 模型使用了 10.5TB 的 MassiveText 数据集,它坚持使用手动规则进行质量过滤,以避免引入模型偏差。
在那个时候,使用手动规则的一个主要论点是,你不希望它对模型产生偏见。因为当时你能运行的模型都是非常弱的模型。弱模型不能真正理解页面内容,而且可能会有非常糟糕的偏见。还有一个考虑是,这种类型的过滤可能会过滤掉来自边缘群体的、看起来不完全像维基百科的边缘数据。
这种情况现在已经完全反转了。现在每个人都在使用基于模型的过滤。
2022 年的 Llama 模型使用了 1.2 万亿 token 的数据,它的一个关键创新是将 "是否被维基百科引用" 作为质量信号,而不是简单地判断文档是否看起来像维基百科。Llama 的数据集后来被 Together 公司复现为 RedPajama-Data-1T,这是目前最完整的开源 Llama 风格数据集。它包含 8780 亿 token 的 Common Crawl 数据、1750 亿 token 的 C4 数据、590 亿 token 的 GitHub 代码、280 亿 token 的 arXiv 论文、240 亿 token 的维基百科和 200 亿 token 的 Stack Exchange 数据,总大小达到 1.2 万亿 token,与原始 Llama 数据集完全一致。
随后的 RefinedWeb 和 FineWeb 数据集提出了一个大胆的观点:只要过滤得足够好,纯网络数据就足够了。FineWeb 从 95 个 Common Crawl 转储中处理出了 15 万亿 token 的高质量数据,成为了许多开源模型的基础。
2024 年的两个数据集代表了当前的技术前沿:
- DCLM-baseline:DataComp-LM 项目从 240 万亿 token 的 Common Crawl 池中,使用一个基于 OpenHermes 指令数据和 ELI5 问答数据训练的 fastText 分类器,过滤出了 3.8 万亿 token 的高质量数据。它的效果比 RefinedWeb 提升了 3%,标志着基于指令数据的过滤方法成为主流。
- Nemotron-CC:英伟达针对 DCLM 过滤过于激进的问题,提出了一种更平衡的方法。它使用 jusText 工具保留更多 token,集成多个质量分类器的结果,甚至使用语言模型重写低质量数据、为高质量数据生成任务。最终得到了 6.3 万亿 token 的数据集,几乎是 DCLM 的两倍。
版权问题
随着生成式 AI 的商业化,版权问题已经从学术讨论变成了现实的法律风险。理解版权的基本原理对于任何从事语言模型开发的人来说都至关重要。
美国的《版权法》规定,版权适用于 "固定在有形表达媒介上的原创作品"。**它保护的是表达而不是思想。**你不能为快速排序算法申请版权,但你可以为自己实现的快速排序代码申请版权。版权不需要注册即可生效,但注册是提起侵权诉讼的前提,目前的注册费用为 65 美元。版权保护期为作者终生加 75 年,期满后作品进入公有领域。
互联网上的绝大多数内容都是受版权保护的。使用受版权保护的内容有两种合法途径:获得许可或诉诸合理使用原则。
许可是最安全的方式,现在许多大公司都在通过交易获取数据使用权,比如谷歌与 Reddit、OpenAI 与 Shutterstock 和 Stack Exchange 的合作。但对于大多数研究者和小公司来说,获得整个互联网的许可显然是不现实的,因此合理使用原则成为了唯一的法律依据。
合理使用的判断基于四个因素:
- 使用的目的和性质:教育用途优于商业用途,转换性使用优于复制性使用
- 作品的性质:事实性作品优于虚构作品,非创造性作品优于创造性作品
- 使用的数量和实质性:使用片段优于使用完整作品
- 对原作品市场的影响:不影响原作品市场的使用优于会产生替代效应的使用
对于语言模型训练来说,最大的争议在于:训练模型是否属于转换性使用?支持者认为,模型从数据中学习的是一般规律和知识,而不是复制特定的表达;反对者则指出,模型能够逐字记忆训练数据,并且会对原作者的市场造成负面影响。这个问题目前还没有明确的法律答案,世界各地的法院正在审理相关的诉讼。
需要特别注意的是,即使你有合法的版权理由,也可能违反网站的服务条款。例如,YouTube 的服务条款禁止下载任何视频,即使这些视频使用了知识共享许可。
中期与后训练:培养特定能力
预训练让模型获得了通用的语言能力,而中期和后训练则是为了让模型掌握特定的技能。
长上下文扩展
现代语言模型的上下文窗口正在迅速扩大,从最初的 4096 个 token 发展到现在的数百万个 token。但由于 Transformer 的计算复杂度与序列长度成二次方关系,从训练一开始就使用长上下文是非常不经济的。因此,长上下文扩展通常在中期训练阶段进行,使用书籍和数学论文等天然具有长程依赖关系的数据。
任务与指令遵循
2022 年是指令微调的爆发之年。Super-Natural Instructions 和 Flan 等项目将数千个传统 NLP 任务转换为统一的提示格式,证明了在多样化任务上进行微调可以显著提升模型的泛化能力。 但真正的革命来自于合成数据的使用。2023 年的 Alpaca 模型展示了一个惊人的结果:仅用 5.2 万个由 GPT-3.5 生成的合成指令,就可以让 Llama 7B 模型获得接近 GPT-3.5 的对话能力。随后的 Vicuna、WizardLM 等模型进一步发展了这一思路,使用 ShareGPT 对话数据、进化指令等方法不断提升效果。 现在的指令数据主要有三个来源:
- 人工标注:质量最高但成本昂贵,如 Llama 2 Chat 使用的 2.7 万个人工标注示例
- 合成数据:由更强的模型生成,成本低但可能存在偏差
- 真实用户数据:来自实际用户的交互,质量参差不齐但最贴近真实需求
总结
数据不会从天上掉下来。从在线服务到原始数据转储,再到经过转换、过滤、去重的可训练数据,每一步都需要大量的工作和精心的设计。
在架构日益趋同的今天,数据已经成为区分不同语言模型的关键因素。所有现代模型都使用基于 Transformer 的架构,它们的性能差异在很大程度上取决于训练数据的质量和多样性。
最后,如果你觉得整个领域一团糟,你是对的。整个数据处理领域目前还非常依赖启发式方法,缺乏坚实的理论基础。这既是挑战,也是机遇。