论文

注意差距:从故障归因到代码语言模型的封闭式修复

Mind the Gaps: From Failure Attribution to Closed-Form Repair of Code Language Models

模型训练模型编辑与遗忘

摘要

代码语言模型必须像周围的软件一样进行维护:当库发展时,模型会不断编写它在训练期间看到的接口。修复模型本身可以让一次修正达到所有下游用途。现有的修复方法将故障归因于神经元,选择排名最高的神经元,并应用通用更新。该管道假设归因的神经元是要修补的神经元,并且通用更新适合每次失败,并且这两个假设都没有被检查。我们使用三种代码模型检查了 Python 和 Rust 中的可执行 API 演化任务,并发现了两个差距。目标间隙将失败归因目标的神经元与可以携带补丁的神经元分开:它们的顶部集合的杰卡德重叠度仅为 0.15 到 0.20。定制间隙将通用更新与为失败而构建的补丁分开:不同载体神经元所需的补丁几乎是正交的。为了解决这两个问题,我们提出了 ASTRA。它通过对比语义来定位神经元,这是一种根据神经元对目标token和生成的token之间的 logit 对比的贡献来对神经元进行评分的属性。然后,它通过求解封闭形式的一个小型线性系统来定制补丁,该系统联合纠正样本的所有失败的token,并且既不需要优化器也不需要向后传递。对比语义在 6 个设置中的 3 个设置中选择了比基于梯度的归因明显更好的载体神经元,并且在其他设置中选择了类似的属性。平均而言,ASTRA 的 Pass@1 成功率达到 66.7%,而 AlphaEdit、STAR 和低秩适配的最佳成功率则为 48.4%,并在 2.7 秒内修复样本。它是所有 6 种设置以及每种类型的 API 更改中的最佳方法,并且这种优势在测试提示的看不见的措辞下仍然存在。它对不相关代码的副作用在大型模型上较小,而在小型模型上较大。