FineMath: HuggingFace 打造的 50B Token 数学预训练语料
数据集链接: HuggingFace
创建机构: HuggingFace TextBook Team
许可证: ODC-By 1.0
规模: FineMath-3+ (34B token) + FineMath-4+ (9.6B token)
质量评分: 4.6/5.0
核心观点
数学能力已经成为衡量 LLM 的核心指标,但绝大多数开源数学数据集质量参差不齐。FineMath 用一套精细化的质量评分管道,从 Common Crawl 的噪声海洋中提取出了目前最干净的数学预训练语料。
数学数据为什么这么难搞
训练一个数学能力强的 LLM,最大的瓶颈不是算力,而是数据。互联网上的数学内容分布极不均匀:高质量的数学推导散落在教育网站、论坛、教材中,混杂着大量低质量的作业抄袭、错误解答和纯公式堆砌。
更麻烦的是数学符号的提取。网页上的数学公式有 MathML、LaTeX、KaTeX 等多种格式,普通的 HTML 清洗管道会把这些公式变成一堆乱码。如果你的训练数据里 $x^2 + y^2 = r^2$ 变成了 x2 + y2 = r2,模型学到的就是错误的数学表达。
FineMath 直面这些挑战,提供了一个系统性的解决方案。
构建过程:三步精炼
第一步:精准数学内容发现
不是从 Common Crawl 中随便找含数字的页面。团队训练了一个专门的分类器,通过迭代优化来识别真正包含数学推理和推导的页面。这个分类器基于合成标注数据训练,能区分”讨论数学的页面”和”包含数学推理的页面”——后者才是有价值的训练数据。
1 | # 数学内容分类器伪代码 |
第二步:符号保真提取
使用 OpenWebMath 管道处理发现的数学页面。这个管道能正确识别 MathML、LaTeX、KaTeX 等各种 HTML 数学标记,统一转换为 LaTeX 格式。这一步至关重要——数学数据集的质量,很大程度上取决于公式提取的准确性。
1 | # OpenWebMath 符号提取流程 |
第三步:LLM 精细评分
用 LLaMA-3.1-70B-Instruct 对提取的内容进行 0-5 分的质量评分。评分标准聚焦在数学推理的深度和质量,而不仅仅是”是否包含数学”。根据分数阈值切分成两个版本:
1 | from transformers import AutoModelForCausalLM |
- FineMath-3+:34B token(保留评分>=3 的内容),适合大规模预训练
- FineMath-4+:9.6B token(保留评分>=4 的内容),质量更高,适合精细训练
数据版本对比
| 版本 | Token 数 | 质量阈值 | 适用场景 |
|---|---|---|---|
| FineMath-3+ | 34B | >=3 分 | 大规模预训练 |
| FineMath-4+ | 9.6B | >=4 分 | 精细训练/微调 |
| FineMath-4.5+ | 约 3B | >=4.5 分 | 高质量微调 |
实际效果:不是小幅提升
在 Llama-3.2-3B 上的持续预训练实验中,FineMath 的效果非常显著:
1 | GSM8K 性能对比: |
MATH 竞赛数学性能对比:
| 数据集 | 准确率 | 相对提升 |
|---|---|---|
| No Math Data | 8.5% | 基线 |
| FineWeb-Edu | 15.2% | +78.8% |
| OpenWebMath | 18.5% | +117.6% |
| MinervaMath | 22.3% | +162.4% |
| FineMath-4+ | 28.5% | +235.3% |
FineMath-4+ vs InfiWebMath-4+:在两个基准上均表现更优
一个有趣的发现:将 FineMath-3+ 和 InfiWebMath-3+ 按 50:50 混合,总计约 50B token,性能与纯 FineMath-3+ 相当。这说明数据多样性在一定程度上可以补偿单一来源的局限。
去污染:被忽视但关键的步骤
FineMath 遵循 Qwen2.5-Math 的方案,移除了与 GSM8K、MATH、MMLU、ARC 测试集有 13-gram 重叠的样本。这一步看似简单,但很多数据集忽略了它,导致评估结果虚高。
1 | # 去污染检测流程 |
团队还发布了去污染报告(HuggingFaceTB/finemath_contamination_report),完全透明。如果你用其他数学数据集训练,强烈建议检查去污染状态。
实际使用建议
1 | from datasets import load_dataset |
混合使用策略:不建议只用 FineMath 进行全量预训练。推荐方案是在通用预训练语料(如 FineWeb)的基础上,用 FineMath 做数学领域的持续预训练。这样模型既保持通用语言理解,又增强数学推理能力。
注意事项:FineMath 的代码内容很少。如果你的模型需要同时处理代码和数学,需要额外补充代码数据集(如 The Stack v2)。
生态影响
FineMath 的方法论已经产生了显著影响:
- NVIDIA 的 Nemotron-CC-Math 直接使用了 FineMath 分类器进行质量评分
- TransWeb-Edu:社区基于同样的方法构建了多语言版本
- FineWeb-Edu-Chinese:中文版本数据集
- 超过 70 个消融实验模型被公开发布,为社区提供了丰富的参考
这不仅仅是一个数据集,更是一套可复现的数学数据构建方法论。
总结
核心贡献:
- 系统化数学数据构建流程(发现→提取→评分)
- 开放源代码和分类器,支持社区复现
- 完整的去污染处理,确保评估可信
- 多层次质量版本满足不同需求
适用场景:
- 数学推理模型预训练
- 持续预训练增强数学能力
- 数学教育 AI 微调
- 数学问题求解研究
数据加载:
1 | from datasets import load_dataset |
数据集链接: https://huggingface.co/datasets/HuggingFaceTB/finemath
创建机构: HuggingFace TextBook Team
适合场景: 数学推理模型预训练、持续预训练、数学教育 AI
质量评分: 4.6/5.0 | ODC-By 1.0 | FineMath-3+(34B token)+ FineMath-4+(9.6B token)
核心优势: 精细 LLM 质量评分、LaTeX 符号保真提取、完整去污染处理、70+ 消融模型公开
相关资源: