FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据 原创

发布于 2025-5-15 06:34
浏览
0收藏

大型语言模型(LLM)的性能在很大程度上取决于其预训练数据集的质量和规模。然而,像 Llama 3 和 Mixtral 这样的前沿开源大语言模型的预训练数据集并未公开,人们对其创建方式也知之甚少。

最近,我们发布了FineWeb,这是一个全新的大规模(包含 15 万亿词元,占用 44TB 磁盘空间)大语言模型预训练数据集。FineWeb 源自 96 个 CommonCrawl 快照,与其他开源预训练数据集相比,使用它训练出的大语言模型性能更优。为了让机器学习领域更加透明,推动人们对如何训练高质量大语言模型的公开理解,我们详细记录并剖析了 FineWeb 中所有的设计选择,包括对去重和过滤策略的深入研究。这篇长篇报告深入探讨了如何创建一个大规模、高质量的适用于大语言模型预训练的网络规模数据集。数据集🍷FineWeb 可在此处获取。(https://huggingface.co/datasets/HuggingFaceFW/fineweb)

我们非常感谢 distill.pub 团队(尤其是克里斯托弗・奥拉、尚・卡特、路德维希・舒伯特)创建的模板,这篇博客文章正是基于此模板创作。同时,也感谢他们精心撰写的文章和博客,为我们带来了灵感。

在本报告中,我们还介绍了FineWeb-Edu,它是 FineWeb 的一个子集,通过可扩展的自动高质量标注构建,具有教育价值。在多项教育基准测试中,如 MMLU、ARC 和 OpenBookQA,它的表现优于所有可公开获取的网络数据集。FineWeb-Edu 有两种规模 / 过滤级别:1.3 万亿(极高教育内容占比)和 5.4 万亿(高教育内容占比)词元(tokens)(所有词元均使用 GPT2 分词器进行统计)。你可以在此处下载。

这两个数据集均依据宽松的 ODC-By 1.0 许可协议发布。

简而言之:本博客讨论了大规模数据处理和质量评估、🍷FineWeb 的构建方法(列出并解释所有设计选择),以及创建其📚FineWeb-Edu 子集的过程。

(注释:ODC-By 1.0 许可协议介绍

ODC-By 1.0(Open Data Commons Attribution License v1.0)是一种开放数据许可协议,旨在允许用户在满足特定署名要求的前提下,自由分享、修改和使用数据库。

# 主要内容

1. 许可范围:

   - 分享:允许用户复制、分发和使用数据库。

   - 创作:允许用户基于数据库生成作品。

   - 改编:允许用户修改、转换和基于数据库进行进一步开发。

2. 署名要求:

   - 用户在公开使用数据库或基于数据库生成的作品时,必须按照许可协议指定的方式进行署名。

   - 在使用或重新分发数据库时,必须明确说明数据库的许可协议,并保留原始数据库中的所有相关通知。

3. 法律效力:

   - ODC-By 1.0 是一种版权和数据库权利的许可协议,同时也是一份合同。

   - 它涵盖了数据库的版权和数据库权利,但不包括数据库中个别内容的版权。

4. 权利保留:

   - 许可方保留了在某些情况下收取版税的权利(例如在某些司法管辖区的强制许可方案下)。

   - 许可方也可以选择在其他条件下停止分发或提供数据库。

5. 适用范围:

   - 该许可协议适用于数据库的整体权利,而不是数据库中个别内容的权利。

   - 数据库中的个别内容可能受到其他权利(如版权、专利、隐私权等)的保护,这些权利不在 ODC-By 1.0 的覆盖范围内。

6. 再许可:

   - 用户不能对数据库进行再许可。

   - 每次用户将数据库或其衍生作品传递给第三方时,许可方会自动以相同的条款向第三方提供许可。

# 如何应用 ODC-By 1.0

- 在所有相关位置显著声明:“This {DATA(BASE)-NAME} is made available under the Open Data Commons Attribution License: http://opendatacommons.org/licenses/by/1.0/”,并替换 `{DATA(BASE)-NAME}` 为数据库的名称。

- 如果无法使用超链接,需在声明中包含许可协议文本的 URI。

# 注意事项

- 法律咨询:在使用 ODC-By 1.0 许可协议之前,建议咨询法律专业人士。

- 其他权利:数据库或其内容可能受到其他法律权利(如商标、隐私权等)的约束,用户需自行确认。

ODC-By 1.0 许可协议为开放数据的共享和使用提供了明确的法律框架,同时要求用户在使用数据时必须进行适当的署名。)

1.网络数据

1.1寻找原始数据

在训练大语言模型时,关于网络数据集经常会有人问到一个问题:“他们究竟从哪里获取这么多数据?” 通常有两种途径:

  • 自行爬取数据,像 OpenAI 或 Anthropic 等公司(以及其他公司)就是这么做的(详见此处和此处 )。
  • 使用公共的网页爬取资源库,比如由非营利组织 CommonCrawl 维护的资源库。

为了构建FineWeb,我们参照许多大语言模型训练团队以往的做法,以 CommonCrawl(CC)作为起点。非营利组织 CommonCrawl 自 2007 年起就开始爬取网页,通常每隔 1 到 2 个月就会发布一次新的爬取数据,其中包含通过自动网页爬取获取的 200 到 400TiB 文本内容。

例如,最新的 CC 爬取数据(2024 年 4 月)包含 27 亿个网页,未压缩的 HTML 文本内容总计 386TiB(请注意,每次爬取的数据规模会有所变化。在本报告中,“转储” 和 “爬取数据” 这两个术语可互换使用)。自 2013 年以来,已发布了 96 次爬取数据,2008 年至 2012 年期间还有 3 次爬取数据,但格式不同(更旧),我们并未处理这 3 次较旧的爬取数据。

1.2大规模处理

鉴于涉及的数据量巨大,我们必须克服的主要挑战之一是拥有一个模块化、可扩展的代码库。这一代码库要能让我们快速迭代处理决策,轻松尝试新想法,同时合理地并行处理工作负载,并能清晰洞察数据情况。

为此,我们开发了datatrove(https://github.com/huggingface/datatrove),这是一个开源数据处理库,它使我们能够将过滤和去重设置无缝扩展到数千个 CPU 核心。创建FineWeb 所涉及的所有数据处理步骤都使用了这个库。你可以在datatrove代码库中找到我们使用的具体脚本。

1.3什么是优质数据?

在创建数据集时,这可能是最需要牢记的问题。在大多数情况下,尤其是在大语言模型预训练的背景下(请注意,本报告聚焦于用于预训练大语言模型的网络规模数据集这一特定领域,“网络规模” 通常指从网络获取的超过 1000 亿词元的数据。这里的预训练指的是模型训练的第一步,从随机权重开始。我们并不涵盖其他数据集创建领域,也不认为本文中提出的经验或假设能扩展到该特定领域之外的其他领域),“高质量” 并不是一个定义明确的术语,甚至不是仅通过直接人工观察就能清晰感知的文档属性。

常见的做法是在一个被认为 “干净” 的语料库(通常是维基百科,尽管如上文所述,“干净” 的概念定义模糊,不应简单等同于维基百科类文本)上训练模型,然后用它来检查我们试图整理的数据集的困惑度。遗憾的是,这并不总能与在一组感兴趣的下游任务上的性能提升相关联。因此,另一种常用方法是训练小模型(相较于如今标准规模的大语言模型而言 “小”,即与 70 亿至 700 亿参数的模型相比规模较小。在本研究中,“小” 指的是约 10 亿至 20 亿参数),在我们数据集的一个代表性子集上进行训练,并在一组评估任务上对其进行评估。使用小模型是因为训练成本和时间与模型规模相关。在第二种方法中,选择一组多样化且具有代表性的数据集评估任务非常重要,并且要尽量避免过度拟合任何一个单独的基准测试,因为这可能会损害预训练后得到的大语言模型的通用性。

还有一种比较不同数据集的方法,是在每个数据集上训练一个模型,然后让人工对模型生成的内容进行评分和比较(就像在 LMSYS 聊天机器人竞技场中那样)。可以说,从代表模型实际使用情况的角度来看,这种方法能提供最可靠的结果。但遗憾的是,通过这种方式获得消融实验结果成本高昂且耗时。而且,这种方法通常要求模型经过指令微调阶段以获得对话能力,因为预训练模型并非直接为遵循指令而设计,因此对提示细节更为敏感。

在本研究中,我们采用训练小模型并在一组 “早期信号” 基准测试任务上进行评估的方法。我们认为,在牢记上述关于评估基准测试过度拟合的注意事项的情况下,这是衡量用于训练这些模型的数据质量的合理替代方法。

(关于数据集的困惑度(Perplexity)。是一个用于评估语言模型性能的重要指标,它反映了模型对数据集的预测能力和理解程度。

# 定义与计算

- 困惑度通常被定义为在给定数据集上,语言模型预测下一个单词或符号的平均不确定性的指数。在数学上,对于一个具有 \(n\) 个单词的数据集 \(W = w_1, w_2, \cdots, w_n\),语言模型 \(P\) 的困惑度 \(PP\) 计算公式为:\(PP = 2^{H(W)}\),其中 \(H(W)\) 是数据集 \(W\) 的信息熵。信息熵 \(H(W)\) 的计算公式为 \(H(W)=-\frac{1}{n}\sum_{i = 1}^{n}\log_2 P(w_i|w_1, w_2, \cdots, w_{i - 1})\)。直观地说,模型对每个单词的预测概率越高,困惑度就越低,表明模型对数据集的拟合程度越好。

# 意义与作用

- 评估模型性能:困惑度是衡量语言模型在给定数据集上表现的关键指标。较低的困惑度表示模型能够更好地理解数据集中的语言模式和规律,从而更准确地预测未知数据。例如,在训练一个文本生成模型时,通过比较不同模型在相同验证数据集上的困惑度,可以选择出性能最优的模型。

- 比较不同数据集:困惑度也可用于比较不同数据集对于特定模型的难度。如果一个模型在数据集 \(A\) 上的困惑度明显高于在数据集 \(B\) 上的困惑度,说明该模型在处理数据集 \(A\) 时面临更大的挑战,可能是因为数据集 \(A\) 的语言结构更复杂、主题更广泛或者数据质量更低等原因。

- 监控训练过程:在模型训练过程中,困惑度是一个重要的监控指标。随着训练的进行,模型的困惑度通常会逐渐降低,如果困惑度在训练过程中出现异常波动或不再下降,可能意味着模型出现了过拟合、欠拟合或者训练参数设置不当等问题,需要及时调整训练策略。

# 局限性

- 依赖数据质量:困惑度的计算完全依赖于给定的数据集,如果数据集中存在错误、噪声或者标注不一致等问题,会影响模型对数据的学习和预测,进而导致困惑度不能准确反映模型的真实性能。

- 单一维度评估:困惑度只是从预测概率的角度来评估模型性能,它不能全面反映模型在语义理解、逻辑推理、上下文连贯性等其他重要方面的表现。例如,两个具有相同困惑度的模型,在生成文本的质量和可读性上可能存在很大差异。

- 缺乏绝对标准:困惑度的值没有绝对的好坏标准,不同的数据集和任务可能有不同的合理范围。在一个数据集上被认为是低困惑度的值,在另一个数据集上可能就不是很理想,因此需要结合具体的应用场景和对比实验来评估模型的性能。)

(关于如何评价数据集的质量?这里提到的几种方法:

1. 第一种方法:一般来说,人们常选像维基百科这种大家觉得“干净”的语料库(不过“干净”没有特别精准的定义,不能只认为是维基百科那种文本)来训练模型。然后用训练好的模型去检查要整理的数据集的困惑度(可以理解为数据集的复杂程度或让模型难以理解的程度)。但可惜的是,检查出来的困惑度和模型在一些人们感兴趣的下游任务(比如后续实际应用中的任务)上的表现提升没有必然联系。

2. 第二种方法:另一种常用的办法是训练小模型(这里的“小”是相对于现在标准的大语言模型来说的,标准大语言模型有70亿到700亿参数,小模型大概是10亿到20亿参数)。在要处理的数据集中选取有代表性的一部分来训练小模型,再在一系列评估任务上对小模型进行测试。用小模型是因为模型规模越小,训练需要的成本和时间就越少。在这种方法里,选的评估任务要多样且能代表数据集的特点,还要避免模型对某个单独的基准测试过度适应(就是模型只在这个测试上表现好,在其他任务上不行),因为这样会影响预训练后大语言模型在各种实际应用中的通用性(就是模型在不同任务和场景下的适应能力)。

3. 第三种方法:还有一种比较不同数据集的方式,就是在每个数据集上都训练一个模型,然后让人对这些模型生成的内容进行打分和比较(就像在 LMSYS 聊天机器人竞技场里那样)。从反映模型实际使用情况的角度来看,这种方法得出的结果最可靠。但不好的地方是,通过这种方式做消融实验(就是分析每个因素对模型性能的影响)成本很高,而且很费时间。并且这种方法通常需要先对模型进行指令微调(就是让模型学会按照人的指令工作),因为预训练的模型不是直接为了按指令行动而设计的,所以对提示(就是给模型的输入信息)的细节很敏感,不微调的话可能表现不好 。 )

1.4消融实验和评估设置

为了比较某个特定处理步骤的影响,我们在数据集的两个版本上训练两个模型,一个版本经过额外处理步骤(即我们想要评估的步骤),另一个版本则去除了该步骤(即该步骤被消融 / 删除)。除了数据不同,这两个模型的其他方面完全相同:参数数量、架构超参数都相同,并且在每个版本的数据中随机抽取相同数量的词元进行单轮训练,唯一的区别就在于训练数据。然后,我们在相同的任务集上评估每个模型,并比较平均得分。

我们的消融模型使用nanotron进行训练。我们的 “消融模型” 有 18.2 亿个参数(包括嵌入层),采用 Llama 架构,序列长度为 2048,全局批量大小约为 200 万个词元,并使用 GPT2 分词器。对于大多数消融实验,我们在约 280 亿个词元上进行训练(对于这个模型规模,大致符合 Chinchilla 最优训练规模)。为了确认每次过滤步骤后相对性能的提升,我们如后文所述,在 3500 亿个词元上进行了更长时间的训练。

(关于Nanotron。 Nanotron是一个用于预训练 Transformer 模型的库。它提供了一个简单且灵活的 API,用于在自定义数据集上预训练模型。Nanotron 的设计宗旨是易于使用、快速且可扩展。它基于以下原则构建:

- 简单性:Nanotron 被设计为易于使用。它提供了一个简单且灵活的 API,用于在自定义数据集上预训练模型。

- 性能:针对速度和可扩展性进行了优化,Nanotron 使用最新技术以更快、更高效的方式训练模型。)

我们很快会在 Nanotron 中提供重现这些消融模型的配置。

我们使用lighteval对模型进行评估。我们通过选择能在相对较小规模(“小” 模型仅在 “几十亿” 词元上进行训练)下提供良好信号的基准测试,精心挑选了一组用于消融实验的基准测试。在lighteval中所有可用的基准测试中,我们通常使用以下标准来选择这些基准测试:

(关于Lighteval。Lighteval 是用于在多个后端(无论是 Transformers、TGI、VLLM 还是 Nanotron)轻松评估大型语言模型(LLMs)的全能工具包。通过保存和探索详细到每个样本的结果,深入了解模型的性能,以便调试并比较不同模型的表现。

-定制化触手可及:您可以浏览我们现有的所有任务和指标,也可以轻松创建适合您需求的自定义任务和自定义指标。

-无缝地在 Hugging Face Hub、S3 或本地进行实验、基准测试和存储结果。)

  • 同一数据集不同采样训练运行之间的方差较小:我们希望在数据子集上的运行能够代表整个数据集,并且在可能的情况下,得到的分数对具体数据点选择的敏感度低于对我们过滤器效果的敏感度。当我们在一个数据集的不同子集(采样)上进行训练时,我们希望这些训练运行的结果能够代表整个数据集。也就是说,我们期望从这些子集训练得到的结果分数,在尽可能的情况下,对具体的数据点选择的敏感度较低,而更多地体现出我们所使用的过滤器(数据筛选、处理方式等)的效果。例如,如果方差大,可能意味着结果受数据点选择影响大,而不是真正反映过滤器的作用;方差小则说明结果更稳定,更能代表数据集整体特征以及过滤器效果。
  • 性能在训练过程中单调(或接近单调)提升:理想情况下,随着所见词元数量的增加,在高信号基准测试上的性能不应下降(否则表明小规模下的结果不可靠)。在理想情况下,随着模型在训练过程中所处理的token数量增加,在高信号基准测试(可以理解为有明确衡量标准且能反映模型能力的测试)上的性能不应下降。如果性能下降,那就表明在小规模训练下得到的结果可能不可靠。比如在语言模型训练中,随着训练的进行和看到的文本量增多,模型在相关任务(如文本生成、回答问题等)上的表现应该越来越好或者至少保持稳定,而不是变差,否则就说明训练过程或模型本身可能存在问题。
  • 任务性能至少比随机基线高出几个标准差:鉴于我们的小消融模型和训练情况,我们通常在任何基准测试中都无法获得极高的分数,但我们要确保得到的分数高于随机噪声。由于我们使用的是小规模的消融模型以及进行的训练,通常我们在任何基准测试中都不会得到极高的分数。但是,我们必须确保得到的分数要明显高于随机噪声水平。也就是说,模型的表现不能只是偶然地和随机猜测差不多,而应该有足够的能力,其分数要与随机结果有显著差异,这样才能说明模型确实学到了东西,而不是靠运气得到的结果。

经过考虑,我们选择了以下基准测试列表:

  • CommonSense QA
  • HellaSwag
  • OpenBook QA
  • PIQA
  • SIQA
  • WinoGrande
  • ARC
  • MMLU

为确保检查点评估在有限时间内完成,我们将较长的基准测试限制在 1000 个样本(在 8 个 GPU 的单个节点上进行的实际评估时间不超过 5 分钟,与训练并行进行)。

2 FineWeb 构建方法

在接下来的小节中,我们将解释生成 FineWeb 数据集所采取的每一个步骤。

你可以在此处找到一个完全可重现的datatrove配置。



FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

(FineWeb 数据处理流水线:

1. URL Filtering(网址过滤):对输入的网址进行筛选,排除掉不符合要求的网址,比如恶意网站、无关网站等 ,只保留合适来源的网址。

2. Text Extraction(文本提取):从筛选后的网址所对应的网页中提取文本内容,将网页中的文字信息抽取出来,以便后续处理。 

3. Language Filtering(语言过滤):对提取的文本进行语言甄别,筛选出指定语言(通常是目标训练语言 )的文本,过滤掉其他语言文本。

4. Gopher Filtering(Gopher过滤):使用Gopher相关技术或规则进一步过滤文本,Gopher 可能是一种特定的过滤算法或工具,去除不符合特定标准的文本。 

5. MinHash dedup(最小哈希去重):利用MinHash算法对文本进行去重处理,找出重复或高度相似的文本并去除,只保留独特的文本内容。

6. C4 Filters(C4过滤器):采用C4相关的过滤规则或方法对文本过滤,C4可能是一种预定义的数据集或过滤标准,进一步精炼文本数据。 

7. Custom Filters(自定义过滤器):根据特定需求设置的自定义过滤规则,对文本进行个性化筛选,去除或保留符合特定条件的文本。 

8. PII Removal(个人身份信息去除):识别并去除文本中包含的个人身份信息,如姓名、身份证号、联系方式等,保护隐私。 )

2.1起点:文本提取

CommonCrawl 数据主要有两种格式:WARC 和 WET。WARC(网络归档格式)文件包含爬取的原始数据,包括完整的页面 HTML 和请求元数据。WET(WARC 封装文本)文件则提供这些网站的纯文本版本。

许多数据集都以 WET 文件为起点。但根据我们的经验,Common Crawl 用于创建这些 WET 文件的默认文本提取方法,对于大语言模型预训练的目标来说并不理想(我们尤其怀疑它保留了过多的样板内容和导航菜单),有多种开源库能提供更好的文本提取功能。我们使用 trafilatura 库从 WARC 文件中提取文本内容,通过对结果的直观检查,与其他库相比,它能提供高质量的提取效果。

你可以在此处找到一个比较几种文本提取库的基准测试。

为了验证这一决策,我们直接使用 WET 文件处理 2019 - 18 转储数据,并使用 trafilatura 从 WARC 文件中提取文本(我们使用 trafilatura 的默认选项,并设置favour_precisinotallow=True)。我们对这两种数据应用相同的处理(我们的基础过滤 + 最小哈希,详见下文),并训练了两个模型。虽然 WET 数据生成的数据集规模要大 25% 左右(约 2540 亿个词元),但事实证明,其质量远不如使用 trafilatura 从 WARC 文件中提取文本生成的数据集(约 2000 亿个词元)。对一些样本的直观检查证实,WET 文件中许多额外的词元都是不必要的页面样板内容。

- CommonCrawl 数据格式:

  - WARC(Web ARChive)文件:包含爬取的原始数据,包括完整的网页 HTML 和请求元数据。这种格式保留了网页的完整结构和内容。

  - WET(WARC Encapsulated Text)文件:是从 WARC 文件中提取的纯文本版本,主要用于简化数据处理。它去掉了 HTML 标签,只保留了文本内容。

# 问题

- 默认情况下,CommonCrawl 使用的文本提取方法生成 WET 文件时,可能会保留过多的“样板内容”(如导航菜单、页脚等),这些内容对于大语言模型的预训练并不理想。因为这些内容通常是重复的、无关的,可能会干扰模型学习有用的语义信息。

# 解决方案

- 使用 Trafilatura 库:

  - Trafilatura 是一个开源的文本提取库,专门用于从 HTML 中提取高质量的文本内容。

  - 在实验中,使用 Trafilatura 从 WARC 文件中提取文本,并设置参数 `favour_precisinotallow=True`,以优先保证提取的文本质量。

# 实验设计

- 数据处理:

  - 使用 WET 文件直接处理 2019 - 18 转储数据。

  - 同时,使用 Trafilatura 从 WARC 文件中提取文本。

  - 对这两种数据应用相同的处理流程,包括基础过滤和最小哈希(MinHash)算法。

# 实验结果

- 数据规模:

  - WET 数据生成的数据集规模更大,约 2540 亿个词元,比 Trafilatura 提取的数据集多出 25% 左右。

  - Trafilatura 提取的数据集规模约为 2000 亿个词元。

- 数据质量:

  - 尽管 WET 数据集规模更大,但其质量远不如 Trafilatura 提取的数据集。

  - 通过对样本的直观检查,发现 WET 文件中许多额外的词元都是不必要的页面样板内容,这些内容对于模型训练并无太大帮助。

# 结论

- 使用 Trafilatura 从 WARC 文件中提取文本,能够生成更高质量的数据集,更适合用于大语言模型的预训练。

- 即使 WET 数据集规模更大,但由于其中包含大量无关的样板内容,其实际效用不如 Trafilatura 提取的数据集。

核心观点是:在处理 CommonCrawl 数据时,使用 Trafilatura 库从 WARC 文件中提取文本,比直接使用 WET 文件能够生成更高质量的数据集,更适合用于大语言模型的预训练。)

不过需要注意的是,文本提取是我们处理过程中成本最高的步骤之一,所以我们认为对于预算较低的团队而言,使用现成的 WET 数据可能是一个合理的权衡。


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

aggregate score(综合得分)应该是 CommonSense QA、HellaSwag、OpenBook QA、PIQA、SIQA、WinoGrande、ARC、MMLU 等)上的得分进行汇总计算。

