中文

InferCode:通过预测子树实现代码表示的自我监督学习

软件工程 2020-12-16 v2 人工智能 机器学习 编程语言

摘要

在源代码上构建深度学习模型已发现许多成功的软件工程应用,如代码搜索、代码注释生成、缺陷检测、代码迁移等。然而,当前的学习技术有一个主要缺点,即这些模型大多在针对特定下游任务标注的数据集上训练,代码表示可能不适合其他任务。尽管某些技术从无标注代码生成表示,但应用于下游任务时远不能令人满意。本文提出 InferCode,通过采用自我监督学习机制构建源代码模型来克服该局限。其核心新颖性在于通过从 AST(抽象语法树)上下文中预测自动识别的子树来训练代码表示。AST 中的子树在 InferCode 中被视为训练代码表示的标签,无需任何人工标注工作 nor 昂贵的图构建开销,且训练得到的表示不再绑定于任何特定下游任务或代码单元。我们使用基于树的 CNN 作为编码器,在大量 Java 代码上训练了一个 InferCode 模型实例,并将其应用于下游无监督任务(如代码聚类、代码克隆检测、跨语言代码搜索),或在迁移学习方案下复用以继续训练模型权重用于监督任务(如代码分类和方法名预测)。与应用于相同下游任务的先前代码学习技术(如 Code2Vec、Code2Seq、ASTNN)相比,我们的预训练 InferCode 模型在大多数任务(包括涉及不同编程语言的任务)上以显著优势取得了更高的性能结果。

关键词

引用

@article{arxiv.2012.07023,
  title  = {InferCode: Self-Supervised Learning of Code Representations by Predicting Subtrees},
  author = {Nghi D. Q. Bui and Yijun Yu and Lingxiao Jiang},
  journal= {arXiv preprint arXiv:2012.07023},
  year   = {2020}
}

备注

Accepted at ICSE 2021