新上线今天0 投票
CODEBLOCK:以正确粒度监督代码学习
研究背景与问题
在代码大语言模型(Code LLM)的监督微调(SFT)中,传统方法对所有响应 token 施加统一的交叉熵损失,隐含假设每个 token 提供同等有用的学习信号。然而,自然语言领域的 token 级选择性监督方法(如仅对高价值 token 计算损失)直接迁移到代码上时,可能会破坏语法和语义上完整的程序单元,因为代码依赖于结构完整性和定义-使用关系。
方法:CODEBLOCK 框架
为解决上述问题,来自多所机构的研究者提出了 CODEBLOCK,一种结构感知的稀疏监督框架。其核心思想是:选择结构完整的代码片段(code block)而非孤立 token 进行监督。具体流程如下:
- 高质量数据筛选:首先筛选出高质量的指令-响应对。
- 代码分区:将代码响应划分为语法上连贯的“编码项”(coding items),例如完整的语句、函数或代码块。
- 效用估计:通过聚合核心逻辑 token 上的广义交叉熵,估计每个编码项的效用。
- 重排序:利用数据流可达性和桥接信号(bridge signals)对编码项进行重排序,优先选择那些传播或连接重要程序依赖的块。
在训练过程中,完整响应仍作为上下文可用,但损失仅计算在选中的代码项和有信息的自然语言 token 上,实现稀疏监督。
实验结果与亮点
在 六个代码生成基准 上的实验表明,CODEBLOCK 在 pass@1 指标上平均优于全 token SFT 及多种竞争性选择基线,同时仅使用了 1.9% 的监督响应 token。这意味着 CODEBLOCK 能以极低的计算成本实现更优或相当的性能,验证了结构感知稀疏监督的有效性。
行业意义与展望
该工作为代码大模型的微调提供了新思路:从 token 级到代码块级的粒度转换,更符合代码的结构特性。未来可探索将 CODEBLOCK 集成到更多代码智能任务中,如代码修复、测试生成等,并进一步优化编码项划分和效用估计策略。