2.2基础过滤

过滤是数据集整理过程中的重要一环。它旨在去除部分会降低模型性能的数据(无论是单词、行,甚至是整个文档),在我们基于评估驱动的数据集构建过程中,这些数据被认为是 “质量较低” 的。

我们以 RefinedWeb 的部分设置作为过滤基础,具体如下:

  • 使用阻止列表进行 URL 过滤,去除成人内容。
  • 应用 fastText 语言分类器,仅保留得分≥0.65 的英文文本。
  • 应用 MassiveText 的质量和重复过滤器(使用默认阈值)。

对每个提取文本后的转储数据(目前有 96 个转储数据)应用此过滤后,我们大约得到了 36 万亿个词元的数据(本报告中所有数据的词元数量均使用gpt2分词器统计)。

(# 1. 应用 fastText 语言分类器,仅保留得分≥0.65 的英文文本

- fastText 语言分类器:

  - fastText 是一种开源的文本分类和词向量生成工具,由 Facebook AI Research 开发。

  - 在语言分类任务中,fastText 可以通过训练好的模型来判断文本所属的语言,并为每个判断结果分配一个置信度分数(通常是一个介于 0 到 1 之间的数值)。

  - 置信度分数越高,表示模型对文本属于某种语言的判断越有信心。

- 操作步骤:

  - 对每一段文本,使用 fastText 的语言分类器进行检测。

  - fastText 会返回一个语言标签(如 `en` 表示英文)以及一个置信度分数。

  - 如果置信度分数 ≥0.65,则认为该文本是英文,并保留这段文本;否则,丢弃这段文本。

- 目的:

  - 这一步的目的是确保数据集中只包含高质量的英文文本,排除其他语言的干扰。

  - 置信度阈值 0.65 是一个经验值,用于平衡语言识别的准确性和召回率。较高的阈值(如 0.65)可以减少误判,但可能会漏掉一些边缘情况的英文文本。

# 2. 应用 MassiveText 的质量和重复过滤器(使用默认阈值)

- MassiveText:

  - MassiveText 是一个用于大规模文本数据处理的工具,通常用于数据清洗、去噪和去重等任务。

  - 它可以检测文本的质量(如是否包含噪声、是否是高质量的自然语言文本)以及文本的重复性(是否与其他文本高度相似)。

- 操作步骤:

  - 使用 MassiveText 的过滤器对文本数据进行处理。

  - MassiveText 会根据其内部算法和默认阈值,对每段文本进行质量评估和重复检测。

  - 如果文本通过了质量过滤器(即被认为是高质量的文本)且未被标记为重复,则保留这段文本;否则,丢弃这段文本。

- 默认阈值:

  - MassiveText 的过滤器通常会有一些预设的阈值,用于判断文本的质量和重复性。

  - 使用默认阈值意味着直接采用工具推荐的设置,而没有手动调整这些阈值。

  - 默认阈值通常是经过优化的,适用于大多数场景,但也可以根据具体需求进行调整。

- 目的:

  - 质量过滤:去除低质量的文本(如包含大量噪声、格式错误或非自然语言内容的文本),以提高数据集的整体质量。

  - 重复过滤:去除高度重复的文本,以避免数据集中的冗余,提高数据的多样性和训练效率。

# 总结

1. 使用 fastText 语言分类器,仅保留置信度≥0.65 的英文文本,以确保数据集中只包含高质量的英文内容。

2. 使用 MassiveText 的质量和重复过滤器(采用默认阈值),进一步提升数据的质量和多样性,去除低质量或重复的文本。

通过这两个步骤,可以显著提高数据集的质量,为后续的模型训练提供更可靠的数据基础。)

