[论文解读] Towards Full-line Code Completion with Neural Language Models
本文提出全行代码补全这一新任务,即使用神经语言模型一次性生成完整代码行,在Python数据集上评估基于Transformer和RNN的模型。结果表明,基于标记序列的Transformer模型在性能上优于基于语法和BPE的方法,具有较高的语法正确性与可接受的推理速度,尽管语法引导显著增加了延迟且未带来明显性能提升。
A code completion system suggests future code elements to developers given a partially-complete code snippet. Code completion is one of the most useful features in Integrated Development Environments (IDEs). Currently, most code completion techniques predict a single token at a time. In this paper, we take a further step and discuss the probability of directly completing a whole line of code instead of a single token. We believe suggesting longer code sequences can further improve the efficiency of developers. Recently neural language models have been adopted as a preferred approach for code completion, and we believe these models can still be applied to full-line code completion with a few improvements. We conduct our experiments on two real-world python corpora and evaluate existing neural models based on source code tokens or syntactical actions. The results show that neural language models can achieve acceptable results on our tasks, with significant room for improvements.
研究动机与目标
- 提出并定义一项新代码补全任务:全行代码补全,即一次性生成完整代码行,而非逐个标记地预测。
- 使用真实世界中的Python语料库,对最先进的神经语言模型(RNN、Transformer及基于语法的模型)在该新任务上进行评估。
- 探究基于ASDL动作的语法引导代码生成是否相比基于标记或BPE的模型能提升全行代码补全的性能。
- 分析在全行代码补全中语法正确性、推理速度与模型有效性的权衡关系。
- 识别当前语法引导的局限性,并通过静态分析与AST结构整合探索未来改进方向。
提出的方法
- 作者从GitHub代码库构建了两个大规模Python数据集:一个基于Python 2,另一个基于Python 3,用于训练与评估。
- 他们在源代码标记、ASDL语法动作和BPE子标记上微调基于Transformer和GRU的神经语言模型,以生成完整代码行。
- 对于基于语法的生成,他们使用ASDL解析器将代码片段转换为构建动作序列,以确保语法正确性。
- 模型采用BLEU、ROUGE和精确匹配等标准指标进行评估,结果在两个数据集上报告。
- 推理速度通过束搜索(束大小=5)进行测量,比较基于标记、基于语法和基于BPE的模型在时间效率上的差异。
- 作者人工检查生成的代码以验证语法正确性,并分析与变量使用及API调用相关的失败案例。
实验结果
研究问题
- RQ1神经语言模型能否有效在单步内生成完整代码行,而非逐个标记预测?
- RQ2在全行代码补全任务中,基于Transformer的模型与基于RNN的模型相比表现如何?
- RQ3将基于ASDL的语法动作整合是否能提升全行代码生成的性能与正确性?
- RQ4在基于语法与基于标记的生成方式之间,语法正确性与推理效率的权衡关系如何?
- RQ5BPE分词与标识符处理方式如何影响全行代码补全中模型的性能?
主要发现
- 在Python 2和Python 3数据集上,基于Transformer的神经语言模型在所有评估指标上均优于基于RNN的模型。
- 基于标记的Transformer模型表现最佳,在Py150数据集上达到47.67%的精确匹配率,优于基于语法的模型。
- 尽管基于语法的模型能确保语法正确性,但其推理速度显著更慢——单次推理超过1秒,而基于标记的模型则在0.1秒以内。
- 基于BPE的模型虽减少了OOV(未登录词)问题,但在标识符生成方面表现不如纯基于标记的模型。
- 基于标记的模型生成的大多数代码行在语法上是正确的,表明神经网络能从大规模数据中隐式学习语法规则。
- 基于语法的方法并未超越基于标记的模型,可能是因为ASDL动作序列更长且效率更低,且当模型已从数据中学习语法规则时,显式的语法约束效果有限。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。