Each language version is independently generated for its own context, not a direct translation.
这篇论文讲述了一个关于如何“变废为宝”的故事,主角是两位大语言模型(LLM)的“营养师”:一个叫 SwallowCode(专攻编程),一个叫 SwallowMath(专攻数学)。
想象一下,大语言模型就像一个正在长身体的超级天才学生。它的智力水平很大程度上取决于它小时候读了什么书(也就是“预训练数据”)。如果它读的都是乱码、错别字连篇或者逻辑混乱的“垃圾书”,那它就算再聪明,学出来的东西也是歪瓜裂枣。
以前的做法是:从图书馆里挑书,把那些明显有错的书直接扔进垃圾桶(过滤)。但这有个问题:很多书其实内容很好,只是排版乱了、标点错了,或者写得太啰嗦,直接扔掉太可惜。
这篇论文提出的新方法叫 “改写并保留”(Transform-and-Retain)。简单来说,就是不扔书,而是请一位超级编辑把书重新整理、润色,变成一本完美的教科书。
1. 核心故事:两位“超级编辑”的诞生
SwallowCode:代码界的“精修大师”
- 原材料:它从互联网上抓取了海量的 Python 代码(就像从旧货市场买了一堆旧衣服)。
- 四步改造流程:
- 剪掉破洞(语法检查):先把那些根本跑不通、全是语法的“烂代码”挑出来扔掉。
- 熨烫平整(风格检查):用自动化工具(Pylint)检查代码风格,把那些缩进混乱、变量名乱起的代码挑出来。
- 时尚改造(风格重写 SGCR):请一位 AI 编辑(Llama-3.3)给代码“整容”。它把变量名改得通俗易懂,加上注释,把函数拆得更清晰,就像把一件皱巴巴的 T 恤熨平,并配上时尚的标签。
- 注入灵魂(自包含优化 SCOR):这是最关键的一步。很多旧代码依赖外部文件,或者算法效率极低(比如用笨办法算数)。AI 编辑会把它们改造成**“独立完整”**的小程序,自动解决依赖问题,并把低效的算法换成高效的,就像把一辆破自行车改装成了高性能赛车。
- 成果:经过这套流程,原本杂乱无章的代码变成了约 161 亿个高质量的“代码精华”。
SwallowMath:数学界的“解题导师”
- 原材料:从网上收集了各种数学题和解答(就像收集了一堆学生作业,有的字迹潦草,有的步骤跳跃)。
- 三步改造流程:
- 去噪:把题目周围的广告、网页页脚、无关的日期时间统统删掉。
- 补全:如果题目缺了条件,或者解答跳步了,AI 编辑会把它补全,让逻辑连贯。
- 重写:把原本啰嗦或混乱的解题过程,改写成**“一步步清晰易懂”**的教程,就像把一位数学老师口述的解题思路,整理成一本完美的辅导书。
- 成果:生成了约 23 亿个高质量的数学题解。
2. 实验结果:吃了“补品”的学生变强了
研究人员用这些经过“精修”的数据,去训练一个中等规模的模型(Llama-3.1-8B),并设定了严格的“考试预算”(只允许看 500 亿个字的书)。
编程考试(HumanEval):
- 以前用普通数据(Stack-Edu)训练,模型答对率是基准线。
- 用了 SwallowCode 后,模型答对率暴涨了 17%!这相当于一个普通学生突然变成了奥数金牌得主。
- 比喻:就像给厨师换了一箱顶级食材,他做出来的菜(生成的代码)瞬间从“能吃的家常菜”变成了“米其林三星大餐”。
数学考试(GSM8K & MATH):
- 用了 SwallowMath 后,模型在数学题上的准确率也提升了 12.4%。
- 比喻:就像把一本写满乱码的数学笔记,变成了一本逻辑严密、步骤清晰的《五年高考三年模拟》,学生一看就懂,一做就对。
3. 为什么这个方法这么厉害?
以前的方法像**“淘金”**:在沙子里筛,把沙子扔掉,只留下金子。但很多时候,沙子里其实混着很多“镀金”的石头,直接扔掉太浪费。
这篇论文的方法是**“炼金术”**:
- 不抛弃:即使是看起来质量一般的代码或题目,也不直接扔掉。
- 深加工:利用强大的 AI 模型,把“次品”改造成“精品”。
- 效率更高:在同样的学习时间(Token 预算)下,吃“精修后的营养餐”比吃“原始的大杂烩”长身体快得多。
4. 总结与启示
这篇论文告诉我们,数据的质量比数量更重要,而“清洗”数据的方式可以不仅仅是“删减”,更可以是“重塑”。
- 开源精神:作者把这套“精修工厂”的图纸(代码)、原材料(数据集)和成品(模型)全部公开了。这意味着任何人都可以拿着这些“顶级教材”去训练自己的 AI,或者学习如何把烂数据变成好数据。
- 未来展望:这就像给 AI 社区提供了一套通用的“教材编写指南”。以后我们不需要再花巨资去挖掘新的数据,而是可以把现有的公开数据通过这套方法“点石成金”,让 AI 变得更聪明、更可靠。
一句话总结:
这篇论文教我们,与其在垃圾堆里找金子,不如请一位超级编辑,把普通的石头打磨成闪闪发光的宝石,让 AI 吃得更好,学得更快。
Each language version is independently generated for its own context, not a direct translation.
这是一篇关于通过重写(Rewriting)预训练数据来显著提升大语言模型(LLM)在数学推理和代码生成任务中性能的学术论文。论文由东京工业大学、产业技术综合研究所(AIST)等机构的研究人员共同完成,提出了两个开源数据集:SwallowCode 和 SwallowMath。
以下是该论文的详细技术总结:
1. 研究背景与问题 (Problem)
- 数据质量瓶颈:当前 LLM 在程序合成和数学推理方面的能力主要受限于预训练语料的质量。现有的公开数据集(如 The-Stack-v2, Finemath-4+)主要依赖基于规则的提取或简单的过滤(如排除低分样本),导致数据中仍包含大量噪声、冗余、风格不一致或缺乏上下文的内容。
- “过滤”的局限性:传统的“过滤即保留”(Filter-and-Retain)方法会丢弃大量低质量数据,导致数据利用率低,且无法修复数据中存在的结构性缺陷(如缺少依赖、算法效率低下)。
- 数据缺口:领先的开源模型(如 Qwen3, DeepSeek-V3)未公开其高质量预训练语料,导致开源社区缺乏与之匹敌的高质量代码和数学数据,形成了“数据质量差距”。
2. 方法论 (Methodology)
论文提出了一种**“转换并保留”(Transform-and-Retain)**的方法论,即不直接丢弃低质量数据,而是利用大语言模型(LLM)对其进行系统性重写,将其转化为高质量、自包含且风格统一的样本。
A. SwallowCode (代码数据集)
基于 The-Stack-v2 中的 Python 片段,构建了一个四阶段流水线,总规模约 161 亿 Token:
- 语法过滤 (Syntax Filtering):使用 Python 编译器剔除无法编译的无效代码。
- Linter 过滤 (Pylint-based Filtering):使用
pylint 工具进行风格检查,剔除评分低于 7.0 的样本,并 penalize 过度冗余的注释。
- 风格引导的代码重写 (SGCR, Style-Guided Code Rewriting):
- 利用 LLM (Llama-3.3-70B-Instruct) 根据 Google Python 风格指南 重写代码。
- 改进内容:变量命名、文档字符串 (Docstrings)、类型注解、模块化设计、错误处理等。
- 注意:此阶段主要提升可读性和规范性。
- 自包含优化重写 (SCOR, Self-Contained Optimization Rewriting):
- 在 SGCR 基础上,进一步解决语义问题。
- 改进内容:内联外部依赖(确保代码可独立运行)、替换低效算法(如将 O(n2) 优化为 O(n))、将无意义的片段转化为具有教学价值的示例。
B. SwallowMath (数学数据集)
基于 Finemath-4+,规模约 23 亿 Token,同样采用重写策略:
- 清理与重构:移除网页头部/尾部、隐私声明、时间戳等无关元数据。
- 上下文恢复:补全缺失的问题或答案背景。
- 格式标准化:将解决方案重写为简洁、分步的推导过程,提升逻辑清晰度。
C. 实验设置
- 基座模型:Llama-3.1-8B(为了清晰归因,避免使用已接近性能极限的模型)。
- 训练预算:固定 500 亿 Token 的持续预训练(Continual Pre-training)预算。
- 数据混合:代码/数学数据仅占混合数据的一小部分(约 16% 代码或 4.8% 数学),其余为多语言文本,以模拟真实训练场景。
- 去污染:严格检查并移除了与 HumanEval, GSM8K, MATH 等测试集的重合数据。
3. 关键贡献 (Key Contributions)
- 提出了 Transform-and-Retain 范式:证明了通过 LLM 重写低质量数据比单纯过滤或丢弃数据能带来更大的性能提升。
- 发布了高质量开源数据集:
- SwallowCode (16.1B tokens) 和 SwallowMath (2.3B tokens),均基于 Llama 3.3 社区许可证开源。
- 提供了完整的处理流水线代码、提示词(Prompts)和检查点,确保完全可复现。
- 系统性的消融研究:详细验证了流水线中每个阶段(语法过滤、Linter、SGCR、SCOR)的贡献,证明了重写阶段带来的增益最大。
- 通用性验证:不仅在 Llama-3 系列上有效,在 Qwen2-7B 上也观察到了显著的性能提升,证明了该方法的通用性。
4. 实验结果 (Results)
在固定 500 亿 Token 的训练预算下,使用 Swallow 数据集进行持续预训练,相比基线(Stack-Edu 或 Finemath-4+)取得了显著突破:
代码生成能力 (SwallowCode):
- HumanEval (pass@1): 提升 +17.0 分。
- HumanEval+ (pass@1): 提升 +16.1 分。
- 在 Qwen2-7B 上,HumanEval 提升 +10.3 分。
- 注:由于 SGCR 强制使用标准命名规范(如 snake_case),导致在 MBPP 基准上分数下降(因 MBPP 测试用例使用非标准命名),因此论文排除了 MBPP 作为主要评估指标。
数学推理能力 (SwallowMath):
- GSM8K (准确率): 提升 +12.4 分。
- MATH (准确率): 提升 +7.6 分。
效率分析:
- 虽然重写过程消耗了额外的 GPU 资源(约 2.3 万 H100 GPU 小时),但重写后的数据在训练时表现出更高的数据效率。即在相同的 Token 预算下,重写数据带来的性能提升远超原始数据,甚至原始数据在更大规模(>100B tokens)下也难以达到重写数据的性能水平。
5. 意义与影响 (Significance)
- 打破数据质量瓶颈:证明了开源社区可以通过“数据清洗与重写”而非“依赖私有数据”来缩小与闭源模型的能力差距。
- 方法论的转移:从“筛选数据”转向“改造数据”。这种方法不仅去除了噪声,还主动增强了数据的逻辑性、规范性和教学价值。
- 社区资产:通过开源数据集和流水线,降低了高质量预训练数据的获取门槛,允许其他研究者在不同基座模型上复用这些经过优化的数据,避免了重复的清洗成本。
- 伦理与合规:研究团队进行了严格的去污染检查,并保留了原始数据的许可证信息,确保数据使用的合法性和安全性。
总结:这篇论文通过系统性的数据重写技术,成功构建了 SwallowCode 和 SwallowMath 两个高质量数据集,显著提升了 LLM 在代码和数学领域的表现。其核心洞见在于:高质量的数据不仅仅是“筛选”出来的,更是通过大模型“重塑”出来的。 这一发现为未来开源大模型的数据工程提供了重要的方向。