MAI-Thinking-1 预训练数据处理与配比优化
MAI-Thinking-1(MAI-Thinking-1: Building a Hill-Climbing Machine,2026,Microsoft AI)是微软从零训练的 reasoning 模型,35B active / 1T total 参数的 MoE 架构,预训练 30T tokens。这篇技术报告的数据部分写得相当详尽,从采集、清洗到配比优化到 mid-training 阶段的数据策略,覆盖了一个完整预训练数据流程中几乎所有值得记录的决策。
报告的三条设计原则贯穿全文:
- 能力应当习得,而非继承(capabilities should be learned, not inherited):不依赖蒸馏,因为模仿得到的能力缺少长程 RL 所需的可控性与稳健性。
- 简单方能持续(simplicity is sustainable):简单可扩展的配方、干净可信的数据、透明的基础设施。
- 严谨排斥捷径(scientific rigor avoids shortcuts):每个决策都要通过 scaling ladder、消融和评测来检验。
本文聚焦预训练基座 MAI-Base-1 的数据收集、清洗、配比与 mid-training 阶段的数据策略。
数据源与 HTML 抽取
预训练使用的 30T tokens 全部来自公开和授权的人类语料:网页 HTML、网页 PDF、公开 GitHub 代码、书籍期刊,以及第三方商业采购数据。不使用语言模型生成的合成数据,主动检测并移除采集源里的 AI 生成内容。也不使用任何开源训练集,整体剔除了 huggingface.co 及镜像站点。自有爬虫遵循 robots.txt,排除违反微软 Responsible AI 政策或在 USTR Notorious Markets 名单上的数据源。
知识截止日期因源而异:Web HTML 为 2025 年 9 月,Web PDF 为 2025 年 12 月,GitHub 为 2025 年 6 月,书籍期刊最新到 2026 年 3 月。
HTML 抽取的核心问题在于没有单一方法能处理好所有网页。数学公式和代码在网页上的表示方式高度不统一,很多现成的抽取工具会把公式、代码块和表格丢掉,只留下周围的普通文本。报告列出了四种策略,按域选用:
- Source-specific 结构化 parser(HTML/XML schema-aware)
- 手写 extractor(BeautifulSoup,给结构稳定但通用启发式处理不好的域)
- LLM/agent 抽取(硬约束:只能保留或删除原文,不能添加合成内容)
- 直接训练原始内容
第四种策略有个值得注意的例子:Wikipedia 选择直接在 wikitext 上训练,虽然 wikitext 比 HTML 冗长约 3 倍,但 infobox 等结构在现有 parser 下经常被破坏。对于 Wikipedia 这种高价值、低 volume 的源,多花 3 倍 token 预算来保留结构完整性是划算的。
五层去重
去重在这个规模下对模型质量有直接影响。35B active / 1T total 参数配合高稀疏度的 MoE 架构具有极强的记忆能力,重复样本会加剧过拟合,压缩泛化空间。同时,predictive scaling 行为对 effective unique token 数量敏感:大模型在低 novelty 的语料上 scaling 会退化,因为它更早地耗尽了可学的新信息。
五层去重分别对应不同粒度的冗余:
- Boilerplate 去除:用行频统计去掉页眉、页脚、导航栏
- Exact duplicates:byte 级和 hash 级精确匹配
- Fuzzy duplicates:MinHash LSH,相似度阈值 0.8
- Templated web pages:针对同一模板批量生成的页面(如"计算器"网页),将每个页面骨架化为最高频 token 后做模糊去重,整簇移除
- Semantic duplication:用 Qwen3-Embedding-0.6B 找语义相似文档,每个簇只保留有限代表。代码数据中这类冗余尤其多,经典编程练习题(如 BST 遍历)在作业、考试、面试、竞赛中反复出现,写法各异但解法收敛
跨数据集去重依赖一个全局 drop-order:重复样本只保留在优先级最高的数据集中。历史上靠显式过滤来管理 overlap(如把 Wikipedia 从 web-crawl 中排除),但随着源的数量和处理流水线复杂度增加,不同数据集之间的意外重叠变得难以手动管理,才转向 drop-order 机制。这里有一个容易忽略的副作用:修改单一数据集可能改变重复样本在其它数据集中的归属,drop-order 实际上引入了一个隐藏变量。评估特定数据集的边际贡献时,需要把这个因素纳入考量。
过滤、分类与数据消融
过滤和分类的目标不仅是提高质量,更准确地说,是把异构的原始语料转化为可被 mixture 优化算法操控的结构化数据。要让后续的 controlled ablation 能按源族、质量层、话题、教育级别、语言、格式等维度进行。
具体流程分两步:先移除不可能有正向贡献的内容(spam、政策敏感、噪声),再将剩余数据分桶。分桶维度包括质量层级、语言组、话题、教育价值、教育级别、源类型、领域子语料。
技术手段上混合了五类方法:metadata 信号、source-specific 启发式、学习分类器、prompted LLM、人工标注。
在分桶完成后,每个数据集都要经过消融实验。报告使用两种方式:
Single-source ablation 把目标数据上采样到混合的 50% 后从头训练,量化该数据源对各项 held-out NLL 评测的边际效用。
Scaling-ladder ablation 在完整 mixture 中消融,用一组参数量递增的模型预测目标规模下的表现。由于 multi-epoch 效应,会对数据做下采样来模拟最终训练时的复用情况。

