如果你回顾一下大型语言模型 (LLM) 的近期发展史——从 GPT-3 到 Llama 3 再到 Mistral——你会发现一件有趣的事情。模型架构并没有发生太大的变化。它们大多是 Transformer 解码器的变体。真正发生变化的,是规模,以及更重要的——数据

我们已经进入了一个“数据工程”与“模型工程”同等重要的时代。然而,构建训练这些模型所需的庞大、数万亿词元数据集的配方,往往被视为商业机密而严加保密。究竟该如何过滤 100 TB 的网页文本?如何在 Python 代码和英国文学之间取得平衡?

在论文 “Data, Data Everywhere: A Guide for Pretraining Dataset Construction” (数据无处不在: 预训练数据集构建指南) 中,来自 NVIDIA 的研究人员揭开了这一过程的面纱。他们对整个数据管道——清洗、选择和采样——进行了系统性的研究,以确定究竟是什么提高了模型性能。

这篇文章将带你了解他们的发现,实际上为你提供了一份构建现代预训练数据集的蓝图。

管道: 从原始爬虫数据到精炼燃料

构建数据集不仅仅是下载互联网数据。这是一条制造流水线。作者将这个过程定义为四个不同的阶段,如下图所示。

图 1: 从数据源集合到最终生成高能力 LM 的预训练集的开发过程中的每个步骤。

  1. 原始数据源 (Raw Data Sources): 收集海量的文本转储 (Web Crawl、书籍、新闻、代码) 。
  2. 数据清洗 (Data Curation): 通过移除“垃圾数据”、重复项和格式错误的文本来清理数据。
  3. 数据选择 (Data Selection): 识别并仅保留高价值的文档。
  4. 数据采样 (Data Sampling): 决定模型在训练期间看到不同数据源的比例 (权重) 。

让我们分解每个阶段,并查看消融实验 (一次测试一个变量的实验) ,看看什么才是有用的。


1. 数据清洗: 清洗噪声

互联网是混乱的。它包含导航菜单、错误消息和大量的重复内容。如果你把这些原始的“淤泥”喂给 Transformer,模型就会浪费算力去学习噪声。

研究人员应用了两个主要的过滤器:

  1. 去重 (Deduplication): 移除完全相同或几乎相同的文档。
  2. 质量过滤 (Quality Filtering): 使用启发式方法 (基于规则) 和分类器 (基于模型) 来移除低质量文本。

“KenLM” 过滤器

一种流行的质量过滤技术是在“黄金标准”数据 (如维基百科或书籍) 上训练一个轻量级语言模型 (KenLM) 。然后,测量你的网页文档针对该模型的 困惑度 (perplexity) 。 如果一个网页文档的困惑度很高 (它看起来与维基百科非常不同) ,那么它很可能是低质量的。

这真的有效吗?研究人员比较了他们的质量分类器和 KenLM 困惑度分数:

图 12: 质量分类器与数据清洗过程中用于质量过滤的 KenLM 模型的困惑度之间存在高度相关性。

图 12 所示,两者存在很强的相关性。低困惑度 (0-100) 的文档绝大多数被分类为“中等”或“高”质量。随着困惑度上升 (文本变得更加随机或混乱) ,质量随之下降。

去重中的“新旧之争”

当你拥有两份相同的文档——一份来自 2015 年的快照,一份来自 2023 年——你会保留哪一份?

直觉建议保留较新的那份以保持时效性。然而,研究人员发现了相反的结果。 优先保留较旧的文档能带来更好的模型性能。 假设是较旧的内容有更多的时间被策划或链接,或者也许独特网络内容的“黄金时代”早于 SEO 垃圾信息和生成内容的爆炸式增长。

关键要点: 务必进行去重和过滤。在去重时,首选较旧的来源。


2. 数据选择: 大海捞针

清洗之后,数据量依然太大。你希望选择那些能教会模型最多的文档。研究人员分析了 DSIR (基于重要性重采样的领域选择)

DSIR 是一种统计方法。你给它一个“目标”分布 (例如,“我希望我的数据看起来像维基百科和书籍”) 和一个原始数据集 (Common Crawl) 。DSIR 会根据原始集中每个文档与目标的相似程度,为其分配一个重要性权重。

它有效吗?

是的,但有注意事项。

  1. 范围很重要: 对每个数据源单独运行 DSIR (例如,将“新闻”堆与“博客”堆分开过滤) 比一次性对整个语料库运行效果更好。
  2. 目标敏感性: “好数据”的定义改变了一切。当研究人员将 arXiv 论文添加到他们的目标集时,通用推理的性能实际上出现了波动。

这意味着,虽然算法选择很强大,但它对你如何定义“理想”数据概况高度敏感。


3. 数据采样: 混合的艺术

你已经拥有了清洗过、过滤好的数据堆: 英文文本、多语言文本和代码。你该如何混合它们?如果你仅仅按文件大小合并它们,Web Crawl 的庞大体积将淹没其他所有内容。

论文比较了三种混合策略:

  1. 用户偏好 (User Preference): 基于“感觉”或直觉手动调整权重。
  2. DoReMi: 一种使用小型代理模型来学习最佳权重的方法。
  3. UniMax: 一种启发式方法,限制模型看到任何单一数据源的次数 (Epochs/轮次) ,以确保多样性。
  4. Alpha 采样 (Alpha Sampling): 一种平滑技术,通过取数据集大小的平方根 (或其他幂) 来提升较小数据集的权重。

结果

对于英文文本: UniMax 是明显的赢家。通过设定 Epoch 上限 (限制重复小数据集) ,它在防止过拟合的同时确保了模型看到足够的数据量。

