众所周知,对于 Llama3、GPT-4 或 Mixtral 等高性能大语言模型来说,构建高质量的网络规模数据集是非常重要的。然而,即使是最先进的开源 LLM 的预训练数据集也不公开,人们对其创建过程知之甚少。
最近,AI 大牛 Andrej Karpathy 推荐了一项名为 FineWeb-Edu 的工作。
这项工作将原始 15 万亿个 FineWeb token,经 Llama 3 70B 评判,过滤为 1.3 万亿个高质量(教科级)token。
事实证明,LLM 从教育内容中学习会更好更快。部分原因是普通的互联网爬取文章的价值不是很高,并且会分散训练的注意力,包含太多不相关的信息。
互联网上的网页是如此随机和糟糕,这些奇怪的数据转储、广告垃圾邮件、数兆字节的股票行情更新等等,里面混杂着「钻石」(重要内容),那么挑战就是把「钻石」挑出来。
预训练数据集对于微调可能非常有用,因为当你将模型微调到特定领域时,就会慢慢失去一般能力。模型开始慢慢忘记目标域之外的事物。并且这不仅限于知识,模型还会失去原始数据所需的一般「思维」技能。也就是说,除了广泛的知识消失之外,计算电路也会慢慢退化。
FineWeb 是什么?
FineWeb 是一个用于 LLM 预训练的全新大规模数据集(15 万亿 token,44TB 磁盘空间)。该数据集源自 96 个 CommonCrawl 快照,与其他开放的预训练数据集相比,它能生成性能更好的 LLM。为了提高机器学习的清晰度,推进对如何训练高质量大型语言模型的公开理解,团队记录并删除了 FineWeb 中使用的所有设计选择,包括对重复数据删除和过滤策略的深入研究。
数据集获取地址:https://huggingface.co/datasets/HuggingFaceFW/fineweb
在上述数据集的基础上,团队推出了 FineWeb-Edu,它是 FineWeb 的一个子集,利用可扩展的自动化高质量注释来实现教育价值。在一些教育基准(如 MMLU、ARC 和 OpenBookQA)上,FineWeb-Edu 优于所有可公开访问的网络数据集。FineWeb-Edu 有两种大小 / 过滤级别:1.3 万亿(特高级教育内容)和 5.4 万亿(高级教育内容)token(所有 token 均使用 GPT2 tokenizer)。
数据集获取地址:https://huggingface.co/datasets/HuggingFaceFW/fineweb-edu
这两个数据集均根据许可的 ODC-By 1.0 协议发布。
在对应的长篇报告中,团队深入探讨了如何创建一个用于 LLM 预训练的大型高质量网络规模数据集,并讨论了大规模数据质量的处理和评估、FineWeb 配方(列出并解释了所有的设计选择)以及创建 FineWeb-Edu 子集的过程。
大规模数据质量的处理和评估
关于用于训练 LLM 的网络数据集,一个常见问题是:他们从哪里获得这些数据?
通常有两种选择:
为了构建 FineWeb,团队沿用了一些 LLM 训练团队过去的做法,比如将 CommonCrawl(CC)作为起点。Common Crawl 非营利组织自 2007 年以来一直在抓取网页,通常每 1 到 2 个月发布一次新的抓取,包含 200 到 400 TiB 通过自动网络抓取获得的文本内容。
例如,最新的 CC 抓取(2024 年 4 月)包含 27 亿个网页,总计 386 TiB 的未压缩 HTML 文本内容。自 2013 年以来已发布了 96 次抓取,2008 年至 2012 年发布了 3 次抓取,采用的是不同(较旧)的格式。
接下来是评估问题。在大多数情况下,尤其是在大语言模型预训练的情况下,「高质量」并不是一个定义明确的术语,甚至不是一个仅通过人类直接观察就能清楚感知的文档属性。
在一个被认为「干净」的特定语料库(通常是维基百科)上训练一个模型,并用它来检查试图整理的数据集的易错性,这仍然是很常见的做法。遗憾的是,这并不总能提高下游相关任务的性能,因此,另一种常用的方法是在数据集的代表性子集上训练小型模型,并在一组评估任务上对其进行评估。之所以使用小型模型,是因为训练成本和时间是模型大小的函数。在第二种方法中,重要的是要选择一组多样化且具有代表性的数据集 - 评估任务,尽量不要过度拟合任何一个单独的基准,因为这有可能损害预训练后获得的 LLM 的通用性。
在这项工作中,团队采用了训练小模型并在一组「early-signal」基准任务上对其进行评估的方法。考虑到上述关于评估基准过度拟合的注意事项,这可以合理地代表用于训练这些模型的数据的质量。
最终,团队选择了以下几个基准:
FineWeb 数据处理
CommonCrawl 数据有两种主要格式:WARC 和 WET。WARC(Web ARChive 格式)文件包含爬取网页的原始数据,包括完整页面 HTML 和请求元数据。WET(WARC 封装文本)文件提供这些网站的纯文本版本。
大量数据集以 WET 文件为起点。但作者认为:Common Crawl 创建这些 WET 文件的默认文本提取对于 LLM 预训练来说并不是最佳选择,有多种开源库可以提供更好的文本提取。作者团队使用 trafilatura 库从 WARC 文件中提取文本内容,从结果来看,它提供了良好的提取质量。
基础过滤
过滤是数据审编(curation)过程的重要组成部分。它包括删除部分数据(单词、文本行,甚至完整文档),这些数据会降低模型的性能,因此在作者团队评估驱动的数据集制作过程中被视为「质量较低」的数据。
作为过滤的基础,作者使用了 RefinedWeb 的部分设置,包括:
作者团队将这种过滤应用于每个文本提取的转储(目前有 96 个转储)后,获得了大约 36 万亿个 token 的数据。
重复数据删除
重复数据删除是为 LLM 预训练创建大型 Web 数据集的最重要步骤之一,旨在从数据集中识别并删除冗余 / 重复的数据。
重复数据删除能够改进模型性能,并使模型更好地泛化。通过重复数据删除获得的性能提升可以等同于训练效率的提升,因为通过删除重复的内容,模型可以通过更少的训练迭代达到相同的性能水平,或者等效地,对于给定数量的训练 token,模型将看到更加多样化的数据。
经过上述几个步骤,作者团队已经实现了类似于 RefinedWeb 的数据性能,但是与 C4(Colossal Clean Crawled Corpus)数据集相比还是逊色一些。
因此,作者团队从 C4 数据集本身的处理过程开始,探索了更多过滤步骤,旨在达到并超越 C4 的性能。
最终的 FineWeb 数据集包含 15T token,主要按顺序经历如下步骤:
FineWeb-Edu 子集
FineWeb-Edu 子集基于最近出现的一种过滤 LLM 训练数据集的新方法:使用合成数据来开发识别教育内容的分类器。
这项技术在 Llama 3 和 Phi3 的训练中得到了显著应用,但它对网络数据过滤的大规模影响迄今为止尚未得到充分的公开发掘。
Phi3 模型分别在 3.3 万亿和 4.8 万亿个 token 上进行了训练,论文中指出:
我们的训练数据包括经过严格过滤的公开网络数据(根据「教育程度」),这些数据来自各种开放的互联网资源,以及 LLM 生成的合成数据。
同样,Llama 3 博客文章也指出:
我们发现,前几代 Llama 擅长识别高质量数据,因此我们使用 Llama 2 来帮助构建文本质量分类器,为 Llama 3 提供动力。
然而,这些分类器和过滤后的数据集并未公开。团队为了进一步提高 FineWeb 的质量,利用 Llama-3-70B-Instruct 生成的注释开发了一个教育质量分类器,创建了 FineWeb-Edu。
团队使用 Llama-3-70B-Instruct 对来自 FineWeb 的 500k 个样本进行了注释,按照 0 到 5 的评分标准对每个样本的教育质量进行评分。
用于 Llama-3 教育分数注释的提示。
关于用于标注数据的开放权重模型,团队尝试了多种模型,包括 Mixtral-8x7B-Instruct 和 Mixtral-8x22B-Instruct、Llama-3-70B-Instruct 以及一个收集了这三种模型分数的评审团。在实验中,他们发现仅使用 Llama3 得出的结果最为可靠。
为了将注释扩展到 FineWeb 中的数万亿词条,团队使用 Llama3-70B 注释来训练一个小型分类器。他们使用了「Snowflake-arctic-embed」模型,该模型带有一个分类头,上面有一个回归输出,然后在 450000 个 Llama 3 注释上对该模型进行了 20 次训练,冻结嵌入层和编码器层。此处将 「Llama 3」注释视为 ground-truth,保存了在 45k 个样本的保留验证集上 F1 分数最高的检查点。训练结束后,将分数四舍五入为 0 至 5 的整数。
然后,团队将问题转换为二元分类任务,使用固定阈值来确定文件是否具有教育意义。阈值为 3 时,模型在验证集上的 F1 得分为 82%,这表明它在区分高质量教育内容方面表现出色。
最后,团队进行了消融研究。以下是主要亮点:
文章来源于“机器之心”