上图是一个 data mixing 消融的实例:183 个模型在 3 个 scale 上从头训练,覆盖 61 种 Web HTML / Code / other 配比。实线标出了 Web HTML 与 Code 两个维度上的 Pareto frontier,处在 frontier 上的点对应 Web 和 Code 占主导的配比,偏离 frontier 的点则是"other"子集占比过大的结果。
配比选择
面对几百个异构数据源,在固定算力下确定各源的权重,就是配比优化要解决的问题。MAI 采用加权 NLL 作为优化目标:
$$Target = 0.5 \times Coding + 0.175 \times STEM + 0.175 \times Math + 0.1 \times General + 0.05 \times Multilingual$$
代码和 STEM/Math 合计权重 0.85,偏 reasoning 的意图很直接。
报告列出了配比优化面临的五项挑战:效用如何定义、搜索空间过大、scale-dependent 效应、跨数据集交互、multi-epoch 效应。其中 scale-dependent 是说小模型上有用的源在大模型上未必有用;multi-epoch 是说高质量小数据集放高权重会在长 horizon 训练中被反复消费导致过拟合。
一类解法是训练大量小模型(760M 到 4B,即 ladder 上的 L12 到 L36)来建预测模型, RegMix 是这类方法的代表。MAI 自己也尝试了这类变体。这类方法依赖一个核心假设:两种配比在小 scale 的性能排序在大 scale 下依然成立,即 rank invariance。
但 MAI 在实践中发现这个假设并不总成立。他们对比了 code-heavy-mix(约 50% 代码)和 stem-heavy-mix(大幅上采样 STEM),在 5B 规模下 stem-heavy-mix 在 STEM 评测上占优,但扩展到 23B active / 20T tokens 后,两条 STEM 评测曲线在训练中段交叉,code-heavy-mix 最终胜出。