2.3数据去重

去重是为大语言模型预训练创建大型网络数据集时最重要的步骤之一。数据集去重方法旨在识别并去除数据集中的冗余 / 重复数据。

2.3.1为什么要去重?

网络上存在许多聚合网站、镜像网站、模板化页面,或者只是在不同域名和网页上重复出现的内容。有时,爬虫本身也可能引入这些重复页面,比如不同链接指向同一页面的情况。

去除这些重复内容(去重)与模型性能的提升以及预训练数据记忆问题的减少相关,这可能有助于提高模型的泛化能力。此外,通过去重获得的性能提升等同于训练效率的提高:通过去除重复内容,模型可以用更少的训练迭代次数达到相同的性能水平;或者说,对于给定数量的训练词元,模型能够接触到更多样化的数据。

识别甚至定义重复数据的方法有很多。常见方法依赖哈希技术来加快处理速度,或者构建高效的数据结构对数据进行索引(如后缀数组)。去重方法还可以是 “模糊” 的,即使用某种相似度度量将文档标记为重复,也可以是 “精确” 的,即检查两个文档(或行、段落,或其他任何粒度级别)之间是否完全匹配(请注意,这里即使讨论 “模糊” 去重,我们也仅采用基于字符 / 单词匹配的方法,也就是文本表面层面的方法。更复杂的去重概念涉及 “语义” 去重:比较 / 去除与相同概念相关的文本,例如使用同义词或释义。我们在此不讨论这些内容,但需要注意的是,它们在大规模合成数据生成领域可能很重要,例如可参考我们关于 Cosmopedia 的发布内容)。

