论文
用于代码修复的锚定自我游戏
Anchored Self-Play for Code Repair
摘要
代码修复是语言模型 (LM) 的一项重要功能:给定一个有缺陷的程序和单元测试,LM 必须生成一个通过测试的固定程序。由于代码修复数据有限,我们的目标是通过使用 LM 生成错误修复任务来扩展监督。我们提出__generator--fixer self-play__,其中使用强化学习训练单个模型来生成错误并修复它们。随着修复程序的改进,生成器会适应产生更困难的错误,从而产生自动课程。为了测试本课程是否具有普遍性,我们引入了 BugSourceBench,这是一个涵盖实际错误源的修复基准:人类编写的代码、LM 生成的代码和人工编辑的 LM 生成的代码中的错误。在 BugSourceBench 上,我们发现自我对弈倾向于困难但不切实际的错误,改进了合成错误,但降低了人类编写的错误。我们提出了锚定自我对弈(ASP),它通过添加代码嵌入相似性奖励来生成参考错误并将参考错误混合到修复者训练中,从而用一个小的参考集来锚定自我对弈。在所有错误来源中,ASP 实现了最佳修复率,相对于标准自我游戏,平均修复率提高了 $+24\%$ 相对 / $+7.0$ pp 绝对值,其中来自 LM 和人类的错误都有所提高。