"Aligning the Objective of LLM-based Program Repair" 论文笔记

介绍

(1) 发表

2025-02 ICSE'24

(2) 挑战

  • 当前方法的推理目标与 LLM 的训练目标没有对齐。现有 LLM-based 方法通常采用 MLM 的方式预测修复代码(然而尽管模型参数被增大百倍但修复结果甚至没有翻一番,这与其他任务的明确可伸缩性形成对比)。因此本文假设在训练中 <masked, denoised> 代码语料就很稀缺,这些 LLM 在这种方式性能不佳
  • 现有的 workflow 限制了 LLM 完全使用其预训练的能力。考虑到 LLM 出色的代码理解能力,LLM 可能不需要 fault localization 来要求 LLM 在提供的几个 hunk 中生成补丁,限制了 LLM 探索更多的潜在补丁空间

(3) 贡献

  • 将 MLM 任务转换为全生成任务,与 decoder-only 的 LLMs 的预训练目标保持一致
  • 与依靠声明级别的 FL 工具,LLM 可以使用各类型的工件来定位和维修 buggy code
  • 广泛的试验评估证明了其有效性

方法

(1) 模型选择

由于采用了 CLM 的任务目标,这里应该选择 decoder-only 的 LLM,所以选择了 GPT-4 作为骨干模型,又由于 GPT-4 是一个黑河模型,其推理损失不可见,所以又选择了另一个最先进的白盒模型 Mixtral-Moe 作为替代骨干模型

(2) Artifact Extraction

一但确定了错误的 function (虽然无需语句级别的定位,但还是需要方法级别的定位),D4C将自动提取文档或注释,以描述该函数的通用目的及其输入输出数据类型;失败测试用例的输入和预期输出;以及执行这些失败测试案例的错误消息

(3) Prompt Construction

比较经典的 prompt 样式

(4) Patch Generation

不引入其他补丁排名方法,因为 D4C 仅需生成 10 个候选补丁(为什么呢),这明显少于现有方法的采样数量

(5) Patch Validation

遵循现有的 APR 论文方法为每个合理的补丁添加手动验证

总结

关键在于将 MLM 替换成了 CLM 任务来对齐目标,分析并验证了效果很好

作者:绵满原文地址:https://www.cnblogs.com/mianmaner/p/18787323

%s 个评论

要回复文章请先登录注册