CN114186017A - 基于多维度匹配的代码搜索方法 - Google Patents

基于多维度匹配的代码搜索方法 Download PDF

Info

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
Application number
CN202111290124.4A
Other languages
English (en)
Other versions
CN114186017B (zh
Inventor
蔡波
胡毅
瞿志恒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan University WHU
Original Assignee
Wuhan University WHU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan University WHU filed Critical Wuhan University WHU
Priority to CN202111290124.4A priority Critical patent/CN114186017B/zh
Publication of CN114186017A publication Critical patent/CN114186017A/zh
Application granted granted Critical
Publication of CN114186017B publication Critical patent/CN114186017B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • G06F16/334Query execution
    • G06F16/3344Query execution using natural language analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/38Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
    • G06F16/383Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually using metadata automatically derived from the content
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/284Lexical analysis, e.g. tokenisation or collocates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/30Semantic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/088Non-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'iRF';
节点j是节点i的邻居,则可以使用Attention机制计算节点j对于节点i的重要性,即AttentionScore:
eij=Attention(Whi,Whj);
Figure BDA0003334588020000031
GAT具体的Attention做法如下,把节点i,j的特征向量h'i,h'j拼接在一起,然后和一个2F′维的向量a计算内积;激活函数采用LeakyReLU,公式如下:
Figure BDA0003334588020000032
||表示拼接操作;经过Attention之后节点i的特征向量如下:
Figure BDA0003334588020000033
作为优选,CRESS Block匹配方法为:
对于一个长度为l的序列,我们将第n个block的输入输出分别表示为:
Figure BDA0003334588020000034
Figure BDA0003334588020000035
第n个block的输入为第一次的输入和前两个block的输出的串联:
Figure BDA0003334588020000036
其中[;]表示串联操作;
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为:
Figure BDA0003334588020000041
Figure BDA0003334588020000042
将三个角度的特征向量进行融合计算,输入序列a的输出:
Figure BDA0003334588020000043
Figure BDA0003334588020000044
Figure BDA0003334588020000045
Figure BDA0003334588020000046
G,G1,G2,G3为参数独立的单层前馈神经网络,其中·表示element-wise乘法,经过fusionlayer的融合,输出中已经包含了各种特征。
作为优选,融合注意力层中,对每个单词计算对应的注意力分值,并通过加权方式得到最终向量:
Figure BDA0003334588020000047
其中αi表示编码器隐藏状态hi对应的注意力得分。
作为优选,损失函数为:
Figure BDA0003334588020000048
其中θ表示模型参数,
Figure BDA0003334588020000049
表示训练数据集,β是一个超参数,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);
Figure BDA0003334588020000061
GAT具体的Attention做法如下,把节点i,j的特征向量h'i,h'j拼接在一起,然后和一个2F′维的向量a计算内积;激活函数采用LeakyReLU,公式如下:
Figure BDA0003334588020000071
||表示拼接操作;经过Attention之后节点i的特征向量如下:
Figure BDA0003334588020000072
CRESS Block:一种基于残差和交互的匹配模块,用于找到代码段和描述的匹配关系;通过级联残差信息和注意力机制增强词句的描述能力,从而保留更多的代码和描述的文本特征;
CRESS Block匹配方法为:
对于一个长度为l的序列,我们将第n个block的输入输出分别表示为:
Figure BDA0003334588020000073
Figure BDA0003334588020000074
第n个block的输入为第一次的输入和前两个block的输出的串联:
Figure BDA0003334588020000075
其中[;]表示串联操作;
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为:
Figure BDA0003334588020000076
Figure BDA0003334588020000077
将三个角度的特征向量进行融合计算,输入序列a的输出:
Figure BDA0003334588020000081
Figure BDA0003334588020000082
Figure BDA0003334588020000083
Figure BDA0003334588020000084
G,G1,G2,G3为参数独立的单层前馈神经网络,其中·表示element-wise乘法,经过fusionlayer的融合,输出中已经包含了各种特征。
融合注意力层:用于将对应向量融合为一个向量;
对于代码会生成三个向量,分别是DocTokenslstm、DocTokensRE2和ASGGAT,对于其对应的描述会生成两个向量,分别是DocTokenslstm和DocTokensRE2,需要将这些对应向量融合为一个向量,这里我们使用注意力机制。在文本序列模型中每个单词对最终的匹配结果的重要程度是不同的,所以需要对每个单词计算对应的注意力分值,并通过加权方式得到最终向量:所以需要对每个单词计算对应的注意力分值,并通过加权方式得到最终向量:
Figure BDA0003334588020000085
其中αi表示编码器隐藏状态hi对应的注意力得分。
损失函数为:
Figure BDA0003334588020000086
其中θ表示模型参数,
Figure BDA0003334588020000087
表示训练数据集,β是一个超参数,sim表示两个向量之间的相似度得分,xd+d-分别表示代码片段x,与代码片段对应的描述语句d+,与代码片段不对应的描述语句d-经过模型嵌入之后维度相同的向量。
代码搜索
给定一个待搜索的代码段集合χ,对于一个输入的查询q,我们需要对数据库中所有的代码段进行相似性排序,选出与查询q最接近的k个代码片段的集合x1,x2,...,xk。对于输入的查询q,将其输入到训练好的模型中,计算得到q,然后对代码片段集合中的每个代码段x,经过模型计算得到x,然后通过以下的余弦相似度计算相似性:
Figure BDA0003334588020000091
其中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为:
Figure BDA0003334588020000101
MRR值越高,说明代码搜索模型的表现越好。
SuccessRate@k(Success Percentage at k)
此指标衡量在前k个结果中可能存在一个或者多个正确结果的百分比,计算方法如下:
Figure BDA0003334588020000102
δ为一个函数,输入为真时输出1,否则输出0。一个好的代码搜索引擎应该将正确结果放在返回值尽可能靠前的位置,这样可以方便使用人员更快速的找到自己需要的结果,同样的,R@k值越高,表明代码搜索模型的表现越好。
NormalizedDiscounted Cumulative Gain(NDCG)
归一化折损累计增益,用作排序结果的评价指标,评价排序的准确性。推荐系统通常为某用户返回一个item列表,假设列表长度为K,这时可以用NDCG@K评价该排序列表与用户真实交互列表的差距。
Figure BDA0003334588020000103
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消融实验
Figure BDA0003334588020000121
Figure BDA0003334588020000131
在本实施例中,我们提出了一个基于语义和结构双级别匹配的代码搜索模型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);
Figure FDA0003334588010000021
GAT具体的Attention做法如下,把节点i,j的特征向量h′i,h′j拼接在一起,然后和一个2F′维的向量a计算内积;激活函数采用LeakyReLU,公式如下:
Figure FDA0003334588010000022
||表示拼接操作;经过Attention之后节点i的特征向量如下:
Figure FDA0003334588010000023
6.根据权利要求5所述的基于多维度匹配的代码搜索方法,其特征在于:CRESS Block匹配方法为:
对于一个长度为l的序列,我们将第n个block的输入输出分别表示为:
Figure FDA0003334588010000031
Figure FDA0003334588010000032
第n个block的输入为第一次的输入和前两个block的输出的串联:
Figure FDA0003334588010000033
其中[;]表示串联操作;
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为:
Figure FDA0003334588010000034
Figure FDA0003334588010000035
将三个角度的特征向量进行融合计算,输入序列a的输出:
Figure FDA0003334588010000036
Figure FDA0003334588010000037
Figure FDA0003334588010000038
Figure FDA0003334588010000039
G,G1,G2,G3为参数独立的单层前馈神经网络,其中·表示element-wise乘法,经过fusionlayer的融合,输出中已经包含了各种特征。
7.根据权利要求6所述的基于多维度匹配的代码搜索方法,其特征在于:融合注意力层中,对每个单词计算对应的注意力分值,并通过加权方式得到最终向量:
Figure FDA0003334588010000041
其中αi表示编码器隐藏状态hi对应的注意力得分。
8.根据权利要求7所述的基于多维度匹配的代码搜索方法,其特征在于:损失函数为:
Figure FDA0003334588010000042
其中θ表示模型参数,
Figure FDA0003334588010000043
表示训练数据集,β是一个超参数,sim表示两个向量之间的相似度得分,xd+d-分别表示代码片段x,与代码片段对应的描述语句d+,与代码片段不对应的描述语句d-经过模型嵌入之后维度相同的向量。
CN202111290124.4A 2021-11-02 2021-11-02 基于多维度匹配的代码搜索方法 Active CN114186017B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 武汉大学 基于全局信息和局部信息的代码搜索嵌入方法及装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
YANZHEN ZOU: "Graph Embedding based Code Search in Software Project", 《ACM》 *
陆龙龙等: "CodeSearcher:基于自然语言功能描述的代码查询", 《计算机科学》, vol. 47, no. 9 *
魏敏: "代码搜索研究方法进展", 《计算机应用研究》, vol. 38, no. 11 *
黄思远等: "融合图嵌入和注意力机制的代码搜索", 《计算机科学与探索》 *

Cited By (6)

* Cited by examiner, † Cited by third party
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