中文

code2vec: 学习代码的分布式表示

机器学习 2018-10-31 v5 人工智能 编程语言 机器学习

摘要

我们提出了一种神经模型,用于将代码片段表示为连续的分布式向量(“代码嵌入”)。主要思想是将代码片段表示为单个固定长度的代码向量\textit{代码向量},该向量可用于预测代码片段的语义属性。这是通过将代码分解为其抽象语法树中的路径集合,并在学习如何聚合这些路径集合的同时\textit{同时},学习每条路径的原子表示来实现的。我们通过使用该方法从方法体的向量表示预测方法名来证明其有效性。我们在包含1400万个方法的数据集上训练模型以评估该方法。我们表明,在该数据集上训练的代码向量能够预测在训练期间完全未被观测到的文件中的方法名。此外,我们表明我们的模型学习到了有用的方法名向量,这些向量捕获了语义相似性、组合和类比。在相同数据集上与先前技术相比,我们的方法获得了超过75%的相对提升,是首个基于大型跨项目语料库成功预测方法名的方法。我们训练的模型、可视化和向量相似性可在 http://code2vec.org 作为交互式在线演示获取。代码、数据和训练模型可在 https://github.com/tech-srl/code2vec 获取。

关键词

引用

@article{arxiv.1803.09473,
  title  = {code2vec: Learning Distributed Representations of Code},
  author = {Uri Alon and Meital Zilberstein and Omer Levy and Eran Yahav},
  journal= {arXiv preprint arXiv:1803.09473},
  year   = {2018}
}

备注

Accepted in POPL 2019