语法感知的即时代码补全
软件工程
2023-05-02 v2 人工智能
摘要
代码补全旨在通过根据给定上下文建议下一个代码词元来帮助提高开发者的生产力。已有多种方法被提出,将抽象语法树(AST)信息纳入模型训练,以确保代码补全能够感知编程语言的语法。然而,现有的语法感知代码补全方法并非即时可用,因为我们发现,开发者每输入三分之二的字符,AST就无法被提取,因为它需要语法正确的源代码,这限制了其在现实场景中的实用性。另一方面,现有的即时代码补全尚未考虑语法信息。在本文中,我们提出PyCoder,利用词元类型——一种轻量级的语法信息,它易于获取且与源代码的自然顺序一致。我们的PyCoder以多任务训练方式进行训练,通过在训练阶段学习预测词元类型的辅助任务,模型在推理阶段无需词元类型即可在预测词元和代码行方面取得更好的性能。综合实验表明,PyCoder在CodeXGLUE排行榜上以77.12%的词元级预测准确率位居第一,比基线模型准确0.43%-24.25%。此外,PyCoder在行级预测上达到了43.37%的精确匹配率,比基线模型准确3.63%-84.73%。这些结果使我们得出结论:过去很少使用的词元类型信息(作为语法信息的替代)可以极大地提高代码补全方法的性能,而无需像基于AST的方法那样要求语法正确的源代码。我们的PyCoder已在HuggingFace和GitHub上公开发布。
引用
@article{arxiv.2211.04673,
title = {Syntax-Aware On-the-Fly Code Completion},
author = {Wannita Takerngsaksiri and Chakkrit Tantithamthavorn and Yuan-Fang Li},
journal= {arXiv preprint arXiv:2211.04673},
year = {2023}
}
备注
17 pages, Under Review at IEEE Transactions on Software Engineering