【技术实现步骤摘要】
基于多维度匹配的代码搜索方法
[0001]本专利技术涉及代码搜索
,具体地说,涉及一种基于多维度匹配的代码搜索方法。
技术介绍
[0002]代码搜索技术可从开源代码中根据自然语言描述找到对应的代码片段,以此提高开发人员的编码效率。目前大量研究通过深度学习方法将自然语言和代码段嵌入到高维空间,学习二者之间的深层次映射关系,从而提升代码搜索任务的准确率。然而,由于代码与传统自然语言之间存在语法差异,导致现有深度学习模型无法准确理解代码段的结构及语义特征,同时,由于模型本身需要输入更多的异构样本信息,使得模型结构的冗余程度大幅增加。
技术实现思路
[0003]本专利技术的内容是提供一种基于多维度匹配的代码搜索方法,其能够克服现有技术的某种或某些缺陷。
[0004]根据本专利技术的基于多维度匹配的代码搜索方法,其包括以下步骤:
[0005]一、从开源代码库中提取大量<code,decsting>对作为训练数据,然后用训练数据训练模型TSMCS;
[0006]二、输入一段自然语言描述,训练好的模型便将最接近的代码片段搜索出来;
[0007]模型TSMCS通过引入语义级别与结构级别匹配模块对代码和描述进行语义提取和匹配,包括:
[0008]词嵌入层:采用无监督学习的fasttext模型,使用了n
‑
gram、子词正则化特征增强方法;
[0009]图嵌入层:使用Deepwalk,DeepWalk分为随机游走和生成表示 ...
【技术保护点】
【技术特征摘要】
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的邻居...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。