CN115268869A - 一种基于图序列化的代码搜索系统及方法 - Google Patents

一种基于图序列化的代码搜索系统及方法 Download PDF

Info

Publication number
CN115268869A
CN115268869A CN202210885120.9A CN202210885120A CN115268869A CN 115268869 A CN115268869 A CN 115268869A CN 202210885120 A CN202210885120 A CN 202210885120A CN 115268869 A CN115268869 A CN 115268869A
Authority
CN
China
Prior art keywords
sequence
graph
code
natural language
vector
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.)
Pending
Application number
CN202210885120.9A
Other languages
English (en)
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.)
Northeastern University China
Original Assignee
Northeastern University China
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 Northeastern University China filed Critical Northeastern University China
Priority to CN202210885120.9A priority Critical patent/CN115268869A/zh
Publication of CN115268869A publication Critical patent/CN115268869A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种基于图序列化的代码搜索系统及方法,涉及代码搜索技术领域。本发明系统及装置通过图序列转换器G2SC学习代码片段的控制依赖关系和数据依赖关系,获得富含代码片段图结构信息的程序依赖图序列,并且比图神经网络更适用于节点少的代码图结构;在特征提取过程中使用注意力机制将方法名特征向量、Token特征向量、以及G2SC提取的程序依赖图特征向量进行融合,使得代码的语义和结构信息能够充分表达,特征提取更完整,有效提升代码搜索的准确率;使用G2SC、双向长短时记忆网络将代码片段的程序依赖图的信息映射到较低维度的特征空间中,可节省深度学习中所消耗的大量算力。

Description

