
摘要
我们致力于解决基于学习模型预测编辑完成的问题,该模型是通过过去的编辑数据训练得到的。给定一个部分已编辑的代码片段,我们的目标是预测该片段其余部分的编辑完成。我们将这一任务称为“编辑完成”任务(EditCompletion),并提出了一种新颖的方法来应对它。主要思想是直接表示结构化的编辑操作。这使得我们可以建模编辑本身的概率,而不仅仅是学习被编辑代码的概率。我们将编辑操作表示为程序抽象语法树(Abstract Syntax Tree, AST)中的一条路径,这条路径从编辑源节点到目标节点。我们进行了详尽的评估,将我们的方法与多种由强大模型如长短期记忆网络(LSTMs)、变换器(Transformers)和神经条件随机场(neural CRFs)驱动的表示和建模方法进行了比较。实验结果表明,我们的模型相对于最先进的序列模型实现了28%的相对增益,并且其准确性是那些学习生成被编辑代码而非直接建模编辑操作的句法模型的两倍。我们的代码、数据集和训练好的模型均已公开发布在 https://github.com/tech-srl/c3po/ 。