原因是 stem-heavy-mix 中有两个数据源,质量高但 fuzzy 重复多、内容多样性不足,在 stem-heavy-mix 中占 11.8%(code-heavy-mix 仅 0.3%)。小模型从这些重复中获取增益,但大模型消化这些重复内容后多样性不足反而成为拖累。
这个发现促使 MAI 在后续实验中不再仅依赖单一 scale 的结论,而是用 ladder 方法在多个 scale 上验证配比的 scaling 性质。
最终配比通过分层搜索确定:将数据分为约 10 大类,交替进行类内调权重的 local search 和类间调权重的 global search。单一数据集复用上限为 8 epoch。选出候选后用约 2.8 倍于 global mixing 的算力做 scale-up 验证,确认最优候选不再随规模变化。
| 源族 | unique (T) | 训练 (T) | 占比 | 平均 epoch |
|---|---|---|---|---|
| Code | 7.4 | 16.4 | 54.6% | 2.22 |
| STEM | 2.2 | 4.7 | 15.8% | 2.17 |
| Math | 0.3 | 1.6 | 5.4% | 5.28 |
| Books | 0.6 | 0.9 | 3.1% | 1.65 |
| PDFs | 2.7 | 1.4 | 4.7% | 0.53 |
| Web text | 8.1 | 4.5 | 14.9% | 0.55 |
| Multilingual | 8.1 | 0.5 | 1.6% | 0.06 |
几个极端值体现了配比策略的取舍。Math 只有约 300B unique tokens,但被采样了平均 5.28 遍,是复用率最高的源族。Web text 和 PDF 各自的 unique token 量远大于实际使用量,平均 epoch 不到 1 遍,30T tokens 的训练没有穷尽这两个源。Multilingual 是下采样最激进的,8.1T 可用语料中仅使用了 0.5T。

上图展示了不同数据源在研究生物理 NLL 评测上的贡献。PDF 和 web 上的数学/STEM 数据与物理 NLL 表现正相关,general web 基本中性,增加 code 占比对物理性能没有帮助。这类可视化是 global search 阶段判断各源贡献的依据之一。
Mid-training 数据
Mid-training 阶段分两步(3.4T + 150B tokens),一个核心设计是:所有数据全部来自预训练语料,不引入新源,不引入合成数据。只做过滤、重新加权和按更长序列重打包。
整体配比进一步偏向 reasoning:STEM/Math 提升到 35%,Code 保持 55%,剩余 10% 为背景源。类内权重通过 single-source microanneal 调整,优化目标与预训练相同的 NLL 函数,并增加了长上下文 NLL 任务。
STEM reasoning 数据的过滤引入了 Bloom 分类法。报告定义了一个 “Bloom Analyze heuristic”:保留技术正确、中级以上推理深度、Bloom 认知层级 ≥ Analyze 的文档,去掉只有简单事实陈述的内容。这比单纯的质量分级更细致,它区分的是"有推理链条的技术文档"与"正确但只列事实的文档"。
代码数据有两步额外处理。第一步是按 repo 质量分三档做 file extension 过滤:HTML/CSS/SVG 在顶档 repo 中保留(属于大型前端项目的一部分),在低档 repo 中删除(大概率是低质量独立页面)。第二步引入 file-level 文档格式:预训练只有 repo-level 格式,mid-training 增加了单文件格式,把 repo 理解和文件理解当互补任务。
Memorization-aware epoch capping 是 mid-training 特有的机制。它用 per-source 验证代理估计哪些源在预训练末期已经被高度记住:具体做法是看两个 checkpoint 之间 validation loss 的改善中,有多大比例来自 near-certainty token(NLL < 0.01)的预测。如果这个比例高,说明 NLL 下降主要靠记忆或高度重复的结构,而非新能力的获取。对这类源在 mid-training 阶段施加更严的 epoch 上限,对其它源则允许更多轮次。
长上下文扩展分两个阶段把 context window 从 16k 扩到 64k 再到 256k。两个阶段都只是按更长序列重打包数据,不修改 mixture 权重。这样做是为了最小化分布漂移:如果同时改权重和序列长度,很难区分性能变化来自哪个因素。重打包的另一个好处是减少高质量长文档被截断的损耗。
小结
MAI 数据流程的特点在于每一步都和评测挂钩:分桶是为了让消融实验能按维度做,配比是 local/global 交替搜索加跨 scale 验证,而非固定在某个小规模上的实验结论。rank invariance 的反例是个很有实际参考价值的发现:小模型上有用的高质量数据可能因为多样性不足而在大模型上失效,配比决策需要跨 scale 检验。