SheepNav
新上线今天0 投票

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

研究背景与问题

在代码大语言模型(Code LLM)的监督微调(SFT)中,传统方法对所有响应 token 施加统一的交叉熵损失,隐含假设每个 token 提供同等有用的学习信号。然而,自然语言领域的 token 级选择性监督方法(如仅对高价值 token 计算损失)直接迁移到代码上时,可能会破坏语法和语义上完整的程序单元,因为代码依赖于结构完整性和定义-使用关系。

方法:CODEBLOCK 框架

为解决上述问题,来自多所机构的研究者提出了 CODEBLOCK,一种结构感知的稀疏监督框架。其核心思想是:选择结构完整的代码片段(code block)而非孤立 token 进行监督。具体流程如下:

  1. 高质量数据筛选:首先筛选出高质量的指令-响应对。
  2. 代码分区:将代码响应划分为语法上连贯的“编码项”(coding items),例如完整的语句、函数或代码块。
  3. 效用估计:通过聚合核心逻辑 token 上的广义交叉熵,估计每个编码项的效用。
  4. 重排序:利用数据流可达性和桥接信号(bridge signals)对编码项进行重排序,优先选择那些传播或连接重要程序依赖的块。

在训练过程中,完整响应仍作为上下文可用,但损失仅计算在选中的代码项和有信息的自然语言 token 上,实现稀疏监督。

实验结果与亮点

六个代码生成基准 上的实验表明,CODEBLOCK 在 pass@1 指标上平均优于全 token SFT 及多种竞争性选择基线,同时仅使用了 1.9% 的监督响应 token。这意味着 CODEBLOCK 能以极低的计算成本实现更优或相当的性能,验证了结构感知稀疏监督的有效性。

行业意义与展望

该工作为代码大模型的微调提供了新思路:从 token 级到代码块级的粒度转换,更符合代码的结构特性。未来可探索将 CODEBLOCK 集成到更多代码智能任务中,如代码修复、测试生成等,并进一步优化编码项划分和效用估计策略。

延伸阅读

  1. 英国将用AI扫描寻求庇护者面部进行年龄检测——明知技术有缺陷仍推进
  2. 冲击波理论与神经网络随机梯度下降的对称约化动力学:一项数学链接
  3. DRIFT:基于同策略数据归因的精调指令数据优化方法
查看原文