2.3.2我们的去重参数

参照 RefinedWeb,我们决定应用 MinHash,这是一种基于模糊哈希的去重技术,可高效扩展到多个 CPU 节点,并且允许我们调整相似度阈值(通过控制桶的数量和大小)以及所考虑的子序列长度(通过控制 n - gram 大小)。我们选择收集每个文档的 5 - gram(在 MinHash 处理函数中,我们的单位是 “单词”,使用特定语言的单词分词器进行计算),并总共使用 112 个哈希函数计算最小哈希值,将这些哈希函数分为 14 个桶,每个桶包含 8 个哈希函数,目标是识别相似度至少为 75% 的文档。任何一个桶中具有相同 8 个最小哈希值的文档都被视为彼此重复。

这意味着,对于相似度(s)分别为 0.7、0.75、0.8 和 0.85 的两个文档,它们被识别为重复文档的概率分别为 56%、77%、92% 和 98.8%(计算公式为 1-(1-s^8)^{14})。以下图表对比了我们使用 112 个哈希函数的设置与 RefinedWeb 使用 9000 个哈希函数(分为 450 个桶,每个桶 20 个哈希函数,这种设置需要大量的计算资源,因为每个哈希值都必须计算、存储,然后与其他文档的哈希值进行比较)的匹配概率:


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

