3 预训练数据集

本文为论文《SmolLM2:紧凑高效的小语言模型家族》「中文全文翻译」板块的对应章节,与「论文原文」板块同一章节一一对应,层级保持一致。

预训练数据管理对小型 LM 尤其重要,因为其对训练数据中的噪声更为敏感(Rolnick et al., 2017; Abdin et al., 2024a)。此外,设计预训练策略不仅涉及选择和管理数据,还涉及确定从不同来源“混合”(即采样)多少数据,在包含专用数学和代码数据集时尤其重要。因此,我们仔细评估了现有数据集,并在我们认为必要时,创建了新的、改进的、更大的数据集。

3.1 消融设置

为比较英文网络数据集并找到训练模型的最佳混合比,我们遵循与 Penedo et al. (2024a) 相似的经验方法。具体而言,我们在相同条件下对每个数据集进行训练:模型配置、训练超参数和 token 数量。我们训练了基于 Llama 架构(Vaswani et al., 2017; Touvron et al., 2023)的 17 亿参数 Transformer,序列长度为 2048,全局批量大小约 200 万个 token,GPT-2 分词器(Radford et al., 2019),以及余弦学习率调度(Loshchilov & Hutter, 2016),学习率为 $3.0\times 10^{-4}$。每个数据集消融模型从完整数据集中随机抽样 3500 亿个 token 进行训练。为评估,我们也遵循 Penedo et al. (2024a),使用 lighteval 在多种知识、推理和文本理解基准上进行评估:MMLU(Hendrycks et al., 2021)、HellaSwag(Zellers et al., 2019)、OpenBook QA(Mihaylov et al., 2018)、PIQA(Bisk et al., 2019)、WinoGrande(Sakaguchi et al., 2019)、ARC(Clark et al., 2018)和 CommonSenseQA(Talmor et al., 2019)。

数学和代码能力通常只有经过大量训练后才会出现,因此,与 Blakeney et al. (2024)、Dubey et al. (2024)、Ai2 (2024) 类似,在评估数学和代码数据集时,我们从 SmolLM2 的 3T token 中期检查点开始(详见第 4 节),该检查点主要在网络数据上训练。然后我们采用退火方法:学习率在包含待评估数据集的混合训练中线性衰减至 0。对于数学,我们在待评估数据集的 600 亿 token 与前期检查点混合的 400 亿 token 上进行退火。对于代码消融,我们在 2000 亿个 token 上执行退火,均匀分布于 15 种最常用的编程语言中(每种约 140 亿 token)。我们在 GSM8K(Cobbe et al., 2021)、MATH(Hendrycks et al., 2021)和 MMLU-STEM 上评估数学消融模型的数学能力,使用 lighteval,并使用 HumanEval(Chen et al., 2021)和 MultiPL-E(Cassano et al., 2022)评估代码消融模型,使用 BigCode-Evaluation-Harness。

3.2 英文网络数据

来自 Common Crawl 的网络文本一直是预训练数据的热门来源,最近基于分类器的过滤技术显著提升了预训练数据质量(Dubey et al., 2024; Abdin et al., 2024b; Abdin et al., 2024a; Kong et al., 2024)。基于分类器过滤的开放数据集的两个突出示例是 FineWeb-Edu(Penedo et al., 2024a)和 DCLM(Li et al., 2024c)。FineWeb-Edu 包含由 Llama3-70B-Instruct(Dubey et al., 2024)训练的分类器判定为“教育性”的 1.3 万亿个 token,该分类器基于由该模型生成的标注。DCLM 包含使用 fastText 分类器(Joulin et al., 2016a; Joulin et al., 2016b)过滤的 3.8 万亿个 token,该分类器基于 OpenHermes 2.5(Teknium, 2023a)的指令跟随数据以及来自 r/ExplainLikeImFive(ELI5)子版块的高分帖子进行训练。在 FineWeb-Edu 和 DCLM 各抽样 3500 亿个 token 训练的消融模型中,获得了如表 1 所示的性能。我们发现,FineWeb-Edu 在教育性基准 MMLU、ARC 和 OpenBookQA 上得分更高,而 DCLM 在 HellaSwag 和 CommonsenseQA 上表现更好。这些结果与数据集内容一致:FineWeb-Edu 优先考虑教育材料,而 DCLM 捕捉更多样化、口语化的风格。

