程序员的福音!谷歌大脑团队开发机器学习模型,可预测源代码
2019年04月09日 由 董灵灵 发表
981081
0
能够从过去的编辑中预测未来的源代码变化的AI对程序员来说,可能是一个非常宝贵的工具,但这是一个尚未被研究人员完全征服的挑战。
不过,谷歌大脑的一个团队在论文“Neural Networks for Modeling Source Code Edits”中描述了一种很有前景的新方法,可以达到最佳的整体性能和可扩展性。
在任何给定时间,开发人员都会在考虑一个或多个意图的情况下接近代码库并进行更改。这是一个有趣的研究挑战,因为编辑模式不能仅仅根据编辑内容(插入或删除的内容)或编辑结果(应用编辑后的代码状态)来理解。编辑需要根据更改与生成它的状态之间的关系来理解,准确地对编辑序列建模需要学习过去编辑的表示,这允许模型概括模式并预测未来的编辑。
为此,他们首先开发了两种表示来捕获意图信息,这些意图信息可以随着代码序列的长度扩展:显式表示,在序列中实例化编辑(在2D网格中表示为标记);隐式表示,实例化后续编辑。
然后,他们构建了一个机器学习模型,可以捕获编辑与生成它们的上下文之间的关系,具体方法是对初始代码和编辑进行编码,汇集所述上下文,并预测下一个编辑及其位置。
为了衡量系统的普遍性,研究人员开发了一套合成数据集,其灵感可能来自于在实际数据中出现的编辑,但经过简化后可以更清晰地解释结果。
此外,他们从谷歌代码库的快照中编辑了大量编辑序列数据集,其中包含来自5700名开发人员的800万次编辑,并将其划分为训练、开发和测试集。
在实验中,研究人员发现该模型准确地预测了需要进行编辑的位置,以及编辑的内容。他们认为该模型可以用于改进忽略编辑历史的自动完成系统,或预测开发人员在最近的编辑后将执行的代码搜索查询。
该团队表示,“我们特别感兴趣的是模型只有在有信心时才会做出预测,这对于最终编辑建议系统的可用性非常重要,总的来说,我们想要预测开发人员下一步会做些什么。我们认为编辑历史包含重要的有用信息,在这项研究中提出的公式和模型是学习使用这些信息的良好开端。”
论文:
arxiv.org/pdf/1904.02818.pdf