CN113449076A - 基于全局信息和局部信息的代码搜索嵌入方法及装置 - Google Patents
基于全局信息和局部信息的代码搜索嵌入方法及装置 Download PDFInfo
- Publication number
- CN113449076A CN113449076A CN202110697410.6A CN202110697410A CN113449076A CN 113449076 A CN113449076 A CN 113449076A CN 202110697410 A CN202110697410 A CN 202110697410A CN 113449076 A CN113449076 A CN 113449076A
- Authority
- CN
- China
- Prior art keywords
- code
- vector
- information
- query
- module
- 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 36
- 239000013598 vector Substances 0.000 claims abstract description 208
- 230000003993 interaction Effects 0.000 claims abstract description 27
- 238000000605 extraction Methods 0.000 claims description 74
- 238000012549 training Methods 0.000 claims description 69
- 230000006870 function Effects 0.000 claims description 51
- 230000002452 interceptive effect Effects 0.000 claims description 32
- 238000004364 calculation method Methods 0.000 claims description 27
- 239000011159 matrix material Substances 0.000 claims description 24
- 238000007781 pre-processing Methods 0.000 claims description 22
- 230000011218 segmentation Effects 0.000 claims description 22
- 238000010276 construction Methods 0.000 claims description 16
- 238000012795 verification Methods 0.000 claims description 14
- 238000012545 processing Methods 0.000 claims description 12
- 230000007246 mechanism Effects 0.000 claims description 9
- 239000000284 extract Substances 0.000 claims description 8
- 238000012360 testing method Methods 0.000 claims description 8
- 239000000203 mixture Substances 0.000 claims description 7
- 239000002131 composite material Substances 0.000 claims description 6
- 238000011176 pooling Methods 0.000 claims description 6
- 230000009466 transformation Effects 0.000 claims description 6
- 239000000463 material Substances 0.000 claims description 2
- 230000002708 enhancing effect Effects 0.000 abstract description 6
- 230000004927 fusion Effects 0.000 abstract 1
- 230000008569 process Effects 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 3
- 238000013527 convolutional neural network Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000003203 everyday effect Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 230000015654 memory Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 238000013519 translation Methods 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
- 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/289—Phrasal analysis, e.g. finite state techniques or chunking
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Molecular Biology (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Biomedical Technology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种基于全局信息和局部信息的代码搜索嵌入方法及装置。本发明中设计了一个共享的线性层和卷积层接在ON‑LSTM后面,利用共享的网络参数,能够将“双塔”ON‑LSTM模型输出后的顺序信息融合增强,加强对全局信息的利用;巧妙地应用ON‑LSTM的结构特性,选择其中的结构信息并使用CNN增强,通过曼哈顿距离的计算,加强对局部信息的利用;通过将各个模块输出的交互向量、结构向量、全局信息向量拼接成特征向量,再计算相似度,平衡全局信息和局部信息。
Description
技术领域
本发明涉及数据搜索技术领域,尤其涉及一种基于全局信息和局部信息的代码搜索嵌入方法及装置。
背景技术
信息化时代,软件开发的需求增加,开发人员对技术的讨论需求强烈。有研究显示,超过60%的开发者每天搜索源代码。网络问答社区可以通过输入描述搜索代码,较开源项目,能够让研发人员更方便快速地找到符合要求的代码,能够就程序中遇到的具体问题得到解决方案,提升软件开发的效率。因此,自然语言查询与目标代码之间的匹配,即代码搜索,得到了越来越多研究人员的关注。
由于代码段和自然语言的语义差异、代码语言的复杂多样、问答社区的问答质量参差不齐以及一个问题对应多个答案等问题,代码搜索在技术上仍存在极大的探索空间。
早期方法借助于查询和源代码中固有的术语进行匹配,因此,无法灵活地处理不相关的关键词,模型迁移能力不强。然而,随着神经网络在各个领域的大放异彩,也受机器翻译的启发,近期有不少工作,通过引入深度神经网络,如卷积网络、循环神经网络等,自动地抽取自然语言查询和源代码的语义特征,试图解决自然语言和代码的语义差异。
UNIF方法使用注意力机制嵌入的代码片段。CODE-NN方法使用长短期记忆网络及注意力机制生成自然语言。Deepsim方法挖掘代码功能相似性的信息。HECS使用改进的长短期记忆网络提取层次结构信息。这些方法取得了不错的效果,但是仍有改进空间。
本申请发明人发现现有技术的方法,至少存在如下技术问题:
HECS按照顺序依次抽取代码段和查询的结构信息,并使用交互注意力机制,强调了交互信息,但未能将模型不同阶段的信息即局部信息和全局信息充分利用,只考虑到了最终阶段的信息。
发明内容
为解决上述技术问题,本发明提供一种基于全局信息和局部信息的代码搜索嵌入方法及装置。
第一方面,本发明提供一种基于全局信息和局部信息的代码搜索嵌入方法,所述基于全局信息和局部信息的代码搜索嵌入方法包括:
构建局部信息抽取模块,用于得到代码和查询的顺序信息向量、结构向量以及交互向量;
构建全局信息抽取模块,用于根据代码和查询的顺序信息向量得到代码和查询的全局信息向量;
分别将代码和查询的结构向量、交互向量以及全局信息向量拼接,得到代码和查询的特征向量;
构建相似度匹配模块,设置训练网络的综合损失函数,其中,所述相似度匹配模块,包括计算查询和代码的特征向量的余弦相似度的第一计算模块,以及计算查询和代码的第二结构向量的曼哈顿距离的第二计算模块,所述综合损失函数包括合页损失函数、有权重的曼哈顿距离以及正则损失;
对代码-描述匹配对语料进行结构化分词以及预处理,得到结构化词嵌入;
将结构化词嵌入先加载至局部信息抽取模块,再加载至全局信息抽取模块,设置初始化参数并利用训练集来训练拟合模型的参数,在验证集上迭代一定次数直到综合损失函数收敛,得到训练好的模型;
利用训练好的模型对待处理的查询进行预测,获得与待处理的查询对应的代码搜索结果。
可选的,所述对代码-描述匹配对语料进行结构化分词以及预处理,得到结构化词嵌入的步骤包括:
对代码-描述匹配对语料进行解析,实现结构化分词;
依次对结构化分词得到的文本进行预处理,预处理包括去冗余、去除长度过小的样例、不完全的代码段;
构造多个三元组样本对<Q,C+,C->作为训练实例,三元组样本对由一个查询Q以及对应的正代码C+和负代码C-组成,C+表示Q对应的正确的代码,C-表示Q对应的不正确的代码;
按照预设比例对多个三元组样本对进行划分,得到训练集、验证集以及测试集;
采用已有的预训练模型对训练集中的三元组样本进行词嵌入训练,得到结构化词嵌入。
可选的,所述构建局部信息抽取模块,用于得到代码和查询的顺序信息向量、结构向量以及交互向量的步骤包括:
构建顺序信息抽取子模块:
使用ON-LSTM作为顺序信息抽取子模块,顺序地将由词嵌入构成的代码和查询,输入到ON-LSTM网络中,得到最终的隐藏状态:
构建结构信息抽取子模块:
ON-LSTM能够在训练完成后,可以直接抽取出序列的结构信息,而不依赖于句子结构,抽取方法是将ON-LSTM结构中对于序列的结构信息有记忆的中间状态累加:
其中,是ON-LSTM中主遗忘门未经cumsum处理前的状态,seqlen是固定的序列长度,经过等式变换后,得到通过计算结构信息的等式,经由ON-LSTM输出的向量有两类,一类是顺序信息向量另一类是经过矩阵乘法操作后扩充为和顺序信息向量相同维度的初始结构向量
为了增强结构信息,分别使用卷积层对查询和代码段的初始结构向量进行信息增强处理,得到卷积层对查询和代码段的结构向量:
构建交互信息抽取子模块;
将查询的顺序信息向量和代码的顺序信息向量,通过交互注意力子模块,强调代码和查询两者最相关的部分,使用注意力机制为QC的交互表示构造注意矩阵M,包含了查询Q和代码C之间的交互信息,注意矩阵如下:
其中,Wq∈R2u×a,Wc∈R2u×a,V∈Ra是注意力参数,a是注意力维度;
使用池化操作,分别从代码方向和查询方向推导出基于池的投影向量,使用按行和按列值在M上的最大池得到mQ、mC,计算权重向量δQ∈R|Q|和δC∈R|C|如下所示:
δQ=softmax(mQ);δC=softmax(mC);
VQ=δQhQ;VC=δChC。
可选的,所述构建全局信息抽取模块,用于根据代码和查询的顺序信息向量得到代码和查询的全局信息向量的步骤包括:
构建全局信息抽取模块,通过共享的线性层和卷积层,对代码和查询的顺序信息向量进行计算得到代码和查询的全局信息向量。
可选的,第一计算模块为:
合页损失函数为:
约束模型对正确的查询代码对给分高,对错误的查询代码对给分低:
当在一组三元组训练时,分别预测<Q,C+>和<Q,C->样本对的余弦相似度,并减少损失函数的值:
第二计算模块为:
综合损失函数为:
γ=l(θ)+man*ε
其中,ε为代码和查询的结构向量的曼哈顿距离在损失函数中所占的权重。
第二方面,本发明还提供一种基于全局信息和局部信息的代码搜索嵌入装置,所述基于全局信息和局部信息的代码搜索嵌入装置包括:
第一构建模块,用于构建局部信息抽取模块,局部信息抽取模块用于得到代码和查询的顺序信息向量、结构向量以及交互向量;
第二构建模块,用于构建全局信息抽取模块,全局信息抽取模块用于根据代码和查询的顺序信息向量得到代码和查询的全局信息向量;
拼接模块,用于分别将代码和查询的结构向量、交互向量以及全局信息向量拼接,得到代码和查询的特征向量;
第三构建模块,用于构建相似度匹配模块,设置训练网络的综合损失函数,其中,所述相似度匹配模块,包括计算查询和代码的特征向量的余弦相似度的第一计算模块,以及计算查询和代码的第二结构向量的曼哈顿距离的第二计算模块,所述综合损失函数包括合页损失函数、有权重的曼哈顿距离以及正则损失;
处理模块,用于对代码-描述匹配对语料进行结构化分词以及预处理,得到结构化词嵌入;
训练模块,用于将结构化词嵌入先加载至局部信息抽取模块,再加载至全局信息抽取模块,设置初始化参数并利用训练集来训练拟合模型的参数,在验证集上迭代一定次数直到综合损失函数收敛,得到训练好的模型;
预测模块,用于利用训练好的模型对待处理的查询进行预测,获得与待处理的查询对应的代码搜索结果。
可选的,所述处理模块,用于:
对代码-描述匹配对语料进行解析,实现结构化分词;
依次对结构化分词得到的文本进行预处理,预处理包括去冗余、去除长度过小的样例、不完全的代码段;
构造多个三元组样本对<Q,C+,C->作为训练实例,三元组样本对由一个查询Q以及对应的正代码C+和负代码C-组成,C+表示Q对应的正确的代码,C-表示Q对应的不正确的代码;
按照预设比例对多个三元组样本对进行划分,得到训练集、验证集以及测试集;
采用已有的预训练模型对训练集中的三元组样本进行词嵌入训练,得到结构化词嵌入。
可选的,所述第一构建模块,用于:
构建顺序信息抽取子模块:
使用ON-LSTM作为顺序信息抽取子模块,顺序地将由词嵌入构成的代码和查询,输入到ON-LSTM网络中,得到最终的隐藏状态:
构建结构信息抽取子模块:
ON-LSTM能够在训练完成后,可以直接抽取出序列的结构信息,而不依赖于句子结构,抽取方法是将ON-LSTM结构中对于序列的结构信息有记忆的中间状态累加:
其中,是ON-LSTM中主遗忘门未经cumsum处理前的状态,seqlen是固定的序列长度,经过等式变换后,得到通过计算结构信息的等式,经由ON-LSTM输出的向量有两类,一类是顺序信息向量另一类是经过矩阵乘法操作后扩充为和顺序信息向量相同维度的初始结构向量
为了增强结构信息,分别使用卷积层对查询和代码段的初始结构向量进行信息增强处理,得到卷积层对查询和代码段的结构向量:
构建交互信息抽取子模块;
将查询的顺序信息向量和代码的顺序信息向量,通过交互注意力子模块,强调代码和查询两者最相关的部分,使用注意力机制为QC的交互表示构造注意矩阵M,包含了查询Q和代码C之间的交互信息,注意矩阵如下:
其中,Wq∈R2u×a,Wc∈R2u×a,V∈Ra是注意力参数,a是注意力维度;
使用池化操作,分别从代码方向和查询方向推导出基于池的投影向量,使用按行和按列值在M上的最大池得到mQ、mC,计算权重向量δQ∈R|Q|和δC∈R|C|如下所示:
δQ=softmax(mQ);δC=softmax(mC);
VQ=δQhQ;VC=δChC。
可选的,所述第二构建模块,用于:
构建全局信息抽取模块,通过共享的线性层和卷积层,对代码和查询的顺序信息向量进行计算得到代码和查询的全局信息向量。
可选的,所述第一计算模块为:
合页损失函数为:
约束模型对正确的查询代码对给分高,对错误的查询代码对给分低:
当在一组三元组训练时,分别预测<Q,C+>和<Q,C->样本对的余弦相似度,并减少损失函数的值:
第二计算模块为:
综合损失函数为:
γ=l(θ)+man*ε
其中,ε为代码和查询的结构向量的曼哈顿距离在损失函数中所占的权重。
本发明中,设计了一个共享的线性层和卷积层接在ON-LSTM后面,利用共享的网络参数,能够将“双塔”ON-LSTM模型输出后的顺序信息融合增强,加强对全局信息的利用;巧妙地应用ON-LSTM的结构特性,选择其中的结构信息并使用CNN增强,通过曼哈顿距离的计算,加强对局部信息的利用;通过将各个模块输出的交互向量、结构向量、全局信息向量拼接成特征向量,再计算相似度,平衡全局信息和局部信息。
附图说明
图1为本发明基于全局信息和局部信息的代码搜索嵌入方法一实施例的流程示意图;
图2为本发明基于全局信息和局部信息的代码搜索嵌入装置一实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
第一方面,本发明实施例提供了一种基于全局信息和局部信息的代码搜索嵌入方法。
一实施例中,参照图1,图1为本发明基于全局信息和局部信息的代码搜索嵌入方法一实施例的流程示意图。如图1所示,
基于全局信息和局部信息的代码搜索嵌入方法包括:
步骤S10,构建局部信息抽取模块,用于得到代码和查询的顺序信息向量、结构向量以及交互向量;
本实施例中,局部信息抽取模块包括顺序信息抽取子模块、构建结构信息抽取子模块以及交互信息抽取子模块,通过这些子模块得到代码和查询的顺序信息向量、结构向量以及交互向量。
进一步地,一实施例中,步骤S10包括:
构建顺序信息抽取子模块:
使用ON-LSTM作为顺序信息抽取子模块,顺序地将由词嵌入构成的代码和查询,输入到ON-LSTM网络中,得到最终的隐藏状态:
本实施例中,使用ON-LSTM作为顺序信息抽取子模块,ON-LSTM的改进之处主要在于:隐藏状态的更新公式不一样,使隐藏单元能够根据当前输入的结构信息和历史结构信息的比较结果决定更新区间以及更新公式:
其中,cumsum表示累加和。
隐藏状态的更新规则是根据层级信息来决定当前输入编码信息的保留与否,如下:
构建结构信息抽取子模块:
ON-LSTM能够在训练完成后,可以直接抽取出序列的结构信息,而不依赖于句子结构,抽取方法是将ON-LSTM结构中对于序列的结构信息有记忆的中间状态累加:
其中,是ON-LSTM中主遗忘门未经cumsum处理前的状态,seqlen是固定的序列长度,经过等式变换后,得到通过计算结构信息的等式,经由ON-LSTM输出的向量有两类,一类是顺序信息向量另一类是经过矩阵乘法操作后扩充为和顺序信息向量相同维度的初始结构向量
为了增强结构信息,分别使用卷积层对查询和代码段的初始结构向量进行信息增强处理,得到卷积层对查询和代码段的结构向量:
构建交互信息抽取子模块;
将查询的顺序信息向量和代码的顺序信息向量,通过交互注意力子模块,强调代码和查询两者最相关的部分,使用注意力机制为QC的交互表示构造注意矩阵M,包含了查询Q和代码C之间的交互信息,注意矩阵如下:
其中,Wq∈R2u×a,Wc∈R2u×a,V∈Ra是注意力参数,a是注意力维度;
使用池化操作,分别从代码方向和查询方向推导出基于池的投影向量,使用按行和按列值在M上的最大池得到mQ、mC,计算权重向量δQ∈R|Q|和δC∈R|C|如下所示:
δQ=softmax(mQ);δC=softmax(mC);
VQ=δQhQ;VC=δChC。
步骤S20,构建全局信息抽取模块,用于根据代码和查询的顺序信息向量得到代码和查询的全局信息向量;
本实施例中,步骤S20包括:
构建全局信息抽取模块,通过共享的线性层和卷积层,对代码和查询的顺序信息向量进行计算得到代码和查询的全局信息向量。
本实施例中,构建全局信息抽取模块,通过共享的线性层和卷积层,对顺序信息向量计算全局的信息,注重通过网络的共享共同学习查询代码对的全局信息和,以查询为例:
gQ=CNN(dense(hQ))
其中,hQ为未经注意力模块处理的查询顺序信息向量。
步骤S30,分别将代码和查询的结构向量、交互向量以及全局信息向量拼接,得到代码和查询的特征向量;
本实施例中,分别将代码和查询的交互向量、结构向量、全局信息向量进行拼接,得到特征向量。以查询为例:
Q=[VQ;dcQ;gQ]
其中,VQ为查询的交互向量,dcQ为查询的结构向量;gQ为查询的全局信息向量。
步骤S40,构建相似度匹配模块,设置训练网络的综合损失函数,其中,所述相似度匹配模块,包括计算查询和代码的特征向量的余弦相似度的第一计算模块,以及计算查询和代码的第二结构向量的曼哈顿距离的第二计算模块,所述综合损失函数包括合页损失函数、有权重的曼哈顿距离以及正则损失;
本实施例中,第一计算模块为:
合页损失函数为:
约束模型对正确的查询代码对给分高,对错误的查询代码对给分低:
当在一组三元组训练时,分别预测<Q,C+>和<Q,C->样本对的余弦相似度,并减少损失函数的值:
第二计算模块为:
综合损失函数为:
γ=l(θ)+man*ε
其中,ε为代码和查询的结构向量的曼哈顿距离在损失函数中所占的权重。
步骤S50,对代码-描述匹配对语料进行结构化分词以及预处理,得到结构化词嵌入;
本实施例中,步骤S50包括:
对代码-描述匹配对语料进行解析,实现结构化分词;依次对结构化分词得到的文本进行预处理,预处理包括去冗余、去除长度过小的样例、不完全的代码段;构造多个三元组样本对<Q,C+,C->作为训练实例,三元组样本对由一个查询Q以及对应的正代码C+和负代码C-组成,C+表示Q对应的正确的代码,C-表示Q对应的不正确的代码;按照预设比例对多个三元组样本对进行划分,得到训练集、验证集以及测试集;采用已有的预训练模型对训练集中的三元组样本进行词嵌入训练,得到结构化词嵌入。
本实施例中,可以从StackOverflow上的帖子中构建原始数据集,其中包括两种程序语言(Python和C#)中的帖子,筛选后得到代码-描述匹配对语料;然后对代码-描述匹配对语料进行解析,实现结构化分词;依次对结构化分词得到的文本进行预处理,预处理包括去冗余、去除长度过小的样例、不完全的代码段;构造多个三元组样本对<Q,C+,C->作为训练实例,三元组样本对由一个查询Q以及对应的正代码C+和负代码C-组成,C+表示Q对应的正确的代码,C-表示Q对应的不正确的代码;按照预设比例对多个三元组样本对进行划分,得到训练集、验证集以及测试集;采用已有的预训练模型对训练集中的三元组样本进行词嵌入训练,得到结构化词嵌入。
步骤S60,将结构化词嵌入先加载至局部信息抽取模块,再加载至全局信息抽取模块,设置初始化参数并利用训练集来训练拟合模型的参数,在验证集上迭代一定次数直到综合损失函数收敛,得到训练好的模型;
本实施例中,将基于步骤S50得到的结构化词嵌入先加载至局部信息抽取模块,再加载至全局信息抽取模块,设置初始化参数并利用训练集来训练拟合模型的参数,在验证集上迭代一定次数直到综合损失函数收敛,得到训练好的模型。在这之后,还可以保存训练得到的最好模型,在测试集上验证性能。
步骤S70,利用训练好的模型对待处理的查询进行预测,获得与待处理的查询对应的代码搜索结果。
本实施例中,将待处理的查询输入训练好的模型,即可通过训练好的模型对待处理的查询进行预测,获得与待处理的查询对应的代码搜索结果。
本实施例中,设计了一个共享的线性层和卷积层接在ON-LSTM后面,利用共享的网络参数,能够将“双塔”ON-LSTM模型输出后的顺序信息融合增强,加强对全局信息的利用;巧妙地应用ON-LSTM的结构特性,选择其中的结构信息并使用CNN增强,通过曼哈顿距离的计算,加强对局部信息的利用;通过将各个模块输出的交互向量、结构向量、全局信息向量拼接成特征向量,再计算相似度,平衡全局信息和局部信息。
第二方面,本发明实施例还提供一种基于全局信息和局部信息的代码搜索嵌入装置。
一实施例中,参照图2,图2为本发明基于全局信息和局部信息的代码搜索嵌入装置一实施例的功能模块示意图。如图2所示,基于全局信息和局部信息的代码搜索嵌入装置包括:
第一构建模块10,用于构建局部信息抽取模块,局部信息抽取模块用于得到代码和查询的顺序信息向量、结构向量以及交互向量;
第二构建模块20,用于构建全局信息抽取模块,全局信息抽取模块用于根据代码和查询的顺序信息向量得到代码和查询的全局信息向量;
拼接模块30,用于分别将代码和查询的结构向量、交互向量以及全局信息向量拼接,得到代码和查询的特征向量;
第三构建模块40,用于构建相似度匹配模块,设置训练网络的综合损失函数,其中,所述相似度匹配模块,包括计算查询和代码的特征向量的余弦相似度的第一计算模块,以及计算查询和代码的第二结构向量的曼哈顿距离的第二计算模块,所述综合损失函数包括合页损失函数、有权重的曼哈顿距离以及正则损失;
处理模块50,用于对代码-描述匹配对语料进行结构化分词以及预处理,得到结构化词嵌入;
训练模块60,用于将结构化词嵌入先加载至局部信息抽取模块,再加载至全局信息抽取模块,设置初始化参数并利用训练集来训练拟合模型的参数,在验证集上迭代一定次数直到综合损失函数收敛,得到训练好的模型;
预测模块70,用于利用训练好的模型对待处理的查询进行预测,获得与待处理的查询对应的代码搜索结果。
进一步地,一实施例中,所述处理模块50,用于:
对代码-描述匹配对语料进行解析,实现结构化分词;
依次对结构化分词得到的文本进行预处理,预处理包括去冗余、去除长度过小的样例、不完全的代码段;
构造多个三元组样本对<Q,C+,C->作为训练实例,三元组样本对由一个查询Q以及对应的正代码C+和负代码C-组成,C+表示Q对应的正确的代码,C-表示Q对应的不正确的代码;
按照预设比例对多个三元组样本对进行划分,得到训练集、验证集以及测试集;
采用已有的预训练模型对训练集中的三元组样本进行词嵌入训练,得到结构化词嵌入。
进一步地,一实施例中,所述第一构建模块10,用于:
构建顺序信息抽取子模块:
使用ON-LSTM作为顺序信息抽取子模块,顺序地将由词嵌入构成的代码和查询,输入到ON-LSTM网络中,得到最终的隐藏状态:
构建结构信息抽取子模块:
ON-LSTM能够在训练完成后,可以直接抽取出序列的结构信息,而不依赖于句子结构,抽取方法是将ON-LSTM结构中对于序列的结构信息有记忆的中间状态累加:
其中,是ON-LSTM中主遗忘门未经cumsum处理前的状态,seqlen是固定的序列长度,经过等式变换后,得到通过计算结构信息的等式,经由ON-LSTM输出的向量有两类,一类是顺序信息向量另一类是经过矩阵乘法操作后扩充为和顺序信息向量相同维度的初始结构向量
为了增强结构信息,分别使用卷积层对查询和代码段的初始结构向量进行信息增强处理,得到卷积层对查询和代码段的结构向量:
构建交互信息抽取子模块;
将查询的顺序信息向量和代码的顺序信息向量,通过交互注意力子模块,强调代码和查询两者最相关的部分,使用注意力机制为QC的交互表示构造注意矩阵M,包含了查询Q和代码C之间的交互信息,注意矩阵如下:
其中,Wq∈R2u×a,Wc∈R2u×a,V∈Ra是注意力参数,a是注意力维度;
使用池化操作,分别从代码方向和查询方向推导出基于池的投影向量,使用按行和按列值在M上的最大池得到mQ、mC,计算权重向量δQ∈R|Q|和δC∈R|C|如下所示:
δQ=softmax(mQ);δC=softmax(mC);
VQ=δQhQ;VC=δChC。
进一步地,一实施例中,所述第二构建模块20,用于:
构建全局信息抽取模块,通过共享的线性层和卷积层,对代码和查询的顺序信息向量进行计算得到代码和查询的全局信息向量。
进一步地,一实施例中,所述第一计算模块为:
合页损失函数为:
约束模型对正确的查询代码对给分高,对错误的查询代码对给分低:
当在一组三元组训练时,分别预测<Q,C+>和<Q,C->样本对的余弦相似度,并减少损失函数的值:
第二计算模块为:
综合损失函数为:
γ=l(θ)+man*ε
其中,ε为代码和查询的结构向量的曼哈顿距离在损失函数中所占的权重。
其中,上述基于全局信息和局部信息的代码搜索嵌入装置中各个模块的功能实现与上述基于全局信息和局部信息的代码搜索嵌入方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种基于全局信息和局部信息的代码搜索嵌入方法,其特征在于,所述基于全局信息和局部信息的代码搜索嵌入方法包括:
构建局部信息抽取模块,用于得到代码和查询的顺序信息向量、结构向量以及交互向量;
构建全局信息抽取模块,用于根据代码和查询的顺序信息向量得到代码和查询的全局信息向量;
分别将代码和查询的结构向量、交互向量以及全局信息向量拼接,得到代码和查询的特征向量;
构建相似度匹配模块,设置训练网络的综合损失函数,其中,所述相似度匹配模块,包括计算查询和代码的特征向量的余弦相似度的第一计算模块,以及计算查询和代码的第二结构向量的曼哈顿距离的第二计算模块,所述综合损失函数包括合页损失函数、有权重的曼哈顿距离以及正则损失;
对代码-描述匹配对语料进行结构化分词以及预处理,得到结构化词嵌入;
将结构化词嵌入先加载至局部信息抽取模块,再加载至全局信息抽取模块,设置初始化参数并利用训练集来训练拟合模型的参数,在验证集上迭代一定次数直到综合损失函数收敛,得到训练好的模型;
利用训练好的模型对待处理的查询进行预测,获得与待处理的查询对应的代码搜索结果。
2.如权利要求1所述的基于全局信息和局部信息的代码搜索嵌入方法,其特征在于,所述对代码-描述匹配对语料进行结构化分词以及预处理,得到结构化词嵌入的步骤包括:
对代码-描述匹配对语料进行解析,实现结构化分词;
依次对结构化分词得到的文本进行预处理,预处理包括去冗余、去除长度过小的样例、不完全的代码段;
构造多个三元组样本对<Q,C+,C->作为训练实例,三元组样本对由一个查询Q以及对应的正代码C+和负代码C-组成,C+表示Q对应的正确的代码,C-表示Q对应的不正确的代码;
按照预设比例对多个三元组样本对进行划分,得到训练集、验证集以及测试集;
采用已有的预训练模型对训练集中的三元组样本进行词嵌入训练,得到结构化词嵌入。
3.如权利要求1所述的基于全局信息和局部信息的代码搜索嵌入方法,其特征在于,所述构建局部信息抽取模块,用于得到代码和查询的顺序信息向量、结构向量以及交互向量的步骤包括:
构建顺序信息抽取子模块:
使用ON-LSTM作为顺序信息抽取子模块,顺序地将由词嵌入构成的代码和查询,输入到ON-LSTM网络中,得到最终的隐藏状态:
构建结构信息抽取子模块:
ON-LSTM能够在训练完成后,可以直接抽取出序列的结构信息,而不依赖于句子结构,抽取方法是将ON-LSTM结构中对于序列的结构信息有记忆的中间状态累加:
其中,是ON-LSTM中主遗忘门未经cumsum处理前的状态,seqlen是固定的序列长度,经过等式变换后,得到通过计算结构信息的等式,经由ON-LSTM输出的向量有两类,一类是顺序信息向量另一类是经过矩阵乘法操作后扩充为和顺序信息向量相同维度的初始结构向量
为了增强结构信息,分别使用卷积层对查询和代码段的初始结构向量进行信息增强处理,得到卷积层对查询和代码段的结构向量:
构建交互信息抽取子模块;
将查询的顺序信息向量和代码的顺序信息向量,通过交互注意力子模块,强调代码和查询两者最相关的部分,使用注意力机制为QC的交互表示构造注意矩阵M,包含了查询Q和代码C之间的交互信息,注意矩阵如下:
其中,Wq∈R2u×a,Wc∈R2u×a,V∈Ra是注意力参数,a是注意力维度;
使用池化操作,分别从代码方向和查询方向推导出基于池的投影向量,使用按行和按列值在M上的最大池得到mQ、mC,计算权重向量δQ∈R|Q|和δC∈R|C|如下所示:
δQ=soft max(mQ);δC=soft max(mC);
VQ=δQhQ;VC=δChC。
4.如权利要求3所述的基于全局信息和局部信息的代码搜索嵌入方法,其特征在于,所述构建全局信息抽取模块,用于根据代码和查询的顺序信息向量得到代码和查询的全局信息向量的步骤包括:
构建全局信息抽取模块,通过共享的线性层和卷积层,对代码和查询的顺序信息向量进行计算得到代码和查询的全局信息向量。
6.一种基于全局信息和局部信息的代码搜索嵌入装置,其特征在于,所述基于全局信息和局部信息的代码搜索嵌入装置包括:
第一构建模块,用于构建局部信息抽取模块,局部信息抽取模块用于得到代码和查询的顺序信息向量、结构向量以及交互向量;
第二构建模块,用于构建全局信息抽取模块,全局信息抽取模块用于根据代码和查询的顺序信息向量得到代码和查询的全局信息向量;
拼接模块,用于分别将代码和查询的结构向量、交互向量以及全局信息向量拼接,得到代码和查询的特征向量;
第三构建模块,用于构建相似度匹配模块,设置训练网络的综合损失函数,其中,所述相似度匹配模块,包括计算查询和代码的特征向量的余弦相似度的第一计算模块,以及计算查询和代码的第二结构向量的曼哈顿距离的第二计算模块,所述综合损失函数包括合页损失函数、有权重的曼哈顿距离以及正则损失;
处理模块,用于对代码-描述匹配对语料进行结构化分词以及预处理,得到结构化词嵌入;
训练模块,用于将结构化词嵌入先加载至局部信息抽取模块,再加载至全局信息抽取模块,设置初始化参数并利用训练集来训练拟合模型的参数,在验证集上迭代一定次数直到综合损失函数收敛,得到训练好的模型;
预测模块,用于利用训练好的模型对待处理的查询进行预测,获得与待处理的查询对应的代码搜索结果。
7.如权利要求6所述的基于全局信息和局部信息的代码搜索嵌入装置,其特征在于,所述处理模块,用于:
对代码-描述匹配对语料进行解析,实现结构化分词;
依次对结构化分词得到的文本进行预处理,预处理包括去冗余、去除长度过小的样例、不完全的代码段;
构造多个三元组样本对<Q,C+,C->作为训练实例,三元组样本对由一个查询Q以及对应的正代码C+和负代码C-组成,C+表示Q对应的正确的代码,C-表示Q对应的不正确的代码;
按照预设比例对多个三元组样本对进行划分,得到训练集、验证集以及测试集;
采用已有的预训练模型对训练集中的三元组样本进行词嵌入训练,得到结构化词嵌入。
8.如权利要求6所述的基于全局信息和局部信息的代码搜索嵌入装置,其特征在于,所述第一构建模块,用于:
构建顺序信息抽取子模块:
使用ON-LSTM作为顺序信息抽取子模块,顺序地将由词嵌入构成的代码和查询,输入到ON-LSTM网络中,得到最终的隐藏状态:
构建结构信息抽取子模块:
ON-LSTM能够在训练完成后,可以直接抽取出序列的结构信息,而不依赖于句子结构,抽取方法是将ON-LSTM结构中对于序列的结构信息有记忆的中间状态累加:
其中,是ON-LSTM中主遗忘门未经cumsum处理前的状态,seqlen是固定的序列长度,经过等式变换后,得到通过计算结构信息的等式,经由ON-LSTM输出的向量有两类,一类是顺序信息向量另一类是经过矩阵乘法操作后扩充为和顺序信息向量相同维度的初始结构向量
为了增强结构信息,分别使用卷积层对查询和代码段的初始结构向量进行信息增强处理,得到卷积层对查询和代码段的结构向量:
构建交互信息抽取子模块;
将查询的顺序信息向量和代码的顺序信息向量,通过交互注意力子模块,强调代码和查询两者最相关的部分,使用注意力机制为QC的交互表示构造注意矩阵M,包含了查询Q和代码C之间的交互信息,注意矩阵如下:
其中,Wq∈R2u×a,Wc∈R2u×a,V∈Ra是注意力参数,a是注意力维度;
使用池化操作,分别从代码方向和查询方向推导出基于池的投影向量,使用按行和按列值在M上的最大池得到mQ、mC,计算权重向量δQ∈R|Q|和δC∈R|C|如下所示:
δQ=soft max(mQ);δC=soft max(mC);
VQ=δQhQ;VC=δChC。
9.如权利要求8所述的基于全局信息和局部信息的代码搜索嵌入装置,其特征在于,所述第二构建模块,用于:
构建全局信息抽取模块,通过共享的线性层和卷积层,对代码和查询的顺序信息向量进行计算得到代码和查询的全局信息向量。
10.如权利要求7所述的基于全局信息和局部信息的代码搜索嵌入装置,其特征在于,所述第一计算模块为:
合页损失函数为:
约束模型对正确的查询代码对给分高,对错误的查询代码对给分低:
当在一组三元组训练时,分别预测<Q,C+>和<Q,C->样本对的余弦相似度,并减少损失函数的值:
第二计算模块为:
综合损失函数为:
γ=l(θ)+man*ε
其中,ε为代码和查询的结构向量的曼哈顿距离在损失函数中所占的权重。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110697410.6A CN113449076B (zh) | 2021-06-23 | 2021-06-23 | 基于全局信息和局部信息的代码搜索嵌入方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110697410.6A CN113449076B (zh) | 2021-06-23 | 2021-06-23 | 基于全局信息和局部信息的代码搜索嵌入方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113449076A true CN113449076A (zh) | 2021-09-28 |
CN113449076B CN113449076B (zh) | 2022-08-30 |
Family
ID=77812229
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110697410.6A Expired - Fee Related CN113449076B (zh) | 2021-06-23 | 2021-06-23 | 基于全局信息和局部信息的代码搜索嵌入方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113449076B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114186017A (zh) * | 2021-11-02 | 2022-03-15 | 武汉大学 | 基于多维度匹配的代码搜索方法 |
CN115878094A (zh) * | 2023-01-06 | 2023-03-31 | 粤港澳大湾区数字经济研究院(福田) | 代码搜索方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577603A (zh) * | 2017-08-31 | 2018-01-12 | 中国科学院软件研究所 | 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法 |
US20180373507A1 (en) * | 2016-02-03 | 2018-12-27 | Cocycles | System for generating functionality representation, indexing, searching, componentizing, and analyzing of source code in codebases and method thereof |
CN111159223A (zh) * | 2019-12-31 | 2020-05-15 | 武汉大学 | 一种基于结构化嵌入的交互式代码搜索方法及装置 |
CN111191002A (zh) * | 2019-12-26 | 2020-05-22 | 武汉大学 | 一种基于分层嵌入的神经代码搜索方法及装置 |
-
2021
- 2021-06-23 CN CN202110697410.6A patent/CN113449076B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180373507A1 (en) * | 2016-02-03 | 2018-12-27 | Cocycles | System for generating functionality representation, indexing, searching, componentizing, and analyzing of source code in codebases and method thereof |
CN107577603A (zh) * | 2017-08-31 | 2018-01-12 | 中国科学院软件研究所 | 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法 |
CN111191002A (zh) * | 2019-12-26 | 2020-05-22 | 武汉大学 | 一种基于分层嵌入的神经代码搜索方法及装置 |
CN111159223A (zh) * | 2019-12-31 | 2020-05-15 | 武汉大学 | 一种基于结构化嵌入的交互式代码搜索方法及装置 |
Non-Patent Citations (1)
Title |
---|
胡刚: "《软件问答社区的代码查询匹配方法研究》", 《中国优秀博士学位论文》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114186017A (zh) * | 2021-11-02 | 2022-03-15 | 武汉大学 | 基于多维度匹配的代码搜索方法 |
CN114186017B (zh) * | 2021-11-02 | 2024-02-27 | 武汉大学 | 基于多维度匹配的代码搜索方法 |
CN115878094A (zh) * | 2023-01-06 | 2023-03-31 | 粤港澳大湾区数字经济研究院(福田) | 代码搜索方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113449076B (zh) | 2022-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110222160B (zh) | 智能语义文档推荐方法、装置及计算机可读存储介质 | |
Etoori et al. | Automatic spelling correction for resource-scarce languages using deep learning | |
AU2018214675B2 (en) | Systems and methods for automatic semantic token tagging | |
WO2023024412A1 (zh) | 基于深度学习模型的视觉问答方法及装置、介质、设备 | |
CN111753060A (zh) | 信息检索方法、装置、设备及计算机可读存储介质 | |
CN111831789B (zh) | 一种基于多层语义特征提取结构的问答文本匹配方法 | |
CN109376222B (zh) | 问答匹配度计算方法、问答自动匹配方法及装置 | |
CN111783474A (zh) | 一种评论文本观点信息处理方法、装置及存储介质 | |
CN113449076B (zh) | 基于全局信息和局部信息的代码搜索嵌入方法及装置 | |
CN111191002A (zh) | 一种基于分层嵌入的神经代码搜索方法及装置 | |
CN112417097A (zh) | 一种用于舆情解析的多模态数据特征提取与关联方法 | |
CN116304066B (zh) | 一种基于提示学习的异质信息网络节点分类方法 | |
CN107305543B (zh) | 对实体词的语义关系进行分类的方法和装置 | |
CN113761868B (zh) | 文本处理方法、装置、电子设备及可读存储介质 | |
CN113094494B (zh) | 电力操作票文本智能分类方法、装置、设备及介质 | |
CN112084435A (zh) | 搜索排序模型训练方法及装置、搜索排序方法及装置 | |
CN114237621B (zh) | 一种基于细粒度共注意机制的语义代码搜索方法 | |
CN115203507A (zh) | 一种面向文书领域的基于预训练模型的事件抽取方法 | |
CN116578688A (zh) | 基于多轮问答的文本处理方法、装置、设备及存储介质 | |
CN115422369B (zh) | 基于改进TextRank的知识图谱补全方法和装置 | |
CN112988970A (zh) | 一种服务于智能问答系统的文本匹配算法 | |
CN116662565A (zh) | 基于对比学习预训练的异质信息网络关键词生成方法 | |
Luo et al. | Improving neural language models by segmenting, attending, and predicting the future | |
Zulfiqar et al. | Logical layout analysis using deep learning | |
CN117828024A (zh) | 一种插件检索方法、装置、存储介质及设备 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20220830 |