虽然 RefinedWeb 中大量的哈希函数能实现更陡峭、更明确的截断(实际相似度接近阈值的文档更有可能被正确识别),但我们认为在计算和存储方面的节省是一个合理的权衡。

还需要注意的是,文档内去重已由我们的重复过滤器处理,该过滤器会去除包含大量重复行和段落的文档。

(关于MinHash

 1. MinHash核心机制

   - 模糊哈希:与精确哈希不同,MinHash允许通过比较哈希值来估算两个文档的相似度(Jaccard相似度)。即使文档存在局部差异,只要整体内容相似,仍能被识别为重复。

   - 扩展性:算法设计支持分布式计算,可在多个CPU节点上并行处理海量数据(如FineWeb处理的96个CommonCrawl转储)。

 2. 关键参数配置

   - n-gram大小(5-gram):

     - 将文档按单词分割为长度为5的连续子序列(例如,"the quick brown fox jumps" → ["the quick brown fox jumps", "quick brown fox jumps over", ...])。

     - 以单词为单位而非字符,更适合捕获语义层面的重复内容。

   - 哈希函数数量(112个):

     - 每个5-gram通过112个不同的哈希函数计算哈希值,生成文档的"签名"(signature)。

     - 哈希函数数量越多,相似度估计越精确,但计算成本也越高。

   - 分桶策略(14个桶,每桶8个哈希函数):

     - 将112个哈希值平均分配到14个桶中,每个桶包含8个哈希值。

     - 若两个文档在任意一个桶中的所有8个哈希值都相同,则判定为相似文档。

  3. 实际效果

   - 识别能力:

     - 相似度≥85%的文档几乎100%被识别(概率≈98.8%)。

     - 相似度为70%的文档约有56%的概率被识别。

   - 与RefinedWeb对比:

     - RefinedWeb使用更激进的参数(450个桶,每桶20个哈希函数),能实现更精确的截断(如相似度75%时识别概率接近100%),但计算成本极高。

     - FineWeb通过减少桶数和哈希函数,在保持较高识别率的同时,大幅降低了计算和存储开销。

 4. 为什么这样设计?

   - 平衡效率与质量:在处理96个CommonCrawl转储(总计36万亿词元)时,若采用RefinedWeb的参数,计算资源消耗将不可接受。

   - 避免过度去重:实验表明,对跨转储数据进行全局去重可能导致低质量数据被保留(如2013年转储中94%的数据被误删),而按转储独立去重效果更佳。

   - 可扩展性需求:算法需支持在数千个CPU核心上并行运行,参数选择需适应分布式计算框架。)

2.3.3去重越多越好,对吧?

最初,我们认为去重越多越好,所以我们的第一种方法是将整个数据集(所有 90 多个转储数据)整合在一起,使用 MinHash 进行去重。

我们以迭代的方式进行:从最新的转储数据(当时是 2023 - 50)开始,按时间顺序处理,直到最旧的爬取数据。我们不仅对每个转储数据内部进行去重,还会去除与之前处理过的转储数据中任何匹配的文档。

例如,对于当时第二新的转储数据(2023 - 40),我们除了对其内部进行去重外,还会与最新的转储数据进行去重对比。结果是,转储数据越旧,与之对比去重的转储数据数量就越多,从中去除的数据也就越多(实际上,在最旧的转储数据中,去重步骤去除了基础过滤数据的 90% 以上)。

以这种方式对数据集进行去重后得到 4 万亿个词元的数据。但令我们惊讶的是,在对随机抽取的 3500 亿个词元的子集进行训练时,我们的消融模型与在未去重数据上训练的模型相比,几乎没有性能提升,在我们的综合任务评估中,得分远低于其前身 RefinedWeb(见下图)。


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

这挑战了我们 “去重越多必然导致基准测试得分越高” 的假设,所以我们决定更深入地研究最旧的转储数据之一 ——2013 - 48 转储数据:

  • 在去重前,这个转储数据约有 4900 亿个词元。
  • 经过我们的迭代 MinHash 去重后,大约剩下 310 亿个词元(94% 的数据被去除)。

作为一项实验,我们尝试在从 2013 - 48 转储数据中抽取的 280 亿个词元上训练两个模型,这些数据分别来自:

  • 完全去重后剩下的约 310 亿个词元(最初保留的数据)。
  • 在迭代去重过程中从该转储数据中去除的约 4600 亿个词元中,单独进行去重(不考虑其他转储数据)后得到的 1710 亿个词元(最初去除的数据。虽然最初保留的数据中可能存在与最初去除的数据相似的文档,但我们估计两者的重叠部分较小,约为 40 亿个词元)。


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

这些结果表明,单独来看这个较旧的转储数据,保留下来的数据(原始数据的 10%)实际上比去除的 90% 的数据质量更差(请注意,这些消融模型仅在该转储数据上进行训练,因此是独立于所有其他转储数据进行考量的 )。通过肉眼检查也证实了这一点:最初保留的数据中包含的广告、关键词列表以及格式不佳的文本,比最初去除的数据要多得多。

2.3.4退一步思考:单个转储数据去重

我们决定尝试另一种方法:使用 MinHash 对每个转储数据单独进行去重(不考虑其他转储数据)。这样操作后得到了 20 万亿个词元的数据。

当在该数据集的随机样本上进行训练时,我们发现其性能现在与 RefinedWeb 相当(见下图):


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

