长亭百川云 - 文章详情

基于LLM的多语言程序修复

拨开云雾

42

2024-07-13

分享一篇来自AAAI' 23的论文,题目为:"Repair Is Nearly Generation: Multilingual Program Repair with LLMs"。

大多数程序员在写代码时都会犯错误;其中一些错误很小,只需对原始程序进行少量编辑。这类错误最近被称为“最后一英里错误”[3]。这些错误打破了有经验的开发人员的工作流程,并可能难倒新手程序员[1-2]。针对这类错误的现有自动修复技术是特定于语言的,并且不容易移植到新语言。Transferring symbolic方法需要大量的工程技术,而基于神经网络的方法则需要数据和再训练。

为此,作者提出了RING,一个多语言程序修复引擎,基于Codex等代码大语言模型,如图1所示。首先,RING将bug修复分为3个阶段:错误定位、程序转换、候选排序。

  • 通过语言工具定位错误

作为调试的第一步,程序员通常会找到错误的原因。对于大多数现代编程语言来说,定位语法错误和一些语义错误(如:类型错误)是通过编译器、静态分析器或linters等工具来实现的。根据这种直觉,作者考虑了由编译器或其他静态分析器产生的预处理错误消息。通过对此消息进行了规范化,以确保不同语言之间的一致性。图3显示了一个正在运行的示例的prompt变体,其中突出显示的内容对应于准备好的语法错误消息。对于错误消息可能不准确的语言,特别是关于报告的错误位置,作者发现删除报告的错误位置但保留错误文本的简单抽象效果很好

  • 通过小样本学习进行代码转换

在开发人员确定了错误的位置之后,他们会在该位置对原始源代码进行适当的转换(一系列代码编辑操作)。随着时间的推移,大多数开发者会随着时间积累解决特定错误所需的转换类型的经验。此外,当新手遇到一个不熟悉的错误时,他们通常会搜索类似的错误/正确对的例子,这些例子可以为他们自己的转换提供信息。

研究表明,通过在prompt中添加任务的相关示例,LLM能够进行小样本学习,也就是从预期任务的少数示例中学习的能力[4-5]。给定修复程序的转换示例,作者利用RING中的这一功能来解决代码转换阶段的问题。而主要的挑战是选择与开发人员所犯错误相关的相关示例。遵循具有相似错误的程序具有相似错误的直觉,作者根据错误消息相似性从一组错误固定对中选择示例,并把这种错误组合的集合称为范例库。

为了捕捉语言工具的差异,作者基于不同的计算错误诊断的相似性度量实现了两种从示例库中选择程序的方法:

(1)错误向量选择:假设细粒度错误报告是可用的。例如,对于Excel解析器返回包含许多不同诊断计数器的详细报告,统计工具报告的每个错误类别的出现次数,并根据这些频率构建一个向量,称之为错误向量。然后,通过最小化误差向量之间的L2距离从示例库中选择程序。

(2)消息嵌入选择:假设高级错误伴随着自然语言的详细描述。例如,Python解析器经常为不同的错误返回相同的错误(如SyntaxError),同时通过相关的自然语言错误消息公开附加信息。通过使用预训练的CodeBERT模型嵌入编译器消息并基于余弦相似性比较嵌入来使用此描述。

  • 候选排序

LLM通过从有希望的候选对象中迭代采样每个token来实现其输出的变化(就是基于seq2seq的文本生成)。不太可能的token可以被选择的程度由一个称为temperature的参数控制。因此,可以通过控制生成过程中的temperature来生成多个候选项。

RING的最后一步是使用前面两个阶段中描述的prompt对通过查询Codex获得的候选项进行排序:对解码过程中选择的token的对数概率进行平均,并按照平均值的降序。作者发现在开发过程中用较高的temperature生成各种候选项并对它们进行排序比使用较低的temperature会产生更好的性能

参考文献

[1] Altadmri A, Brown N C C. 37 million compilations: Investigating novice programming mistakes in large-scale student data[C]//Proceedings of the 46th ACM technical symposium on computer science education. 2015: 522-527.

[2] Drosos I, Guo P J, Parnin C. HappyFace: Identifying and predicting frustrating obstacles for learning programming at scale[C]//2017 IEEE Symposium on Visual Languages and Human-Centric Computing (VL/HCC). IEEE, 2017: 171-179.

[3] Bavishi R, Joshi H, Cambronero J, et al. Neurosymbolic repair for low-code formula languages[J]. Proceedings of the ACM on Programming Languages, 2022, 6(OOPSLA2): 1093-1122.

[4] Brown T, Mann B, Ryder N, et al. Language models are few-shot learners[J]. Advances in neural information processing systems, 2020, 33: 1877-1901.

[5] Chowdhury J R, Zhuang Y, Wang S. Novelty controlled paraphrase generation with retrieval augmented conditional prompt tuning[C]//Proceedings of the AAAI Conference on Artificial Intelligence. 2022, 36(10): 10535-10544.

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2