CN114186017A - 基于多维度匹配的代码搜索方法 - Google Patents
基于多维度匹配的代码搜索方法 Download PDFInfo
- Publication number
- CN114186017A CN114186017A CN202111290124.4A CN202111290124A CN114186017A CN 114186017 A CN114186017 A CN 114186017A CN 202111290124 A CN202111290124 A CN 202111290124A CN 114186017 A CN114186017 A CN 114186017A
- Authority
- CN
- China
- Prior art keywords
- code
- attention
- layer
- model
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- 238000012549 training Methods 0.000 claims abstract description 19
- 239000013598 vector Substances 0.000 claims description 52
- 239000010410 layer Substances 0.000 claims description 28
- 230000004927 fusion Effects 0.000 claims description 16
- 238000000605 extraction Methods 0.000 claims description 12
- 230000006870 function Effects 0.000 claims description 12
- 230000007246 mechanism Effects 0.000 claims description 12
- 238000013528 artificial neural network Methods 0.000 claims description 7
- 235000007849 Lepidium sativum Nutrition 0.000 claims description 6
- 244000211187 Lepidium sativum Species 0.000 claims description 6
- 238000003058 natural language processing Methods 0.000 claims description 6
- 238000005295 random walk Methods 0.000 claims description 6
- 239000002356 single layer Substances 0.000 claims description 6
- 230000009466 transformation Effects 0.000 claims description 6
- 230000003993 interaction Effects 0.000 claims description 5
- 238000004364 calculation method Methods 0.000 claims description 4
- 239000011159 matrix material Substances 0.000 claims description 4
- 230000008569 process Effects 0.000 claims description 4
- 230000004913 activation Effects 0.000 claims description 3
- 230000004931 aggregating effect Effects 0.000 claims description 3
- 238000004422 calculation algorithm Methods 0.000 claims description 3
- 238000000844 transformation Methods 0.000 claims description 3
- 230000000694 effects Effects 0.000 description 6
- 238000002474 experimental method Methods 0.000 description 6
- 238000012163 sequencing technique Methods 0.000 description 5
- 238000002679 ablation Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 101100153581 Bacillus anthracis topX gene Proteins 0.000 description 1
- VKEQBMCRQDSRET-UHFFFAOYSA-N Methylone Chemical compound CNC(C)C(=O)C1=CC=C2OCOC2=C1 VKEQBMCRQDSRET-UHFFFAOYSA-N 0.000 description 1
- 101150041570 TOP1 gene Proteins 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000013527 convolutional neural network Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000013136 deep learning model Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- DJGAAPFSPWAYTJ-UHFFFAOYSA-M metamizole sodium Chemical group [Na+].O=C1C(N(CS([O-])(=O)=O)C)=C(C)N(C)N1C1=CC=CC=C1 DJGAAPFSPWAYTJ-UHFFFAOYSA-M 0.000 description 1
- 238000012821 model calculation Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
- G06F16/3344—Query execution using natural language analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/38—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
- G06F16/383—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually using metadata automatically derived from the content
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/284—Lexical analysis, e.g. tokenisation or collocates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/088—Non-supervised learning, e.g. competitive learning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Software Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Biomedical Technology (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Library & Information Science (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及代码搜索技术领域,具体地说,涉及一种基于多维度匹配的代码搜索方法,其包括以下步骤:一、从开源代码库中提取大量<code,decsting>对作为训练数据,然后用训练数据训练模型TSMCS;二、输入一段自然语言描述,训练好的模型便将最接近的代码片段搜索出来;本发明能较佳地进行代码搜索。
Description
技术领域
本发明涉及代码搜索技术领域,具体地说,涉及一种基于多维度匹配的代码搜索方法。
背景技术
代码搜索技术可从开源代码中根据自然语言描述找到对应的代码片段,以此提高开发人员的编码效率。目前大量研究通过深度学习方法将自然语言和代码段嵌入到高维空间,学习二者之间的深层次映射关系,从而提升代码搜索任务的准确率。然而,由于代码与传统自然语言之间存在语法差异,导致现有深度学习模型无法准确理解代码段的结构及语义特征,同时,由于模型本身需要输入更多的异构样本信息,使得模型结构的冗余程度大幅增加。
发明内容
本发明的内容是提供一种基于多维度匹配的代码搜索方法,其能够克服现有技术的某种或某些缺陷。
根据本发明的基于多维度匹配的代码搜索方法,其包括以下步骤:
一、从开源代码库中提取大量<code,decsting>对作为训练数据,然后用训练数据训练模型TSMCS;
二、输入一段自然语言描述,训练好的模型便将最接近的代码片段搜索出来;
模型TSMCS通过引入语义级别与结构级别匹配模块对代码和描述进行语义提取和匹配,包括:
词嵌入层:采用无监督学习的fasttext模型,使用了n-gram、子词正则化特征增强方法;
图嵌入层:使用Deepwalk,DeepWalk分为随机游走和生成表示向量两个部分;
代码语义表示图CSRG:基于抽象语法树,对节点进行聚合,并融入数据流特征;
语义提取层:使用LSTM或者Transformer来进行描述的语义特征的提取;
图特征提取层:使用图注意力网络GAT去提取代码的CSRG特征;
CRESS Block:一种基于残差和交互的匹配模块,用于找到代码段和描述的匹配关系;通过级联残差信息和注意力机制增强词句的描述能力,从而保留更多的代码和描述的文本特征;
融合注意力层:用于将对应向量融合为一个向量;
损失函数。
作为优选,词嵌入层中,Code和Docstring分别经过token处理后送入词嵌入模型进行词向量的训练。
作为优选,DeepWalk方法为:利用随机游走算法从图中提取一些顶点序列;然后借助自然语言处理的思路,将生成的定点序列看作由单词组成的句子,所有的序列可以看作一个大的语料库,最有利用自然语言处理工具word2vec将每一个顶点表示为一个维度为d的向量。
作为优选,代码语义表示图生成过程为:首先我们通过第三方工具生成代码段的AST和DFG,对于AST,本文对其节点进行融合,相同的节点仅出现一次,其次,将DFG中的节点在融合后的AST中进行定位,将DFG的边特征加入到AST中,最后,将这两种边赋予不同的权值,即得到了代码语义表视图。
作为优选,图特征提取层中,使用GAT去提取代码的CSRG特征的方法为:
假设Graph包含N个节点,每个节点的特征向量为hi,维度是F,表示为:h={h1,h2,...,hN},hi∈RF,对节点特征向量h进行线性变换,可以得到新的特征向量h'i,维度是F′,如下所示,w为线性变换的矩阵:
h'i=Whi,W∈RF×F;
h'={h'1,h'1,…,h'1},h'i∈RF';
节点j是节点i的邻居,则可以使用Attention机制计算节点j对于节点i的重要性,即AttentionScore:
eij=Attention(Whi,Whj);
GAT具体的Attention做法如下,把节点i,j的特征向量h'i,h'j拼接在一起,然后和一个2F′维的向量a计算内积;激活函数采用LeakyReLU,公式如下:
||表示拼接操作;经过Attention之后节点i的特征向量如下:
作为优选,CRESS Block匹配方法为:
其中[;]表示串联操作;
Cross Layer使用注意力机制,进行简单的镜像操作,输出两个序列的相似度得分;对于两个匹配序列a和b,长度分别为la和lb,可以表示为a=(a1,a2,...,ala),b=(b1,b2,...,blb),对于ai和bj的相似度得分eij为:
eij=F(ai)TF(bj);
F为恒等函数或者单层前馈神经网络,可以被视为一个超参数,则经过CrossLayer的序列ai,bj为:
将三个角度的特征向量进行融合计算,输入序列a的输出:
G,G1,G2,G3为参数独立的单层前馈神经网络,其中·表示element-wise乘法,经过fusionlayer的融合,输出中已经包含了各种特征。
作为优选,融合注意力层中,对每个单词计算对应的注意力分值,并通过加权方式得到最终向量:
其中αi表示编码器隐藏状态hi对应的注意力得分。
作为优选,损失函数为:
其中θ表示模型参数,表示训练数据集,β是一个超参数,sim表示两个向量之间的相似度得分,xd+d-分别表示代码片段x,与代码片段对应的描述语句d+,与代码片段不对应的描述语句d-经过模型嵌入之后维度相同的向量。
本发明提出一种基于文本语义和结构注意力匹配的代码搜索模型TSMCS(CodeSearch Based on Text Semantics and StructuralAttention Matching),通过引入语义级别与结构级别匹配模块,模型可更有效地提取和融合多个维度下的代码特征。在文本语义级别匹配模块中,本发明设计了一种基于残差交互的匹配模块,通过级联残差信息和注意力机制增强词句的描述能力,从而保留了更多的代码和描述的文本特征,同时引入权值共享机制,在语义级别进行代码和描述的匹配,该模块的引入最大可提高26.07%MRR值;在结构级别匹配模块中,本发明设计了CSRG(Code Semantic Representation Graph)的全新代码表示结构,使其在保留抽象语法树结构和复杂度的同时,对节点信息进行聚合,并融入了代码的数据流特征,提高了信息密度;在相似度计算模块,设置融合注意力机层,由于不同特征对搜索结果的贡献度不同,TSMCS在计算最终的相似度之前对不同模块的输出进行加权得到最终代码-描述向量及贡献度排序,相较传统的余弦相似度排序效果更优。
附图说明
图1为实施例1中基于多维度匹配的代码搜索方法的流程图。
具体实施方式
为进一步了解本发明的内容,结合附图和实施例对本发明作详细描述。应当理解的是,实施例仅仅是对本发明进行解释而并非限定。
实施例1
如图1所示,本实施例提供了基于多维度匹配的代码搜索方法,其包括以下步骤:
一、从开源代码库中提取大量<code,decsting>对作为训练数据,然后用训练数据训练模型TSMCS;
二、输入一段自然语言描述,训练好的模型便将最接近的代码片段搜索出来;
模型TSMCS通过引入语义级别与结构级别匹配模块对代码和描述进行语义提取和匹配,包括:
词嵌入层:采用无监督学习的fasttext模型,使用了n-gram、子词正则化特征增强方法;Code和Docstring分别经过token处理后送入词嵌入模型进行词向量的训练。
图嵌入层:使用Deepwalk,DeepWalk分为随机游走和生成表示向量两个部分;DeepWalk方法为:利用随机游走算法从图中提取一些顶点序列;然后借助自然语言处理的思路,将生成的定点序列看作由单词组成的句子,所有的序列可以看作一个大的语料库,最有利用自然语言处理工具word2vec将每一个顶点表示为一个维度为d的向量。
代码语义表示图CSRG:基于抽象语法树,对节点进行聚合,并融入数据流特征;代码语义表示图生成过程为:首先我们通过第三方工具生成代码段的AST和DFG,对于AST,本文对其节点进行融合,相同的节点仅出现一次,其次,将DFG中的节点在融合后的AST中进行定位,将DFG的变特征加入到AST中,最后,将这两种边赋予不同的权值,即得到了代码语义表视图。
语义提取层:使用LSTM或者Transformer来进行描述的语义特征的提取;
图特征提取层:使用图注意力网络GAT去提取代码的CSRG特征;
使用GAT去提取代码的CSRG特征的方法为:
假设Graph包含N个节点,每个节点的特征向量为hi,维度是F,表示为:h={h1,h2,...,hN},hi∈RF,对节点特征向量h进行线性变换,可以得到新的特征向量h'i,维度是F′,如下所示,w为线性变换的矩阵:
h'i=Whi,W∈RF'×F;
h'={h'1,h'1,…,h'1},h'i∈RF';
节点j是节点i的邻居,则可以使用Attention机制计算节点j对于节点i的重要性,即AttentionScore:
eij=Attention(Whi,Whj);
GAT具体的Attention做法如下,把节点i,j的特征向量h'i,h'j拼接在一起,然后和一个2F′维的向量a计算内积;激活函数采用LeakyReLU,公式如下:
||表示拼接操作;经过Attention之后节点i的特征向量如下:
CRESS Block:一种基于残差和交互的匹配模块,用于找到代码段和描述的匹配关系;通过级联残差信息和注意力机制增强词句的描述能力,从而保留更多的代码和描述的文本特征;
CRESS Block匹配方法为:
其中[;]表示串联操作;
Cross Layer使用注意力机制,进行简单的镜像操作,输出两个序列的相似度得分;对于两个匹配序列a和b,长度分别为la和lb,可以表示为a=(a1,a2,...,ala),b=(b1,b2,...,blb),对于ai和bj的相似度得分eij为:
eij=F(ai)TF(bj);
F为恒等函数或者单层前馈神经网络,可以被视为一个超参数,则经过CrossLayer的序列ai,bj为:
将三个角度的特征向量进行融合计算,输入序列a的输出:
G,G1,G2,G3为参数独立的单层前馈神经网络,其中·表示element-wise乘法,经过fusionlayer的融合,输出中已经包含了各种特征。
融合注意力层:用于将对应向量融合为一个向量;
对于代码会生成三个向量,分别是DocTokenslstm、DocTokensRE2和ASGGAT,对于其对应的描述会生成两个向量,分别是DocTokenslstm和DocTokensRE2,需要将这些对应向量融合为一个向量,这里我们使用注意力机制。在文本序列模型中每个单词对最终的匹配结果的重要程度是不同的,所以需要对每个单词计算对应的注意力分值,并通过加权方式得到最终向量:所以需要对每个单词计算对应的注意力分值,并通过加权方式得到最终向量:
其中αi表示编码器隐藏状态hi对应的注意力得分。
损失函数为:
其中θ表示模型参数,表示训练数据集,β是一个超参数,sim表示两个向量之间的相似度得分,xd+d-分别表示代码片段x,与代码片段对应的描述语句d+,与代码片段不对应的描述语句d-经过模型嵌入之后维度相同的向量。
代码搜索
给定一个待搜索的代码段集合χ,对于一个输入的查询q,我们需要对数据库中所有的代码段进行相似性排序,选出与查询q最接近的k个代码片段的集合x1,x2,...,xk。对于输入的查询q,将其输入到训练好的模型中,计算得到q,然后对代码片段集合中的每个代码段x,经过模型计算得到x,然后通过以下的余弦相似度计算相似性:
其中x和q分别表示代码段和查询语句的向量,相似度数值越大,则说明对应代码段和查询语句的相关性越高。
实验
数据集
我们在两个公开的数据集上对模型进行训练和评估,一个是由发布的Java数据集,另一个是Python的数据集。两个数据集的统计数据如表1所示。
表1数据集
Dataset | Java | Python |
Train | 69708 | 55538 |
Test | 8714 | 18502 |
Avg.tokensincomment | 17.7 | 9.49 |
Avg.tokensincode | 98.8 | 35.6 |
对于Java数据集,其中包含的代码片段(java方法)是从GITHUB上收集的2015到2016年的java项目中的,其中每个代码片段包含一段对应的自然语言描述,我们按照Hu etal.的使用方法将每个处理为<method;comment>的形式。Python数据集是Barone et al.整理的,其中包含110k个平行语料和超过160k个仅代码数据,平行语料库被用于代码搜索和代码摘要任务,我们遵循Wan et al.的方法去处理这个数据集,将其分成3:1的训练集和测试集。
评价指标
MRR(Mean Reciprocal Rank)
这是一个常用来衡量搜索算法效果的指标,目前被广泛用在允许返回多个结果的问题,或者目前还比较难以解决的问题中(由于如果只返回top1的结果,准确率或召回率会很差,所以在技术不成熟的情况下,先返回多个结果)。在这类问题中,系统会对每一个返回的结果给一个置信度(打分),然后根据置信度排序,将得分高的结果排在前面返回。对于查询集合Q,返回的结果集合为q,正确结果出现的位置为F Rank,得分为F Rank的倒数,则MRR为:
MRR值越高,说明代码搜索模型的表现越好。
SuccessRate@k(Success Percentage at k)
此指标衡量在前k个结果中可能存在一个或者多个正确结果的百分比,计算方法如下:
δ为一个函数,输入为真时输出1,否则输出0。一个好的代码搜索引擎应该将正确结果放在返回值尽可能靠前的位置,这样可以方便使用人员更快速的找到自己需要的结果,同样的,R@k值越高,表明代码搜索模型的表现越好。
NormalizedDiscounted Cumulative Gain(NDCG)
归一化折损累计增益,用作排序结果的评价指标,评价排序的准确性。推荐系统通常为某用户返回一个item列表,假设列表长度为K,这时可以用NDCG@K评价该排序列表与用户真实交互列表的差距。
r(i)为第i个结果的得分,在代码搜索任务中,只有正确与否,对应的得分为1和0.在实验中,取NDCG@50作为评价指标。
实现细节
分词
描述作为自然语言,我们按照单词的间隔去分词就已经足够,但是对于程序语言来说,存在着例如驼峰命名法、大量的符号语言等元素。对于驼峰命名法,例如“getFileName”,我们可以将其分词为”get”、”file”和”name”这三个词。对于程序语言中存在的大量的符号,在一些论文中会将所有的符号去掉,只留下单词,但笔者认为,代码中的符号也蕴含着大量的语义信息,所以在本文中,我们保留了代码语法中存在的符号。
代码语义表示图CSRG提取与生成
代码的中间表示结构像AST、CFG、DFG等可以更好的体现代码的语义特征,然而分别处理这些树结构,模型复杂度的增加和模型效果的提升不成正比。如何更好的融合这些代码属性图?我们在抽象语法树的基础上提出了代码语义表示图。首先,我们借助开源工具生成抽象语法树,然后我们首先对抽象语法树进行节点融合,这里我们采取了一种非常简单的办法,就是将一段代码的抽象语法树中的相同节点就行融合,只保留一个,将原来节点的各条边汇聚到一个节点,此时,这个处理过的图中已经天然的蕴含着一部分的数据流信息。接下来,我们借助编译器提取代码的静态单赋值表示SSA,这个中间表示中包含着数据流信息,我们将SSA的信息加入到代码语义图中,此时的图已经比较完整。
为了区别代码语义图中的两种边信息,我们将AST生成的边的权值设置为0.6,将ssa生成的边的权重置为0.4。
实验结果分析
与baseline对比实验
我们选择了以下的几个模型和我们的模型进行对比:
1.codeHow:是前几年提出的SOTA的代码搜索引擎。它是以信息检索为基础的代码搜索工具,包含扩展的布尔值模型和API匹配。
2.deepcs:是基于神经网络的一个SOTA的代码检索的方法。通过将源代码和描述嵌入到同一个向量空间来进行代码-描述的匹配搜索。
3.CARLCS:一个使用CNN进行特征提取的代码搜索模型,同时使用了关联矩阵进行参数共享,取得了良好的效果。
4.mpcat:一个使用了层次遍历法(SBT)去编码代码抽象语法树和融合了文本匹配模型BiMPM模型的代码搜索模型。
我们在相同的数据集上训练和测试了Code-How,DeepCS,CARLCS,MPCAT以及我们的模型MDMCS,实验数据如表2和表3所示,从数据上看,我们的模型要优于3个基于深度学习的模型(DeepCS,CARLCS,MPCAT)和一个基于信息检索的模型codeHow。
对于java数据集,结果在表3,我们的模型的MRR值达到0.540,在R@/1/5/10达到了0.299/0.591/0.675,MDMCS在MRR分别超过了CodeHow,DeepCS,CARLCS,MPCAT 106.46%,81.01%,8.65%,5455%在R@/1/5/10超过了baseline 44.13%/40.08%/4.59%/35.01%,49.78%/34.30%/7.59%/29.19%和49.78%/34.30%/7.59%/29.19%。
实验结果表明。我们的模型的表现要好于以上的baseline模型。
表2 python数据集
Model | R@1 | R@5 | R@10 | MRR | NDCG@50 |
CodeHow | 1 | 1 | 1 | 1 | 1 |
deepcs | 1 | 1 | 1 | 1 | 1 |
CARLCS | 1 | 1 | 1 | 1 | 1 |
MPCAT | 1 | 1 | 1 | 1 | 1 |
MDMCS | 1 | 1 | 1 | 1 | 1 |
表3 java数据集
Model | R@1 | R@5 | R@10 | MRR |
CodeHow | 0.2071 | 0.3947 | 0.4820 | 0.2359 |
deepcs | 0.213105 | 0.4402111 | 0.53557 | 0.2514 |
CARLCS | 0.2854 | 0.5495 | 0.6110 | 0.3387 |
MPCAT | 0.2211 | 0.4576 | 0.5914 | 0.2936 |
MDMCS | 0.2985 | 0.5912 | 0.6754 | 0.4445 |
模型有效性分析
我们基于模型做了一些消融实验,来验证各个模块对实验结果的影响。表4展示了各个模块对实验结果的影响,从实验数据中我们可以看出,语义级别的匹配模块和结构级别的匹配模块对实验结果都有正面的影响,将各个级别的匹配模块融合之后,模型的表现要好于单独使用这些模块,这也说明在不同级别的匹配层之间的互补作用大于它们之间的冲突。通过加入和去掉Attention层,实验结果也证明了融合注意力层对模型效果的正面贡献。
表4消融实验
在本实施例中,我们提出了一个基于语义和结构双级别匹配的代码搜索模型TSMCS,模型不仅从语义级别考虑代码和描述的匹配关系,也在代码AST基础上提出了CSRG在结构上去进行代码和描述的匹配,同时加入注意力机制去平衡各个级别的匹配结果,实验证明我们的模型是有效的并且达到了SOTA的效果,超过了现有的代码搜索模型。
以上示意性的对本发明及其实施方式进行了描述,该描述没有限制性,附图中所示的也只是本发明的实施方式之一,实际的结构并不局限于此。所以,如果本领域的普通技术人员受其启示,在不脱离本发明创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本发明的保护范围。
Claims (8)
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个节点,每个节点的特征向量为hi,维度是F,表示为:h={h1,h2,...,hN},hi∈RF,对节点特征向量h进行线性变换,可以得到新的特征向量h′i,维度是F′,如下所示,w为线性变换的矩阵:
h′i=Whi,W∈RF′×F;
h′={h′1,h′1,...,h′1},h′i∈RF′;
节点j是节点i的邻居,则可以使用Attention机制计算节点j对于节点i的重要性,即AttentionScore:
eij=Attention(Whi,Whj);
GAT具体的Attention做法如下,把节点i,j的特征向量h′i,h′j拼接在一起,然后和一个2F′维的向量a计算内积;激活函数采用LeakyReLU,公式如下:
||表示拼接操作;经过Attention之后节点i的特征向量如下:
6.根据权利要求5所述的基于多维度匹配的代码搜索方法,其特征在于:CRESS Block匹配方法为:
其中[;]表示串联操作;
Cross Layer使用注意力机制,进行简单的镜像操作,输出两个序列的相似度得分;对于两个匹配序列a和b,长度分别为la和lb,可以表示为a=(a1,a2,...,ala),b=(b1,b2,...,blb),对于ai和bj的相似度得分eij为:
eij=F(ai)TF(bj);
F为恒等函数或者单层前馈神经网络,可以被视为一个超参数,则经过Cross Layer的序列ai,bj为:
将三个角度的特征向量进行融合计算,输入序列a的输出:
G,G1,G2,G3为参数独立的单层前馈神经网络,其中·表示element-wise乘法,经过fusionlayer的融合,输出中已经包含了各种特征。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111290124.4A CN114186017B (zh) | 2021-11-02 | 2021-11-02 | 基于多维度匹配的代码搜索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111290124.4A CN114186017B (zh) | 2021-11-02 | 2021-11-02 | 基于多维度匹配的代码搜索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114186017A true CN114186017A (zh) | 2022-03-15 |
CN114186017B CN114186017B (zh) | 2024-02-27 |
Family
ID=80540600
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111290124.4A Active CN114186017B (zh) | 2021-11-02 | 2021-11-02 | 基于多维度匹配的代码搜索方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114186017B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114625844A (zh) * | 2022-05-16 | 2022-06-14 | 湖南汇视威智能科技有限公司 | 一种代码搜索方法、装置及设备 |
CN115017294A (zh) * | 2022-05-31 | 2022-09-06 | 武汉大学 | 代码搜索方法 |
CN115409041A (zh) * | 2022-10-29 | 2022-11-29 | 深圳迅策科技有限公司 | 一种非结构化数据提取方法、装置、设备及存储介质 |
CN117349453A (zh) * | 2023-12-04 | 2024-01-05 | 武汉大学 | 一种基于扩展代码的深度学习代码搜索模型的加速方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100106705A1 (en) * | 2004-09-20 | 2010-04-29 | Darren Rush | Source code search engine |
US20160063102A1 (en) * | 2014-08-26 | 2016-03-03 | Codota Dot Com Ltd. | Searching and ranking of code in videos |
US20190303141A1 (en) * | 2018-03-29 | 2019-10-03 | Elasticsearch B.V. | Syntax Based Source Code Search |
CN111159223A (zh) * | 2019-12-31 | 2020-05-15 | 武汉大学 | 一种基于结构化嵌入的交互式代码搜索方法及装置 |
CN111191002A (zh) * | 2019-12-26 | 2020-05-22 | 武汉大学 | 一种基于分层嵌入的神经代码搜索方法及装置 |
CN111488137A (zh) * | 2020-04-07 | 2020-08-04 | 重庆大学 | 一种基于共同注意力表征学习的代码搜索方法 |
CN112507065A (zh) * | 2020-11-18 | 2021-03-16 | 电子科技大学 | 一种基于注释语义信息的代码搜索方法 |
US20210141863A1 (en) * | 2019-11-08 | 2021-05-13 | International Business Machines Corporation | Multi-perspective, multi-task neural network model for matching text to program code |
CN113449076A (zh) * | 2021-06-23 | 2021-09-28 | 武汉大学 | 基于全局信息和局部信息的代码搜索嵌入方法及装置 |
-
2021
- 2021-11-02 CN CN202111290124.4A patent/CN114186017B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100106705A1 (en) * | 2004-09-20 | 2010-04-29 | Darren Rush | Source code search engine |
US20160063102A1 (en) * | 2014-08-26 | 2016-03-03 | Codota Dot Com Ltd. | Searching and ranking of code in videos |
US20190303141A1 (en) * | 2018-03-29 | 2019-10-03 | Elasticsearch B.V. | Syntax Based Source Code Search |
US20210141863A1 (en) * | 2019-11-08 | 2021-05-13 | International Business Machines Corporation | Multi-perspective, multi-task neural network model for matching text to program code |
CN111191002A (zh) * | 2019-12-26 | 2020-05-22 | 武汉大学 | 一种基于分层嵌入的神经代码搜索方法及装置 |
CN111159223A (zh) * | 2019-12-31 | 2020-05-15 | 武汉大学 | 一种基于结构化嵌入的交互式代码搜索方法及装置 |
CN111488137A (zh) * | 2020-04-07 | 2020-08-04 | 重庆大学 | 一种基于共同注意力表征学习的代码搜索方法 |
CN112507065A (zh) * | 2020-11-18 | 2021-03-16 | 电子科技大学 | 一种基于注释语义信息的代码搜索方法 |
CN113449076A (zh) * | 2021-06-23 | 2021-09-28 | 武汉大学 | 基于全局信息和局部信息的代码搜索嵌入方法及装置 |
Non-Patent Citations (4)
Title |
---|
YANZHEN ZOU: "Graph Embedding based Code Search in Software Project", 《ACM》 * |
陆龙龙等: "CodeSearcher:基于自然语言功能描述的代码查询", 《计算机科学》, vol. 47, no. 9 * |
魏敏: "代码搜索研究方法进展", 《计算机应用研究》, vol. 38, no. 11 * |
黄思远等: "融合图嵌入和注意力机制的代码搜索", 《计算机科学与探索》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114625844A (zh) * | 2022-05-16 | 2022-06-14 | 湖南汇视威智能科技有限公司 | 一种代码搜索方法、装置及设备 |
CN114625844B (zh) * | 2022-05-16 | 2022-08-09 | 湖南汇视威智能科技有限公司 | 一种代码搜索方法、装置及设备 |
CN115017294A (zh) * | 2022-05-31 | 2022-09-06 | 武汉大学 | 代码搜索方法 |
CN115409041A (zh) * | 2022-10-29 | 2022-11-29 | 深圳迅策科技有限公司 | 一种非结构化数据提取方法、装置、设备及存储介质 |
CN117349453A (zh) * | 2023-12-04 | 2024-01-05 | 武汉大学 | 一种基于扩展代码的深度学习代码搜索模型的加速方法 |
CN117349453B (zh) * | 2023-12-04 | 2024-02-23 | 武汉大学 | 一种基于扩展代码的深度学习代码搜索模型的加速方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114186017B (zh) | 2024-02-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109190117B (zh) | 一种基于词向量的短文本语义相似度计算方法 | |
CN114186017B (zh) | 基于多维度匹配的代码搜索方法 | |
JP6265921B2 (ja) | テキストの意味的処理のための方法、装置および製品 | |
US10783451B2 (en) | Ensemble machine learning for structured and unstructured data | |
CN108280114B (zh) | 一种基于深度学习的用户文献阅读兴趣分析方法 | |
Li et al. | Extracting structured information from user queries with semi-supervised conditional random fields | |
CN110750640B (zh) | 基于神经网络模型的文本数据分类方法、装置及存储介质 | |
CN107895000B (zh) | 一种基于卷积神经网络的跨领域语义信息检索方法 | |
CN112256939B (zh) | 一种针对化工领域的文本实体关系抽取方法 | |
US20220004545A1 (en) | Method of searching patent documents | |
Landthaler et al. | Extending Full Text Search for Legal Document Collections Using Word Embeddings. | |
EP3864564A1 (en) | System for searching natural language documents | |
CN111274494B (zh) | 结合深度学习和协同过滤技术的复合标签推荐方法 | |
CN114218922A (zh) | 一种基于双通道图卷积网络的方面情感分析方法 | |
CN115982338A (zh) | 一种基于查询路径排序的领域知识图谱问答方法及系统 | |
Abdollahpour et al. | Image classification using ontology based improved visual words | |
Benghuzzi et al. | An investigation of keywords extraction from textual documents using Word2Vec and Decision Tree | |
ALQARALEH | Turkish Sentiment Analysis System via Ensemble Learning | |
Ma et al. | Enhanced semantic representation learning for implicit discourse relation classification | |
Musdholifah et al. | FVEC feature and machine learning approach for Indonesian opinion mining on YouTube comments | |
CN116361438A (zh) | 基于文本-知识扩展图协同推理网络的问答方法及系统 | |
CN111581353B (zh) | 一种基于案情描述的类案推送方法与装置 | |
CN113111288A (zh) | 一种融合非结构化和结构化信息的Web服务分类方法 | |
Saidi et al. | New approch of opinion analysis from big social data environment using a supervised machine learning algirithm | |
Berenguer et al. | Word embeddings for retrieving tabular data from research publications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |