自动补全,即应用程序预测文本输入中的下一个条目,在当代消息传递和其他写作任务中已经得到广泛的使用。它也是用于计算机编程的集成开发环境(IDE)最重要的特性之一。最近的研究表明,自动补全可以通过深度学习来实现,通过使用从程序员的IDE活动中收集的真实数据集进行的训练,软件语言模型能够显著提高准确性。然而,不太流行的编程语言的一个常见问题是,可用的IDE数据集可能不足以用来训练AI模型。

Facebook的一个研究团队在一篇论文中展示了如何利用迁移学习(Transfer Learning)功能对自动完成预测任务进行微调,来实现对非IDE、非自动完成和不同语言示例代码序列的预训练。该方法将模型准确性在非常小的微调数据集上提高了50%以上,在50k标记的示例上提高了10%以上。

在软件社区中,GitHub中有一个巨大的开源代码库,包含了所有主要编程语言的代码。毫无疑问,这些代码提交与开发人员的IDE活动有着直观的关系。因此,如果有可能使用这些提交的知识来建模代码编写行为,将是有益的。不可否认,所有编程语言都有共同的概念和结构,因此研究人员建议将知识从更流行的编程语言转移到标记数据不足的其他语言。

该研究的数据集来自Facebook的真实开发人员活动,重点关注流行的编程语言Python和不太流行的语言Hack。该团队首先训练了来自Hack或Python的各种单语言模型,以及来自这两种语言的多个多语言模型。为了有效地从开放词汇表中识别和预测罕见和新颖的标记,他们应用了两种标记化方法:字节对编码(BPE)和Bigram编码+复制机制。为了测试迁移学习的效果,他们使用了两种最先进的代码预测性能模型——GPT-2和PLBART,并对在线和离线模型的性能进行了评估。

研究结果表明,在非IDE、非自动完成和不同语言示例代码序列上的预训练自动完成模型可以显著提高模型的准确性,这意味着发掘迁移学习的潜力,可以提高不太流行的编程语言的代码编写自动完成能力,并改善使用这些语言的开发人员的编码体验。

1条评论