三维模型 检索 代码_语义源代码检索的多模态注意力网络学习

摘要

代码检索技术和工具在帮助软件开发人员在给定用户查询(例如,描述检索特定代码片段的功能的简短自然语言文本)的可用开源存储库中检索现有代码片段方面发挥了关键作用。尽管目前在提高代码检索效率方面做了大量的工作,但仍有两个主要问题阻碍了它们在回答复杂查询时从大规模存储库中准确地检索出可满足要求的代码片段。首先,现有的方法只考虑源代码的浅层特征,如方法名称和代码标记,而忽略了源代码的抽象语法树(AST)和控制流图(CFG)等结构化特征,这些特征包含了源代码丰富和定义良好的语义。第二,虽然基于深度学习的方法在源 代码的表示方面表现良好,但是它缺乏可解释性,使得很难解释检索结果,并且几乎不可能理解源代码的哪些特征对最终结果的贡献更大。

为了解决上述两个问题,本文提出了一种新的用于语义源代码检索的多模式注意力网络 MMAN。针对源代码的非结构化和结构化特征,提出了一种综合的多模态表示法,其中 LSTM 表示代码的顺序标记,树 LSTM 表示代码的 AST,GGNN 表示代码的 CFG。此外,采用多模态注意融合层,对源代码的每个模态的不同部分赋予权重,然后将其集成到一个单一的混合表示中。在一个大规模的真实数据集上的综合实验和分析表明,我们提出的模型能够准确地检索代码片段,并优于现有的方法。

1 引言

随着 GitHub 和 StackOverflow 等大量源代码库的出现,它正逐渐成为程序员搜索具有相同功能 的现有代码并尽可能多地重用这些代码的一项关键软件开发活动。代码检索的目标是在给定用户规范的情况下,从可用的开源存储库中检索特定的代码片段(例如,描述代码片段功能的简短文本)。实现这样一个代码检索系统的关键挑战在于两个方面:(A)对源代码的深入语义理解;(B)度量跨模式的相似性(即输入自然语言和源代码)。

现状和局限性为了搜索自然语言查询的大量可用代码资源已经做了许多的努力,从关键字匹配到语义检索。Lu 等人用从 WordNet 获得的同义词扩展查询,然后执行方法签名的关键字匹配。Lv 等人用 api 扩展了查询,并考虑了文本相似性和潜在 api 对代码搜索的影响。Reiss 等人开发了一个代码检索系统 Sourceer,它通过概率主题模型学习源代码的语义表示。受计算机视觉和自然语言处理任务中深度学习成功的启发,深度学习被应用于更好地表示克隆检测和代码摘要等任务的源代码。

据我们所知,Gu 等人是第一个将深度学习网络应用于代码检索任务,它捕捉了语义源代码与中间语义空 间中自然语言查询之间的相关性。然而,这种方法仍然存在两个主要的局限性:(a)源代码的深层结构特征经常被忽略。方法捕获了浅显的源代码信息,包括方法名、代码标记和 API 序列,从而错过了捕获代码丰富结构语义的机会。(b) 缺乏可解释性。深层神经网络的最终结果往往很难解释,因为它的内部工作对输入数据和不同的应用程序总是透明的。

解析。上述这些限制促使我们设计一个模型,学习更全面的源代码表示以及解释能力。一方面,对于限制(a),除了代码的标记外,我们还从代码的多个视图中提取更多的特征,如抽象语法树(AST)和控制流图(CFG)。AST 和 CFG

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值