2 个月前

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

Yasunaga, Michihiro ; Liang, Percy
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不需要任何标注数据;我们希望它能成为各种修复任务无监督学习的一个强大起点。

Break-It-Fix-It:无监督学习在程序修复中的应用 | 最新论文 | HyperAI超神经