当前位置: 首页 > 专利查询>武汉大学专利>正文

基于多维度匹配的代码搜索方法技术

技术编号:32656794 阅读:18 留言:0更新日期:2022-03-17 11:05
本发明专利技术涉及代码搜索技术领域,具体地说,涉及一种基于多维度匹配的代码搜索方法,其包括以下步骤:一、从开源代码库中提取大量<code,decsting>对作为训练数据,然后用训练数据训练模型TSMCS;二、输入一段自然语言描述,训练好的模型便将最接近的代码片段搜索出来;本发明专利技术能较佳地进行代码搜索。本发明专利技术能较佳地进行代码搜索。本发明专利技术能较佳地进行代码搜索。

【技术实现步骤摘要】
基于多维度匹配的代码搜索方法


[0001]本专利技术涉及代码搜索
,具体地说,涉及一种基于多维度匹配的代码搜索方法。

技术介绍

[0002]代码搜索技术可从开源代码中根据自然语言描述找到对应的代码片段,以此提高开发人员的编码效率。目前大量研究通过深度学习方法将自然语言和代码段嵌入到高维空间,学习二者之间的深层次映射关系,从而提升代码搜索任务的准确率。然而,由于代码与传统自然语言之间存在语法差异,导致现有深度学习模型无法准确理解代码段的结构及语义特征,同时,由于模型本身需要输入更多的异构样本信息,使得模型结构的冗余程度大幅增加。

技术实现思路

[0003]本专利技术的内容是提供一种基于多维度匹配的代码搜索方法,其能够克服现有技术的某种或某些缺陷。
[0004]根据本专利技术的基于多维度匹配的代码搜索方法,其包括以下步骤:
[0005]一、从开源代码库中提取大量<code,decsting>对作为训练数据,然后用训练数据训练模型TSMCS;
[0006]二、输入一段自然语言描述,训练好的模型便将最接近的代码片段搜索出来;
[0007]模型TSMCS通过引入语义级别与结构级别匹配模块对代码和描述进行语义提取和匹配,包括:
[0008]词嵌入层:采用无监督学习的fasttext模型,使用了n

gram、子词正则化特征增强方法;
[0009]图嵌入层:使用Deepwalk,DeepWalk分为随机游走和生成表示向量两个部分;
[0010]代码语义表示图CSRG:基于抽象语法树,对节点进行聚合,并融入数据流特征;
[0011]语义提取层:使用LSTM或者Transformer来进行描述的语义特征的提取;
[0012]图特征提取层:使用图注意力网络GAT去提取代码的CSRG特征;
[0013]CRESS Block:一种基于残差和交互的匹配模块,用于找到代码段和描述的匹配关系;通过级联残差信息和注意力机制增强词句的描述能力,从而保留更多的代码和描述的文本特征;
[0014]融合注意力层:用于将对应向量融合为一个向量;
[0015]损失函数。
[0016]作为优选,词嵌入层中,Code和Docstring分别经过token处理后送入词嵌入模型进行词向量的训练。
[0017]作为优选,DeepWalk方法为:利用随机游走算法从图中提取一些顶点序列;然后借助自然语言处理的思路,将生成的定点序列看作由单词组成的句子,所有的序列可以看作
一个大的语料库,最有利用自然语言处理工具word2vec将每一个顶点表示为一个维度为d的向量。
[0018]作为优选,代码语义表示图生成过程为:首先我们通过第三方工具生成代码段的AST和DFG,对于AST,本文对其节点进行融合,相同的节点仅出现一次,其次,将DFG中的节点在融合后的AST中进行定位,将DFG的边特征加入到AST中,最后,将这两种边赋予不同的权值,即得到了代码语义表视图。
[0019]作为优选,图特征提取层中,使用GAT去提取代码的CSRG特征的方法为:
[0020]假设Graph包含N个节点,每个节点的特征向量为h
i
,维度是F,表示为:h={h1,h2,...,h
N
},h
i
∈R
F
,对节点特征向量h进行线性变换,可以得到新的特征向量h'
i
,维度是F

,如下所示,w为线性变换的矩阵:
[0021]h'
i
=Wh
i
,W∈R
F
×
F

[0022]h'={h'1,h'1,

,h'1},h'
i

RF
';
[0023]节点j是节点i的邻居,则可以使用Attention机制计算节点j对于节点i的重要性,即AttentionScore:
[0024]e
ij
=Attention(Wh
i
,Wh
j
);
[0025][0026]GAT具体的Attention做法如下,把节点i,j的特征向量h'
i
,h'
j
拼接在一起,然后和一个2F