一种基于图序列化的代码搜索系统及方法
技术领域
本发明涉及代码搜索技术领域,更具体地,涉及一种基于图序列化的代码搜索系统及方法。
背景技术
随着互联网技术的发展,开源代码片段的数量在不断增加,而代码搜索可以很大程度上提高软件开发过程中的编码效率,如何利用已有的海量代码片段,有效帮助开发人员直接从代码数据库中准确地搜索与特定编程任务相关的代码片段,成为了软件工程领域的热点问题。在代码搜索的初期研究阶段,大多数的代码搜索方法都是将代码片段视为纯文本序列,使用关键词匹配的方法来衡量代码片段和自然语言之间的相似度。但由于用户的查询语句和代码片段是异构信息,导致基于关键词匹配的代码搜索方法的准确率不尽人意。因此,随着深度学习技术在自然语言处理领域获得显著成效,研究人员逐渐考虑从深度学习的角度来研究代码搜索任务,使用深度学习技术有效学习用户的查询语句所表达的语义信息与代码片段中包含的结构化信息,来提高代码搜索方法的准确率。
现有的一种基于深度学习的代码搜索方法DeepCS(Deep Code Search),使用深度学习技术学习代码片段和自然语言的特征,将代码片段与自然语言的特征向量映射到同一个高维空间,并以余弦相似度的方法来判断代码片段和自然语言的相似性程度。但是这种方法在代码片段特征提取过程中仅考虑到代码的文本信息,忽略了代码所特有的图结构信息,导致得到的代码片段特征并不全面,从而降低了代码搜索方法的准确率。而另一种DeepCS的改进方法MMAN(Multi-modal attention network)为了使代码片段的特征更加全面,在代码片段特征提取过程中使用图神经网络学习代码的控制流程图信息。但是MMAN并没有很好地利用代码的图结构信息。一方面,图神经网络适用于节点多的图,而代码片段的控制流程图的节点通常都很少,使用图神经网络不能很好地学习代码的图结构信息;另一方面,由于代码的控制流程图只包含控制依赖关系而不包含数据依赖关系,只使用控制流程图会忽略代码的数据依赖关系。因此,MMAN的准确率没有得到有效提升。
发明内容
针对上述现有技术存在的不足,本发明提出一种基于图序列化的代码搜索系统及方法,旨在克服现有技术未充分利用代码图结构中包含的有效信息导致代码搜索准确率低的问题。
本发明的技术方案为:
本发明第一方面提供一种基于图序列化的代码搜索系统,该系统包括:
数据采集模块,用于采集多个原始代码片段,构成原始代码片段集合;
代码片段预处理模块,用于对所述原始代码片段集合中的每一代码片段提取相关特征,包括代码片段的方法名序列、代码片段的令牌Token序列和代码片段的程序依赖图PDG;
图序列转换器G2SC:用于根据代码片段预处理模块提取的程序依赖图PDG学习代码片段的控制依赖关系和代码片段的数据依赖关系,生成富含代码图结构信息的程序依赖图序列,并将所述程序依赖图序列发送给图特征提取模块;
方法名特征提取模块,用于将代码片段预处理模块提取的方法名序列输入到双向长短时记忆网络Bi-LSTM中提取方法名序列包含的特征,获得方法名特征向量并发送给注意力嵌入模块;
Token特征提取模块,用于将代码片段预处理模块提取的Token序列输入到多层感知机MLP中提取Token序列包含的特征,获得Token特征向量并发送给注意力嵌入模块;
图特征提取模块,用于将程序依赖图序列输入到双向长短时记忆网络Bi-LSTM中提取程序依赖图序列包含的特征,获得程序依赖图特征向量并发送给注意力嵌入模块;
注意力嵌入模块,用于接收所述方法名特征提取模块发送的方法名特征向量、所述Token特征提取模块发送的Token特征向量、所述图特征提取模块发送的程序依赖图特征向量,并为所述方法名特征向量、Token特征向量和程序依赖图特征向量分配不同的注意力系数,得到代码片段的融合特征向量并发送给相似度计算模块;
自然语言预处理模块,用于通过分词工具对用户输入的查询语句进行分词处理,并过滤掉其中包含的特殊符号,获得自然语言序列并发送给自然语言特征提取模块;
自然语言特征提取模块,用于将自然语言预处理模块提取的自然语言序列输入到双向长短时记忆网络Bi-LSTM中提取自然语言序列包含的特征,获得自然语言特征向量,并将该自然语言特征向量发送给相似度计算模块;
相似度计算模块,用于接收注意力嵌入模块输出的代码片段的融合特征向量和自然语言特征提取模块输出的自然语言特征向量,计算所述自然语言特征向量与所有代码片段的融合特征向量之间的余弦相似度,并将余弦相似度最大的若干融合特征向量对应的代码片段作为代码搜索结果,返回给用户。
本发明第二方面提供一种基于图序列化的代码搜索方法,该方法包括如下步骤:
步骤1:采集代码片段和代码片段所对应的自然语言注释;
步骤2:通过分词工具对每一代码片段的自然语言注释进行分词处理并过滤掉分词结果中包含的特殊符号获得每一代码片段的自然语言注释序列D;
步骤3:提取每一代码片段的方法名序列M、Token序列T和程序依赖图GPDG
步骤4:将每一代码片段的程序依赖图GPDG输入到图序列转换器G2SC中,利用G2SC学习程序依赖图的控制依赖关系和数据依赖关系,生成富含代码图结构信息的程序依赖图序列P,其中
Figure BDA0003764920440000031
表示所述程序依赖图序列中所有单词的集合,NP为程序依赖图序列的单词总数;
步骤5:针对每一代码片段,利用方法名特征提取模块提取方法名序列包含的特征获得方法名特征向量VM、利用Token特征提取模块提取Token序列包含的特征获得Token特征向量VT、以及利用图特征提取模块提取程序依赖图序列包含的特征获得程序依赖图特征向量VP,并采用注意力机制将VM、VT和VP进行组合得到融合特征向量VC
步骤6:通过自然语言特征提取模块提取每一代码片段的自然语言注释序列D的特征,获得自然语言注释特征向量VD
步骤7:根据每一代码片段的融合特征向量VC和自然语言注释特征向量VD计算相似度损失函数L(θ),并根据相似度损失优化更新方法名特征提取模块中的参数、Token特征提取模块中的参数、图特征提取模块中的参数、注意力嵌入模块中的参数和自然语言特征提取模块中的参数;
步骤8:重复执行步骤5-步骤7,直至相似度损失L(θ)收敛,获得每一代码片段最终的融合特征向量,及具有最优参数的方法名特征提取模块、具有最优参数的Token特征提取模块、具有最优参数的图特征提取模块、具有最优参数的注意力嵌入模块和具有最优参数的自然语言特征提取模块;
步骤9:当用户输入查询语句q时,通过分词工具对用户输入的查询语句进行分词处理并过滤掉其中包含的特殊符号获得自然语言序列Q;
步骤10:通过自然语言特征提取模块提取自然语言序列包含的特征,获得自然语言特征向量VQ
步骤11:计算自然语言特征向量VQ与所有代码片段最终的融合特征向量之间的余弦相似度,将余弦相似度最大的若干融合特征向量对应的代码片段作为代码搜索结果,返回给用户。
进一步地,根据所述的基于图序列化的代码搜索方法,所述利用G2SC学习程序依赖图的控制依赖关系和数据依赖关系生成富含代码图结构信息的程序依赖图序列P的方法包括如下步骤:
步骤4-1:对于程序依赖图GPDG,初始化程序依赖图序列P={},将v1作为程序依赖图序列P的第一个元素p1,并设定程序依赖图序列P的最后一个元素所对应的节点为eend
步骤4-2:按照边选取规则递归地从候选边中选择一条边进行扩展,直到所有边均被遍历;
步骤4-3:如果遍历的边是控制依赖边,则只将边的始点和终点所对应的属性信息添加到程序依赖图序列P中,如果遍历的边是数据依赖边,则依次将数据依赖边的始点、数据依赖边、以及数据依赖边的终点所对应的属性信息添加到程序依赖图序列P中;
步骤4-4、重复步骤4-1至步骤4-3,遍历完所有的有向边,获得程序依赖图序列P。
进一步地,根据所述的基于图序列化的代码搜索方法,所述候选边指的是以eend为始点的未被遍历的有向边。
进一步地,根据所述的基于图序列化的代码搜索方法,所述边选取规则如下:
规则a、回溯边在前向边之前被选择,回溯边指的是有向边的终点已经被遍历的边,前向边指的是有向边的终点未被遍历的边;
规则b、当存在多个回溯边或多个前向边时,则根据预设优先级,选择控制依赖边或者数据依赖边;
规则c、如果在规则b之后仍然不能确定边,则选择终点所对应节点优先级最高的边作为优先扩展边;
规则d、如果不存在以eend为始点的未被遍历的有向边,则继续遍历以eend最近的祖先节点为始点的没有遍历的有向边。
进一步地,根据所述的基于图序列化的代码搜索方法,所述利用方法名特征提取模块提取方法名特征向量VM的方法为:在方法名特征提取模块中将代码片段的方法名序列
Figure BDA0003764920440000051
中的每一个单词转为词向量并输入到能学习到时序关系的双向长短时记忆网络Bi-LSTM中,并按照公式(1)获得方法名序列M在正向LSTM中i时刻的正向隐藏层向量
Figure BDA0003764920440000052
按照公式(2)获得方法名序列M在反向LSTM中i时刻的反向隐藏层向量
Figure BDA0003764920440000053
最后根据公式(3)对方法名序列M所有时刻的正向隐藏层向量和反向隐藏层向量进行整合,获得方法名特征向量VM,具体公式如下;
Figure BDA0003764920440000054
Figure BDA0003764920440000055
Figure BDA0003764920440000056
其中,mi为方法名序列的第i个单词,NM为方法名序列M中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;
Figure BDA0003764920440000057
Figure BDA0003764920440000058
代表方法名序列的正向和反向LSTM神经网络模型以及相关参数;
Figure BDA0003764920440000059
Figure BDA00037649204400000510
分别表示方法名序列的正向LSTM神经网络模型和反向LSTM神经网络模型在i时刻的正向隐藏层向量和反向隐藏层向量;CONCAT()表示两个向量的串联函数;maxpooling()代表最大池化函数;VM是最终获得的方法名特征向量。
进一步地,根据所述的基于图序列化的代码搜索方法,所述利用Token特征提取模块提取Token特征向量VT的方法为:在Token特征提取模块中将代码片段的Token序列
Figure BDA0003764920440000061
中的每一个单词转为词向量并输入到多层感知机MLP中,并按照公式(4)获得Token序列T中每个单词在MLP中的隐藏层嵌入向量
Figure BDA0003764920440000069
最后根据公式(5)对Token序列T所有单词的隐藏层嵌入向量进行整合,获得Token特征向量VT,具体公式如下;
Figure BDA0003764920440000062
Figure BDA0003764920440000063
其中,tj为Token序列T的第j个单词;NT为Token序列T中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;WT是MLP的权重参数;tanh()代表tanh函数;
Figure BDA00037649204400000610
是tj在MLP中的隐藏层嵌入向量;maxpooling()代表最大池化函数;VT是最终获得的Token特征向量。
进一步地,根据所述的基于图序列化的代码搜索方法,所述利用图特征提取模块提取程序依赖图特征向量VP的方法为:在图特征提取模块中将代码片段的程序依赖图序列
Figure BDA0003764920440000064
中的每一个单词转为词向量并输入到能学习到时序关系的双向长短时记忆网络Bi-LSTM中,并按照公式(6)获得程序依赖图序列P在正向LSTM中k时刻的正向隐藏层向量
Figure BDA0003764920440000065
按照公式(7)获得程序依赖图序列P在反向LSTM中k时刻的反向隐藏层向量
Figure BDA0003764920440000066
最后根据公式(8)对程序依赖图序列P所有时刻的正向隐藏层向量和反向隐藏层向量进行整合,获得程序依赖图特征向量VP,具体公式如下;
Figure BDA0003764920440000067
Figure BDA0003764920440000068
Figure BDA0003764920440000071
其中,pk为程序依赖图序列P的第k个单词;NP为程序依赖图序列P中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;
Figure BDA0003764920440000072
Figure BDA0003764920440000073
代表程序依赖图序列P的正向与反向LSTM神经网络模型以及相关参数;
Figure BDA0003764920440000074
Figure BDA0003764920440000075
分别表示程序依赖图序列P的正向LSTM神经网络模型和反向LSTM神经网络模型在k时刻的正向隐藏层向量和反向隐藏层向量;CONCAT()表示两个向量的串联函数;maxpooling()代表最大池化函数;VP是最终获得的程序依赖图特征向量。
进一步地,根据所述的基于图序列化的代码搜索方法,所述通过自然语言特征提取模块提取自然语言注释特征向量VD的方法为:在自然语言特征提取模块中将代码片段的自然语言注释序列
Figure BDA0003764920440000076
中的每一个单词转为词向量并输入到能学习到时序关系的双向长短时记忆网络Bi-LSTM中,并按照公式(10)获得自然语言注释序列D在正向LSTM中t时刻的正向隐藏层向量
Figure BDA0003764920440000077
按照公式(11)获得自然语言注释序列D在反向LSTM中t时刻的反向隐藏层向量
Figure BDA0003764920440000078
最后根据公式(12)对自然语言注释序列D所有时刻的正向隐藏层向量和反向隐藏层向量进行整合,获得自然语言注释特征向量VD,具体公式如下;
Figure BDA0003764920440000079
Figure BDA00037649204400000710
Figure BDA00037649204400000711
其中,dr为自然语言注释序列的第r个单词;ND为自然语言注释序列D中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;
Figure BDA00037649204400000712
Figure BDA00037649204400000713
代表自然语言注释序列D的正向与反向LSTM神经网络模型以及相关参数;
Figure BDA00037649204400000714
Figure BDA00037649204400000715
分别表示正向LSTM神经网络模型和反向LSTM神经网络模型在r时刻的正向隐藏层向量和反向隐藏层向量;CONCAT()表示两个向量的串联函数;maxpooling()代表最大池化函数;VD是最终获得的自然语言注释特征向量。
与现有技术相比,本发明提出的技术方案具有以下有益效果:
本发明系统及方法提出了一种将代码片段的程序依赖图转换为序列的图序列转换器G2SC(Graph to Sequence Converter),G2SC既可以学习到代码片段的控制依赖关系也可以学习到代码片段的数据依赖关系,并且比图神经网络更适用于节点少的代码图结构。通过G2SC,可以得到富含代码片段图结构信息的程序依赖图序列。同时,本发明系统及方法在特征提取过程中使用注意力机制将方法名特征向量、Token特征向量、以及G2SC提取的程序依赖图特征向量进行融合,使得代码的语义和结构信息能够充分表达,特征提取更完整,有效提升代码搜索的准确率。最后,本发明系统及方法使用G2SC、双向长短时记忆网络将代码片段的程序依赖图的信息映射到较低维度的特征空间中,可节省深度学习中所消耗的大量算力。
附图说明
为了更清楚地说明本发明实施例中的具体方式,下面将对实施例中涉及的相关附图做简单说明,下面的附图仅仅是本发明的优选实施例,对于本领域普通技术人员来说,在没有创造性改变的前提下,可以根据这些附图获得其它的附图。
图1为本实施方式基于图序列化的代码搜索系统的结构示意图;
图2为本实施方式基于图序列化的代码搜索方法的流程示意图;
图3为本实施方式利用G2SC生成程序依赖图序列的方法流程示意图。
具体实施方式
为了便于理解本申请,下面将参照相关附图对本申请进行更全面的描述。附图中给出了本申请的较佳实施方式。但是,本申请可以以许多不同的形式来实现,并不限于本文所描述的实施方式。相反地,提供这些实施方式的目的是使对本申请的公开内容理解的更加透彻全面。
图1为本实施方式基于图序列化的代码搜索系统的结构示意图。如图1所示,所述基于图序列化的代码搜索系统,包括:
数据采集模块,用于采集代码片段。本实施方式中具体是,首先通过代码数据采集工具例如Github API获取Java开源项目的Java文件,然后从Java文件中提取Java方法,每一Java方法作为一个原始代码片段,从Java文件中提取全部Java方法对应的全部原始代码片段构成原始代码片段数据集。
代码片段预处理模块,用于对数据采集模块采集的代码片段提取相关特征,包括代码片段的方法名序列、代码片段的令牌(Token)序列和代码片段的程序依赖图(ProgramDependency Graph,PDG)。
图序列转换器(Graph to Sequence Converter,G2SC),用于根据代码片段预处理模块提取的程序依赖图PDG学习代码片段的控制依赖关系和代码片段的数据依赖关系,生成富含代码图结构信息的程序依赖图序列,并将所述程序依赖图序列发送给图特征提取模块。
方法名特征提取模块,用于将代码片段预处理模块提取的方法名序列输入到双向长短时记忆网络Bi-LSTM(Bi-directional Recurrent Neural Network)中提取方法名序列包含的特征,获得方法名特征向量,并将该方法名特征向量发送给注意力嵌入模块;
Token特征提取模块,用于将代码片段预处理模块提取的Token序列输入到多层感知机MLP(Multilayer Perceptron)中提取Token序列包含的特征,获得Token特征向量,并将该Token特征向量发送给注意力嵌入模块;
图特征提取模块,用于将程序依赖图序列输入到双向长短时记忆网络Bi-LSTM中提取程序依赖图序列包含的特征,获得程序依赖图特征向量,并将该程序依赖图特征向量发送给注意力嵌入模块;
注意力嵌入模块,用于接收所述方法名特征提取模块发送的方法名特征向量、所述Token特征提取模块发送的Token特征向量、图特征提取模块发送的程序依赖图特征向量,并为所述方法名特征向量、Token特征向量和程序依赖图特征向量分配不同的注意力系数,得到代码片段的融合特征向量并发送给相似度计算模块。
自然语言预处理模块,用于通过分词工具例如jieba对用户输入的查询语句进行分词处理,并过滤掉其中包含的特殊符号,获得自然语言序列并发送给自然语言特征提取模块。
自然语言特征提取模块,用于将自然语言预处理模块提取的自然语言序列输入到双向长短时记忆网络Bi-LSTM中提取自然语言序列包含的特征,获得自然语言特征向量,并将该自然语言特征向量发送给相似度计算模块;
相似度计算模块,用于接收注意力嵌入模块输出的代码片段的融合特征向量和自然语言特征提取模块输出的自然语言特征向量,计算所述自然语言特征向量与所有代码片段的融合特征向量之间的余弦相似度,并将余弦相似度最大的若干融合特征向量对应的代码片段作为代码搜索结果,返回给用户。
图2为本实施方式基于图序列化的代码搜索方法的流程示意图。如图2所示,所述基于图序列化的代码搜索方法包括以下步骤:
步骤1:采集代码片段和代码片段所对应的自然语言注释;
本实施方式中具体是,首先通过代码数据采集工具例如Github API获取2016年8月至2020年9月发布的Java开源项目包含的Java文件,并限定Java开源项目的STAR参数阈值为10,保证获取的Java文件的质量;然后从Java文件中提取全部Java方法作为原始的代码片段,过滤掉没有注释或者非英文注释的Java方法,并对剩余的每个Java方法截取其注释的第一行内容作为该代码片段的自然语言注释;将最终获得的全部代码数据对进行8:2划分,分别作为训练数据集和评估数据集,其中每个代码数据对都由代码片段和代码片段的自然语言注释组成。
步骤2:通过分词工具对每一代码片段的自然语言注释进行分词处理并过滤掉分词结果中包含的特殊符号获得每一代码片段的自然语言注释序列D。
本实施方式中,具体是,通过分词工具例如jieba对每一代码片段的自然语言注释进行分词处理,并过滤掉分词结果中包含的特殊符号,得到每一代码片段的自然语言注释序列D,其中,
Figure BDA0003764920440000101
表示所述自然语言注释序列中所有单词的集合,ND为单词总数。
步骤3:提取每一代码片段的方法名序列M、Token序列T和程序依赖图GPDG
本发明实施例中,首先由于Java代码片段的方法名是以驼峰规则来命名,因此对于代码片段的方法名,使用驼峰规则对方法名进行分词,得到代码片段的方法名序列M,其中
Figure BDA0003764920440000102
表示所述方法名序列中所有单词的集合,NM为方法名序列的单词总数;然后,对于代码片段中包含的所有文本,以StanfordCore NLP方法进行分词,获得代码片段的分词结果。并且由于Java关键字和停用词经常出现在源代码中,不能很好地区分不同的代码片段,因此,移除代码片段分词结果中的Java关键字和停用词,得到代码片段的Token序列T,其中
Figure BDA0003764920440000111
表示所述Token序列中所有单词的集合,NT为Token序列的单词总数;最后,通过程序依赖图提取工具TinyPDG从代码片段中提取程序依赖图GPDG。在程序依赖图中,边的依赖关系包括控制依赖和数据依赖两种,将边的依赖关系为控制依赖的边称为控制依赖边,将边的依赖关系为数据依赖的边称为数据依赖边;对于GPDG={V,VA,EC,ED,EDA},
Figure BDA0003764920440000112
表示所述程序依赖图的节点集合,NV为节点总数;
Figure BDA0003764920440000113
表示所述程序依赖图中每个节点的属性信息,每个节点的属性信息指的是节点所对应的语句,
Figure BDA0003764920440000114
表示所述程序依赖图的控制依赖边集合,Nec为控制依赖边总数,
Figure BDA0003764920440000115
表示所述程序依赖图的数据依赖边集合,Ned为数据依赖边总数。
Figure BDA0003764920440000116
表示所述程序依赖图中每个数据依赖边的属性信息,每个数据依赖边的属性指的是数据依赖边产生数据依赖的变量名称集合;
步骤4:将代码片段的程序依赖图GPDG输入到图序列转换器G2SC中,利用G2SC学习程序依赖图的控制依赖关系和数据依赖关系,生成富含代码图结构信息的程序依赖图序列P,其中
Figure BDA0003764920440000117
表示所述程序依赖图序列中所有单词的集合,NP为程序依赖图序列的单词总数;
如图3所示,所述利用G2SC学习程序依赖图的控制依赖关系和数据依赖关系生成富含代码图结构信息的程序依赖图序列P的方法包括如下步骤:
步骤4-1:对于程序依赖图GPDG,初始化程序依赖图序列P={},将v1作为程序依赖图序列P的第一个元素p1,并设定程序依赖图序列P的最后一个元素所对应的节点为eend
步骤4-2:按照边选取规则递归地从候选边中选择一条边进行扩展,直到所有边均被遍历,候选边指的是以eend为始点的未被遍历的有向边,边选取规则如下:
规则a、回溯边在前向边之前被选择,回溯边指的是有向边的终点已经被遍历的边,前向边指的是有向边的终点未被遍历的边;
规则b、当存在多个回溯边或多个前向边时,则根据预设优先级,选择控制依赖边或者数据依赖边;需要说明的是,控制依赖边和数据依赖边之间的优先级并不影响生成程序依赖图序列P的唯一性。在本实施例中,为了确定唯一程序依赖图序列,规定控制依赖边具有更高的优先级,在边选取过程中优先被选择,当存在多个回溯边或多个前向边时,则选择控制依赖边,而不是数据依赖边;
规则c、如果在规则b之后仍然不能确定边,则选择终点所对应节点优先级最高的边作为优先扩展边;本发明实施例中,节点的优先级由节点的顺序决定,例如,对于程序依赖图GPDG的节点集合
Figure BDA0003764920440000121
v1的优先级高于v2
规则d、如果不存在以eend为始点的未被遍历的有向边,则继续遍历以eend最近的祖先节点为始点的没有遍历的有向边。
步骤4-3:如果遍历的边是控制依赖边,则只将边的始点和终点所对应的属性信息添加到程序依赖图序列P中,如果遍历的边是数据依赖边,则依次将数据依赖边的始点、数据依赖边、以及数据依赖边的终点所对应的属性信息添加到程序依赖图序列P中;
本发明实施例中,在生成程序依赖图序列P时,不考虑控制依赖边中包含的信息,因为控制依赖边只表示两个节点之间的控制依赖关系,无其他实际意义;而数据依赖边包含代码片段的变量的传递关系,因此在生成程序依赖图序列P时,会保留数据依赖边中包含的属性信息。
步骤4-4、重复步骤4-1至步骤4-3,遍历完所有的有向边,获得程序依赖图序列P。
步骤5:针对每一代码片段,利用方法名特征提取模块提取方法名序列包含的特征获得方法名特征向量VM、利用Token特征提取模块提取Token序列包含的特征获得Token特征向量VT、以及利用图特征提取模块提取程序依赖图序列包含的特征获得程序依赖图特征向量VP,并采用注意力机制将VM、VT和VP进行组合得到融合特征向量VC
步骤5-1:对于每一代码片段,利用方法名特征提取模块提取方法名序列M包含的特征获得方法名特征向量VM
在本实施方式中,由于方法名序列存在时序关系,因此在方法名特征提取模块中将代码片段的方法名序列
Figure BDA0003764920440000131
中的每一个单词转为词向量并输入到能学习到时序关系的双向长短时记忆网络Bi-LSTM中,并按照公式(1)获得方法名序列M在正向LSTM中i时刻的正向隐藏层向量
Figure BDA0003764920440000132
按照公式(2)获得方法名序列M在反向LSTM中i时刻的反向隐藏层向量
Figure BDA0003764920440000133
最后根据公式(3)对方法名序列M所有时刻的正向隐藏层向量和反向隐藏层向量进行整合,获得方法名特征向量VM,具体公式如下;
Figure BDA0003764920440000134
Figure BDA0003764920440000135
Figure BDA0003764920440000136
其中,mi为方法名序列的第i个单词,NM为方法名序列M中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;
Figure BDA0003764920440000137
Figure BDA0003764920440000138
代表方法名序列的正向和反向LSTM神经网络模型以及相关参数;
Figure BDA0003764920440000139
Figure BDA00037649204400001310
分别表示方法名序列的正向LSTM神经网络模型和反向LSTM神经网络模型在i时刻的正向隐藏层向量和反向隐藏层向量;CONCAT()表示两个向量的串联函数;maxpooling()代表最大池化函数;VM是最终获得的方法名特征向量。
步骤5-2:对于每一代码片段,利用Token特征提取模块提取Token序列T包含的特征获得Token特征向量VT
在本实施方式中,由于Token序列不存在时序关系,因此在Token特征提取模块中将代码片段的Token序列
Figure BDA00037649204400001311
中的每一个单词转为词向量并输入到多层感知机MLP中,并按照公式(4)获得Token序列T中每个单词在MLP中的隐藏层嵌入向量
Figure BDA00037649204400001312
最后根据公式(5)对Token序列T所有单词的隐藏层嵌入向量进行整合,获得Token特征向量VT,具体公式如下;
Figure BDA0003764920440000141
Figure BDA0003764920440000142
其中,tj为Token序列T的第j个单词;NT为Token序列T中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;WT是MLP的权重参数;tanh()代表tanh函数;
Figure BDA0003764920440000143
是tj在MLP中的隐藏层嵌入向量;maxpooling()代表最大池化函数;VT是最终获得的Token特征向量。
步骤5-3:对于每一代码片段,利用图特征提取模块提取程序依赖图序列P包含的特征获得程序依赖图特征向量VP
在本实施方式中,由于程序依赖图序列存在时序关系,因此在图特征提取模块中将代码片段的程序依赖图序列
Figure BDA0003764920440000144
中的每一个单词转为词向量并输入到能学习到时序关系的双向长短时记忆网络Bi-LSTM中,并按照公式(6)获得程序依赖图序列P在正向LSTM中k时刻的正向隐藏层向量
Figure BDA0003764920440000145
按照公式(7)获得程序依赖图序列P在反向LSTM中k时刻的反向隐藏层向量
Figure BDA0003764920440000146
最后根据公式(8)对程序依赖图序列P所有时刻的正向隐藏层向量和反向隐藏层向量进行整合,获得程序依赖图特征向量VP,具体公式如下;
Figure BDA0003764920440000147
Figure BDA0003764920440000148
Figure BDA0003764920440000149
其中,pk为程序依赖图序列P的第k个单词;NP为程序依赖图序列P中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;
Figure BDA00037649204400001410
Figure BDA00037649204400001411
代表程序依赖图序列P的正向与反向LSTM神经网络模型以及相关参数;
Figure BDA00037649204400001412
Figure BDA00037649204400001413
分别表示程序依赖图序列P的正向LSTM神经网络模型和反向LSTM神经网络模型在k时刻的正向隐藏层向量和反向隐藏层向量;CONCAT()表示两个向量的串联函数;maxpooling()代表最大池化函数;VP是最终获得的程序依赖图特征向量。
步骤5-4:通过注意力嵌入模块为每一代码片段的方法名特征向量Vm、Token特征向量VT和程序依赖图特征向量VP分配不同的注意力系数,利用注意力机制融合VM、VT和VP得到代码片段的融合特征向量VC
VC=αm×VMt×VT+αp×VP (9)
其中,αm为方法名特征向量VM的注意力系数;αt为Token特征向量VT的注意力系数;αp为程序依赖图特征向量VP的注意力系数;VC为代码片段的融合特征向量。
步骤6:通过自然语言特征提取模块提取每一代码片段的自然语言注释序列D的特征,获得自然语言注释特征向量VD
在本实施方式中,由于自然语言注释序列存在时序关系,因此在自然语言特征提取模块中将代码片段的自然语言注释序列
Figure BDA0003764920440000151
中的每一个单词转为词向量并输入到能学习到时序关系的双向长短时记忆网络Bi-LSTM中,并按照公式(10)获得自然语言注释序列D在正向LSTM中t时刻的正向隐藏层向量
Figure BDA0003764920440000152
按照公式(11)获得自然语言注释序列D在反向LSTM中t时刻的反向隐藏层向量
Figure BDA0003764920440000153
最后根据公式(12)对自然语言注释序列D所有时刻的正向隐藏层向量和反向隐藏层向量进行整合,获得自然语言注释特征向量VD,具体公式如下;
Figure BDA0003764920440000154
Figure BDA0003764920440000155
Figure BDA0003764920440000156
其中,dr为自然语言注释序列的第r个单词;ND为自然语言注释序列D中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;
Figure BDA0003764920440000157
Figure BDA0003764920440000158
代表自然语言注释序列D的正向与反向LSTM神经网络模型以及相关参数;
Figure BDA0003764920440000161
Figure BDA0003764920440000162
分别表示正向LSTM神经网络模型和反向LSTM神经网络模型在r时刻的正向隐藏层向量和反向隐藏层向量;CONCAT()表示两个向量的串联函数;maxpooling()代表最大池化函数;VD是最终获得的自然语言注释特征向量。
步骤7:根据每一代码片段的融合特征向量VC和自然语言注释特征向量VD计算相似度损失函数L(θ),并根据相似度损失优化更新方法名特征提取模块中的参数、Token特征提取模块中的参数、图特征提取模块中的参数、注意力嵌入模块中的参数和自然语言特征提取模块中的参数。
相似度损失函数的具体公式如下:
L(θ)=max(0,∈-cos(Vc,Vd)+cos(Vc,Vd-)) (13)
其中,θ表示方法名特征提取模块中的参数、Token特征提取模块中的参数、图特征提取模块中的参数、注意力嵌入模块中的参数和自然语言特征提取模块中的参数之和;∈是机器学习中常用的松弛变量,通常设置为0.05;VC是代码片段的融合特征向量,VD是与VC对应的自然语言注释特征向量,VD-是以负采样的方式获得的与VC不对应的自然语言注释特征向量,max()是最大值函数。
步骤8:重复执行步骤5-步骤7,直至相似度损失L(θ)收敛,获得每一代码片段最终的融合特征向量,及具有最优参数的方法名特征提取模块、具有最优参数的Token特征提取模块、具有最优参数的图特征提取模块、具有最优参数的注意力嵌入模块和具有最优参数的自然语言特征提取模块;
本发明实施例中,在训练方法名特征提取模块、Token特征提取模块、图特征提取模块、注意力嵌入模块和自然语言特征提取模块中的参数时,批处理大小设置为64,每一代码片段的方法名序列M、Token序列T、程序依赖图序列P以及自然语言注释序列D的最大长度依次设置为6、20、80和50,低于最大长度的序列用特殊标记<PAD>填充到最大长度;对于双向LSTM单元,隐藏层的大小设置为256;对于MLP,嵌入向量维度被设置为512;利用ADAM优化器更新参数。
步骤9:当用户输入查询语句q时,通过分词工具对用户输入的查询语句进行分词处理并过滤掉其中包含的特殊符号获得自然语言序列Q;
步骤10:通过自然语言特征提取模块提取自然语言序列包含的特征,获得自然语言特征向量VQ
步骤11:计算自然语言特征向量VQ与所有代码片段最终的融合特征向量之间的余弦相似度,将余弦相似度最大的若干融合特征向量对应的代码片段作为代码搜索结果,返回给用户。
在本实施例中是将与自然语言特征向量VQ余弦相似度最大的10个融合特征向量对应的代码片段作为代码检索结果,返回给用户。
为了评估本发明提出的代码搜索方法的准确率,本发明实施例中,采用了两个广泛用于代码搜索的评估指标,平均倒数秩MRR(Mean Reciprocal Rank)和R@w(successpercentage at w)。
其中MRR是国际上通用的对搜索算法进行评估的指标,MRR的值越高,代码搜索的准确率越高;MRR的计算公式如下:
Figure BDA0003764920440000171
其中,q表示用户的一个查询,Qall是所有查询q的集合,|Qall|表示Qall中包含的查询q的数量,Frankq表示查询q的Frank值;查询q的Frank值指的是,查询q返回的代码检索结果中与查询q相符的结果第一次出现的位置,又称最佳命中排名。
R@w表示是排名靠前的w个代码检索结果中可能存在多个正确结果的百分比。R@w的值越高,代码搜索的准确率越高,R@w的计算公式如下:
Figure BDA0003764920440000172
其中,q表示用户的一个查询,Qall是所有查询q的集合,|Qall|表示Qall中包含的查询q的数量,Frankq表示查询q的Frank值;F()表示判别函数,当F()内的判断语句为真时,F()的返回结果为1;当F()内的判断语句为假时,F()的返回结果为0。
为了表明本发明提出的代码搜索方法在准确率上的优越性,在相同的数据集上评估了DeepCS,MMAN和本发明提出的代码搜索方法。评估的数据集包括两个,一个是现有的公开数据集CodeSearchNet,一个是步骤1获得的评估数据集。在CodeSearchNet数据集上,代码搜索的评估结果如表1所示;在步骤1获得的评估数据集上,代码搜索的评估结果如表2所示;结果表明本发明提出的代码搜索方法在比起DeepCS和MMAN,在准确率具有良好的优越性。
表1、CodeSearchNet数据集上代码搜索的评估结果
Figure BDA0003764920440000181
表1显示,在CodeSearchNet数据集上,本发明提出的代码搜索算法在MRR、R@1、R@5和R@10评估指标上比DeepCS提高了81%、70%、61%和29%,比MMAN提高了62%、55%、45%和24%;
表2、步骤1获得的评估数据集上代码搜索的评估结果
Figure BDA0003764920440000182
表2显示,在步骤1获得的评估数据集上,本发明提出的代码搜索算法在MRR、R@1、R@5和R@10评估指标上比DeepCS提高了100%、150%、90%和30%,比MMAN提高了63%、92%、43%和16%。
上述对本发明的一个实施例进行了详细说明。显然,上述实施例仅仅是本发明的一部分实施例,而不是全部的实施例;上述实施例仅用于解释本发明,并不构成对本发明保护范围的限定。基于上述实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,也即凡在本申请的精神和原理之内所作的所有修改、等同替换和改进等,均落在本发明要求的保护范围内。