表 1:在 FineWeb-Edu 和 DCLM 上训练 3500 亿个 token 的模型评估。40/60 和 60/40 表示 FW-Edu/DCLM 比例。

鉴于 FineWeb-Edu 和 DCLM 的互补优势,我们探索了将它们混合是否能进一步提升性能。经过测试不同比例后,我们发现 60% FineWeb-Edu 和 40% DCLM 的混合效果较好,如表 1 所示:它在 MMLU、ARC 和 OpenBookQA 上几乎匹配 FineWeb-Edu 的性能,同时与 DCLM 在 HellaSwag 上的结果一致,并接近其在 CommonSenseQA 上的性能。组合这些数据集产生了 5.1 万亿个(英文)token。

3.3 数学数据

专用数学预训练数据对于开发强健的数学理解能力至关重要。最近的研究表明,来自 Common Crawl 的经过精心策划的数学内容,结合针对性过滤技术,可显著提升语言模型的数学推理能力(Dubey et al., 2024; Yang et al., 2024c; Shao et al., 2024; Han et al., 2024)。

3.3.1 现有数据集比较

我们比较两个领先的公开数学数据集:OpenWebMath(OWM)(Paster et al., 2023)和 InfiMM-WebMath(Han et al., 2024)。OWM 包含 120 亿个 token,通过过滤 Common Crawl 中的数学特定内容,并使用专门的文本提取管线来保留数学格式与公式,构建而成。InfiMM-WebMath 包含 400 亿个文本 token,其作者表明其性能匹配 DeepSeekMath(Shao et al., 2024)的私有数据集。

我们按照第 3.1 节描述的设置,对 OWM 和 InfiMM-WebMath 进行了退火消融实验,发现 InfiMM-WebMath 在 GSM8K 上达到 14% 的峰值准确率,而 OWM 为 10%,但 OWM 在 MATH 上略优于 InfiMM-WebMath。完整的评估曲线在第 C.1 节中提供。尽管在 600 亿个数学 token 上进行训练(即 OWM 5 个时代和 InfiMM-WebMath 1.5 个时代),性能仍落后于专有最先进的小型模型(Yang et al., 2024b)。进一步分析突出了两个关键局限:数据集规模不足,以及对逐步数学推理的关注不足,加上过度代表关注高级概念的学术论文。

3.3.2 新数据集:FineMath

上述 OWM 和 InfiMM-WebMath 的问题促使我们开发 FineMath 1 1

https://huggingface.co/datasets/HuggingFaceTB/finemath,这是一个包含多达 540 亿个 token 的数学数据集,专注于通过基于分类器的过滤进行数学推导与推理。

我们首先使用 Resiliparse 从 Common Crawl WARC 文件中提取文本,关注 FineWeb 数据集(Common Crawl 的 750 亿个唯一 URL 的子集)中的全部 58 亿个唯一 URL。然后我们采用 FineWeb-Edu 过滤方法,使用 Llama-3.1-70B-Instruct(Dubey et al., 2024)和一个提示词(第 C.2 节),在 3 点评分制下对内容进行评分,其中 1 表示包含一些数学内容,3 表示在适当水平的逐步问题求解。在基于这些银色标签训练分类器后,我们识别出包含至少 10 个页面且质量分数为 2 或更高的域。通过包含来自 OWM 或 InfiMM-WebMath 的至少 10 个 URL 的域,我们扩展了域覆盖范围。从 Common Crawl 索引中,我们检索到属于此域列表的总共 77 亿个 URL:57 亿个由我们的分类器识别,0.6 亿个来自 OWM,1.3 亿个来自 InfiWebMath。然后我们使用 OWM 管线重新提取所有已识别页面,保留 LaTeX 格式并移除所有锅炉板页面,产出 71 亿个包含 6.5 万亿个 token 的页面。

为仅保留高质量的数学内容,我们重新应用基于 Llama-3.1-70B-Instruct 注释的分类器,使用 5 点评分制提示词(第 C.3 节),专门针对推理及初中到高中水平的内容。我们注意到,InfiMM-WebMath 使用了类似的分类器过滤管线,但其提示词未针对相同类型的内容。

分类后,我们使用单带 MinHash LSH(Broder, 1997)进行去重,使用 10 个哈希,并应用 fastText 语言分类(Joulin et al., 2016a; Joulin et al., 2016b)以仅保留英文内容。