我们推测,去重带来的主要改进在于移除了每个转储数据中都存在的非常大的聚类(在 RefinedWeb 的论文中,你可以找到这些聚类的一些示例,每个聚类包含数十万个文档 ),而对重复数量较少(少于约 100 个,即转储数据的数量)的聚类进一步去重实际上会损害性能:在其他转储数据中找不到重复匹配的数据,其质量可能更差,或者更偏离分布(2013 - 48 数据的结果证明了这一点)。

虽然将几个转储数据一起去重可能会看到一些性能提升,但在整个数据集(所有转储数据)的规模下,这种低质量数据上采样带来的副作用似乎影响更大。

一种可以考虑的可能性是,随着过滤质量的提高,这种影响可能不会那么明显,因为过滤可能能够去除一些低质量数据。我们还尝试在单独去重后的转储数据基础上,应用不同的、通常更 “轻量级” 的去重方法。你可以在下文进一步了解相关内容。

2.3.4关于衡量去重效果的说明

鉴于去重的性质,其效果在较小的数据集切片中(例如我们用于过滤消融实验的 280 亿个词元规模)并不总是很明显。此外,必须考虑到在对所有 CommonCrawl 转储数据进行去重时,存在一些特殊的影响因素,因为有些 URL / 页面会在不同转储数据中被重新爬取。

为了直观展示训练词元数量的变化对衡量去重效果的影响,我们考虑了以下(在重复程度方面非常极端且不切实际,但便于说明 )的理论场景:

  • 有 100 个 CommonCrawl 转储数据(大致符合实际数量)。
  • 每个转储数据都已完美地单独去重(该转储数据中的每个文档都是唯一的)。
  • 每个转储数据都是彼此的完美副本(不同转储数据间存在最大可能的重复,实际上这是最糟糕的情况 )。
  • 每个转储数据包含 2000 亿个词元(总计 20 万亿个词元,与我们上述单独去重后的结果规模相同 )。
  • 每个转储数据由 1000 个词元的文档组成(每个转储数据有 2 亿个文档)。

然后,我们模拟从这个包含 20 万亿个词元的整个数据集中均匀采样文档,以获得 10 亿、100 亿、350 亿和 1 万亿词元的子集。在下图中,你可以看到每个文档的重复频率。


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

对于 10 亿规模的数据,几乎所有文档都是唯一的(重复数量 = 1),尽管在整个数据集中,每个文档会重复 100 次(每次转储出现一次)。在 1000 亿规模(占总数据集的 0.5%)时,我们开始看到一些变化,大量文档会重复两次,还有一些甚至会重复 4 到 8 次。在 1 万亿规模(占总数据集的 5%)时,大多数文档会重复多达 8 次,有些文档甚至会重复多达 16 次。

我们在 3500 亿规模的去重数据上进行了性能评估,在这个理论场景下,数据集中很大一部分文档会重复多达 8 次。这个模拟说明了在去除最大的重复簇后,衡量去重对大语言模型训练的影响所存在的固有困难。

2.3.5其他(失败的)全局方法

在我们新发现的方法(独立对每个转储进行去重)的基础上,我们尝试通过使用替代的全局(对所有转储)去重方法,对独立进行最小哈希去重的 20 万亿个标记数据进一步去重,以提高性能。我们探索了以下方法:

  • URL 去重:我们对每个规范化(小写)的 URL 仅保留一个文档(去除了 71.5% 的标记,剩余 5.6 万亿个标记)——FineWeb URL 去重。
  • 行去重:

     a.对每个重复行仅保留 1 个(随机选择)出现的行(去除了 77.8% 的标记,剩余 4.4 万亿个标记)——FineWeb 行去重。

     b.与上述相同,但仅去除至少有 10 个单词的重复行,并去除去重后少于 3 个句子的文档(去除了 85% 的标记,剩余 2.9 万亿个标记)——FineWeb 含最少单词的行去重。

     c.对每个由 3 个重复行组成的片段仅保留 1 个出现的片段,在查找重复项时,每个数字都视为 0(去除了 80.9% 的标记,剩余 3.7 万亿个标记)——FineWeb 三行去重。

在这些去重数据上训练的模型性能始终比原始的独立去重数据差(即使程度不同)。


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

2.4额外的质量过滤

在这一点上,我们通过基础过滤和独立的最小哈希,达到了之前我们试图重现和扩展的研究(RefinedWeb)的性能。尽管如此,在我们的任务集合中,另一个经过大量过滤的数据集,即 C4 数据集,在我们评估套件的一些基准测试中仍然表现出更强的性能。

因此,我们着手寻找新的过滤步骤,首先使我们能够达到 C4 数据集的性能,然后在第二阶段超越它。一个自然的起点是研究 C4 数据集本身的处理方式。

2.4.1 C4:一个经受住时间考验的数据集

C4 数据集于 2019 年首次发布。它是从 2019-18 年的 CommonCrawl 转储中获取的,通过去除非英语数据、在线和文档级别应用一些启发式过滤器、在行级别进行去重,以及去除包含单词黑名单中单词的文档。

尽管按照当前标准,它年代较久且规模有限(大约 1750 亿个 GPT2 标记),但直到今天,这个数据集仍然是典型大语言模型训练的常用子集,被用于如相对较新的 Llama1 等模型中。这种成功归因于在这个数据集上训练的模型所表现出的强大性能,特别是在 Hellaswag 基准测试中表现出色,这是我们 “早期信号” 组中具有最高信噪比的基准测试之一。我们尝试将 C4 中使用的每个不同过滤器应用于独立去重的 FineWeb 2019-18 转储的基线:


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

  • “所有过滤器”(去除不以标点符号结尾的行,提及 JavaScript 和 cookie 通知 + 去除长度阈值之外的文档,包含 “lorem ipsum” 或大括号 {} 的文档)使我们能够达到 C4 在 HellaSwag 上的性能(分别为 “所有过滤器” 和 “C4” 的曲线)。(比如删掉结尾没有标点的句子,去掉提到JavaScript和cookie通知的内容,把长度不符合要求的文档,还有包含“lorem ipsum”(常用于排版设计的虚拟文本)或大括号“{}”的文档都去除掉。)
  • 大括号过滤器和单词长度过滤器只带来了很小的提升,分别去除了 2.8% 和 4.3% 的标记。
  • 终端标点过滤器本身带来了最大的单个提升,但去除了大约 30% 的所有标记(!)。
  • “lorem_ipsum”、JavaScript 和策略规则各自去除的训练标记不到 0.5%,所以我们没有单独在这些过滤器处理后的数据上进行训练。
  • “除了(非常具有破坏性的)终端标点之外的所有过滤器” 的表现优于单独使用终端标点过滤器,同时总共去除的标记更少(约 7%)。

我们决定应用上述除终端标点过滤器之外的所有 C4 过滤器。我们通过更长时间的运行验证了这些结果,你可以在下一部分的图表中找到相关内容。

2.4.2 一种开发启发式过滤器的统计方法

为了开发新的启发式过滤器并选择其阈值,我们设计了一个系统的过程:

1.我们首先收集了非常大量的数据集高级统计信息(超过五十种不同的指标),范围从常见的文档级指标(例如行数、平均行 / 单词长度等)到文档间重复指标(受 MassiveText 启发),涵盖高质量和低质量的网络数据集。

