4 个月前

Break-It-Fix-It:无监督学习在程序修复中的应用

Break-It-Fix-It:无监督学习在程序修复中的应用

摘要

我们考虑修复任务:给定一个评估输入质量的批评者(例如,编译器),目标是训练一个修复者,将不良示例(例如,包含语法错误的代码)转换为良好示例(例如,无语法错误的代码)。现有的方法通过使用启发式方法(例如,删除标记)破坏良好示例来生成包含(不良,良好)对的训练数据。然而,基于这种合成生成的数据训练出的修复者在真实不良输入分布上的泛化能力较差。为了弥合这一差距,我们提出了一种新的训练方法——Break-It-Fix-It(BIFI),该方法包含两个核心思想:(i) 使用批评者检查修复者在真实不良输入上的输出,并将良好的(已修复的)输出添加到训练数据中;(ii) 训练一个破坏者从良好代码生成现实的不良代码。基于这些思想,我们迭代更新破坏者和修复者,并结合它们生成更多的配对数据。我们在两个代码修复数据集上评估了BIFI:GitHub-Python,这是一个我们新引入的数据集,目标是修复带有抽象语法树解析错误的Python代码;以及DeepFix,目标是修复带有编译器错误的C代码。BIFI的表现优于现有方法,在GitHub-Python数据集上达到了90.5%的修复准确率(提高了28.5%),在DeepFix数据集上达到了71.7%的修复准确率(提高了5.6%)。值得注意的是,BIFI不需要任何标注数据;我们希望它能成为各种修复任务无监督学习的一个强大起点。

代码仓库

michiyasunaga/bifi
官方
pytorch
GitHub 中提及

基准测试

基准方法指标
program-repair-on-deepfixDrRepair + BIFI
Average Success Rate: 71.7
program-repair-on-github-pythonTransformer
Accuracy (%): 62.0
program-repair-on-github-pythonTransformer + BIFI
Accuracy (%): 90.5

用 AI 构建 AI

从想法到上线——通过免费 AI 协同编程、开箱即用的环境和市场最优价格的 GPU 加速您的 AI 开发

AI 协同编程
即用型 GPU
最优价格
立即开始

Hyper Newsletters

订阅我们的最新资讯
我们会在北京时间 每周一的上午九点 向您的邮箱投递本周内的最新更新
邮件发送服务由 MailChimp 提供
Break-It-Fix-It:无监督学习在程序修复中的应用 | 论文 | HyperAI超神经