最终,我们开发了多个 FineMath 变体,包括 FineMath4+(100 亿个 token,670 万个文档,仅保留分数 4-5 的样本)和 FineMath3+(340 亿个 token,2140 万个文档,包含分数 3-5 的样本)。我们还将同一分类器应用于 InfiMM-WebMath,创建了 Infi-WebMath4+(85 亿个 token,630 万个文档)和 Infi-WebMath3+(205 亿个 token,1390 万个文档)。与 Yang et al. (2024c) 类似,我们使用 13-gram 匹配和与最长公共子序列最小重叠比 0.6,对每个数据集进行 GSM8K、MATH 和 MMLU 的去污染。

结果

图 1 展示了我们 FineMath 的退火消融实验。FineMath 的所有子集在 GSM8K、MATH 和 MMLU-STEM 上始终优于 OWM 和 InfiMM-WebMath。与 InfiMM-WebMath 相比,FineMath4+ 在 GSM8K 上实现了 2 倍的提升,在 MATH 上实现了 6 倍的提升,证明了保留具有推理能力的高质量数学内容的重要性。此外,Infi-WebMath4+ 优于 InfiMM-WebMath,但在 800 亿个 token 后趋于平台期(约 10 个时代),可能是由于数据重复所致,这一趋势在 FineMath4+ 中未出现。

图

图 1:在 FineMath 不同子集及其他数学数据集上训练的模型性能。

3.4 代码数据

代码生成与理解正成为现代 LLM 的关键能力,支持代码补全、调试和软件设计等多样化用例。专用代码模型(Lozhkov et al., 2024; Bai et al., 2023; Roziere et al., 2023)专为这些任务优化,而通用 LLM 则越来越多地部署为编程助手。此外,最近研究表明,在预训练中包含代码数据不仅能提升代码相关能力,还能增强自然语言推理和世界知识(Aryabumi et al., 2024)。

The Stack 数据集是最先进的开源代码数据集(Li et al., 2023a; Kocetkov et al., 2022),包括 Stack v1,约 3TB 来自公开 GitHub 仓库的源代码;StarCoderData(Li et al., 2023a; Kocetkov et al., 2022; Lozhkov et al., 2024),一个跨 80 种编程语言的 2500 亿个 token 的过滤子集;Stack v2,来自 Software Heritage 代码档案馆的约 32TB 数据;以及 StarCoder2Data,StarCoder2 模型的训练语料库(Lozhkov et al., 2024),跨越 600 多种编程语言的 9000 亿个 token。

Stack-Edu

最近的工作表明,基于 FineWeb-Edu 分类器的过滤策略对代码数据也有效(Wei et al., 2024b; Allal et al., 2024)。因此,我们构建了 Stack-Edu,一个面向教育性和文档齐全的代码的 StarCoder2Data 过滤变体。具体而言,为了匹配小型模型的容量约束并确保消融实验的基准覆盖范围,我们从 StarCoder2Data 中选择了 15 种最大的编程语言(Lozhkov et al., 2024)。该子集包含约 4500 亿个 token。随后,我们使用 StarEncoder 模型(Li et al., 2023a)训练了 15 个语言特定分类器,使用 Llama3-70B-Instruct(Dubey et al., 2024)生成的合成标注(提示词在第 D.1 节),在 0 到 5 的等级上对教育质量进行评分。每个分类器在 50 万个样本上训练,在大多数语言上应用 3 的阈值进行二元分类时,F1 分数均超过 0.7。

为评估 Stack-Edu,我们按照第 3.1 节描述的方法进行了退火消融实验。使用 3 的阈值过滤在大多数语言上提升了性能,同时保持了足够的数据,尽管 Java 使用阈值 2 时表现更好。由于 Markdown 未包含在 MultiPL-E 基准中,我们无法定量确定阈值;因此,我们基于定性分析使用了阈值 3。结果的 Stack-Edu 数据集在其 15 种语言中包含约 1250 亿个 token(见第 D.2 节)。表 2 显示了按大小排名的前 4 种编程语言的数据集统计信息,以及我们教育过滤对 MultiPL-E 的影响。

表 2:Stack-Edu 数据集统计信息和按大小排名的前 4 种编程语言的 MultiPL-E 分数。Python 评估使用 HumanEval。