A lot of problems in the field of software engineering - bug fixing, commit message generation, etc. - require analyzing not only the code itself but specifically code changes. Applying machine learning models to these tasks requires us to create numerical representations of the changes, i.e. embeddings. Recent studies demonstrate that the best way to obtain these embeddings is to pre-train a deep neural network in an unsupervised manner on a large volume of unlabeled data and then further fine-tune it for a specific task. In this work, we propose an approach for obtaining such embeddings of code changes during pre-training and evaluate them on two different downstream tasks - applying changes to code and commit message generation. The pre-training consists of the model learning to apply the given change (an edit sequence) to the code in a correct way, and therefore requires only the code change itself. To increase the quality of the obtained embeddings, we only consider the changed tokens in the edit sequence. In the task of applying code changes, our model outperforms the model that uses full edit sequences by 5.9 percentage points in accuracy. As for the commit message generation, our model demonstrated the same results as supervised models trained for this specific task, which indicates that it can encode code changes well and can be improved in the future by pre-training on a larger dataset of easily gathered code changes.
翻译:软件工程 — 错误修正、 承诺生成信息等等 — 领域的许多问题不仅需要分析代码本身, 还需要分析代码本身, 还需要具体代码修改。 应用机器学习模型来完成这些任务, 需要我们创建这些变化的数字表示, 即嵌入。 最近的研究显示, 获得这些嵌入的最佳方式是, 以不受监督的方式对大量无标签数据进行深层神经网络前导, 然后对它进行进一步微调, 具体任务。 在这项工作中, 我们建议了一种方法, 在培训前获得这种代码修改的嵌入, 并且对两个不同的下游任务进行评估 : 将修改应用到代码并承诺生成信息。 预培训包括模型学习将给定的修改( 编辑序列) 正确应用到代码中, 因此只需要代码本身改变。 为了提高获得的嵌入数据的质量, 我们只在编辑序列中考虑修改的符号。 在应用代码修改的过程中, 我们的模型比模型要优于模型, 使用完全编辑序列的模型, 在精确度上应用5.9 百分比 点 。 对于将 修改 的模型来说, 将 用于 将 改进 修改 改进 修改 的 修改 的 将 修改 用于 修改 修改 修改 的 修改 的 的 将 用于 修改 修改 修改 用于 修改 的 修改 的 用于 修改 的 修改 的 的 用于 的 修改 修改 修改 修改 修改 修改 的 的 的 修改 修改 修改 修改 修改 修改 修改 的 修改 的 修改 修改 修改 修改 修改 的 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 的 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 修改 的 修改 的 的 的 的 的 的 修改 修改 的 的 的 的 的 的 修改 修改 修改 修改 修改 修改 修改 修改 的 的