2.我们选择了两个分布(在每个数据集上计算的指标)之间的 Wasserstein 距离较大的指标。

3.我们检查了这两个分布的直方图,并根据经验选择了一个阈值,使得低质量数据集在这个指标上更接近高质量数据集。

4.我们通过在参考数据集上使用生成的过滤器(指标 - 阈值对)并运行小规模的消融实验来验证其有效性。

由于我们(新的)假设,即全局最小哈希会极大地对最旧转储中的低质量数据进行上采样,我们计算了 2013-48 和 2015-22 爬取数据(两个较旧的爬取数据)的独立最小哈希版本和(质量较差的)全局最小哈希版本的指标。然后,我们通过查看每个指标的分布,在宏观层面上比较了这些统计信息。

鉴于我们在去重方面的发现,我们发现两种去重方法在大多数指标上存在显著差异,这也许并不奇怪。例如,行字符重复指标(重复行中的字符数 / 总字符数)从独立去重(2015-22 年为 0.0053,2013-48 年为 0.0058)到全局去重(2015-22 年为 0.011,2013-48 年为 0.01)大约翻倍,这表明后者的文档间重复度更高。

按照上述过程处理这些数据集,得到了十七个候选的指标 - 阈值对。在下面的图片中,你可以看到其中三个直方图:


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

作为一个例子,我们检查了 “以标点符号结尾的行的比例” 的直方图(见上图),并观察到全局最小哈希在大约 0.12 处的文档密度增加。然后我们用这个阈值进行过滤,发现被去除的数据中短列表的数量较多,或者仅由文档布局文本(“主页”、“注册” 等)组成。

然后,我们通过在 2019-18 年的爬取数据上进行几个 280 亿标记的消融实验,评估了这十七个新创建的过滤器的有效性。在所有这些运行中,我们确定了三个过滤器(基于上述直方图的过滤器),它们在综合得分上显示出最显著的改进:

  • 去除以标点符号结尾的行的比例 ≤ 0.12 的文档(去除了 10.14% 的标记)—— 与原始 C4 终端标点过滤器去除的 30% 相比。
  • 去除重复行中的字符比例 ≥ 0.1 的文档(去除了 12.47% 的标记)—— 原始 MassiveText 对此比例的阈值是 ≥ 0.2。
  • 去除长度小于 30 个字符的行的比例 ≥ 0.67 的文档(去除了 3.73% 的标记)。

当同时应用这三个过滤器时,大约 22% 的标记被去除。


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

这些过滤器使我们能够进一步提升性能,并显著超越了C4数据集的表现,同时提供了规模大得多的数据集。

2.5最终的FineWeb 数据集

最终的FineWeb 数据集包含 15 万亿个标记,并按顺序包括以下前面提到的步骤,每个步骤都在我们的基准任务组上提供了性能提升:

1.基础过滤。

2.对每个转储进行独立的最小哈希去重。

3.选择一些 C4 过滤器。

我们的自定义过滤器(在上一节中提到)。


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

2.5.1与其他大规模网络数据集的比较

我们将🍷FineWeb 与以下通常被认为是最高质量的公开可用大规模网络数据集进行了比较(我们还指出了每个数据集公开版本中大约的标记数量):

  • RefinedWeb(5000 亿标记)
  • C4(1720 亿标记)
  • Dolma v1.6(3 万亿标记)(CommonCrawl 部分)
  • The Pile(3400 亿标记)
  • SlimPajama(6270 亿标记)
  • RedPajama2(20 万亿标记)(已去重)
  • 我们新的FineWeb(15 万亿标记)(本报告中)

你会发现 3500 亿标记训练的消融模型是公开可用的,并收集在这个集合中。我们已经上传了每 1000 个训练步骤的检查点。你也可以在这里找到我们的完整评估结果。


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

FineWeb 因此 —— 据我们所知 —— 是公开数据集,它在允许在数万亿个标记上进行训练的同时,带来了当前最高的模型性能。

3 FineWeb-Edu


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

FineWeb-Edu 在我们的评估任务组上优于 FineWeb 和所有其他公开的网络数据集。

FineWeb-Edu 是 FineWeb 的一个额外开发成果,我们很高兴在这份技术报告中介绍并公开发布。FineWeb-Edu 基于一种最近出现的用于过滤大语言模型训练数据集的新方法:使用合成数据来开发用于识别教育内容的分类器。这种技术在 Llama 3 和 Phi3 的训练中得到了显著应用,但在我们看来,其对网络数据过滤的大规模影响尚未得到充分的公开探索。

3.1大规模标注教育质量

我们使用 Llama-3-70B-Instruct 对🍷FineWeb 中的 50 万个样本进行了标注,对每个样本的教育质量在 0 到 5 的范围内进行评分。

我们探索了各种提示格式,以使用大语言模型自动提取教育分数,并发现 Yuan 等人的加法量表效果最好。这个量表允许大语言模型对每个额外的分数进行推理,这与将样本归入预定义类别的单等级李克特量表不同。然后,为了避免大语言模型偏向高度技术性的页面,如 arXiv 摘要和提交内容,我们专注于小学和中学水平的知识。在过滤过程中设置阈值为 3(在 0 到 5 的范围内),我们能够保留一些高级教育页面。

用于大语言模型标注的提示


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

用于 Llama3 教育分数标注的提示,也可在此处获得。

在用于标注数据的开放权重模型方面,我们试验了几个模型,包括 Mixtral-8x7B-Instruct 和 Mixtral-8x22B-Instruct、Llama-3-70B-Instruct,以及一个汇集这三个模型分数的评审团。在我们的实验中,我们发现仅使用 Llama3 能给出最可靠的结果。

3.2训练分类器

为了将我们的标注扩展到 FineWeb 中的数万亿个标记,我们使用 Llama3-70B 的标注来训练一个小型分类器。我们使用的模型是一个 Snowflake-arctic-embed 嵌入模型,在其顶部有一个带有单个回归输出的分类头。我们在 45 万个 Llama 3 标注上训练这个模型 20 个 epoch,学习率为 3e-4,冻结嵌入层和编码器层。我们保存了在 4.5 万个样本的保留验证集上具有最高 F1 分数的检查点,将 Llama 3 的标注视为真实标签。训练后,我们将分数四舍五入为 0 到 5 的整数。

然后,我们通过使用固定阈值来确定一个文件是否具有教育性,将问题转换为二元分类任务。使用阈值为 3 时,该模型在验证集上的 F1 分数达到了 82%,这表明在区分高质量教育内容方面表现出色。

该分类器可在 HuggingFaceFW/fineweb-edu-classifier 获取。训练和推理代码可在 GitHub 上获取。

3.3过滤和结果

我们将分类器应用于 FineWeb 的 15 万亿个标记,这个过程需要 6000 个 H100 GPU 小时。我们研究了使用不同过滤阈值的影响,发现使用阈值为 3 时总体效果最佳。尽管使用高于 3 的阈值在知识和推理密集型基准测试上提高了性能,但在 HellaSwag 和 PIQA 基准测试上性能显著下降。下面的图表显示了与 FineWeb 相比,每个阈值在六个不同基准测试上的性能;它使用了一个在 80 亿标记上训练的 18.2 亿参数的模型。


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