Claims (9)

1.一种基于图序列化的代码搜索系统,其特征在于,该系统包括:
数据采集模块,用于采集多个原始代码片段,构成原始代码片段集合;
代码片段预处理模块,用于对所述原始代码片段集合中的每一代码片段提取相关特征,包括代码片段的方法名序列、代码片段的令牌Token序列和代码片段的程序依赖图PDG;
图序列转换器G2SC:用于根据代码片段预处理模块提取的程序依赖图PDG学习代码片段的控制依赖关系和代码片段的数据依赖关系,生成富含代码图结构信息的程序依赖图序列,并将所述程序依赖图序列发送给图特征提取模块;
方法名特征提取模块,用于将代码片段预处理模块提取的方法名序列输入到双向长短时记忆网络Bi-LSTM中提取方法名序列包含的特征,获得方法名特征向量并发送给注意力嵌入模块;
Token特征提取模块,用于将代码片段预处理模块提取的Token序列输入到多层感知机MLP中提取Token序列包含的特征,获得Token特征向量并发送给注意力嵌入模块;
图特征提取模块,用于将程序依赖图序列输入到双向长短时记忆网络Bi-LSTM中提取程序依赖图序列包含的特征,获得程序依赖图特征向量并发送给注意力嵌入模块;
注意力嵌入模块,用于接收所述方法名特征提取模块发送的方法名特征向量、所述Token特征提取模块发送的Token特征向量、所述图特征提取模块发送的程序依赖图特征向量,并为所述方法名特征向量、Token特征向量和程序依赖图特征向量分配不同的注意力系数,得到代码片段的融合特征向量并发送给相似度计算模块;
自然语言预处理模块,用于通过分词工具对用户输入的查询语句进行分词处理,并过滤掉其中包含的特殊符号,获得自然语言序列并发送给自然语言特征提取模块;
自然语言特征提取模块,用于将自然语言预处理模块提取的自然语言序列输入到双向长短时记忆网络Bi-LSTM中提取自然语言序列包含的特征,获得自然语言特征向量,并将该自然语言特征向量发送给相似度计算模块;
相似度计算模块,用于接收注意力嵌入模块输出的代码片段的融合特征向量和自然语言特征提取模块输出的自然语言特征向量,计算所述自然语言特征向量与所有代码片段的融合特征向量之间的余弦相似度,并将余弦相似度最大的若干融合特征向量对应的代码片段作为代码搜索结果,返回给用户。
2.一种基于图序列化的代码搜索方法,其特征在于,该方法包括如下步骤:
步骤1:采集代码片段和代码片段所对应的自然语言注释;
步骤2:通过分词工具对每一代码片段的自然语言注释进行分词处理并过滤掉分词结果中包含的特殊符号获得每一代码片段的自然语言注释序列D;
步骤3:提取每一代码片段的方法名序列M、Token序列T和程序依赖图GPDG
步骤4:将每一代码片段的程序依赖图GPDG输入到图序列转换器G2SC中,利用G2SC学习程序依赖图的控制依赖关系和数据依赖关系,生成富含代码图结构信息的程序依赖图序列P,其中
Figure FDA0003764920430000021
表示所述程序依赖图序列中所有单词的集合,NP为程序依赖图序列的单词总数;
步骤5:针对每一代码片段,利用方法名特征提取模块提取方法名序列包含的特征获得方法名特征向量VM、利用Token特征提取模块提取Token序列包含的特征获得Token特征向量VT、以及利用图特征提取模块提取程序依赖图序列包含的特征获得程序依赖图特征向量VP,并采用注意力机制将VM、VT和VP进行组合得到融合特征向量VC
步骤6:通过自然语言特征提取模块提取每一代码片段的自然语言注释序列D的特征,获得自然语言注释特征向量VD
步骤7:根据每一代码片段的融合特征向量VC和自然语言注释特征向量VD计算相似度损失函数L(θ),并根据相似度损失优化更新方法名特征提取模块中的参数、Token特征提取模块中的参数、图特征提取模块中的参数、注意力嵌入模块中的参数和自然语言特征提取模块中的参数;
步骤8:重复执行步骤5-步骤7,直至相似度损失L(θ)收敛,获得每一代码片段最终的融合特征向量,及具有最优参数的方法名特征提取模块、具有最优参数的Token特征提取模块、具有最优参数的图特征提取模块、具有最优参数的注意力嵌入模块和具有最优参数的自然语言特征提取模块;
步骤9:当用户输入查询语句q时,通过分词工具对用户输入的查询语句进行分词处理并过滤掉其中包含的特殊符号获得自然语言序列Q;
步骤10:通过自然语言特征提取模块提取自然语言序列包含的特征,获得自然语言特征向量VQ
步骤11:计算自然语言特征向量VQ与所有代码片段最终的融合特征向量之间的余弦相似度,将余弦相似度最大的若干融合特征向量对应的代码片段作为代码搜索结果,返回给用户。
3.根据权利要求2所述的基于图序列化的代码搜索方法,其特征在于,所述利用G2SC学习程序依赖图的控制依赖关系和数据依赖关系生成富含代码图结构信息的程序依赖图序列P的方法包括如下步骤:
步骤4-1:对于程序依赖图GPDG,初始化程序依赖图序列P={},将v1作为程序依赖图序列P的第一个元素p1,并设定程序依赖图序列P的最后一个元素所对应的节点为eend
步骤4-2:按照边选取规则递归地从候选边中选择一条边进行扩展,直到所有边均被遍历;
步骤4-3:如果遍历的边是控制依赖边,则只将边的始点和终点所对应的属性信息添加到程序依赖图序列P中,如果遍历的边是数据依赖边,则依次将数据依赖边的始点、数据依赖边、以及数据依赖边的终点所对应的属性信息添加到程序依赖图序列P中;
步骤4-4、重复步骤4-1至步骤4-3,遍历完所有的有向边,获得程序依赖图序列P。
4.根据权利要求3所述的基于图序列化的代码搜索方法,其特征在于,所述候选边指的是以eend为始点的未被遍历的有向边。
5.根据权利要求4所述的基于图序列化的代码搜索方法,其特征在于,所述边选取规则如下:
规则a、回溯边在前向边之前被选择,回溯边指的是有向边的终点已经被遍历的边,前向边指的是有向边的终点未被遍历的边;
规则b、当存在多个回溯边或多个前向边时,则根据预设优先级,选择控制依赖边或者数据依赖边;
规则c、如果在规则b之后仍然不能确定边,则选择终点所对应节点优先级最高的边作为优先扩展边;
规则d、如果不存在以eend为始点的未被遍历的有向边,则继续遍历以eend最近的祖先节点为始点的没有遍历的有向边。
6.根据权利要求1所述的基于图序列化的代码搜索方法,其特征在于,所述利用方法名特征提取模块提取方法名特征向量VM的方法为:在方法名特征提取模块中将代码片段的方法名序列
Figure FDA00037649204300000410
中的每一个单词转为词向量并输入到能学习到时序关系的双向长短时记忆网络Bi-LSTM中,并按照公式(1)获得方法名序列M在正向LSTM中i时刻的正向隐藏层向量
Figure FDA0003764920430000041
按照公式(2)获得方法名序列M在反向LSTM中i时刻的反向隐藏层向量
Figure FDA0003764920430000042
最后根据公式(3)对方法名序列M所有时刻的正向隐藏层向量和反向隐藏层向量进行整合,获得方法名特征向量VM,具体公式如下;
Figure FDA0003764920430000043
Figure FDA0003764920430000044
Figure FDA0003764920430000045
其中,mi为方法名序列的第i个单词,NM为方法名序列M中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;
Figure FDA0003764920430000046
Figure FDA0003764920430000047
代表方法名序列的正向和反向LSTM神经网络模型以及相关参数;
Figure FDA0003764920430000048
Figure FDA0003764920430000049
分别表示方法名序列的正向LSTM神经网络模型和反向LSTM神经网络模型在i时刻的正向隐藏层向量和反向隐藏层向量;CONCAT()表示两个向量的串联函数;maxpooling()代表最大池化函数;VM是最终获得的方法名特征向量。
7.根据权利要求1所述的基于图序列化的代码搜索方法,其特征在于,所述利用Token特征提取模块提取Token特征向量VT的方法为:在Token特征提取模块中将代码片段的Token序列
Figure FDA00037649204300000411
中的每一个单词转为词向量并输入到多层感知机MLP中,并按照公式(4)获得Token序列T中每个单词在MLP中的隐藏层嵌入向量
Figure FDA00037649204300000512
最后根据公式(5)对Token序列T所有单词的隐藏层嵌入向量进行整合,获得Token特征向量VT,具体公式如下;
Figure FDA0003764920430000051
Figure FDA00037649204300000511
其中,tj为Token序列T的第j个单词;NT为Token序列T中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;WT是MLP的权重参数;tanh()代表tanh函数;
Figure FDA00037649204300000513
是tj在MLP中的隐藏层嵌入向量;maxpooling()代表最大池化函数。
8.根据权利要求1所述的基于图序列化的代码搜索方法,其特征在于,所述利用图特征提取模块提取程序依赖图特征向量VP的方法为:在图特征提取模块中将代码片段的程序依赖图序列
Figure FDA00037649204300000514
中的每一个单词转为词向量并输入到能学习到时序关系的双向长短时记忆网络Bi-LSTM中,并按照公式(6)获得程序依赖图序列P在正向LSTM中k时刻的正向隐藏层向量
Figure FDA0003764920430000052
按照公式(7)获得程序依赖图序列P在反向LSTM中k时刻的反向隐藏层向量
Figure FDA0003764920430000053
最后根据公式(8)对程序依赖图序列P所有时刻的正向隐藏层向量和反向隐藏层向量进行整合,获得程序依赖图特征向量VP,具体公式如下;
Figure FDA0003764920430000054
Figure FDA0003764920430000055
Figure FDA0003764920430000056
其中,pk为程序依赖图序列P的第k个单词;NP为程序依赖图序列P中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;
Figure FDA0003764920430000057
Figure FDA0003764920430000058
代表程序依赖图序列P的正向与反向LSTM神经网络模型以及相关参数;
Figure FDA0003764920430000059
Figure FDA00037649204300000510
分别表示程序依赖图序列P的正向LSTM神经网络模型和反向LSTM神经网络模型在k时刻的正向隐藏层向量和反向隐藏层向量;CONCAT()表示两个向量的串联函数;maxpooling()代表最大池化函数;VP是最终获得的程序依赖图特征向量。
9.根据权利要求1所述的基于图序列化的代码搜索方法,其特征在于,所述通过自然语言特征提取模块提取自然语言注释特征向量VD的方法为:在自然语言特征提取模块中将代码片段的自然语言注释序列
Figure FDA00037649204300000610
中的每一个单词转为词向量并输入到能学习到时序关系的双向长短时记忆网络Bi-LSTM中,并按照公式(10)获得自然语言注释序列D在正向LSTM中t时刻的正向隐藏层向量
Figure FDA0003764920430000061
按照公式(11)获得自然语言注释序列D在反向LSTM中t时刻的反向隐藏层向量
Figure FDA0003764920430000062
最后根据公式(12)对自然语言注释序列D所有时刻的正向隐藏层向量和反向隐藏层向量进行整合,获得自然语言注释特征向量VD,具体公式如下;
Figure FDA0003764920430000063
Figure FDA0003764920430000064
Figure FDA0003764920430000065
其中,dr为自然语言注释序列的第r个单词;ND为自然语言注释序列D中的单词总数;ω()是利用Skip-Gram方法,将文本中的单词转换成词向量的函数;
Figure FDA0003764920430000066
Figure FDA0003764920430000067
代表自然语言注释序列D的正向与反向LSTM神经网络模型以及相关参数;
Figure FDA0003764920430000068
Figure FDA0003764920430000069
分别表示正向LSTM神经网络模型和反向LSTM神经网络模型在r时刻的正向隐藏层向量和反向隐藏层向量;CONCAT()表示两个向量的串联函数;maxpooling()代表最大池化函数。
CN202210885120.9A 2022-07-26 2022-07-26 一种基于图序列化的代码搜索系统及方法 Pending CN115268869A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210885120.9A CN115268869A (zh) 2022-07-26 2022-07-26 一种基于图序列化的代码搜索系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210885120.9A CN115268869A (zh) 2022-07-26 2022-07-26 一种基于图序列化的代码搜索系统及方法

