GraphSearchNet:通过捕获全局依赖关系增强图神经网络以用于语义代码搜索
软件工程
2023-02-14 v5 人工智能
摘要
代码搜索旨在根据自然语言查询检索准确的代码片段,以提高软件生产力和质量。由于存在大量可用的程序(例如在 GitHub 或 Stack Overflow 上),识别和定位精确的代码对软件开发人员至关重要。此外,深度学习最近已广泛应用于各种与代码相关的场景,例如漏洞检测和源代码摘要。然而,自动化的深度代码搜索仍然具有挑战性,因为它需要在代码和自然语言查询之间建立高级语义映射。大多数现有的基于深度学习的代码搜索方法依赖于序列文本,即将程序和查询作为扁平的 token 序列输入以学习程序语义,而未充分考虑结构信息。此外,广泛采用的图神经网络已证明其在学习程序语义方面的有效性,但它们也存在无法捕获所构建图中全局依赖关系的问题,这限制了模型的学习能力。为了应对这些挑战,本文设计了一个名为 GraphSearchNet 的新型神经网络框架,通过联合学习源代码和自然语言查询的丰富语义,实现有效且准确的源代码搜索。具体而言,我们提出使用双向 GGNN (BiGGNN) 为源代码和查询构建图,以捕获源代码和查询的局部结构信息。此外,我们利用多头注意力模块增强 BiGGNN,以补充 BiGGNN 遗漏的全局依赖关系,从而提高模型的学习能力。在公开基准数据集 CodeSearchNet 上对 Java 和 Python 编程语言进行的大量实验证实,GraphSearchNet 优于当前最先进的工作。
引用
@article{arxiv.2111.02671,
title = {GraphSearchNet: Enhancing GNNs via Capturing Global Dependencies for Semantic Code Search},
author = {Shangqing Liu and Xiaofei Xie and Jingkai Siow and Lei Ma and Guozhu Meng and Yang Liu},
journal= {arXiv preprint arXiv:2111.02671},
year = {2023}
}