中文

用图区间神经网络学习语义程序嵌入

软件工程 2020-05-28 v2 机器学习 编程语言

摘要

学习源代码的分布式表示一直是机器学习模型的挑战性任务。早期工作将程序视为文本,从而可直接应用自然语言方法。遗憾的是,此类方法未利用源代码所拥有的丰富结构信息。近来,图神经网络(GNN)被提出用于从程序的图表示中学习嵌入。由于同质且代价高昂的消息传递过程,GNN 可能存在精度问题,尤其在处理被渲染为大型图的程序时。本文提出一种新的图神经架构,称为图区间神经网络(GINN),以应对现有 GNN 的弱点。与标准 GNN 不同,GINN 从通过专为辅助模型学习而设计的抽象方法所获得的精选图表示中进行泛化。特别地,GINN 专注于区间以挖掘程序的特征表示,此外,GINN 在区间的层次结构上运作以将学习扩展到大型图。我们在两个流行的下游应用上评估 GINN:变量误用预测与方法名预测。结果表明,在两种情况下 GINN 均以明显优势超越 SOTA 模型。我们还基于 GINN 创建了神经缺陷检测器,用于捕获 Java 代码中的空指针解引用缺陷。在从 64 个项目中提取的相同 9,000 个方法上学习时,基于 GINN 的缺陷检测器在 13 个未见测试项目上显著优于基于 GNN 的缺陷检测器。接下来,我们部署训练好的基于 GINN 的缺陷检测器与 Facebook Infer 扫描 GitHub 上 20 个高星项目的代码库。通过人工检查,我们确认基于 GINN 的缺陷检测器在 102 个警告中查出 38 个缺陷,而 Facebook Infer 在 129 个警告中查出 34 个缺陷。

关键词

引用

@article{arxiv.2005.09997,
  title  = {Learning Semantic Program Embeddings with Graph Interval Neural Network},
  author = {Yu Wang and Fengjuan Gao and Linzhang Wang and Ke Wang},
  journal= {arXiv preprint arXiv:2005.09997},
  year   = {2020}
}

备注

The abstract is simplified, for full abstract, please refer to the paper