预训练数据配比的科学:多语言、代码与数学的黄金比例

深入探讨 LLM 预训练数据的配比策略,覆盖数据源分类、领域权重、多语言平衡、代码数据的特殊作用,以及主流模型的实际配比对比。

深度解析 预训练数据 数据配比 LLM 多语言

预训练数据的配比(Data Mix)是 LLM 训练中最关键的决策之一,却也是最缺乏系统研究的领域。配比的微小变化可能导致模型在不同下游任务上产生显著的性能差异。本文将系统梳理数据配比的理论框架和工程实践。

一、预训练数据源分类

现代 LLM 的预训练数据通常包含以下几大类:

1.1 网页文本(Web Text)

这是数据量最大的来源,通常占总数据的 60-80%。

数据集来源规模特点
Common Crawl全网爬取~250B 页面覆盖广但噪声大
C4Common Crawl 清洗~750GBGoogle T5 使用
RefinedWebCommon Crawl 精筛~5T tokensFalcon 使用,质量显著提升
FineWebCommon Crawl 精筛~15T tokensHuggingFace 出品,当前最高质量
DCLMCommon Crawl 精筛~3T tokens数据筛选方法论创新

关键洞察:同样来源的 Common Crawl 数据,经过不同的清洗和筛选策略,可以产生巨大的质量差异。FineWeb 的核心贡献不是新数据,而是更好的筛选方法。

1.2 代码数据(Code)

代码数据在预训练中的重要性远超 “让模型会写代码” 这一点。

典型来源:

  • GitHub 公开仓库(The Stack, StarCoder Data)
  • 编程竞赛:Codeforces, LeetCode(高质量推理数据)
  • Jupyter Notebooks:代码 + 文本交织
  • 文档 + API 说明:技术文档

代码数据的特殊价值:

  1. 增强推理能力:代码的逻辑结构(条件分支、循环、递归)天然训练了模型的推理能力
  2. 结构化思维:代码要求精确的语法和语义,这种能力会迁移到自然语言任务
  3. Codex/GPT-4 的启示:OpenAI 的研究表明,加入代码数据可以提升数学推理和逻辑任务的表现
  4. 链式思维的基础:代码中的分步执行与 Chain-of-Thought 推理高度相似

1.3 学术论文

  • arXiv:数学、物理、CS 等领域的预印本
  • Semantic Scholar:更广泛的学术数据
  • PubMed:生物医学文献

学术论文的特点是语言规范、逻辑严密、包含大量公式和专业术语,对模型的科学推理能力有重要贡献。

1.4 书籍

  • Books3/BookCorpus:小说和非小说类书籍
  • Project Gutenberg:公版书籍

书籍数据的独特价值在于长文本连贯性和叙事结构,有助于模型学习长距离依赖。

1.5 对话数据

  • Reddit:高质量讨论帖(选择性筛选)
  • StackOverflow:技术问答
  • Wikipedia Talk Pages:百科编辑讨论

1.6 百科知识

  • Wikipedia:多语言百科全书
  • Wikibooks:教科书内容

虽然数据量相对较小(英文 Wikipedia 约 20B tokens),但信息密度极高,通常会被上采样(Upsampling)。

二、数据配比的核心原则

2.1 领域权重(Domain Weights)

不同数据源对模型不同能力的贡献差异巨大:

能力维度          最相关数据源
─────────────────────────────────
自然语言理解      Web Text, Books, Wikipedia
代码生成          Code (GitHub, Competitions)
数学推理          Math Papers, Code, Textbooks
科学知识          arXiv, PubMed, Wikipedia
多轮对话          Reddit, Forums, Chat
写作能力          Books, Long-form Articles
事实知识          Wikipedia, Encyclopedia

2.2 质量 vs 数量的权衡

一个核心的发现是:高质量数据的边际价值远大于低质量数据。

实验证据:

  • Phi-1/Phi-2(Microsoft):仅用 ~7B tokens 的精选教科书级数据,小模型也能达到强性能
  • DCLM:证明了数据筛选策略的巨大影响——相同的 Common Crawl 源,不同筛选后训练出的模型性能差距可达数个百分点
  • FineWeb:系统性比较了不同质量过滤器的效果

2.3 数据重复与退化

数据不足时不可避免地需要重复使用数据,但重复会带来退化:

  • 1-4 次重复:Loss 增长很小,几乎不影响性能
  • 4-16 次重复:Loss 开始明显增长,但仍可接受
  • >16 次重复:性能显著退化,模型开始过拟合
  • 关键发现:高质量数据比低质量数据更耐重复

三、主流模型的实际配比

3.1 公开配比对比

模型WebCode学术书籍百科其他
LLaMA-167%4.5%2.5%4.5%~4%17.5%
LLaMA-2~70%~8%~3%~4%~3%~12%
LLaMA-3~50%~17%~5%~5%~5%~18%
Qwen-2~55%~12%~5%~5%~5%~18%
DeepSeek-V2~53%~15%~7%~4%~4%~17%
Yi-1.5~60%~10%~5%~5%~5%~15%

趋势观察:

  1. 代码数据占比持续上升:从 LLaMA-1 的 4.5% 到 LLaMA-3 的 ~17%
  2. Web 数据占比下降:从 ~70% 降至 ~50%,被更高质量的数据源替代
  3. 数学和推理数据受到更多重视

3.2 多语言配比

多语言模型的语言配比是一个更复杂的问题:

English-Centric 策略(LLaMA, Mistral):

  • 英语占 85-95%
  • 少量欧洲语言
  • 非拉丁语系语言极少

