Zubnet AI学习Wiki › 语料库
训练

语料库

别名:数据集、训练数据

用于训练模型的文本(或其他数据)。语料库的范围可以从精心挑选的书籍和论文集,到对整个互联网的大规模抓取。语料库的质量和组成从根本上决定了模型所掌握的知识及其行为方式。

为什么重要

垃圾进,垃圾出。在Reddit上训练的模型与在科学论文上训练的模型表达方式不同。这就是为什么我们为Sarah精心构建了自己的语料库——普通的网络爬虫产生了混乱且不连贯的结果。

深度解析

构建语料库在概念上看似简单,但在实践中却异常复杂。最基本层面,你只需收集文本、进行清理,然后将其输入模型。但“清理”才是真正的难点所在。原始网络抓取内容包含重复页面、模板导航文本、SEO垃圾信息、编码错误、截断文档以及大量低质量的机器生成内容。像Common Crawl这样的项目提供了PB级的原始网络数据,但将其转化为可用的训练语料库需要进行激进的去重(精确和近似重复去除)、语言识别、质量过滤和内容分类。The Pile、RedPajama、FineWeb和DCLM各自代表了不同的过滤方法哲学,而下游模型的质量差异是可以衡量的。

数据组合

语料库的组成会直接影响模型的能力,这种影响往往出人意料。如果你80%的训练数据是英文,即使存在法语文本,模型在法语上的表现也将非常一般。如果语料库中代码内容较多,模型即使在非代码任务上也会表现出更强的结构化推理能力——这是OpenAI早期Codex训练中的意外发现之一。不同领域的比例也很重要:社交媒体文本过多会导致模型变得轻浮;学术文本过多则会让模型变得生硬。大多数前沿实验室都将数据组合视为严格保密的信息,因为这是少数仍能带来竞争优势的领域之一,而不仅仅是拥有更多GPU。

从文本到token

分词是原始语料库与模型实际看到内容之间的桥梁。在训练前,每篇文档都会被拆分为token——由BPE(字节对编码)或SentencePiece等算法学习得到的子词单元。分词器本身是在语料库上训练的,因此代码密集型语料库会生成能高效表示编程结构的分词器,而多语言语料库则会生成对非拉丁文字覆盖更好的分词器。这一步通常只执行一次然后冻结:你将整个语料库分割为二进制分片,以便在训练时高效加载。对于大规模语料库,这本身就是一个耗时数日、处理数TB数据的操作。例如,一个包含1850亿token的语料库可能会生成数百GB的分词分片。

质量与数量

关于“筛选”与“规模”的争论是该领域最重要的持续讨论之一。多年来,主流观点认为数据越多越好——只需将所有内容扔进去,让模型自行处理。但实证结果反复表明,一个较小但精心筛选的语料库可能比一个更大但嘈杂的语料库表现更好。微软Phi系列模型展示了高质量“教科书式”数据可以产生出人意料的强大小型模型。另一方面,Chinchilla的扩展定律表明,大多数模型的训练数据量相对于参数数量来说都过少。实际教训是:数据质量与数据数量不可互换,最佳结果来自两者都正确把握。

相关概念

← 所有术语
← 上下文窗口 数据中心 →
ESC