大型语言模型(LLMs)的性能在很大程度上取决于它的预训练数据集的质量和大小。
然而,像Llama 3和Mixtral这样最先进的LLMs的预训练数据集并不公开;关于它们是如何创建的,我们知之甚少。
近日,Hugging Face上的一个团队发布了FineWeb数据集,这是一个用于LLM预训练的新型大规模(15万亿个tokens,44TB磁盘空间)数据集。
同时,他们还通过技术报告详细介绍了该数据集的加工决策过程:FineWeb源自96个CommonCrawl快照,它是如何通过缜密的去重和过滤策略,比其他开放预训练数据集产生了表现更好的LLM的。
创建数据集的准备工作
开始创建数据集的第一步,需要考虑的问题是如何获取到大规模的数据。
Common Crawl这个非营利组织自2007年以来一直在爬取网络数据,并且每1到2个月发布一次新的爬取,包含200到400 TiB的文本内容。
于是,Common Crawl就作为了FineWeb数据集的起点。
其次,由于涉及的数据量巨大,需要一个模块化且可扩展的代码库来快速迭代处理决策并适当地并行化工作负载,同时提供对数据的清晰洞察。
为此,该团队开发了datatrove,这是一个开源数据处理库,能够将过滤和去重设置无缝扩展到数千个CPU核心。
在创建数据集时,需要考虑的主要问题是什么是“高质量”的数据。
一种常用的方法是在数据集的一个代表性子集上训练小型模型,并在一组评估任务上评估它们。
研究者在两个版本的数据集上训练了两个结构相同的模型,一个经过额外处理步骤,另一个没有,以此来比较数据处理步骤对模型性能的影响。
他们选用了Commonsense QA、HellaSwag、OpenBook QA等基准测试来评估模型,并限制较长基准测试的样本量以避免过度拟合,确保模型评估结果的可靠性和泛化能力。
数据集是怎么去重和过滤的
下图概括了FineWeb数据集生成的主要步骤:
URL过滤→文本提取→语言过滤→Gopher过滤→MinHash去重→C4过滤器→自定义过滤器→PII(个人身份信息)移除
本文主要介绍去重和过滤的部分,因为对于创建高质量数据集来说,这两个步骤对于提高模型性能、增加数据多样性和清洁度方面至关重要。
数据去重
网络中存在许多聚合器、镜像站点或模板化页面,这些都可能导致内容在不同域名和网页上重复出现。
去除这些重复内容(去重)已被证明可以提高模型性能,并减少对预训练数据的记忆,这有助于模型更好地泛化。
研究者采用了MinHash这种基于模糊哈希的去重技术,因为它可以有效地扩展到许多CPU节点,并可以调整相似性阈值(通过控制bucket的数量和大小)以及考虑的子序列长度(通过控制n-gram大小)。
研究者拆分每个文档为5-gram,使用112个哈希函数计算minhashes。
112个哈希函数被分成14个bucket,每个bucket有8个哈希,目的是定位至少75%相似的文档。
在任何bucket中具有相同8个minhashes的文档被认为是彼此的重复。
需要注意的是,研究者发现一个奇怪的现象:虽然去重后数据量少了很多(比如最旧的数据包,去重后只剩下了原来10%的内容),但用这些去重后的数据去训练模型的时候,模型的表现并没有变好,甚至比之前用没有去重的数据训练的模型还要差。
在所有数据包上进行去重并没有提高性能
这说明,有时候去重去得太狠了,可能把一些有用的内容也给去除了,留下的那些内容反而质量不高。
这也提醒我们,需要找到一个平衡点,既要去除重复、低质量的数据,也要保留足够的、有价值的信息。
为了改进去重方法,研究者尝试了一种新策略:对每个单独的数据包使用MinHash技术进行独立的去重,而不是将所有数据包合并在一起去重。
通过这种方式,平衡了每个重复次数较多的集群和重复次数较少的集群之间的分布差异,让去重更加的「温和」。
数据过滤
首先介绍一下C4数据集,这是一个大型语言模型(LLM)训练的常用数据子集,它在Hellaswag基准测试中表现十分出色。
FineWeb的研究者首先参照C4的过滤策略,先是匹配它的性能,然后是超越。
通过应用所有过滤规则(去除不以标点符号结尾的行、提及JavaScript和cookie通知,以及去除不在长度阈值内的文档,包含“lorem ipsum”或花括号{}),他们能够匹配C4在Hellaswag上的表现。
然后,通过多次的消融研究,研究者确定了三个自定义过滤器在综合分数上显示出最显著的改进:
当这三个过滤器一起应用时,大约22%的标记被移除。
这些过滤器使他们能够进一步提高性能,并显著地超过了C4数据集的性能,同时提供了一个更大的数据集。
FineWeb数据集的表现
通过与其他通常被认为是最高质量的公开可访问的网络规模数据集进行了消融比较,包括RefinedWeb(5000亿个标记)、C4(1720亿个标记)、Dolma v1.6(3万亿个标记)等, FineWeb(15万亿个标记)在允许训练数万亿个标记的同时,带来了目前最高的模型性能。
除此之外,该团队还发布了FineWeb-Edu,FineWeb-Edu的开发采用了一种新方法,即利用合成数据来开发用于识别教育内容的分类器。
针对教育领域,通过增加教育质量评分的注释和增加了单独的评分系统,研究者创建了一个有效的分类器,可以在大规模数据集上识别和过滤出具有教育价值的内容。
FineWeb-Edu在教育基准测试如MMLU、ARC和OpenBookQA上取得了显著改进,超过了 FineWeb和其他所有开放的网络数据集。
同时,FineWeb-Edu的生成也证明了使用LLM注释训练的分类器在大规模数据过滤中的有效性。
在技术报告的最后,研究者表示,希望持续揭示高性能大型语言模型训练的黑箱,并让每个模型训练者都能创建最先进的LLM。
他们也期待将FineWeb的经验和学习应用到其他的非英文语言,使多语言的高质量网络数据也能够更容易地被获取到。
文章来源于“新智元”,作者“新智元”