Balanced 策略(Qwen, DeepSeek, Yi):

  • 中文占 30-50%
  • 英文占 40-60%
  • 其他语言占 5-15%

Massively Multilingual 策略(BLOOM):

  • 覆盖 40+ 语言
  • 每种语言占比根据资源量调整

跨语言迁移效应:

一个重要发现是,多语言训练不是零和博弈——适度的多语言数据可以提升所有语言的表现:

  1. 语言之间存在正迁移,尤其是相似语系
  2. 中文和英文之间的正迁移显著(可能因为共享概念空间)
  3. 但过多的低资源语言数据会拖累高资源语言的表现(“资源诅咒”)

3.3 代码语言分布

代码数据内部的编程语言配比也很有讲究:

编程语言      典型占比    价值
────────────────────────────
Python       25-35%     通用,教学质量高
JavaScript   10-15%     Web 开发
Java         8-12%      企业级代码
C/C++        8-12%      系统级,算法竞赛
TypeScript   5-8%       类型系统,增强结构理解
Go           3-5%       并发模式
Rust         2-4%       内存安全模式
SQL          3-5%       数据操作逻辑
Shell/Bash   2-3%       自动化脚本
其他          15-25%     多样性

Python 的特殊地位:Python 不仅是数据量最大的编程语言,其代码质量通常也最高(大量的教程、科学计算代码),是代码数据中的 “黄金资源”。

四、数据配比优化方法

4.1 基于验证集的优化

最直接的方法是在多个下游任务的验证集上优化配比:

  1. 选择一组代表性的验证集(如 ARC, HellaSwag, MMLU, GSM8K, HumanEval)
  2. 训练小模型 + 不同配比
  3. 选择验证集综合性能最好的配比
  4. 外推到大模型

4.2 DoReMi(2023)

Google 提出的 Domain Reweighting with Minimax Optimization 是一个自动化的配比优化方法:

  1. 先用均匀配比训练一个参考模型
  2. 训练一个代理模型(Proxy Model),在各领域的 excess loss 上做 minimax 优化
  3. 输出最优领域权重

实验证明 DoReMi 可以在不需要下游任务信息的情况下,找到接近最优的配比。

4.3 动态配比(Dynamic Mixing)

一些前沿工作探索了在训练过程中动态调整配比:

  • 训练早期:更多低难度、高质量的通用文本
  • 训练中期:逐步增加代码、数学等推理密集型数据
  • 训练后期:进一步增加高质量、任务相关的数据

这种 “课程学习”(Curriculum Learning)策略的直觉是:先学基础语言能力,再学高阶推理能力。

4.4 数据温度(Data Temperature)

一种简单但有效的技术是为不同数据源设置采样温度:

pi=ni1/T∑jnj1/Tp_i = \frac{n_i^{1/T}}{\sum_j n_j^{1/T}}

其中 nin_i 是第 ii 个数据源的大小,TT 是温度。

  • T=1T = 1:按原始比例采样(大数据源主导)
  • T=0T = 0:均匀采样(每个数据源被等量采样)
  • T∈(0,1)T \in (0, 1):上采样小数据源,下采样大数据源

经验表明 T≈0.3−0.5T \approx 0.3-0.5 通常是一个不错的选择。

五、中文数据的特殊考量

对于中英双语模型,中文数据有一些独特的挑战:

5.1 中文网页质量

  • 中文互联网的内容质量方差比英文更大
  • SEO 垃圾内容、营销软文的比例较高
  • 需要更严格的质量过滤策略

5.2 简繁体处理

  • 统一转换为简体?还是保留繁体?
  • 目前主流做法是保留两种形式,但标准化一些明显的异体字

5.3 中文 Tokenizer 效率

  • 中文字符通常被切分为 1-2 个 token(取决于 Tokenizer)
  • 同等含义的中文文本通常比英文需要更少的 token
  • 这意味着中文的 “有效训练数据量” 可能比 token 计数所显示的更多

六、实践建议

6.1 配比搜索的经验法则

如果你要从零开始配一个预训练数据集:

  1. Web Text 50-60%:经过严格质量过滤的网页文本
  2. Code 15-20%:以 Python、JavaScript、Java 为主
  3. 学术论文 5-8%:arXiv + PubMed
  4. 书籍 3-5%:非小说类优先
  5. 百科 3-5%:Wikipedia 上采样
  6. 数学 3-5%:数学教科书 + 竞赛题 + arXiv math
  7. 对话 2-3%:精选高质量 QA 和讨论
  8. 中文 20-40%(如果是中英双语模型)

6.2 迭代优化流程

初始配比 → 小模型实验 → 评估 → 调整 → 验证 → 大模型训练
   ↑                                         |
   └─────────────────────────────────────────┘
              (根据大模型结果微调)

6.3 数据审计清单

在确定配比之前,对每个数据源做以下检查:

  • 语言分布是否符合预期
  • 质量分数分布是否合理
  • 是否存在大量重复内容
  • 是否包含有害/违规内容
  • 是否与评测集存在数据泄露
  • Token 化后的实际大小

七、展望

数据配比的研究还在快速发展,几个值得关注的方向:

  1. 自动化配比搜索:类似 NAS 的自动化方法,在更大的搜索空间中找最优配比
  2. 合成数据的配比:合成数据(代码、数学、推理链)该占多少比例?
  3. 训练阶段感知的配比:不同训练阶段使用不同配比的系统化方法
  4. 个性化配比:根据目标应用场景定制数据配比

数据配比没有银弹,最重要的是建立系统化的实验和评估框架,用数据驱动决策。