这篇AI论文揭示了亚马逊关于大型语言模型中错误代码的最新机器学习见解
最新机器学习见解为揭示亚马逊大型语言模型错误代码而来的AI论文
“`
编程可以很复杂,有时很难避免写出错误的代码。为了帮助代码补全,已经开发了大型代码语言模型(Code-LLMs),但有时候它们会忽视代码上下文中的错误。为了解决这个问题,威斯康辛大学麦迪逊分校和亚马逊网络服务进行了研究,以改进LLMs在代码生成过程中检测潜在错误的性能。
自动程序修复研究利用Code-LLMs来减轻识别和修复编程错误的负担。类似于其他领域的对抗性样本,小的语义保持的代码转换会降低代码学习模型的性能。已有的基准测试集,如CodeXGLUE、CodeNet和HumanEval,对于研究代码补全和程序修复起到了关键作用。为了增加数据的可用性,现有的方法通过代码变异或学习创建错误来合成人工错误。
代码补全是集成开发环境中的一个关键功能,基于Transformer的代码语言模型在这方面已经取得了一些进展。然而,这些模型往往会忽视错误的存在,在软件开发中,这是一种常见情况。这项研究引入了有错误的代码补全(bCC)的概念,即代码上下文中存在潜在错误,并探索了这种情况下Code-LLMs的行为。引入了用于评估有人工合成和真实错误的基准数据集,即buggy-HumanEval和buggy-FixEval,并揭示了显著的性能下降。研究还探索了后续处理方法来解决这个问题。
提出的后续处理方法包括先删除再补全,消除有错误的片段;先补全再重写,使用RealiT等模型在补全后修复错误;以及重写-补全的方法,在补全之前通过重写代码行解决错误。通过通过率来衡量性能,先补全再重写和重写-补全是较优选择。RealiT和INCODER-6B等Code-LLMs在这些方法中起到了修复代码的作用。
潜在错误的存在会大大降低Code-LLMs的生成性能,单个错误的通过率下降超过50%。具有错误位置知识的启发式Oracle在buggy-HumanEval和buggy-FixEval之间展示出显著的性能差距,强调错误位置的重要性。基于似然的方法在两个数据集上显示出不同的性能,暗示错误的性质影响聚合方法的选择。后续处理方法,包括先删除再补全和重写-补全,提供了性能改进。然而,仍然存在差距,表明需要进一步研究如何在存在潜在错误的情况下提高代码补全的能力。
总结来说,本研究的要点如下:
- 本研究引入了一个名为bCC的新任务。
- bCC从可能存在错误的代码上下文中生成功能实现。
- 本研究在两个数据集buggy-HumanEval和buggy-FixEval上进行了评估。
- Code-LLMs的性能显著下降,测试案例的通过率低于5%。
- 提出了后续处理方法,包括先删除再补全和重写-补全,但性能差距仍然存在。
- 本研究增加了对bCC中Code-LLMs的理解。
- 该研究提出了改进存在潜在错误的代码补全的方法。
“`