预训练数据不该被扔掉,应该被改写

ICLR 2026 论文 SwallowCode/SwallowMath 用 transform-and-retain 方法证明:LLM 改写低质量数据,比过滤掉它们效果更好。

数据工程 预训练数据 数据质量 合成数据 LLM训练 SwallowCode

数据质量的主流思路一直是:过滤。识别低质量内容,扔掉它,保留高质量的部分。

ICLR 2026 有一篇论文,换了一个角度问:如果低质量数据不是扔掉,而是用 LLM 改写成高质量,会怎样?

结果相当好。在固定 500 亿 token 训练预算内,改写版数据集让 Llama-3.1-8B 的代码生成能力(HumanEval pass@1)提升了 17.0 分,数学推理(GSM8K)提升了 12.4 分。

SwallowCode:四阶段改写流水线

论文发布了两个数据集:SwallowCode(约 161 亿 token)和 SwallowMath(约 23 亿 token),均以 Llama 3.3 Community License 开源。

SwallowCode 的原材料是 The-Stack-v2 里的 Python 代码片段,经过四个阶段处理:

  1. 语法验证:过滤掉无法通过 AST 解析的片段
  2. pylint 风格过滤:基于静态分析分数筛选
  3. LLM 风格改写:强制统一代码风格、添加注释
  4. LLM 语义改写:将片段转化为「自包含、算法高效」的示例——这步最关键,也是增益最大的

对 SwallowMath,则是对 Finemath-4+ 数据做三件事:去除样板文字、还原上下文、把解题步骤重新格式化为简洁的逐步说明。

消融实验的结论很直接:每个阶段都有贡献,其中改写(rewriting)带来的增益最大。

为什么「改写」比「过滤」更好

论文里有一个核心洞察,叫 transform-and-retain(变换保留)——与传统方法的对比是:

方法逻辑问题
过滤低质量 → 扔掉浪费数据,稀缺领域损失大
有限变换低质量 → 简单修正改动有限,提升有限
transform-and-retain低质量 → LLM 完整改写最大化数据利用率

关键逻辑:原始数据包含正确的语义内容,只是表达方式差。代码逻辑是对的,只是没注释、没有清晰的算法结构;数学题解是对的,只是夹着大量 LaTeX 样板和无关文字。LLM 改写保留内容、改变形式。

这解释了为什么效果好于单纯过滤:过滤丢掉了内容,改写保留了内容。

这个方向的更大意义

SwallowCode 发布在 ICLR 2026,背后有一个更大的信号:知乎的相关报道里还提到了另一篇 ICLR 2026 论文「How Can We Synthesize High-Quality Pretraining Data? A Systematic Study of Prompt Design, Generator Model, and Source Data」——同一个会议上,有多篇论文在研究「如何系统性地生成或改造高质量预训练数据」。

这不是偶然。随着高质量人工数据接近耗尽,训练数据工程正在转向:用已有 LLM 处理和提升存量数据,而不只是寻找更多原始数据。

合成数据、数据改写、数据蒸馏,这几条路在 2026 年同时被加速探索。

SwallowCode 的贡献是把其中一条路做得足够具体、足够可复现——完整流水线开源,消融实验完整,迁移到其他语言和领域的方法论写得清楚。

低质量数据不等于无用数据。用模型改写它,通常比扔掉它更聪明。