CodeEditor:利用预训练模型学习编辑源代码
软件工程
2023-09-08 v3 人工智能
摘要
开发人员在软件开发过程中常因各种原因(如代码重构)执行重复的代编辑活动。预训练代码编辑模型已取得最先进(SOTA)结果。预训练模型先通过预训练任务预训练,再经代码编辑任务微调。现有预训练任务主要为代码填充任务(如掩码语言建模),其源自自然语言处理领域,并非为自动代码编辑而设计。本文提出一种专用于代码编辑的新型预训练任务,并给出一种高效的预训练代码编辑模型CodeEditor。我们的预训练任务进一步提升了代码编辑模型的性能与泛化能力。具体而言,我们收集大量真实代码段作为真值,并使用一个强大生成器将其改写为变异版本。随后,我们预训练CodeEditor将变异版本编辑回对应真值,以学习编辑模式。我们在四个代码编辑数据集上实验,并在三种设定下评估预训练CodeEditor。(1)微调设定中,我们用四个数据集训练预训练CodeEditor并在测试数据上评估。CodeEditor在四个数据集上分别超越SOTA基线15%、25.5%、9.4%和26.6%。(2)少样本设定中,我们用有限数据训练并在测试数据上评估。CodeEditor大幅优于所有基线。(3)零样本设定中,CodeEditor正确编辑了1113个程序,而SOTA基线无法工作。
引用
@article{arxiv.2210.17040,
title = {CodeEditor: Learning to Edit Source Code with Pre-trained Models},
author = {Jia Li and Ge Li and Zhuo Li and Zhi Jin and Xing Hu and Kechi Zhang and Zhiyi Fu},
journal= {arXiv preprint arXiv:2210.17040},
year = {2023}
}
备注
Accepted by the ACM Transactions on Software Engineering and Methodology (TOSEM)