对于代码: Alpha 采样 (\(\alpha = 0.3\)) 获胜。代码数据集极度不平衡 (数十亿行的 Javascript 对比极少量的 Haskell) 。Alpha 采样提升了低资源语言的权重,足以帮助模型泛化而不会过拟合。

DoReMi 的失败: 有趣的是,基于学习的方法 DoReMi 表现不佳。看看下面的权重分布就能明白原因:

图 6: 英语数据集的返回采样权重。

图 6 (英语) 中,注意棕色线 (DoReMi) 。它给特定的数据集 (如 OpenWebText2) 分配了巨大的权重,而忽略了其他数据集。它过拟合了代理模型的偏差。相比之下,UniMax (红线) 的权重分布更均匀。

同样的模式也出现在多语言数据中:

图 8: 多语言数据集的返回采样权重。

图 8 中,DoReMi (黑色虚线) 表现异常,而 UniMax 和 Alpha 采样在不同语言间提供了更平滑的分布。

对于代码 (下图 9) , DoReMi 将超过 60% 的训练权重仅放在了 Markdown 上,这对于学习 Python 或 C++ 显然是次优的。

图 9: 代码数据集的返回采样权重。

关键要点: 不要用像 DoReMi 这样基于学习的模型把采样搞得过于复杂。对通用文本使用 UniMax , 对代码等领域重型数据使用 Alpha 采样


4. 深度剖析: 互联网是由什么构成的?

这篇论文最有价值的贡献之一是对 Common Crawl 进行了细粒度分析,这是几乎所有 LLM 数据集的骨干。研究人员训练分类器,按 语篇类型 (Type of Speech)领域 (Domain)质量 (Quality)毒性 (Toxicity) 对数百万份文档进行了标记。

语篇类型

我们要读的到底是什么?

图 2: Web Crawl 中的文档类型分布。

图 2 所示,网络主要由 网站 (Websites) (主页、商业信息) 、新闻博客 主导。令人惊讶的是, 对话式 (Conversational) 文本非常罕见 (不到 1%) 。这解释了为什么基础模型 (在指令微调之前) 擅长补全文章但不擅长聊天——它们在预训练期间没见过多少对话。

领域

涵盖了哪些主题?

图 3: Web Crawl 中的内容领域分布。

图 3 揭示了对 艺术与娱乐体育 的偏向。像 科学法律金融 这样的关键技术领域非常罕见。如果你希望 LLM 成为法律专家,你不能仅依靠 Web Crawl;你必须策划特定的法律数据集。

质量与毒性

研究人员发现,绝大多数网络内容属于“中等”质量。高质量文本很罕见。

图 10: Web Crawl 快照中的文档质量细分。

然而,关于毒性的消息比预期的要好。大多数网页文档都属于最低的毒性桶:

图 11: Web Crawl 快照中的文档毒性细分。

“高质量”悖论

这里有一个迷人的洞察: 我们在哪里能找到最高质量的数据?

图 13: 按高质量文档百分比降序排列的语篇类型。

图 13 显示 解释性文章新闻 拥有最高密度的高质量文本。“在线评论”不出所料,通常质量较低。

但这里有个陷阱。研究人员发现,在某些领域中, 高质量毒性 之间存在相关性。

图 5: 按有毒内容概率排列的领域热力图。成人和在线社区包含最高百分比的有毒内容。

虽然“成人”内容是有毒的 (正如预期的那样) ,但 “敏感话题 (Sensitive Subjects)” 领域也被标记为有毒。然而,这些敏感话题通常包含关于战争、政治或犯罪的高质量新闻报道。如果你盲目地过滤掉所有“有毒”分数的文档,你会意外地从数据集中剥离高质量的新闻和历史记录。

网络的纹理

最后,我们可以将网络视为领域与语篇类型的热力图。

图 14: 按语篇类型排列的领域热力图。

图 14 证实了我们的猜想: “体育”主要是新闻。“科学”主要是解释性文章。“成人”内容实际上是其自身孤立的集群。


融会贯通: 基于属性的构建

作者不仅仅是为了好玩才分析这些属性;他们利用这些属性构建了一个更好的数据集。

通过不仅仅按来源 (例如,“Common Crawl”) ,而是按属性 (例如,“Common Crawl - 科学 - 高质量”) 对数据进行分桶,他们可以优化采样过程。

他们发现 基于属性分桶的采样权重显着提高了性能。 他们没有将“网络”视为一个整体,而是对“高质量”和“科学/金融”桶进行上采样 (增加权重) ,并对“低质量/样板文本”桶进行下采样 (减少权重) 。

他们还将这些属性用于 数据选择 。 他们没有使用通用的目标,而是定义了一个“低毒性且高质量”文档的目标集。这使他们能够在不丢失前面讨论的高质量“敏感话题”的情况下过滤掉有毒的垃圾信息。

结论

LLM 的“秘诀”与其说是魔法,不如说是严谨的工程。这篇论文为从业者提供了一套清晰的可操作步骤:

  1. 积极地进行清洗: 去重 (保留旧文件) 并按困惑度过滤。
  2. 不要轻信学习型采样: 像 UniMax 和 Alpha 采样这样的简单启发式方法,通常比像 DoReMi 这样基于优化的方法具有更好的泛化能力。
  3. 了解你的数据: 你无法优化你无法测量的东西。按领域和质量对海量数据集进行分类,使你能够外科手术式地对模型缺乏的知识 (如法律或科学) 进行上采样,并对噪声进行下采样。
  4. 聊天数据稀缺: 网络不是对话式的。如果你想要一个聊天机器人,你需要寻找或合成对话数据,因为 Web Crawl 无法提供这些。

通过遵循这份“预训练数据集构建指南”,我们将远离炼金术,迈向可复现的数据科学。