CODEBLOCK:学习在正确粒度上监督代码

arXiv cs.LG 论文

摘要

提出了CodeBlock,一种用于代码大语言模型监督微调的结构感知稀疏监督框架。它选择高质量的指令-响应对,并将代码响应划分为语法连贯的编码项,仅对选中的项应用损失,从而在使用仅1.9%的监督响应令牌的情况下实现更强的pass@1率。

arXiv:2606.18286v1 公告类型:新 摘要:代码大语言模型的监督微调通常对所有响应标记应用均匀的交叉熵损失,这隐含地假设每个标记提供同样有用的学习信号。最近的标记级选择方法通过仅监督高价值标记来挑战这一假设。然而,直接将标记级掩码应用于代码可能会破坏语法和语义上连贯的程序单元,因为代码依赖于结构完整性和定义-使用关系。因此,我们提出了CodeBlock,一种结构感知的稀疏监督框架,它选择结构完整的代码证据而非孤立的标记。CodeBlock首先选择高质量的指令-响应对,然后将代码响应划分为语法连贯的编码项,通过聚合核心逻辑标记上的广义交叉熵来估计其效用,并利用数据流可达性和桥接信号重新排序,以优先考虑传播或连接重要程序依赖的块。在训练过程中,完整响应仍作为上下文可用,但仅对选中的代码项和信息性自然语言标记应用损失。在六个代码生成基准测试上的实验表明,CodeBlock实现了比全标记SFT和有竞争力的选择基线更强的平均pass@1,同时仅使用1.9%的监督响应标记。
查看原文
查看缓存全文

缓存时间: 2026/06/18 05:40

# CodeBlock: 在恰当的粒度上监督代码

来源:https://arxiv.org/html/2606.18286  
Zhijie Deng¹, Ling Li¹, Jinlong Pang², Kaiqin Hu³, Qi Xuan⁴, Zhaowei Zhu⁴,⁵, Jiaheng Wei¹,†  
†¹香港科技大学(广州) ²加州大学圣克鲁兹分校 ³蚂蚁集团 ⁴BAIA, ZJUT ⁵D5Data.ai  
[email protected], [email protected]  

###### 摘要

代码大语言模型的监督微调通常对所有响应token应用统一的交叉熵损失,隐含地假设每个token提供同等有用的学习信号。近期token级选择方法通过仅监督高价值token,在自然语言SFT中挑战了这一假设。然而,直接将token级掩码迁移到代码可能会破坏语法和语义上连贯的程序单元,因为代码依赖于结构完整性和定义-使用关系。因此,我们提出CodeBlock,一个结构感知的稀疏监督框架,它选择结构完整的代码证据而非孤立的token。CodeBlock首先选择高质量的指令-响应对,然后将代码响应划分为语法连贯的编码项,通过聚合核心逻辑token上的广义交叉熵来估计其效用,并利用数据流可达性和桥接信号对其进行重排序,以优先考虑传播或连接重要程序依赖关系的块。在训练过程中,完整的响应仍然作为上下文可用,但损失仅应用于选定的代码项和信息性的自然语言token。在六个代码生成基准上的实验表明,CodeBlock比全token SFT和竞争性选择基线实现了更强的平均pass@1,同时仅使用了1.9%的监督响应token。

---

CodeBlock: 在恰当的粒度上监督代码

Zhijie Deng¹, Ling Li¹, Jinlong Pang², Kaiqin Hu³, Qi Xuan⁴, Zhaowei Zhu⁴,⁵, Jiaheng Wei¹,†  
†¹香港科技大学(广州) ²加州大学圣克鲁兹分校 ³蚂蚁集团 ⁴BAIA, ZJUT ⁵D5Data.ai  
[email protected], [email protected]  

图1:Qwen2.5-Coder-1.5B-Instruct上的性能-效率权衡。CodeBlock以仅1.9%的有效监督token实现了最高的平均性能,比全token SFT和稀疏选择基线展现出更好的权衡。

## 1 引言

