【论文阅读-ASE 2020】利用单词重叠信息的代码检索 OCoR: An Overlapping-Aware Code Retriever

OCoR: An Overlapping-Aware Code Retriever

Conference: ASE 2020

Authors:
在这里插入图片描述

摘要

代码搜索任务是通过给出一段自然语言描述,模型能够找到一系列最相关的代码片段,由此来帮助开发人员重用代码。

然而现有的方法都无法来专门捕获一个重要的特征:单词重叠(overlaps)。

有不同的开发人员写的使用的不同名称可能是相关联的,比如“message”和“msg”它们表达的意思很可能是相同的。而且对于程序语言的变量名称和相应的自然语言描述之间的overlap也可能说明两者之间的相关程度。

本文提出的解决方案–OCoR:

  • embds names by characters to capture overlaps
  • introduces overlap matrix to represent the degree of overlaps

实验结果:

相比较于原来的SOTA,从13.1%提升到了22.3%。

简介

如下图所展示的例子,单词“join_table_b”与自然语言描述中的“join”和“table”存在重叠部分,以前的方法无法捕获这种overlap信息,而这篇论文中使用了字符级别的embedding来处理这种重叠信息,使得表达更加丰富。

在这里插入图片描述

下图展示了一个计算字符级别embedding和重叠矩阵的过程:

在这里插入图片描述

如图所示,在a图中,除了最后一个字符的向量外,这两个标识符的组合向量几乎是由相同的向量计算的。因此,这些标识符的最终嵌入在高维空间中是距离相近的。在b图中,展示了部分的重叠矩阵,可以看出单词“join_table_b”与自然语言描述中的“join”的匹配程度相对于其它单词较高。

模型

下图展示了模型的整体结构图:
在这里插入图片描述

其中 A ( C O D E , N L ) A(CODE, NL) A(CODE,NL) A ( N L , C O D E ) A(NL,CODE) A(NL,CODE) 是重叠矩阵(Overlap Matrices)。

模型输入

模型的输入可以分为3部分:

  • 自然语言描述
  • 代码片段
  • 重叠矩阵

其中重叠矩阵是根据自然语言描述和代码片段计算而来。

在此模型中考虑了NL和CODE的两种重叠矩阵,因为矩阵 A ( C O D E , N L ) A(CODE, NL) A(CODE,NL) A ( N L , C O D E ) A(NL,CODE) A(NL,CODE) 的形状并不相同,所以此模型由此也分开了2个支线分别处理,后面再连接在一起。

Encoder

可以看出在模型框架图中的左上角和右上角展示了对于模型NL和CODE的分别编码。

编码器是一个包含了多个mechanism的栈,每一个mechanism中包含了3个sub-layers:

  • self attention
  • gating layer
  • convoluational layer

在每一个mechanism之后,都用到有一个残差连接和正则化层。

编码信息连接

在Encoder多个mechanism之后,另外使用了max pooling进行池化。之后使用self attention关联两个编码的信息,在具体的关联中,会把另一边的编码信息作为Query输入到self attention中。

最后将输入的4个向量进行拼接,作为最后的MLP的输入信息,进而再进行预测。

猜你喜欢

转载自blog.csdn.net/qq_33414271/article/details/108939828