基于 Transformer 的智能调用自动代码完成方法
内容提要
本研究评估了基于Transformer的语言模型在代码补全中的表现,提出了多任务学习和动态推理方法以提高准确性和效率。结果表明,使用真实代码训练的模型在补全任务中显著优于传统方法,提升了程序员的使用体验。
延伸解读
真实代码数据对补全性能的关键影响
文章指出,使用真实代码完成实例训练模型,比使用源代码和工作版本快照训练的模型准确率分别提高12.8%和13.8%,对应程序员实际自动完成使用率增加6.2%。这表明,训练数据的真实性和场景贴合度对模型落地效果至关重要,单纯依赖静态代码库可能无法充分捕捉开发者实际编码时的补全需求。
多任务学习与混合目标函数的优势
文章介绍了一种基于多任务学习的预训练语言模型,采用Transformer架构和混合目标函数进行预训练。这种方法能更好地理解和生成代码,尤其在完成标识符任务上效果显著。多任务学习让模型同时学习多种代码相关任务,从而提升泛化能力,为代码补全提供更全面的上下文理解。
效率优化:早期拒绝与动态推理
针对神经代码补全系统计算成本高的问题,文章提出了早期拒绝机制和基于Transformer的评估器,以及动态推理方法。这些技术能避免低效提示,节约计算资源,并主动防止生成错误代码。在保证补全准确性的同时,显著降低计算开销,使实时补全更加可行。
模型评估与多语言支持进展
文章涵盖了对三个公共代码语言模型的定量和定性评估,并介绍了IntelliCode Compose等工具,支持Python、C#、JavaScript和TypeScript。其中最佳模型在Python上达到86.7%的平均编辑相似度和1.82的困惑度。此外,Grammformer在C#和Python上生成更准确的代码完成。这些进展表明,基于Transformer的模型正朝着多语言、高准确率的方向发展。
Q&A
基于 Transformer 的语言模型在代码补全中有什么优势?
基于 Transformer 的语言模型在代码补全中显示出巨大的潜力,能够更好地理解和生成代码,尤其在完成标识符的任务上效果显著。
IntelliCode Compose 是什么?
IntelliCode Compose 是一种通用的多语言代码自动完成工具,能够生成语法正确的代码,支持多种编程语言。
如何提高代码补全模型的准确性?
通过使用真实代码进行训练、采用多任务学习和动态推理方法,可以显著提高代码补全模型的准确性。
Grammformer 模型的特点是什么?
Grammformer 模型能够根据编程语言语法生成具有“空洞”的代码完成,在 C# 和 Python 的代码完成方面生成更准确的代码。
动态推理方法在代码补全中有什么作用?
动态推理方法优化神经代码补全模型,节约计算资源并减少计算成本,同时主动防止生成错误代码。
多任务学习如何影响代码补全的效果?
多任务学习通过混合目标函数进行预训练,能够更好地理解和生成代码,从而提升代码补全的效果。