新增: DeepSeek 全部 33 篇官方论文(原文 PDF 走 Git LFS + 中文精读笔记与索引)
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
# DeepSeek-Coder:当大语言模型遇见编程——代码智能的崛起
|
||||
|
||||
> **原文标题**:DeepSeek-Coder: When the Large Language Model Meets Programming -- The Rise of Code Intelligence
|
||||
> **arXiv**:[2401.14196](https://arxiv.org/abs/2401.14196) | **发布**:25 Jan 2024(最后修订 26 Jan 2024)
|
||||
> **作者/机构**:Daya Guo、Qihao Zhu、Dejian Yang、Zhenda Xie、Kai Dong、Wentao Zhang 等(DeepSeek-AI,深度求索;Qihao Zhu、Yingfei Xiong 另属北京大学)
|
||||
> **原文 PDF**:[01-DeepSeek-Coder-2401.14196.pdf](./01-DeepSeek-Coder-2401.14196.pdf)
|
||||
|
||||
## 一、摘要(全文翻译)
|
||||
|
||||
大语言模型的快速发展已经彻底改变了软件开发中的代码智能。然而,闭源模型的主导地位限制了广泛的研究与开发。为解决这一问题,我们提出了 DeepSeek-Coder 系列——一系列参数量从 1.3B 到 33B 的开源代码模型,在 2 万亿 token 上从零开始训练。这些模型在一个高质量的项目级代码语料库上进行预训练,并采用窗口为 16K 的「填空式」(fill-in-the-blank)任务来增强代码生成与代码补全能力。我们的大量评测表明,DeepSeek-Coder 不仅在多个基准上取得了开源代码模型中的最先进性能,还超越了 Codex、GPT-3.5 等现有的闭源模型。此外,DeepSeek-Coder 模型采用宽松许可证发布,允许研究用途以及不受限制的商业使用。
|
||||
|
||||
## 二、核心贡献
|
||||
|
||||
1. **提出开源代码模型系列 DeepSeek-Coder**:给出 Base 与 Instruct 两个版本、1.3B/6.7B/33B 三种规模,全部在 2 万亿 token 上从零训练,覆盖 87 种编程语言,解决了「强代码模型被闭源垄断、研究者无法获取」的痛点。
|
||||
2. **首次在代码预训练阶段引入仓库级(repository-level)数据构造**:通过依赖解析把同仓库文件按调用依赖排序后拼接成训练样本,显著提升跨文件代码生成能力(CrossCodeEval 上相对仅用文件级语料训练的版本在 Java、TypeScript、C# 上均有提升)。
|
||||
3. **系统研究 FIM 训练策略的配置影响**:用 1.3B 模型在 Python 子集上做消融,比较 0%/50%/100% FIM 率与 MSP 策略,发现 FIM 率与代码补全能力之间存在权衡,最终选定 **50% PSM 率**,为后续代码模型预训练提供了可复用的经验结论。
|
||||
4. **仓库级去重与严格去污染**:在仓库粒度而非文件粒度做近似去重以保持仓库结构完整;用 n-gram 匹配(10-gram 相同即剔除,短串用精确匹配)剔除 HumanEval、MBPP、GSM8K、MATH 的题面与解答,避免测试集泄漏。
|
||||
5. **全面评测并确立开源 SOTA**:在 HumanEval(多语言)、MBPP、DS-1000、LeetCode 竞赛、FIM 单行补全、CrossCodeEval、程序化数学推理七类任务上,DeepSeek-Coder-Base 33B 全面领先开源模型;Instruct 33B 在多数代码任务上超过 GPT-3.5 Turbo。
|
||||
6. **推出 DeepSeek-Coder-v1.5 7B**:从通用模型 DeepSeek-LLM-7B Base 出发继续预训练,验证「最好的代码大模型建立在强通用大模型之上」这一判断。
|
||||
|
||||
## 三、方法与技术要点
|
||||
|
||||
### 3.1 数据构成与 GitHub 抓取过滤(第 2.1 节)
|
||||
|
||||
训练数据由 **87% 源代码 + 10% 英文代码相关自然语言(GitHub Markdown 与 StackExchange)+ 3% 与代码无关的中文自然语言** 组成。代码侧只保留 2023 年 2 月前创建的公开仓库,并用类似 StarCoder 的规则初筛:文件平均行长 > 100 字符或最大行长 > 1000 字符则丢弃;字母字符占比低于 25% 则丢弃;除 XSLT 外,前 100 字符内出现 `<?xml version=` 则丢弃;HTML 要求可见文本占代码量至少 20% 且不少于 100 字符;JSON/YAML 只保留字符数在 50–5000 之间的文件。经此过滤,数据量降至原始规模的 **32.8%**。
|
||||
|
||||
### 3.2 依赖解析与仓库级拓扑排序(第 2.2 节)
|
||||
|
||||
此前代码模型多在**文件级**语料上预训练,忽略了同一项目内文件间的依赖,因此难以扩展到项目级场景。论文用正则表达式抽取文件间的调用关系(Python 的 `import`、C# 的 `using`、C 的 `include` 等),构建依赖图并做拓扑排序:算法 1 先把「A 依赖 B」转成 B→A 的边并统计入度;随后找出所有非连通子图,对每个子图反复选取**入度最小**的节点(而非标准拓扑排序要求的入度为 0),从而可以容忍依赖图中的环。每个子图排出的文件序列拼接成一个训练样本,并在每个文件开头插入注释形式的文件路径。这样上下文所依赖的文件总是排在前面,使数据更贴近真实编码实践。
|
||||
|
||||
### 3.3 仓库级去重与质量筛选(第 2.3–2.4 节)
|
||||
|
||||
已有工作证明去重能显著提升性能,但**文件级**去重可能删掉仓库内的部分文件、破坏仓库结构,因此论文把整个仓库的拼接代码当作单个样本做近似去重。质量筛选在规则过滤之外还引入编译器与质量模型,配合启发式规则剔除语法错误、可读性差、模块化程度低的数据。清洗后共 **87 种语言、798 GB、6.03 亿个文件**,占比最高的是 Java(148.66 GB,18.63%)、Python(120.68 GB,15.12%)、C++(90.87 GB,11.39%)、TypeScript(60.62 GB,7.60%)、PHP(58.92 GB,7.38%)、C#(58.56 GB,7.34%)。
|
||||
|
||||
### 3.4 训练目标:下一 token 预测与 FIM(第 3.1 节)
|
||||
|
||||
第一目标是常规的下一 token 预测(next token prediction)。第二目标是填充中间(Fill-in-the-Middle, FIM):代码补全常需依据前后文插入内容,仅靠左到右预测无法学到这种能力,故随机把文本切成前、中、后三段再重排拼接。FIM 有两种模式:PSM(Prefix-Suffix-Middle)按 Prefix、Suffix、Middle 排列,SPM(Suffix-Prefix-Middle)按 Suffix、Prefix、Middle 排列。实现上引入三个哨兵 token,对文件切分出的 $f_{pre}$、$f_{suf}$、$f_{middle}$ 按下式构造样本:
|
||||
|
||||
```text
|
||||
<|fim_start|> f_pre <|fim_hole|> f_suf <|fim_end|> f_middle <|eos_token|>
|
||||
```
|
||||
|
||||
FIM 在 packing 之前于文档级施加,FIM 率为 0.5,采用 PSM 模式。消融实验用 DeepSeek-Coder-Base 1.3B 在 Python 子集上、以 HumanEval-FIM(随机遮盖一行代码,考察单行补全)为指标:100% FIM 率的 FIM 表现最好但代码补全能力最弱,说明二者存在权衡;50% PSM 率优于 MSP(Masked Span Prediction)策略,因此在 FIM 效果与补全能力之间取平衡,最终选择 50% PSM。
|
||||
|
||||
### 3.5 分词器、架构与优化(第 3.2–3.4 节)
|
||||
|
||||
分词器用 HuggingFace Tokenizers 库在训练语料子集上训练字节对编码(Byte Pair Encoding, BPE),词表大小 **32,000**。模型沿用 DeepSeek LLM 的框架:decoder-only Transformer + 旋转位置编码(Rotary Position Embedding, RoPE),33B 版本进一步引入分组查询注意力(Grouped-Query-Attention, GQA,组大小 8)以提升训练与推理效率,并全部使用 FlashAttention v2 加速注意力计算。具体配置为:隐层维度 2048/4096/7168,中间层维度 5504/11008/19200,层数 24/32/62,注意力头数 16/32/56,批大小 1024/2304/3840,最大学习率 5.3e-4/4.2e-4/3.5e-4(对应 1.3B/6.7B/33B),激活函数均为 SwiGLU。优化器为 AdamW($\beta_1=0.9$、$\beta_2=0.95$),批大小与学习率按 DeepSeek LLM 的缩放律设定;学习率采用三阶段策略,含 2000 步预热,最终学习率降至初始值的 10%,每阶段学习率降为上一阶段的 $\sqrt{\frac{1}{10}}$。训练使用 HAI-LLM 框架与 NVIDIA A100、H800 集群(每节点 8 卡,节点内 NVLink/NVSwitch,节点间 InfiniBand)。
|
||||
|
||||
### 3.6 长上下文与指令微调(第 3.6–3.7 节)
|
||||
|
||||
为支撑仓库级代码处理,论文重设 RoPE 参数:线性缩放因子由 1 提升到 4,基频由 10000 改为 100000,并用批大小 512、序列长度 16K 额外训练 1000 步(学习率沿用预训练最后阶段)。理论上可处理 64K token 上下文,但实证表明 **16K 范围内输出最可靠**。指令微调用 Alpaca 指令格式的高质量、有帮助且无偏见的人类指令构造 DeepSeek-Coder-Instruct,各轮对话以 `<|EOT|>` 分隔;训练采用余弦调度,100 步预热,初始学习率 1e-5,批大小 4M token,共训练 2B token。
|
||||
|
||||
## 四、主要实验结果
|
||||
|
||||
| 基准 / 任务 | 本模型 | 对比对象 | 说明 |
|
||||
|---|---|---|---|
|
||||
| HumanEval 多语言(平均) | Base 33B **50.3%** | CodeLlama-Base 34B 41.0%、GPT-3.5-Turbo 64.9%、GPT-4 76.5% | Base 33B 为开源 SOTA,较 CodeLlama 34B 提升约 9% |
|
||||
| MBPP | Base 33B **66.0%** | CodeLlama-Base 34B 55.2%、GPT-3.5-Turbo 70.8% | 较同规模开源模型提升约 11% |
|
||||
| HumanEval(Python 单语言) | Instruct 33B **79.3%** | GPT-3.5-Turbo 76.2%、GPT-4 84.1% | 指令微调后超过 GPT-3.5-Turbo |
|
||||
| HumanEval(Python 单语言) | Base 6.7B **49.4%** | CodeLlama-Base 34B 48.2% | 小模型超越 5 倍参数量的开源模型 |
|
||||
| DS-1000(7 个数据科学库平均) | Base 33B **40.2%** | CodeLlama-Base 34B 34.3%、StarCoder-Base 24.6%、CodeGeeX2 22.9% | 各库均有较高准确率,Pytorch 36.8%、Tensorflow 46.7% |
|
||||
| LeetCode 竞赛(180 题,Jul 2023–Jan 2024) | Instruct 33B **27.8%**(+CoT 28.9%) | GPT-3.5-Turbo 23.3%、GPT-4-Turbo 40.6%(+CoT 41.8%)、CodeLlama-Instruct 34B 9.4% | 唯一超过 GPT-3.5-Turbo 的开源模型;与 GPT-4-Turbo 差距仍大 |
|
||||
| FIM 单行补全(三语言平均) | Base 33B **81.2%**、Base 7B 80.7% | StarCoder 16B 69.7%、CodeLlama-Base 13B 75.5%、SantaCoder 1.1B 69.0% | 连 1.3B 版本(70.4%)也超过 StarCoder 与 CodeLlama |
|
||||
| CrossCodeEval 跨文件补全(EM,四语言) | Base 6.7B +检索 16.14/17.72/14.03/16.23% | CodeLlama-Base 7B +检索 13.02/16.41/12.34/13.19%、StarCoder-Base 7B +检索 13.06/15.61/7.54/14.20% | 评估设定为最大序列 2048、最大输出 50、跨文件上下文 512 token,检索用官方 BM25 结果 |
|
||||
| 程序化数学推理(PAL,7 基准平均) | Base 33B **65.8%** | CodeLlama-Base 34B 62.0%、StarCoder-Base 16B 40.0% | GSM8K 60.7%、MATH 29.1%、MAWPS 93.3% |
|
||||
| v1.5 对照(Base 6.7B → v1.5 6.9B) | v1.5:HumanEval 43.2%、MBPP 60.4%、GSM8K **62.4%**、MATH **24.7%**、MMLU 49.1%、BBH 55.2%、HellaSwag 69.9%、WinoG 63.8%、ARC-C 47.2% | 原版:44.7%、60.6%、43.2%、19.2%、36.6%、44.3%、53.8%、57.1%、32.5% | v1.5 编码性能轻微下降,数学推理与自然语言任务大幅提升 |
|
||||
|
||||
DeepSeek-Coder-Base 33B 在多语言 HumanEval、MBPP、DS-1000、FIM 补全与程序化数学推理上均为开源模型最佳,且优势幅度可观;DeepSeek-Coder-Base 6.7B 已能与 5 倍参数量的 CodeLlama-Base 34B 打平甚至反超,说明项目级高质量语料带来的收益可部分替代参数量。Instruct 33B 在 HumanEval 与 LeetCode 上超过 GPT-3.5-Turbo,但仍明显落后于 GPT-4/GPT-4-Turbo(LeetCode 整体 27.8% vs 40.6%)。CoT 提示对难度较高的子集增益明显(33B 在 Medium 上由 22.0% 升至 25.3%),但并非所有设定都提升。仓库级预训练的有效性由消融验证:去掉仓库级语料后,Java、TypeScript、C# 的跨文件补全性能均下降。
|
||||
|
||||
## 五、结论、局限与影响
|
||||
|
||||
- **结论**:DeepSeek-Coder 给出 1.3B/6.7B/33B 三档代码专用模型,在精心筛选的项目级代码语料上以「填空式」目标预训练,上下文扩展到 16,384 token;Base 33B 在各种标准测试上超越现有开源代码模型,Base 6.7B 达到 34B CodeLlama 的水平;Instruct 33B 在多项代码任务上超过 GPT-3.5 Turbo;基于 DeepSeek-LLM 7B 检查点继续预训练得到的 DeepSeek-Coder-v1.5 在保持编码能力的同时增强了自然语言理解,印证「最有效的代码大模型应建立在强通用大模型之上」。
|
||||
- **局限性**:论文自述的局限包括——长上下文虽然理论上支持 64K token,但只在 16K 范围内输出最可靠,长上下文适配方法仍需继续改进与评估;LeetCode 评估中,尽管尽力收集最新题目,仍无法完全排除数据污染,且观察到 GPT-4-Turbo 与 DeepSeek-Coder 在 2023 年 7、8 月的竞赛题上得分偏高,论文提示社区注意这一风险;此外论文未明确说明 33B 模型训练的具体算力开销与训练时长。
|
||||
- **影响**:该工作把「项目级/仓库级语料构造 + FIM 目标 + 长上下文」确立为代码模型预训练的标准配方之一,并以宽松许可证开放全部权重,直接缩小了开源与闭源代码模型之间的能力差距;其仓库级去重、n-gram 去污染流程与 50% PSM 的 FIM 配置被后续代码模型广泛沿用,v1.5 的「通用模型继续预训练」路线也预示了后续 DeepSeek-Coder-V2 的技术方向。
|
||||
|
||||
## 六、关键术语对照表
|
||||
|
||||
| English | 中文 |
|
||||
|---|---|
|
||||
| Fill-in-the-Middle (FIM) | 中间填充 |
|
||||
| Next Token Prediction | 下一 token 预测 |
|
||||
| Prefix-Suffix-Middle (PSM) | 前缀-后缀-中间(FIM 模式) |
|
||||
| Suffix-Prefix-Middle (SPM) | 后缀-前缀-中间(FIM 模式) |
|
||||
| Masked Span Prediction (MSP) | 掩码片段预测 |
|
||||
| Repository-Level Deduplication | 仓库级去重 |
|
||||
| Near-Deduplication | 近似去重 |
|
||||
| Dependency Parsing | 依赖解析 |
|
||||
| Topological Sort | 拓扑排序 |
|
||||
| Decontamination | 去污染 |
|
||||
| Cross-File Code Completion | 跨文件代码补全 |
|
||||
| Program-Aided Math Reasoning (PAL) | 程序辅助数学推理 |
|
||||
| Chain-of-Thought (CoT) | 思维链 |
|
||||
| Grouped-Query-Attention (GQA) | 分组查询注意力 |
|
||||
| Rotary Position Embedding (RoPE) | 旋转位置编码 |
|
||||
| Byte Pair Encoding (BPE) | 字节对编码 |
|
||||
| Instruction Tuning | 指令微调 |
|
||||
Binary file not shown.
@@ -0,0 +1,115 @@
|
||||
# DeepSeek-Coder-V2:打破代码智能领域闭源模型的壁垒
|
||||
|
||||
> **原文标题**:DeepSeek-Coder-V2: Breaking the Barrier of Closed-Source Models in Code Intelligence
|
||||
> **arXiv**:[2406.11931](https://arxiv.org/abs/2406.11931) | **发布**:17 Jun 2024
|
||||
> **作者/机构**:Qihao Zhu、Daya Guo、Zhihong Shao、Dejian Yang 等(共同一作)+ DeepSeek(深度求索)
|
||||
> **原文 PDF**:[02-DeepSeek-Coder-V2-2406.11931.pdf](./02-DeepSeek-Coder-V2-2406.11931.pdf)
|
||||
|
||||
## 一、摘要(全文翻译)
|
||||
|
||||
我们提出 DeepSeek-Coder-V2,一个开源的专家混合(Mixture-of-Experts, MoE)代码语言模型,在代码特定任务上取得了与 GPT4-Turbo 相当的性能。具体而言,DeepSeek-Coder-V2 是从 DeepSeek-V2 的一个中间检查点出发、使用额外 6 万亿 token 进一步预训练得到的。通过这一持续预训练,DeepSeek-Coder-V2 大幅增强了 DeepSeek-V2 的编码与数学推理能力,同时在通用语言任务上保持了相当的性能。与 DeepSeek-Coder-33B 相比,DeepSeek-Coder-V2 在代码相关任务的各个方面、以及推理与通用能力上都展现出显著进步。此外,DeepSeek-Coder-V2 将其支持的编程语言从 86 种扩展到 338 种,同时把上下文长度从 16K 扩展到 128K。在标准基准评测中,DeepSeek-Coder-V2 在编码与数学基准上取得了优于 GPT4-Turbo、Claude 3 Opus 和 Gemini 1.5 Pro 等闭源模型的性能。
|
||||
|
||||
## 二、核心贡献
|
||||
|
||||
1. **两个规模的 MoE 代码模型**:基于 DeepSeekMoE 框架发布 16B 与 236B 两个版本,激活参数分别只有 2.4B 和 21B,二者均支持 338 种编程语言与最长 128K token 上下文。
|
||||
2. **首个开源百亿级参数以上的代码模型**:作者称这是首次尝试研发开源的千亿参数级代码模型;实验结果显示 236B 版本在编码与数学任务上均超过 GPT4-Turbo、Claude 3 Opus、Gemini 1.5 Pro 等当时最强的闭源模型。
|
||||
3. **面向代码与数学的持续预训练配方**:在 DeepSeek-V2 中间检查点(已训 4.2T token)之上追加 6T token(60% 代码 + 10% 数学 + 30% 自然语言),总训练量 10.2T token,兼顾代码/数学强化与通用语言能力不退化。
|
||||
4. **多语言与长上下文大幅扩展**:支持语言从 86 种增至 338 种,上下文从 16K 扩到 128K;语言扩展经 1B 模型消融验证有效(HumanEval 30.5%→37.2%,MBPP 44.6%→54.0%)。
|
||||
5. **代码场景的 RL 对齐**:用编译器反馈与测试用例构造偏好数据训练奖励模型,再以 GRPO 做强化学习;在内部 LeetCode 测试集上奖励模型信号明显优于原始编译信号。
|
||||
6. **全面刷新开源模型成绩**:HumanEval 90.2%、MBPP+ 76.2%(EvalPlus 流程下新的 SOTA)、LiveCodeBench 43.4%,并成为首个在 SWEBench 上超过 10% 的开源模型。
|
||||
7. **宽松许可开源**:模型按宽松协议公开发布,允许研究与无限制的商业使用。
|
||||
|
||||
## 三、方法与技术要点
|
||||
|
||||
### 3.1 数据收集与语料构建
|
||||
|
||||
预训练语料由 60% 源代码、10% 数学语料与 30% 自然语言语料组成;自然语言部分直接采样自 DeepSeek-V2 的训练数据,因此论文重点说明代码与数学数据的采集、清洗与过滤流程。
|
||||
|
||||
GitHub 部分只收集 2023 年 11 月之前创建的公开仓库,沿用 DeepSeek-Coder 的过滤规则与近似去重:剔除平均行长超过 100 字符或最长行超过 1000 字符、以及字母字符占比低于 25% 的文件;除 XSLT 外,剔除前 100 字符中出现 `<?xml version=` 的文件;HTML 要求可见文本占比至少 20% 且不少于 100 字符;JSON/YAML 只保留 50–5000 字符的文件。过滤后得到 821B 代码 token(覆盖 338 种语言)与 185B 代码相关文本(如 markdown、issue)。
|
||||
|
||||
Common Crawl 部分沿用 DeepSeekMath 的迭代召回流程:以 StackOverflow、PyTorch 文档、math.stackexchange 等站点为初始种子语料训练 fastText 模型,用它召回更多代码/数学相关网页;由于中文等语言无法靠空格分词,改用 DeepSeek-V2 的 BPE 分词器,显著提升召回准确率;把首轮召回网页占比超过 10% 的域名判定为代码或数学相关域,再把这些域内相关的未采集网页补充进种子语料。迭代三次后从网页共获得 70B 代码相关 token 与 221B 数学相关 token(约为 DeepSeekMath 的 120B 数学语料的两倍)。同样的流程在 GitHub 上迭代两次,种子为人工挑选的、含详细描述的高质量代码,另收集 94B 源代码。最终新代码语料共 1,170B token,来自 GitHub 与 CommonCrawl。分词器与 DeepSeek-V2 相同。
|
||||
|
||||
为验证新语料质量,作者用 1B 参数模型做消融(表 1):用新语料训练 1T token,HumanEval 从 30.5% 升至 36.0%、MBPP 从 44.6% 升至 49.0%;继续训练到 2T token 后进一步提升到 37.2% 与 54.0%,说明新语料优于 DeepSeek-Coder 所用的代码语料。
|
||||
|
||||
### 3.2 训练策略:下一词预测与中间填充
|
||||
|
||||
DeepSeek-Coder-V2 16B 同时使用两个训练目标——下一词预测(Next-Token-Prediction, NTP)与中间填充(Fill-In-the-Middle, FIM);236B 版本只使用 NTP。FIM 采用 PSM(Prefix, Suffix, Middle)模式,在文档级别的预打包阶段把内容重排为「前缀—后缀—中间」的重建序列:
|
||||
|
||||
$$\texttt{<|fim\_begin|>}f_{pre}\texttt{<|fim\_hole|>}f_{suf}\texttt{<|fim\_end|>}f_{middle}\texttt{<|eos\_token|>}$$
|
||||
|
||||
FIM 的使用率为 0.5。这样设计的动因是:IDE 里的代码补全场景往往是「已知前后文、要补中间的空洞」,纯因果语言建模无法直接建模这种结构,而 FIM 让模型学会利用前后文双向线索完成缺省片段。
|
||||
|
||||
### 3.3 模型架构与训练超参数
|
||||
|
||||
架构与 DeepSeek-V2 保持一致,16B 与 236B 分别对应 DeepSeek-V2-Lite 与 DeepSeek-V2 的超参设置,激活参数为 2.4B 与 21B。作者提到训练过程中出现过不稳定与梯度尖峰,将其归因于指数归一化(exponential normalization)技巧,于是回退到常规归一化方法。
|
||||
|
||||
优化器为 AdamW,$\beta_1=0.9$、$\beta_2=0.95$、权重衰减 0.1;批大小与学习率按 DeepSeek-V2 的设定调整;学习率采用余弦衰减,2000 步预热后逐步降到初始值的 10%。为保持稳健的自然语言理解能力,两个模型都不是从头训练,而是从 DeepSeek-V2 的中间检查点(已训练 4.2T token)继续预训练,因此预训练阶段总曝光量达 10.2T 高质量 token(4.2T + 6T)。
|
||||
|
||||
### 3.4 长上下文扩展
|
||||
|
||||
沿用 DeepSeek-V2 的做法,用 YaRN 把上下文长度扩展到 128K,超参与 DeepSeek-V2 相同:缩放系数 $s=40$、$\alpha=1$、$\beta=32$。随后分两个阶段继续训练以增强长上下文能力:第一阶段序列长度 32K、批大小 1152、训练 1000 步;第二阶段序列长度 128K、批大小 288 个序列、再训练 1000 步,并在扩展阶段对长上下文数据比例做上采样。「大海捞针」(Needle In A Haystack, NIAH)测试结果(图 2)显示,DeepSeek-Coder-V2 在直到 128K 的所有上下文窗口长度上都表现良好。
|
||||
|
||||
### 3.5 对齐:有监督微调与强化学习
|
||||
|
||||
**有监督微调(SFT)**:为构建 DeepSeek-Coder-V2 Chat,从 DeepSeek-Coder 收集 2 万条代码相关指令数据、从 DeepSeek-Math 收集 3 万条数学数据,并从 DeepSeek-V2 的指令数据中采样若干以维持通用能力,最终形成 300M token 的指令集;训练采用余弦调度、100 步预热、初始学习率 $5\times10^{-6}$、批大小 1M token、总计 1B token。为让模型在微调后仍支持代码补全,16B 版本在基座微调时继续使用 FIM 方法。
|
||||
|
||||
**强化学习(RL)**:作者收集了约 4 万条代码与数学提示,每条代码提示都配有测试用例。数学偏好数据直接用 ground-truth 标签获得;代码方面,虽然编译器能给出 0/1 反馈,但部分提示的测试用例覆盖不完全,直接使用这种信号噪声较大且次优,因此论文在编译器数据上训练一个奖励模型,用它在 RL 中提供信号,比原始编译信号更鲁棒、泛化性更好。在内部测试集(Leetcode 与 Leetcode-zh)上奖励模型信号明显优于原始编译器信号(图 3),故后续实验统一使用奖励模型。算法采用与 DeepSeek-V2 相同的组相对策略优化(Group Relative Policy Optimization, GRPO);相比 PPO,GRPO 无需额外维护 critic 模型,成本更低且被证明相当有效。
|
||||
|
||||
### 3.6 评测设置
|
||||
|
||||
论文将任务分为编码、数学、通用自然语言三类。HumanEval(164 个 Python 题目,零样本)与 MBPP-Plus 均用贪心搜索并复现基线以保证公平,另把 HumanEval 扩展到 C++、Java、PHP、TypeScript、C#、Bash、JavaScript、Swift、R、Julia、D、Rust、Racket 等语言以测多语言能力。竞赛编程用 LiveCodeBench(训练数据截止 2023 年 11 月前,取 1201-0601 子集)与 USACO(307 题)。仓库级补全用 RepoBench v1.1,只用 2023 年 12 月的数据以避免泄漏。缺陷修复用 Defects4J(挑出 238 个仅需改单个方法的缺陷)、SWE-bench 与 Aider。
|
||||
|
||||
## 四、主要实验结果
|
||||
|
||||
| 基准 / 任务 | 本模型 | 对比对象 | 说明 |
|
||||
|---|---|---|---|
|
||||
| HumanEval(Python) | 90.2%(V2-Instruct 236B/21B) | GPT-4-Turbo-0409 88.2%;GPT-4o-0513 91.0% | 显著高于 GPT-4-Turbo,仅次于 GPT-4o |
|
||||
| HumanEval 多语言平均(19 语言) | 75.3% | GPT-4o-0513 76.4%;Claude-3-Opus 70.8%;GPT-4-Turbo-0409 72.3% | 平均分第二,Java、PHP 单项最高 |
|
||||
| MBPP+ | 76.2% | GPT-4o-0513 73.5%;GPT-4-Turbo-0409 72.2% | 在 EvalPlus 流程下创下新 SOTA |
|
||||
| HumanEval(16B Lite 版) | 81.1%(2.4B 激活) | DS-Coder-instruct 33B 79.3% | Lite 版多语言平均 65.6%,高于 33B 模型的 61.9% |
|
||||
| LiveCodeBench(1201-0601,226 题) | 43.4% | GPT-4-Turbo-0409 45.7%;GPT-4o-0513 43.4%;Claude-3-Opus 34.6% | 与 GPT-4o 并列大模型最高,总排名第二 |
|
||||
| USACO | 12.1% | GPT-4o-0513 18.8%;GPT-4-Turbo-0409 12.3% | 接近 GPT-4-Turbo,仍落后 GPT-4o |
|
||||
| SWE-bench | 12.7% | GPT-4o-0513 26.7%;GPT-4-Turbo-0409 18.3%;Codestral 2.7% | 首个超过 10% 的开源模型 |
|
||||
| Defects4J(238 个单方法缺陷) | 21.0% | GPT-4o-0513 26.1%;Claude-3-Opus 25.5%;Codestral 17.8% | 开源模型中最佳,接近头部闭源模型 |
|
||||
| Aider(133 个 Python 编辑任务) | 73.7% | GPT-4o-0513 72.9%;Claude-3-Opus 68.4% | 表中最高分,超过所有闭源模型 |
|
||||
| RepoBench v1.1(Lite-Base 16B) | Python 平均 38.9%,Java 平均 43.3% | DS-Coder-Base 33B:Python 39.1%、Java 44.8%;Codestral 22B:46.1%、45.7% | 2.4B 激活参数即可比肩 33B 模型 |
|
||||
| FIM 单行填充(平均) | 86.4%(Lite-Base 2.4B 激活) | DS-Coder-Base 33B 86.4%;Codestral 22B 83.0% | Python 80.0%、Java 89.1%、JavaScript 87.2% |
|
||||
| CRUXEval-I-COT / -O-COT | 70.0% / 75.1% | GPT-4o-0513 77.4% / 88.7%;Claude-3-Opus 73.4% / 82.0% | 开源模型中最强,但与头部闭源仍有差距 |
|
||||
| MATH | 75.7% | GPT-4o-0513 76.6%;GPT-4-Turbo-0409 73.4% | 几乎追平 GPT-4o 的 SOTA |
|
||||
| GSM8K | 94.9% | GPT-4o-0513 95.8%;Claude-3-Opus 95.0% | 与闭源最强水平接近 |
|
||||
| AIME 2024 | 4/30(maj@64 时 5/30) | GPT-4-Turbo-0409 3/30;GPT-4o/Claude/Gemini 均 2/30 | 解出题数多于所有对比模型 |
|
||||
| Math Odyssey | 53.7% | GPT-4o-0513 53.2%;GPT-4-1106 49.1% | 略超 GPT-4o |
|
||||
| MMLU(5-shot) | 79.2(236B Instruct) | DeepSeek-V2 Chat 78.1;Lite 版 60.1(V2-Lite 55.7) | 通用语言能力与 DeepSeek-V2 相当甚至更好 |
|
||||
| Arena-Hard | 65.00(236B Instruct) | DeepSeek-V2 Chat 41.60;Lite 版 38.10(V2-Lite 11.40) | 推理/代码/数学占比高的主观评测提升明显 |
|
||||
| MT-Bench / Alignbench | 8.77 / 7.84 | DeepSeek-V2 Chat 8.97 / 7.91 | 通用对齐类基准略低于 DeepSeek-V2 Chat |
|
||||
|
||||
在代码生成上,236B 版本多语言平均分 75.3% 位居第二,仅低于 GPT-4o 的 76.4%,并在 Java 与 PHP 上取得最高分;MBPP+ 的 76.2% 刷新了当时的 SOTA。竞赛编程 LiveCodeBench 43.4% 与 GPT-4o 持平,USACO 12.1% 接近 GPT-4-Turbo 但仍明显落后 GPT-4o 的 18.8%。缺陷修复上 Aider 的 73.7% 超过所有对比模型(含闭源),SWE-bench 的 12.7% 虽为首个破 10% 的开源模型,却与 GPT-4o 的 26.7% 差距显著,作者归因于指令遵循能力不足。数学上 MATH 75.7% 几乎追平 GPT-4o,AIME 2024 解出题数(4/30)多于所有对比模型;CRUXEval 是开源最强但仍落后 GPT-4o,作者认为与 21B 激活参数的限制有关。通用语言方面,236B Instruct 在推理类基准上超过 DeepSeek-V2 Chat,但在 MT-Bench、AlpacaEval 2.0、AlignBench 上略低,归因于后者经过通用目的对齐阶段;16B Lite 版在知识密集型的 TriviaQA 上偏弱,因预训练网页数据量较少。
|
||||
|
||||
## 五、结论、局限与影响
|
||||
|
||||
- **结论**:DeepSeek-Coder-V2 从 DeepSeek-V2 出发,用 6 万亿 token 的高质量多源语料继续预训练,在显著提升编码与数学推理能力的同时保持了与 DeepSeek-V2 相当的通用语言性能;相比 DeepSeek-Coder,支持语言由 86 种增至 338 种,上下文由 16K 扩至 128K。实验表明其在代码与数学特定任务上达到与 GPT-4 Turbo、Claude 3 Opus、Gemini 1.5 Pro 等最强闭源模型相当的性能。
|
||||
- **局限性**:作者自述的主要局限是指令遵循(instruction-following)能力与 GPT-4 Turbo 等当时最强模型仍有明显差距,导致在 SWE-bench 这类复杂场景与任务上表现不佳;此外 CRUXEval 上与闭源大模型的差距被归因于仅 21B 的激活参数限制了学习与求解能力。作者认为代码模型不仅需要强编码能力,还需要出色的指令遵循能力才能应对真实复杂编程场景,未来将重点改进这一点。
|
||||
- **影响**:论文给出了「通用基座 + 领域持续预训练 + 领域偏好 RL」这一可复制的配方,证明开源 MoE 代码模型可以在代码与数学基准上追平乃至超过闭源旗舰;同时以宽松许可开源(含 16B 轻量版),使 2.4B 激活参数即可比肩 33B 稠密模型的补全与生成性能,对代码补全工具与低成本部署有直接实用价值。
|
||||
|
||||
## 六、关键术语对照表
|
||||
|
||||
| English | 中文 |
|
||||
|---|---|
|
||||
| Mixture-of-Experts (MoE) | 专家混合 |
|
||||
| DeepSeekMoE | DeepSeek 专家混合框架 |
|
||||
| Total Parameters (#TP) | 总参数量 |
|
||||
| Active Parameters (#AP) | 激活参数量 |
|
||||
| Next-Token-Prediction (NTP) | 下一词预测 |
|
||||
| Fill-In-the-Middle (FIM) | 中间填充 |
|
||||
| PSM (Prefix, Suffix, Middle) | 前缀—后缀—中间模式 |
|
||||
| Continual Pre-Training | 持续预训练 |
|
||||
| Near-Deduplication | 近似去重 |
|
||||
| fastText | fastText(文本分类召回模型) |
|
||||
| Byte Pair Encoding (BPE) | 字节对编码 |
|
||||
| YaRN | YaRN 上下文扩展方法 |
|
||||
| Needle In A Haystack (NIAH) | 大海捞针长上下文测试 |
|
||||
| Supervised Fine-Tuning (SFT) | 有监督微调 |
|
||||
| Group Relative Policy Optimization (GRPO) | 组相对策略优化 |
|
||||
| Reward Model (RM) | 奖励模型 |
|
||||
| Repository-Level Code Completion | 仓库级代码补全 |
|
||||
| Instruction-Following | 指令遵循 |
|
||||
Binary file not shown.
@@ -0,0 +1,140 @@
|
||||
# CodeI/O:通过代码输入-输出预测凝练推理模式
|
||||
|
||||
> **原文标题**:CodeI/O: Condensing Reasoning Patterns via Code Input-Output Prediction
|
||||
> **arXiv**:[2502.07316](https://arxiv.org/abs/2502.07316) | **发布**:2025-02-11(v1),最后修订 2025-05-21(v4)
|
||||
> **作者/机构**:Junlong Li(上海交通大学,于 DeepSeek-AI 实习期间完成)、Daya Guo、Dejian Yang、Runxin Xu、Yu Wu(DeepSeek-AI / 深度求索)、Junxian He(HKUST)
|
||||
> **原文 PDF**:[03-CodeIO-2502.07316.pdf](./03-CodeIO-2502.07316.pdf)
|
||||
|
||||
## 一、摘要(全文翻译)
|
||||
|
||||
推理是大语言模型(Large Language Model, LLM)的一项基础能力。尽管此前的研究主要聚焦于增强数学或代码生成这类较窄的技能,但由于训练数据稀疏且碎片化,提升许多其他推理任务的性能仍然充满挑战。为解决这一问题,我们提出 **CodeI/O**,一种新方法:它把原始代码转化为「代码输入-输出预测」格式,从而系统性地凝练(condense)那些本就内嵌于有上下文语境的代码(contextually-grounded code)之中的多样化推理模式。通过训练模型在给定代码与测试用例的情况下、完全以自然语言作为思维链(Chain-of-Thought, CoT)推理过程来预测输入/输出,我们让模型接触到通用的推理原语——例如逻辑流程规划、状态空间搜索、决策树遍历与模块化分解——同时将结构化推理与代码特有的语法解耦,并保留过程的严谨性。实验结果表明,CodeI/O 在符号推理、科学推理、逻辑推理、数学与数值推理以及常识推理任务上都带来了一致的提升。通过将预测结果与已有标准答案比对,或使用预测出的输入重新执行代码,我们可以验证每一条预测,并通过多轮修订进一步增强 CoT,由此得到 CodeI/O++,并取得更高的性能。我们的数据与模型发布于 https://github.com/hkust-nlp/CodeIO 。
|
||||
|
||||
## 二、核心贡献
|
||||
|
||||
1. **提出「代码输入-输出预测」任务**:把原始代码改写为可执行函数,让模型完全以自然语言 CoT 预测「给定输入的输出」或「给定输出的可行输入」,将推理流程从代码语法中剥离而不失严谨。
|
||||
2. **构建可扩展数据集 CodeI/O**:由约 810.5K 个代码文件筛出 454.9K 个可执行函数,执行代码自动生成输入-输出对,再由 DeepSeek-V2.5 合成 CoT,得到 3.5M 条样本(输入/输出预测约各半)。
|
||||
3. **CodeI/O++ 兑现代码可验证性**:对第一轮预测错误的回答追加执行反馈并要求重写,把两轮回答与反馈拼接为更长响应,不丢弃任何错误样本即提升数据质量。
|
||||
4. **跨模型、跨领域普适增益**:四个 7B–30B 基座、14 个基准上的平均分全面超过单阶段指令微调基线,以及 WebInstruct、OpenMathInstruct2、OpenCoder-SFT-Stage1、Python-Edu 等强基线。
|
||||
5. **均衡而非偏科**:其他数据集常在某任务领先、别处回退,CodeI/O 几乎全基准一致提升,说明收益来自学到推理模式而非数据量堆积。
|
||||
6. **系统性分析**:消融证明输入预测与输出预测缺一不可、拒绝采样反而有害;13-gram 泄漏检测表明提升不能归因于数据泄漏。
|
||||
|
||||
## 三、方法与技术要点
|
||||
|
||||
### 3.1 动机:为什么做「代码输入-输出预测」
|
||||
|
||||
论文指出的悖论是:数学解题与代码生成已有充足的结构化数据,而逻辑推导、科学推断、符号推理等领域只有稀疏、碎片化的监督。真实代码天然汇聚多样推理模式,但两条常规路径都不理想:在原始代码上做持续预训练(continual pre-training)时推理信号隐式且与噪声纠缠;文本到代码生成虽目标更干净,却被迫产出代码特有语法,难以迁移到代码之外。因此作者「逆用」代码:给定函数与文字 query,让模型用自然语言推理出输出或可行输入。其价值在于**解耦**——推理流程脱离语法外壳——与**重复暴露**:原代码的多样语境让模型反复接触逻辑流程编排、状态空间探索、递归分解、决策等基础技能,从而内化。该任务与代码持续预训练类似,被置于通用指令微调之前。
|
||||
|
||||
### 3.2 原始代码收集(§2.1)
|
||||
|
||||
三大来源各有侧重,共计约 810.5K 个代码文件(见下表):CodeMix 补充算法内容,PyEdu-R 刻意剔除算法类文件以与其错开,其他来源提供高质量难题与竞赛代码。
|
||||
|
||||
| 数据源 | 筛选方式 | 文件数 |
|
||||
|---|---|---|
|
||||
| CodeMix | 取自内部代码预训练语料,用 DeepSeek-Coder-V2-Lite-Inst 做函数补全,保留成功率 10%–90% 的文件(滤除过简/过难) | 约 427K |
|
||||
| PyEdu-R(reasoning) | Python-Edu 子集,先分类为算法/逻辑谜题/数学/科学计算/系统建模/其他复杂推理/非推理,剔除算法与非推理以避免与 CodeMix 重叠 | 约 369K |
|
||||
| 其他来源 | 综合算法仓库(TheAlgorithms/Python)、Project Euler、LeetCode、CodeWars、Edabit、Codeforces、AtCoder、CodeChef | 约 14.5K |
|
||||
|
||||
### 3.3 转换为统一格式(§2.2)
|
||||
|
||||
原始代码缺少结构、难以自包含执行,故用 DeepSeek-V2.5 重构为五部分:①**清洗后的参考代码**——核心逻辑抽取为函数,剔除绘图(print、plot)与文件读写;②**主入口函数**——概括整体逻辑,可调用其他函数或导入外部库,须有非空输入与有意义的返回值,且输入输出均可 JSON 序列化;③**输入/输出描述**——明确数据类型、约束(如输出范围)或更复杂的要求(如字典的键);④**输入生成器**——不直接产出测试用例,而是生成基于规则的 Python 函数,在约束下引入随机性以可扩展地产出「非平凡」输入;⑤**Query**——描述代码预期功能的简洁问题陈述。
|
||||
|
||||
### 3.4 采集输入-输出对(§2.3)
|
||||
|
||||
对每个函数采样多个输入并执行代码取得真实输出;为保证确定性,含随机性的函数(如使用 `import random`)全部跳过。执行约束见下表(附录 A),对象复杂度检查递归作用于所有子对象,以确保结果落在通用 LLM 可预测的范围内。
|
||||
|
||||
| 约束项 | 阈值 |
|
||||
|---|---|
|
||||
| 单样本运行时限 | 5 秒 |
|
||||
| 输入/输出对象总大小 | < 1024 字节 |
|
||||
| 列表 / 字典长度 | < 20 |
|
||||
| 字符串长度 | ≤ 100 字符 |
|
||||
| 其他类型对象大小 | ≤ 128 字节 |
|
||||
|
||||
过滤不可执行、超时与超复杂度样本后,得到来自 454.9K 个代码文件的 3.5M 条实例,输入/输出预测大致均衡(50%/50%)。各来源采样密度不同(附录 C.2):CodeMix 每函数至多 3 对(300K 样本,平均 2.78/2.80,共 1,674,345 条);PyEdu-R 至多 6 对(141K 样本,平均 5.77/5.79,共 1,630,716 条);其他来源至多 10 对(13.9K 样本,平均 7.70/7.87,共 216,159 条)。
|
||||
|
||||
### 3.5 构建训练样本:CodeI/O 与 CodeI/O++(§2.4)
|
||||
|
||||
每条样本由 prompt 与 response 组成:prompt 用模板组合函数、query、参考代码与一个具体输入或输出;response 应是自然语言 CoT,说明如何推出正确输出或可行输入。作者未用自动执行轨迹作答案:输入预测无法得到确定性的「逆函数」,且模板化轨迹缺乏自由语言推理的表达力与泛化性。故全部响应由 DeepSeek-V2.5 合成(性能顶级、成本低),这构成 **CodeI/O**。
|
||||
|
||||
**CodeI/O++** 放弃常见的拒绝采样:既然能重新执行代码验证回答,本可丢弃错误预测,但实测性能反而次优(§4.1)。作者改为把执行反馈作为第二轮输入追加并要求重写:输出预测只告知答案错误;输入预测额外给出「基于错误输入实际执行得到的输出」;执行失败(格式错误、参数不匹配或其他运行时错误)也显式告知。最终响应拼接为「第一轮回答 + 第一轮反馈 + 第二轮回答 + 第二轮反馈」;第一轮已正确时反馈仅为「Success」且无第二轮内容。第一轮约 50% 回答正确,错误回答中约 10% 可在第二轮修正;对错一律保留。
|
||||
|
||||
### 3.6 两阶段训练策略(§3.1)
|
||||
|
||||
第一阶段在 CodeI/O(++) 上训练,第二阶段在约 1.18M 条内部指令数据(多领域、多语言)上做通用指令微调。之所以分阶段而非直接混合:CodeI/O(++) 样本量远大于指令数据,混合会造成分布偏置、令指令跟随能力学习不足。超参数见下表(附录 E)。
|
||||
|
||||
| 阶段 | 训练量 | 批大小 | 学习率 | 其他 |
|
||||
|---|---|---|---|---|
|
||||
| 第一阶段 | 1 epoch | 1024 | 1e-5(三个较小模型)/4e-6(Gemma 2 27B),恒定 | 无 warmup,最大序列长度 4096 |
|
||||
| 第二阶段 | 700 步(约指令数据 3 epoch) | 1024 | 3e-5/1e-5,余弦调度衰减至 1e-6/3e-7 | 无 warmup,最大序列长度 4096 |
|
||||
|
||||
## 四、主要实验结果
|
||||
|
||||
评测覆盖 14 个基准(名称见下表):其中 LeetCode-O 为自建,只给文字 query 不给函数、中英双语、按问题级准确率计分;BBH-ZH 由 9 个 BBH 子任务翻译而来。除 BBH-EN/-ZH 用 3-shot 外,其余均为零样本、greedy 解码。
|
||||
|
||||
| 基座模型(平均分 AVG) | 单阶段基线(仅指令微调) | 第一阶段最强对比数据集 | CodeI/O | CodeI/O++ |
|
||||
|---|---|---|---|---|
|
||||
| Qwen 2.5 Coder 7B | 54.8 | 56.0(OpenMathInstruct2 全量 14.0M) | 57.2 | **57.7** |
|
||||
| LLaMA 3.1 8B | 49.3 | 50.6(OpenMathInstruct2 3.5M) | 51.2 | **52.1** |
|
||||
| DeepSeek Coder v2 Lite 16B (MoE) | 51.6 | 52.1(Python-Edu 7.7M / OpenMathInstruct2 3.5M) | **53.6** | 53.5 |
|
||||
| Gemma 2 27B | 59.5 | 60.4(WebInstruct 3.5M / OpenMathInstruct2 3.5M) | 60.9 | **61.5** |
|
||||
|
||||
以 Qwen 2.5 Coder 7B 为例的分项对比:
|
||||
|
||||
| 基准 / 任务 | 单阶段基线 | CodeI/O | CodeI/O++ | 说明 |
|
||||
|---|---|---|---|---|
|
||||
| WinoGrande | 66.9 | 67.9 | 66.9 | 常识推理,持平 |
|
||||
| DROP | 70.7 | 76.4 | **79.1** | 阅读理解中的数值推理,+8.4 |
|
||||
| GSM8K | 83.4 | 86.4 | 85.7 | 小学数学,约 +2 |
|
||||
| MATH | 71.6 | 71.9 | 72.1 | 竞赛数学,小幅提升 |
|
||||
| GPQA | 41.5 | 43.3 | 40.6 | 学科问答,++ 反而回退 |
|
||||
| MMLU-STEM | 77.2 | 77.3 | 77.9 | 学科知识,持平 |
|
||||
| LeetCode-O | 20.7 | 23.7 | **24.2** | 自建输出预测,+3.5 |
|
||||
| CRUXEval-I | 61.3 | 63.6 | 62.5 | 输入预测 |
|
||||
| CRUXEval-O | 60.0 | 64.9 | **67.9** | 输出预测,+7.9 |
|
||||
| BBH-EN | 68.3 | 69.3 | **71.0** | +2.7 |
|
||||
| BBH-ZH | 70.6 | 72.8 | **74.2** | +3.6 |
|
||||
| ZebraLogic | 10.9 | 10.7 | 10.7 | 逻辑网格谜题,略降 |
|
||||
| KorBench | 38.7 | 44.3 | **45.7** | 规则泛化推理,+7.0 |
|
||||
| LiveBench | 26.0 | 28.5 | **29.1** | 综合基准,+3.1 |
|
||||
|
||||
CodeI/O 在四个基座上普遍带来增益,且增益是「均衡」的:对比数据集常绿红混杂,它却几乎全绿——仅用代码类数据便提升了符号、逻辑、数学、科学与常识任务,说明学到的是可迁移的推理模式。而在原始代码语料(Python-Edu 7.7M)上训练相对基线只有微小甚至负向提升,证明收益不来自数据规模,而来自训练任务的设计。少数任务(如 ZebraLogic)性能几乎不变甚至下降,并非每项必然提升。
|
||||
|
||||
主要分析结论:
|
||||
|
||||
| 分析维度 | 结论 |
|
||||
|---|---|
|
||||
| 输入预测 vs 输出预测 | 单独训练总体相近(各约 56.1/56.4,全量 57.2)。输入预测在 KorBench 更强但略损 GPQA,输出预测更利于 BBH 等符号推理;CRUXEval-I 与 -O 分别偏好输入预测与输出预测。 |
|
||||
| 拒绝采样 | 丢弃错误回答会删掉 50% 数据,总体性能下降,作者归因于多样性损失;把错误回答替换为执行得到的真值(无 CoT)虽提升 LeetCode-O/CRUXEval-O,却在别处下降、拉低平均(56.6),且与样本量相当的 ~50% 子集(56.7)相比无优势,故保留全部错误回答。 |
|
||||
| 合成模型的影响 | 用 DeepSeek-V2.5 重新合成 3.5M WebInstruct 子集(WebInstruct-DS25)优于原版,但仍不及 CodeI/O,说明收益超出「从强模型蒸馏知识」。 |
|
||||
| 规模效应 | 随机采样显示训练实例越多越好;在 I/O 对维度放大(固定代码样本、增加每样本测试用例)也有清晰收益,尤其从 1/6 增至 6/6,说明某些推理模式需多个测试用例才能完整学到。 |
|
||||
| 数据格式 | query 与参考代码放 prompt、CoT 放 response 时平均分最高且最均衡;最差格式为 query 在 prompt 而参考代码在 response(类似标准代码生成任务),凸显 CoT 与测试用例扩展的重要性。 |
|
||||
| 多轮修订 | 第 0→1 轮提升一致,第 1→2 轮收益极小(LLaMA 3.1 8B 略升、Qwen 2.5 Coder 7B 回退),模型常重复同样的错误 CoT,故主实验止步单轮修订。 |
|
||||
| 两阶段 vs 混合 | 所有两阶段变体均优于单阶段混合训练;Qwen 2.5 Coder 7B 上最优为完全分离 CodeI/O 与指令数据,LLaMA 3.1 8B 则混入数据更好,为简化方法主实验采用完全分离。 |
|
||||
| 数据泄漏 | 严格 13-gram 检测(去标点、数字、空白后比对)显示多数基准无风险或远低于增益:LeetCode-O 21.5%、KorBench 5.1%、MMLU 0.1%、MATH 0.1%、CRUXEval 0.1%、其余 0.0%。重叠仅为「数独规则」等通用描述或共享描述的姊妹题(Two Sum I/II);完整集与去泄漏子集的样本级增益几乎一致(如 Qwen 在 LeetCode-O 为 3.8/3.9),故提升不是数据泄漏所致。 |
|
||||
|
||||
## 五、结论、局限与影响
|
||||
|
||||
- **结论**:论文提出 CodeI/O,让模型用纯自然语言 CoT 预测代码的输入与输出,借代码结构化、可扩展、可执行验证的特性学习符号、逻辑、数学与常识等推理模式。在四个 7B–30B 基座、14 个基准上,CodeI/O 与 CodeI/O++ 一致优于现有基线,跨基准均衡提升而几乎不牺牲任何领域性能。作者强调该方向与推理时扩展(o1、DeepSeek-R1)正交,可为激发 LLM 推理能力提供更好的基础。
|
||||
- **局限性**:论文未设专门的 Limitations 章节,但正文与附录自述了若干不足:① 少数任务(如 ZebraLogic、CodeI/O++ 的 GPQA)不升反降,提升并非在所有基准上成立;② 多轮修订第二轮收益甚微、Qwen 上甚至回退,故只做到单轮;③ PyEdu-R 样本多集中于非平凡浮点计算、缺少高层推理流程,模型难以有效学习,提纯该数据源被列为未来工作(附录 C.3);④ 训练数据与测试基准的模式重叠不可避免,只能以 13-gram 检测与去泄漏子集论证影响有限;⑤ 最优数据混合策略尚未确定;⑥ 换成公开指令数据 Tulu-3 时 CodeI/O++ 略逊于 CodeI/O,说明效果依赖指令数据的类型覆盖。
|
||||
- **影响**:该工作把代码从「生成目标」转化为**推理监督的来源**,给出不依赖数学/代码标注、可自动扩展与验证的通用推理能力提升路径;「用执行反馈修订而非丢弃数据」与「先强化基座推理、再指令微调」的配方亦具借鉴意义。
|
||||
|
||||
## 六、关键术语对照表
|
||||
|
||||
| English | 中文 |
|
||||
|---|---|
|
||||
| Code Input-Output Prediction | 代码输入-输出预测 |
|
||||
| Reasoning Pattern | 推理模式 |
|
||||
| Chain-of-Thought (CoT) | 思维链 |
|
||||
| Contextually-grounded Code | 有上下文语境的代码 |
|
||||
| Input / Output Prediction | 输入预测/输出预测 |
|
||||
| Main Entrypoint Function | 主入口函数 |
|
||||
| Input Generator | 输入生成器 |
|
||||
| Unified Format | 统一格式 |
|
||||
| Rejection Sampling | 拒绝采样 |
|
||||
| Multi-turn Revision | 多轮修订 |
|
||||
| Execution Feedback | 执行反馈 |
|
||||
| Code Execution Verification | 代码执行验证 |
|
||||
| Continual Pre-training | 持续预训练 |
|
||||
| Two-stage Training | 两阶段训练 |
|
||||
| Instruction Tuning | 指令微调 |
|
||||
| Data Leakage (13-gram overlap) | 数据泄漏(13-gram 重叠) |
|
||||
Binary file not shown.
Reference in New Issue
Block a user