注意:这个消融实验是在 2024-10 转储的 80 亿标记上对 FineWeb 和 FineWeb-Edu 子集进行的,这可能不能代表整个数据集。下一个消融实验表明,除了 HellaSwag 基准测试(在该测试中我们注意到性能略有下降)之外,对于来自所有 FineWeb 转储的 3500 亿标记的更长运行,阈值为 3 的结果仍然成立。

我们通过过滤掉分数低于 3 的样本构建了 FineWeb-Edu。这去除了 92% 的数据集,留下了 1.3 万亿个教育标记。为了评估这种过滤在更大规模上的有效性,我们使用一个在 3500 亿标记上训练的 18.2 亿参数的模型进行了消融实验,类似于上述的 FineWeb 过滤消融实验:

Here are the key highlights of the ablation results above:

(1)FineWeb-Edu 在教育基准测试(如 MMLU、ARC 和 OpenBookQA)上超越了 FineWeb 和所有其他公开的网络数据集。

(2)它在显著更少的数据量下达到了相同的性能,与 C4 和 Dolma 相比,匹配 MMLU 结果所需的标记数量少 10 倍。

(3)这证明了使用基于大语言模型标注训练的分类器进行大规模数据过滤的有效性。

鉴于阈值为 2 时也表现出很强的性能,同时保留了更多的数据,我们发布了一个使用该阈值过滤的额外数据集,包含 5.4 万亿个标记,可在 HuggingFaceFW/fineweb-edu-score-2 获取。

你可以在这个集合中找到这两个数据集以及用于过滤的分类器。

4 额外内容:随时间变化的 CommonCrawl

就像优质葡萄酒一样,并非所有的爬取数据都是一样的。

在对过滤步骤进行消融时,我们注意到某些爬取数据的表现明显优于其他数据。我们决定研究这种现象。

4.1按爬取数据的基准性能

对于每个爬取数据,我们在从该爬取数据(在基础过滤和最小哈希去重步骤之后)中随机采样的 270 亿个标记上训练了两个 18 亿参数的模型,每次运行都对这些数据进行不同的 270 亿标记的随机采样。我们训练了 192 个这样的模型,总共花费了超过 6 万个 H100 GPU 小时。随后,我们取了两次运行的最后 3 个检查点,并绘制了每个爬取数据的这 6 个数据点的平均值。

下面的图表清楚地显示,有些转储的表现比其他转储差得多。每年用不同的颜色表示,每年的爬取次数也不同。


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

我们研究了这种行为的可能原因,例如每个转储中最常见 URL 的变化,以及潜在的基准污染,但没有找到任何确凿的解释。我们将进一步的调查留作未来的工作。

4.2合成数据

我们想知道,最近几次爬取数据的强大性能部分是否可归因于大量合成数据(由大语言模型生成的数据)的存在。考虑到最近大语言模型(尤其是 ChatGPT)的流行度增加,这样的变化并不奇怪。

据我们所知,由于没有万无一失的方法来检测合成数据,我们选择使用一个替代指标:我们测量了每个爬取数据中以下单词的频率:“delve”、“as a large language model”、“it's important to note”、“rich tapestry”、“intertwined”、“certainly!”、“dive into”,这些都是 ChatGPT 常用的词汇。

需要注意的是,并非所有包含这些短语的样本都一定是由 ChatGPT 生成的(而且许多由 ChatGPT 生成的样本也不包含这些短语),但假设合成数据的数量在各次爬取中保持不变,我们预期这些频率会随时间大致保持恒定。

结果显示在下面的图表中:


FineWeb:大规模筛选网络,获取最优质(LLM预训练)文本数据-AI.x社区

虽然频率在 2023-14 之前大致保持恒定(ChatGPT 于 2022 年底发布),但我们发现最近的爬取数据中我们的替代指标急剧增加。虽然这个简单的测试不足以得出 ChatGPT 的补全内容和其他合成数据提高了最新爬取数据质量的结论,但至少它似乎不会对其造成严重损害。

我们预计在新的 CommonCrawl 爬取数据中会继续看到合成数据数量的增加。然而,虽然对于相对较小规模的训练,这些数据似乎不会损害性能(甚至可能会提高性能),但对于更大规模的训练,情况是否如此尚不清楚。

5 结论与展望

通过我们的开放科学努力,我们希望继续揭示高性能大语言模型训练这个黑箱,同时让每个模型训练者都有能力创建最先进的大语言模型。我们很高兴继续对 FineWeb 进行迭代,并以完全开放和可复现的方式发布质量越来越好的网络数据过滤子集。

在短期内,我们期待将从(英语)FineWeb 中学到的经验应用于其他语言。虽然目前英语在大语言模型领域占主导地位,但我们相信,使其他语言的高质量网络数据尽可能易于获取将产生巨大影响。

简而言之,大规模创建开放数据集的科学研究前景光明且令人兴奋。

-----------------------------------------

脚注:

(1)请注意,每次爬取的数据规模都会有所不同。还请注意,在本报告中,我们交替使用“转储”(dump)和“爬取”(crawl)这两个词。

(2)我们尚未处理这3次较旧的爬取数据。

(3)请注意,本报告专注于网络规模数据集(“网络规模”通常指从网络中获取的超过1000亿个词元)的特定领域,这些数据集用于预训练大型语言模型(我们所说的“预训练”是指模型训练的第一步,从随机权重开始)。我们并不打算涵盖数据集创建的其他领域,也不认为我们在本文中提出的观点或假设可以扩展到除这一特定领域之外的任何其他领域。

(4)尽管如上所述,“干净”的概念定义如此模糊,以至于它可能不应被视为等同于维基百科类型的文本。

(5)“小”是相对于当今大型语言模型的标准规模而言的,即相对于70亿到700亿参数而言是小的。在本研究中,“小”指的是大约10亿到20亿参数。

(6)特别是我们怀疑它保留了过多的样板内容和导航菜单。

(7)我们使用了 Trafilatura 的默认选项,并设置了 `favour_precisinotallow=True`。

(8)正如在本报告中其他地方提到的:这是使用 GPT-2 分词器分词后的词元数量。

(9)请注意,即使在这里我们讨论的是“模糊”去重,我们仅使用基于字符/单词匹配的方法,也就是表面级文本操作。更复杂的去重概念是“语义”去重:比较并移除那些涉及相同概念的文本,例如使用同义词或释义。我们在这里不讨论这些主题,但请注意它们在大规模合成数据生成领域可能很重要(例如,参见我们在这一主题上的 Cosmopedia 发布)。

(10)我们的单位是“单词”,在 MinHash 处理函数中使用特定语言的单词分词器计算得出。

(11)尽管原始保留的数据中可能有与原始删除的数据相似的文档,但我们估计重叠部分很小(大约40亿个词元)。

(12)请注意,这些消融模型仅在此转储的数据上进行训练,因此被视为独立于所有其他转储。

(13)Dolma 有一个更新的版本,v1.7,它的规模更小。


本文转载自AIRoobt ,作者:HuggingFace


©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2025-5-15 06:34:41修改
收藏
回复
举报
回复
相关推荐