Publications (1)

Publication Number Publication Date
CN115268869A true CN115268869A (zh) 2022-11-01

Family

ID=83770455

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210885120.9A Pending CN115268869A (zh) 2022-07-26 2022-07-26 一种基于图序列化的代码搜索系统及方法

Country Status (1)

Country Link
CN (1) CN115268869A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116661852A (zh) * 2023-04-06 2023-08-29 华中师范大学 一种基于程序依赖图的代码搜索方法
CN118170871A (zh) * 2024-05-15 2024-06-11 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种基于依赖的多粒度代码检索方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116661852A (zh) * 2023-04-06 2023-08-29 华中师范大学 一种基于程序依赖图的代码搜索方法
CN116661852B (zh) * 2023-04-06 2023-12-08 华中师范大学 一种基于程序依赖图的代码搜索方法
CN118170871A (zh) * 2024-05-15 2024-06-11 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种基于依赖的多粒度代码检索方法
CN118170871B (zh) * 2024-05-15 2024-07-12 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) 一种基于依赖的多粒度代码检索方法

Similar Documents

Publication Publication Date Title
CN111310438B (zh) 基于多粒度融合模型的中文句子语义智能匹配方法及装置
CN110298037B (zh) 基于增强注意力机制的卷积神经网络匹配的文本识别方法
CN113011533A (zh) 文本分类方法、装置、计算机设备和存储介质
CN106970910B (zh) 一种基于图模型的关键词提取方法及装置
CN109271506A (zh) 一种基于深度学习的电力通信领域知识图谱问答系统的构建方法
CN111522910B (zh) 一种基于文物知识图谱的智能语义检索方法
CN115268869A (zh) 一种基于图序列化的代码搜索系统及方法
CN113486667A (zh) 一种基于实体类型信息的医疗实体关系联合抽取方法
CN110334184A (zh) 基于机器阅读理解的智能问答系统
CN116127095A (zh) 一种序列模型与知识图谱结合的问答方法
CN117648429B (zh) 基于多模态自适应检索式增强大模型的问答方法及系统
CN112417170B (zh) 面向不完备知识图谱的关系链接方法
CN113204611A (zh) 建立阅读理解模型的方法、阅读理解方法及对应装置
CN114912449B (zh) 基于代码描述文本的技术特征关键词抽取方法与系统
CN114036303B (zh) 一种基于双粒度注意力和对抗训练的远程监督关系抽取方法
CN117827886B (zh) 一种基于大语言模型的自然语句转sql语句的方法
CN110516145A (zh) 一种基于句向量编码的信息搜索方法
CN107958068B (zh) 一种基于实体知识库的语言模型平滑方法
CN113111663A (zh) 一种融合关键信息的摘要生成方法
CN117807202A (zh) 一种知识图谱增强大语言模型推理的商标法律智能问答方法
CN118152547B (zh) 一种根据提问者理解能力的机器人回答方法、介质及系统
CN116992040A (zh) 基于概念图的知识图谱补全方法和系统
CN117828050B (zh) 基于长文档检索增强生成的中医问答方法、设备及介质
CN114004236B (zh) 融入事件实体知识的汉越跨语言新闻事件检索方法
CN117151052B (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