维的向量a计算内积;激活函数采用LeakyReLU,公式如下:
[0027][0028]||表示拼接操作;经过Attention之后节点i的特征向量如下:
[0029][0030]作为优选,CRESS Block匹配方法为:
[0031]对于一个长度为l的序列,我们将第n个block的输入输出分别表示为:和第n个block的输入为第一次的输入和前两个block的输出的串联:
[0032][0033]其中[;]表示串联操作;
[0034]Cross Layer使用注意力机制,进行简单的镜像操作,输出两个序列的相似度得分;对于两个匹配序列a和b,长度分别为l
a
和l
b
,可以表示为a=(a1,a2,...,a
la
),b=(b1,b2,...,b
lb
),对于a
i
和b
j
的相似度得分e
ij
为:
[0035]e
ij
=F(a
i
)
T
F(b
j
);
[0036]F为恒等函数或者单层前馈神经网络,可以被视为一个超参数,则经过Cross Layer的序列a
i
,b
j
为:
[0037][0038][0039]将三个角度的特征向量进行融合计算,输入序列a的输出:
[0040][0041][0042][0043][0044]G,G1,G2,G3为参数独立的单层前馈神经网络,其中
·
表示element

wise乘法,经过fusionlayer的融合,输出中已经包含了各种特征。
[0045]作为优选,融合注意力层中,对每个单词计算对应的注意力分值,并通过加权方式得到最终向量:
[0046][0047]其中α
i
表示编码器隐藏状态h
i
对应的注意力得分。
[0048]作为优选,损失函数为:
[0049][0050]其中θ表示模型参数,表示训练数据集,β是一个超参数,sim表示两个向量之间的相似度得分,xd
+
d

分别表示代码片段x,与代码片段对应的描述语句d
+
,与代码片段不对应的描述语句d

经过模型嵌入之后维度相同的向量。
[0051]本专利技术本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于多维度匹配的代码搜索方法,其特征在于:包括以下步骤:一、从开源代码库中提取大量<code,decsting>对作为训练数据,然后用训练数据训练模型TSMCS;二、输入一段自然语言描述,训练好的模型便将最接近的代码片段搜索出来;模型TSMCS通过引入语义级别与结构级别匹配模块对代码和描述进行语义提取和匹配,包括:词嵌入层:采用无监督学习的fasttext模型,使用了n

gram、子词正则化特征增强方法;图嵌入层:使用Deepwalk,DeepWalk分为随机游走和生成表示向量两个部分;代码语义表示图CSRG:基于抽象语法树,对节点进行聚合,并融入数据流特征;语义提取层:使用LSTM或者Transformer来进行描述的语义特征的提取;图特征提取层:使用图注意力网络GAT去提取代码的CSRG特征;CRESS Block:一种基于残差和交互的匹配模块,用于找到代码段和描述的匹配关系;通过级联残差信息和注意力机制增强词句的描述能力,从而保留更多的代码和描述的文本特征;融合注意力层:用于将对应向量融合为一个向量;损失函数。2.根据权利要求1所述的基于多维度匹配的代码搜索方法,其特征在于:词嵌入层中,Code和Docstring分别经过token处理后送入词嵌入模型进行词向量的训练。3.根据权利要求2所述的基于多维度匹配的代码搜索方法,其特征在于:DeepWalk方法为:利用随机游走算法从图中提取一些顶点序列;然后借助自然语言处理的思路,将生成的定点序列看作由单词组成的句子,所有的序列可以看作一个大的语料库,最有利用自然语言处理工具word2vec将每一个顶点表示为一个维度为d的向量。4.根据权利要求3所述的基于多维度匹配的代码搜索方法,其特征在于:代码语义表示图生成过程为:首先我们通过第三方工具生成代码段的AST和DFG,对于AST,本文对其节点进行融合,相同的节点仅出现一次,其次,将DFG中的节点在融合后的AST中进行定位,将DFG的边特征加入到AST中,最后,将这两种边赋予不同的权值,即得到了代码语义表视图。5.根据权利要求4所述的基于多维度匹配的代码搜索方法,其特征在于:图特征提取层中,使用GAT去提取代码的CSRG特征的方法为:假设Graph包含N个节点,每个节点的特征向量为h
i
,维度是F,表示为:h={h1,h2,...,h
N
},h
i
∈R
F
,对节点特征向量h进行线性变换,可以得到新的特征向量h

i
,维度是F

,如下所示,w为线性变换的矩阵:h

i
=Wh
i
,W∈R
F
′×
F
;h

={h
′1,h
′1,...,h
′1},h

i
∈R
F

;节点j是节点i的邻居...

【专利技术属性】
技术研发人员:蔡波胡毅瞿志恒
申请(专利权)人:武汉大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1