监督微调(SFT)是适应代码大语言模型遵循指令和生成程序的标准方法(Huiet al.,2024(https://arxiv.org/html/2606.18286#bib.bib8);Guoet al.,2024(https://arxiv.org/html/2606.18286#bib.bib25))。随着代码指令语料库的增长,改进SFT越来越依赖于提取密集、可靠且高边际效用的监督,而不仅仅是增加样本数量(Weiet al.,2024b(https://arxiv.org/html/2606.18286#bib.bib14);Liet al.,2024(https://arxiv.org/html/2606.18286#bib.bib26);Yuet al.,2025(https://arxiv.org/html/2606.18286#bib.bib35))。这推动了数据选择方法的发展,这些方法在训练前过滤高质量、噪声较少或更多样化的指令-响应对(Chenet al.,2023(https://arxiv.org/html/2606.18286#bib.bib10);Xiaet al.,2024(https://arxiv.org/html/2606.18286#bib.bib12);Liuet al.,2023(https://arxiv.org/html/2606.18286#bib.bib11))。然而,大多数现有方法仍停留在样本级别:它们保留或丢弃整个指令-响应对,同时仍然在选定的响应中对每个token分配统一的交叉熵监督(Chenet al.,2025(https://arxiv.org/html/2606.18286#bib.bib27);Wuet al.,2024(https://arxiv.org/html/2606.18286#bib.bib28))。

这一假设在自然语言SFT中已经受到挑战。近期的token级选择方法通过仅保留高价值token来挑战密集监督的必要性,这些token通常通过逐点损失或超额损失分数进行估计(Panget al.,2025(https://arxiv.org/html/2606.18286#bib.bib19);Linet al.,2024a(https://arxiv.org/html/2606.18286#bib.bib18))。这些方法在自然语言环境中有效,因为单个token通常可以被视为近似的局部学习单元(Linet al.,2024b(https://arxiv.org/html/2606.18286#bib.bib29);Qinet al.,2025(https://arxiv.org/html/2606.18286#bib.bib31);Fuet al.,2026(https://arxiv.org/html/2606.18286#bib.bib30))。然而,直接将逐点token选择从自然语言设置转移到代码SFT是不可靠的。与普通文本不同,代码token的语义通常不是由单个token独立决定的,而是由语法结构、局部语句和变量定义-使用关系共同形成的(Allamaniset al.,2017(https://arxiv.org/html/2606.18286#bib.bib32);Guoet al.,2020(https://arxiv.org/html/2606.18286#bib.bib33))。孤立的变量名或操作符本身可能不携带完整的语义;只有将它们组合成赋值语句、条件分支或返回表达式时,才构成真正影响程序行为的代码证据。图2(https://arxiv.org/html/2606.18286#S1.F2)说明了这种粒度不匹配:逐点token选择倾向于从不同语句中选择分散的token,而结构感知的选择则保留了形成局部有意义的程序证据的完整编码项。因此,代码领域的稀疏监督应从token级评分转向结构完整的代码证据选择。

图2:先前token级选择与CodeBlock的对比。先前方法选择孤立的高分token,而CodeBlock保留具有连贯语法和数据依赖关系的完整编码项。

为此,我们提出CodeBlock,一个用于代码大语言模型微调的结构感知稀疏监督框架。CodeBlock仅将高分token作为定位有用代码证据的锚点:它将代码响应划分为语法连贯的编码项,通过使用广义交叉熵对信息性逻辑token的集中度进行评分,然后使用衡量下游影响和依赖路径连通性的轻量级数据流信号对项进行重排序。在训练过程中,完整的响应仍然作为自回归上下文可用,而损失仅应用于选定的代码项和信息性自然语言token。如图1(https://arxiv.org/html/2606.18286#S0.F1)所示,在六个代码生成基准和五种模型设置中,CodeBlock始终匹配或改进全token SFT,同时仅使用约1.9%的监督响应token,并在竞争性选择基线中达到最佳或次佳的平均性能。

本文的贡献如下:

- • 我们揭示了代码大语言模型稀疏监督中的粒度不匹配问题:孤立的token选择忽略了语法闭合性和数据流依赖关系,导致监督碎片化且效果较差。
- • 我们提出了CodeBlock,一个结构感知的稀疏监督框架,它选择编码项而非单个token,结合了项划分、基于GCE的效用评分和数据流感知重排序。
- • 在六个代码生成基准上的实验表明,CodeBlock以仅约1.9%的监督响应token匹配或超越全token SFT,实现了比竞争性基线更强的性能-效率权衡。

## 2 相关工作

LLM数据选择。 近期研究表明,指令微调的效果很大程度上取决于数据质量(Denget al.,2025(https://arxiv.org/html/2606.18286#bib.bib9))。AlpaGasus利用强LLM的反馈过滤Alpaca数据(Chenet al.,2023(https://arxiv.org/html/2606.18286#bib.bib10)),DEITA基于质量、复杂性和多样性选择指令数据(Liuet al.,2023(https://arxiv.org/html/2606.18286#bib.bib11)),LESS通过梯度相似性估计样本影响力(Xiaet al.,2024(https://arxiv.org/html/2606.18286#bib.bib12)),DS2通过使用分数转移矩阵纠正评分偏差来改进基于LLM的数据评级(Panget al.,2024(https://arxiv.org/html/2606.18286#bib.bib13))。这些工作主要针对一般指令微调进行样本级数据选择。

对于代码大语言模型,近期的数据集和过滤方法同样强调了高质量代码指令数据的重要性。Weiet al.(2024a(https://arxiv.org/html/2606.18286#bib.bib24))通过沙箱验证过滤自生成的代码指令数据。Tsaiet al.(2024(https://arxiv.org/html/2606.18286#bib.bib22))使用基于聚类的指标剪枝冗余的合成代码数据,而Lyuet al.(2025(https://arxiv.org/html/2606.18286#bib.bib23))基于分布一致性和多样性感知标准选择紧凑的数据子集。XCoder从指令复杂性、响应质量和多样性的角度研究代码数据选择(Wanget al.,2024(https://arxiv.org/html/2606.18286#bib.bib17))。尽管这些方法提高了所选指令-响应对的质量,但它们通常假设所选样本中的所有响应token都是有效的监督目标。相比之下,CodeBlock进一步研究了所选代码响应中的哪些token或代码片段应该参与训练并贡献梯度。

细粒度监督选择与数据清理。 除了样本级过滤,几项工作研究了token级监督选择。Rho-1通过对有价值的预训练token施加损失,提出了选择性语言建模(Linet al.,2024a(https://arxiv.org/html/2606.18286#bib.bib18))。Token Cleaning从噪声标签的角度看待SFT标签,并移除冗余或有害的token(Panget al.,2025(https://arxiv.org/html/2606.18286#bib.bib19))。TokenTune联合估计指令微调的样本级和token级效用(Linet al.,2026(https://arxiv.org/html/2606.18286#bib.bib20)),而TOSS通过损失差异识别用于安全微调的不安全token(Liet al.,2026(https://arxiv.org/html/2606.18286#bib.bib21))。这些方法表明SFT不一定需要监督所有响应token。然而,大多数方法是领域无关的,并将token效用视为独立的token级属性。这对于代码响应来说是不够的,因为token的价值通常取决于局部语句、变量定义-使用关系和数据流依赖关系。

## 3 预备知识:稀疏监督下的下一个token预测

给定一个指令微调数据集 \( \mathcal{D} = \{ (x_i, y_i) \}_{i=1}^N \),其中 \( x_i \) 是指令,\( y_i = \{ y_{i,t} \}_{t=1}^{T_i} \) 是响应,我们使用token级监督掩码来形式化监督微调。对于每个响应token \( y_{i,t} \),令 \( m_{i,t} \in \{0,1\} \) 指示该token是否对训练损失有贡献。掩码下一个token预测目标定义为:

\[
\mathcal{L}_{\mathrm{mask}}(\theta) = - \frac{\sum_{i=1}^N \sum_{t=1}^{T_i} m_{i,t} \log p_{\theta}(y_{i,t} \mid x_i, y_{i,<t})}{\sum_{i=1}^N \sum_{t=1}^{T_i} m_{i,t}}.
\]
(1)

这个公式概括了标准的全token SFT和稀疏监督。当所有响应token的 \( m_{i,t} = 1 \) 时,目标退化为标准SFT,其中每个响应token都被监督。稀疏监督则默认将大多数token的 \( m_{i,t} = 0 \),仅启用选中的token(\( m_{i,t} = 1 \))。\( m_{i,t} = 0 \) 的token仍然保留在自回归上下文中,但在损失计算中被忽略。

先前的细粒度选择方法(Panget al.,2025(https://arxiv.org/html/2606.18286#bib.bib19);Linet al.,2024a(https://arxiv.org/html/2606.18286#bib.bib18))通常通过评分单个token来构建 \( m_{i,t} \),例如使用token级损失或超额损失信号,然后保留高分token。然而,这种逐点视角对于代码不太适用,因为token的语义通常依赖于局部语法闭合性和定义-使用依赖关系。这促使我们随后使用结构完整的编码项作为稀疏监督的基本单位。

图3:代码中token级稀疏监督的动机分析。左:不同token预算下编码项的碎片化率。中:将选定token扩展为语法完整片段的闭合代价。右:相同预算下的微型SFT结果,比较孤立top token监督与局部闭合监督。

## 4 动机分析

Token级选择假设高分token是合适的训练目标,但这一假设对于代码可能不成立,因为token语义通常依赖于周围的语法和依赖结构。因此,我们首先考察高分代码token是否可以直接作为稀疏监督单元。

编码项的定义。为了衡量选定token是否形成有意义的代码证据,我们在此分析中引入编码项作为基本结构单元。对于每个代码响应 \( y_i \),我们将其代码区域划分为一组局部语法单元:

\[
\mathcal{U}_i = \{ u_{i,1}, \ldots, u_{i,K_i} \}.
\]
(2)

一个编码项是一个表达连贯计算的最小局部单元,例如赋值、分支条件、API调用或返回表达式。对于每个项 \( u \),我们用 \( C(u) \) 表示其核心逻辑token,如标识符、字面量、操作符和API名称,用 \( M(u) \) 表示其实例化的闭合片段,它额外包含局部语法完整性所需的边界和结构token。在本节中,编码项仅用于诊断分析;Sec.5.2(https://arxiv.org/html/2606.18286#S5.SS2)随后使用相同的单元进行稀疏监督选择。

设置与评估。我们从OpencodeInstruct(Ahmadet al.,2025(https://arxiv.org/html/2606.18286#bib.bib15))采样30K个代码响应,并使用冻结的Qwen2.5-Coder-1.5B-Instruct(Huiet al.,2024(https://arxiv.org/html/2606.18286#bib.bib8))计算token级CE分数。对于每个预算,我们选择得分最高的代码token,并将其映射到其所在的语法项。我们报告两个结构诊断指标:不完整项比率,即仅部分选中的项的比例;以及闭合扩展比率,即语法闭合后所需的token数除以原始选定的token数。为衡量下游影响,我们进一步在同一30K子集上进行预算相同的微型SFT实验,训练3000步,使用相同的基座模型和完全相同数量的监督代码token。

高分代码token具有信息性但结构不完整。如图3(https://arxiv.org/html/2606.18286#S3.F3)所示,逐点token选择严重碎片化代码结构:即使在top-10%预算下,92.3%的触及项都不完整,恢复语法闭合片段需要7.02倍的闭合扩展。

结构不完整性损害下游学习。在受控的微型SFT设置下,局部代码闭合相比孤立的高CE token监督,将四个基准的平均分提高了11.70,尽管添加的闭合token并非总是得分最高的。这些结果表明,高分token是有用的锚点,用于定位信息性代码证据,

相似文章

LLMSniffer:通过GraphCodeBERT和监督对比学习检测大模型生成代码

arXiv cs.CL

LLMSniffer是一个检测框架,通过监督对比学习微调GraphCodeBERT来区分AI生成的代码和人工编写的代码,在GPTSniffer和Whodunit基准测试上分别达到78%和94.65%的准确率。该方法通过结合代码结构感知嵌入、对比学习和注释移除预处理,解决了学术诚信和代码质量保证方面的关键挑战。

让语言模型学会用代码思考

arXiv cs.CL

本文介绍了 ThinC(Thinking in Code,用代码思考)框架。在该框架中,语言模型在简短的自然语言规划步骤后,仅使用代码块进行推理,在数学基准测试中优于现有的工具集成推理基线。

目标条件监督学习用于LLM微调

arXiv cs.LG

本文提出了目标条件监督学习(GCSL)作为LLM的离线微调框架,该方法将反馈作为显式目标,通过一种新颖的目标公式和自然语言目标表示,使用监督学习训练模型。在无毒生成、代码生成和LLM推荐三个任务上的评估显示,该方法优于标准的离线基线方法。