CN115577075B - 一种基于关系图卷积网络的深度代码搜索方法 - Google Patents
一种基于关系图卷积网络的深度代码搜索方法 Download PDFInfo
- Publication number
- CN115577075B CN115577075B CN202211270478.7A CN202211270478A CN115577075B CN 115577075 B CN115577075 B CN 115577075B CN 202211270478 A CN202211270478 A CN 202211270478A CN 115577075 B CN115577075 B CN 115577075B
- Authority
- CN
- China
- Prior art keywords
- graph
- code
- text
- kth
- 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.)
- Active
Links
- 238000010586 diagram Methods 0.000 title claims abstract description 106
- 238000000034 method Methods 0.000 title claims abstract description 48
- 239000013598 vector Substances 0.000 claims abstract description 207
- 238000013528 artificial neural network Methods 0.000 claims abstract description 50
- 239000012634 fragment Substances 0.000 claims abstract description 36
- 238000013135 deep learning Methods 0.000 claims abstract description 8
- 230000003993 interaction Effects 0.000 claims abstract description 7
- 238000005457 optimization Methods 0.000 claims abstract description 4
- 238000012216 screening Methods 0.000 claims abstract description 4
- 238000012549 training Methods 0.000 claims abstract description 4
- 238000004364 calculation method Methods 0.000 claims description 105
- 230000006870 function Effects 0.000 claims description 61
- 230000001537 neural effect Effects 0.000 claims description 18
- 238000011176 pooling Methods 0.000 claims description 18
- 230000008569 process Effects 0.000 claims description 18
- 210000005036 nerve Anatomy 0.000 claims description 16
- 230000004913 activation Effects 0.000 claims description 15
- 238000012545 processing Methods 0.000 claims description 15
- 239000011159 matrix material Substances 0.000 claims description 12
- 238000013527 convolutional neural network Methods 0.000 claims description 10
- 238000010276 construction Methods 0.000 claims description 6
- ORILYTVJVMAKLC-UHFFFAOYSA-N Adamantane Natural products C1C(C2)CC3CC1CC2C3 ORILYTVJVMAKLC-UHFFFAOYSA-N 0.000 claims description 3
- 238000004422 calculation algorithm Methods 0.000 claims description 3
- 238000005096 rolling process Methods 0.000 claims 3
- 238000007781 pre-processing Methods 0.000 abstract 1
- 238000005516 engineering process Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/3332—Query translation
- G06F16/3334—Selection or weighting of terms from queries, including natural language queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/194—Calculation of difference between files
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Databases & Information Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出了一种基于关系图卷积网络的深度代码搜索方法,其包括以下步骤:引入多个代码片段以及对应的多个代码注释;预处理每个代码片段和筛选对应每个注释;构建得到每个预处理后代码片段的代码图和每个对应注释的文本图;将每个代码图和每个文本图通过图深度学习扩展分别计算得到每个代码图的向量和每个文本图的向量;五、输入每个代码图的向量及对应每个文本图的向量,训练得到参数优化后的代码注释匹配相似度深度搜索神经网络;六、面对实时输入的查询文本,优化后代码注释匹配相似度深度搜索神经网络预测每个候选代码片段的分数,返回相似度最高的代码片段。本发明优点在于能够捕捉文本和代码片段的细粒度匹配关系和全局互动关系。
Description
技术领域
本发明属于代码搜索技术领域,尤其涉及一种基于关系图卷积网络的深度代码搜索方法。
背景技术
近年来,代码仓库如Github、Gitee和Bitbucket中的开源项目呈井喷式增长,优质的代码资源数量变得非常庞大,如何准确高效地从代码仓库中搜索出符合程序员需求的代码,是当前软件工程和自然语言处理交叉领域的热点研究方向之一。给定一个查询语句(即人类自然语言),代码搜索的目标是从大型代码库中找到最匹配的代码片段。代码搜索工具不仅可以帮助程序开发人员找到常见程序功能的代码范例,也可以帮助他们快速搜索其他开发者编写的个性化功能的优质代码片段,这在很大程度上提高了程序开发人员的工作效率。此外,代码搜索技术现已成为程序合成、代码推荐与补全以及代码风格改善等程序构造技术的重要支撑。
传统的代码搜索方法通常将源代码视为文本文档,利用信息检索(IR)模型检索与给定查询匹配的相关代码片段。这些方法主要依赖于源代码和自然语言查询之间的文本相似性,这样的搜索经常导致错误匹配,得不到想要的结果。CODEnn方法应用深度学习技术表征自然语言和程序片段,但是忽视了代码片段的结构信息。GraphSearchNet模型是一种基于图神经网络的代码搜索模型。GraphSearchNet将源代码和查询文本分别编码成两个图,用双向门控图神经网络来捕捉代码片段和查询文本的局部结构信息,并通过多头注意力机制解决全局依赖性问题来提高模型的学习能力。
尽管GraphSearchNet能够有效刻画代码片段和自然语言描述的深层结构信息,但还存在以下不足:
代码片段和自然语言描述是两种截然不同模态的数据,语法规则和语言结构的不同导致了语义映射的困难,所以细粒度匹配对跨模态数据的搜索至关重要。GraphSearchNet没有对代码图和文本图的节点做任何交互匹配操作,缺乏细粒度对齐的数据导致搜索精度不够高。
全局视角下一对图的图级交互特征可能是学习图相似性的重要补充组件。GraphSearchNet没有进一步对代码和文本的全局信息进行比较和匹配,忽视全局匹配的模型可能会因为丢失图级交互特征不能捕捉到代码和文本的全局关系。
发明内容
针对现有技术存在的问题,本发明的要解决的技术问题是:如何提供一种可以准确有效进行代码检索的方法,该方法不但可以表征代码片段和自然语言文本的深层语义,还可以精确捕获捕代码和查询之间的相关关系。
为了解决上述技术问题,本发明提供了一种基于关系图卷积网络的深度代码搜索方法,具体步骤包括如下:
步骤1:引入多个代码片段以及多个代码片段对应的代码注释;
步骤2:将每个代码片段依次通过爬虫方法处理得到每个预处理后代码片段,并筛选每个预处理后代码片段对应的代码注释;
步骤3:将每个预处理后代码片段通过抽象语法树图构建方法处理得到每个代码图,将每个预处理后代码片段对应的代码注释通过选区解析树构建方法处理得到每个文本图,将每个文本图对应的代码图定义为每个文本图对应的正样本代码图,在剩余的多个样本图中随机选择一个样本图作为每个文本图对应的负样本代码图;
步骤4:将每个代码图通过图深度学习扩展计算得到每个代码图的向量,将每个文本图通过图深度学习扩展计算得到每个文本图的向量;
步骤5:构建代码注释匹配相似度深度搜索神经网络,依次将每个代码图的向量及对应的每个文本图的向量输入至代码注释匹配相似度深度搜索神经网络进行相似度匹配计算,得到每个文本图与对应的每个正样本代码图之间的匹配相似度、每个文本图与对应的每个负样本代码图之间的匹配相似度,进一步构建三元组损失函数模型,通过Adam算法优化训练得到优化后代码注释匹配相似度深度搜索神经网络;
步骤6:输入查询文本,通过多个代码片段构建候选代码库,将查询文本通过步骤3-4处理得到查询文本的文本图的向量,将候选代码库中每个代码片段步骤3-4处理得到每个代码片段的代码图的向量,将查询文本的文本图的向量及每个代码片段的代码图的向量输入至优化后代码注释匹配相似度深度搜索神经网络进行相似度匹配计算,得到查询文本的文本图的向量与每个代码片段的代码图的向量之间的匹配相似度,将匹配相似度最高的代码片段的代码图的向量对应的代码片段作为返回推荐的代码。
作为优选,步骤5所述构建代码注释匹配相似度深度搜索神经网络,具体如下:
所述代码注释匹配相似度深度搜索神经网络包括:
代码图关系图卷积神经网络、文本图关系图卷积神经网络、基于多视角匹配函数的节点层面匹配计算模块、基于神经张量网络的图层面匹配计算模块、相似度加权计算模块;
所述的代码图关系图卷积神经网络、文本图关系图卷积神经网络均采用关系图卷积神经网络结构;
所述基于神经张量网络的图层面匹配计算模块采用神经张量网络结构;
所述代码图关系图卷积神经网络与所述多视角匹配函数的节点层面匹配计算模块连接;
所述文本图关系图卷积神经网与所述多视角匹配函数的节点层面匹配计算模块连接;
所述代码图关系图卷积神经网络与所述基于神经张量网络的图层面匹配计算模块连接;
所述文本图关系图卷积神经网与所述基于神经张量网络的图层面匹配计算模块连接;
所述多视角匹配函数的节点层面匹配计算模块与所述相似度加权计算模块连接;
所述基于神经张量网络的图层面匹配计算模块与所述相似度加权计算模块连接;
所述关系图卷积神经网络,将每个代码图的张量通过学习得到每个代码图的所有节点的初始节点嵌入向量,并分别输出至所述的多视角匹配函数的节点层面匹配计算模块、基于神经张量网络的图层面匹配计算模块;
所述文本图关系图卷积神经网络,将每个文本图的张量通过学习得到每个文本图的所有节点的初始节点嵌入向量,并分别输出至所述的多视角匹配函数的节点层面匹配计算模块、基于神经张量网络的图层面匹配计算模块;
所述基于多视角匹配函数的节点层面匹配计算模块,将每个代码图的所有节点的初始节点嵌入向量、每个文本图的所有节点的初始节点嵌入向量通过匹配计算,得到每个代码图与对应的每个文本图之间的节点层面相似度,并输出至所述相似度加权计算模块;
所述通过基于多视角匹配函数的节点层面匹配计算模块计算,具体过程如下:
所述的每个代码图的所有节点的初始节点嵌入向量,定义如下:
HAk,i
k∈[1,L],i∈[1,Nk]
其中,HAk,i表示第k个代码图的第i个节点的初始节点嵌入向量,L表示代码图的数量,Nk表示第k个代码图的节点数量;
所述的每个文本图的所有节点的初始节点嵌入向量,定义如下:
HBk,j
k∈[1,L],j∈[1,Mk]
其中,HBk,j表示第k个文本图的第j个节点的初始节点嵌入向量,L表示文本图的数量,Mk表示第k个文本图的节点数量;
将第k个代码图的第i个节点的初始节点嵌入向量、第k个文本图的第j个节点的初始节点嵌入向量通过余弦函数计算得到,第k个文本图的第j个节点与第k个代码图的所有节点的第i个节点之间的跨图注意力分数,定义为:αk,j,i;
计算从第k个文本图的第j个节点视角下,相应的第k个代码图的整体图嵌入向量,具体如下:
根据第k个文本图的第j个节点的初始节点嵌入向量、第k个文本图的第j个节点相应的第k个代码图的整体图嵌入向量进一步计算第k个文本图的第j个节点的更新节点嵌入向量,具体计算如下:
其中Wk,j表示第k个文本图的第j个节点的参数矩阵,⊙表示对应位置元素相乘,cosine表示余弦计算函数。
通过更新第k个文本图的第j个节点的初始节点嵌入向量;
将第k个文本图所有节点的更新后的节点嵌入向量通过最大池化操作处理得到第k个文本图的最大池化嵌入向量;
将第k个代码图的第i个节点的初始节点嵌入向量、第k个文本图的第j个节点的初始节点嵌入向量通过余弦函数计算得到,第k个代码图的第i个节点与第k个文本图的所有节点的第j个节点之间的跨图注意力分数,定义为:βk,i,j;
计算从第k个代码图的第i个节点视角下,相应的第k个文本图的整体图嵌入向量,具体如下:
根据第k个代码图的第i个节点的初始节点嵌入向量、第k个代码图的第i个节点相应的第k个代码图的整体图嵌入向量进一步计算第k个代码图的第i个节点的更新节点嵌入向量,具体计算如下:
其中,Wk,i表示第k个代码图的第i个节点的参数矩阵,⊙表示对应位置元素相乘,cosine表示余弦计算函数。
通过更新第k个代码图的第i个节点的初始节点嵌入向量;
将第k个代码图所有节点的更新后的节点嵌入向量通过最大池化操作处理得到第k个代码图的最大池化嵌入向量;
将第k个文本图的最大池化嵌入向量与第k个代码图的最大池化嵌入向量通过余弦函数计算得到每个代码图与对应的每个文本图之间的节点层面相似度;
所述基于神经张量网络的图层面匹配计算模块,将每个代码图的所有节点的初始节点嵌入向量、每个文本图的所有节点的初始节点嵌入向量通过匹配计算,得到每个代码图与对应的每个文本图之间的图层面相似度,并输出至所述相似度加权计算模块;
所述通过基于神经张量网络的图层面匹配计算模块计算,具体过程如下:
根据第k个代码图的第i个节点的初始节点嵌入向量,计算得到第k个代码图的全局图上下文感知向量,具体过程如下:
其中,tanh表示激活函数,Uk,i表示第k个代码图的第i个节点的参数矩阵,HAk,i表示第k个代码图的第i个节点的初始节点嵌入向量,Ck,i表示第k个代码图的全局图上下文感知向量;
根据第k个代码图的第i个节点的初始节点嵌入向量与第k个代码图的全局图上下文感知向量,计算得到第k个代码图的全局视角下的整体嵌入向量pak,具体过程如下:
其中,sigmoid表示激活函数,HAk,i T表示第k个代码图的第i个节点的初始节点嵌入向量的转置,pak表示第k个代码图的全局视角下的整体嵌入向量;
根据第k个文本图的第j个节点的初始节点嵌入向量,计算第k个文本图的全局图上下文感知向量,具体过程如下:
其中,Dk,j表示第k个文本图的全局图上下文感知向量,tanh表示激活函数,Uk,j表示第k个文本图的第j个节点的参数矩阵,HBk,j表示第k个文本图的第j个节点的初始节点嵌入向量;
根据第k个文本图的第j个节点的初始节点嵌入向量与第k个文本图的全局图上下文感知向量,计算得到第k个文本图的全局视角下的整体嵌入向量,具体过程如下:
其中,sigmoid表示激活函数,HBk,j T表示第k个文本图的第j个节点的初始节点嵌入向量的转置,pbk表示第k个文本图的全局视角下的整体嵌入向量;
将第k个代码图的全局视角下的整体嵌入向量与第k个文本图的全局视角下的整体嵌入向量输入神经张量网络,得到第k个代码图与第k个文本图全局图层面互动的相似性向量,定义为:
进一步地,将输入多层全连接神经网络以及相应的激活函数层,得到第k个代码图与第k个文本图之间的图层面相似度;
所述相似度加权计算模块,将每个文本图与对应的每个代码图之间的节点层面相似度、每个文本图与对应的每个代码图之间的图层面相似度通过加权计算,得到每个代码图与对应的每个文本图之间的匹配相似度;
所述的每个代码图与对应的每个文本图之间的节点层面相似度定义为所述每个文本图与对应的每个代码图之间的图层面相似度定义为/>
所述进行加权计算,具体过程如下:
其中,label取值1或2,ai是相应的权重参数,scorek表示计算得到的第k个文本图和第k个代码图最终的匹配相似度;
将每个文本图与对应的每个正样本代码图之间的节点层面相似度、每个文本图与对应的每个正样本代码图之间的图层面相似度输入所述相似度加权计算模块,得到每个文本图与对应的每个正样本代码图之间的匹配相似度,定义为:
将每个文本图与对应的每个负样本代码图之间的节点层面相似度、每个文本图与对应的每个负样本代码图之间的图层面相似度输入所述相似度加权计算模块,得到每个文本图与对应的每个负样本代码图之间的匹配相似度,定义为:
步骤5所述三元组损失函数模型,具体如下:
其中,θ表示待训练的模型参数,δ表示所述损失函数的边际值,L表示文本图的数量;
相对于现有技术,本发明至少具有如下优点:
本发明将代码片段和自然语言注释统一表示为图结构,应用关系图卷积网络学习到代码和文本的深层语义信息。另外,本发明还提出了基于多视角匹配函数的节点层面匹配策略用于解决现有技术未对代码片段和查询文本进行细粒度匹配的问题,以及基于神经张量网络的图层面匹配策略用于解决现有技术未捕捉代码图和文本图的全局交互特征的不足。
附图说明
图1:本发明具体实施例的方法流程图。
图2:前后端代码示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
具体实施时,本发明技术方案提出的方法可由本领域技术人员采用计算机软件技术实现自动运行流程,实现方法的系统装置例如存储本发明技术方案相应计算机程序的计算机可读存储介质以及包括运行相应计算机程序的计算机设备,也应当在本发明的保护范围内。
下面结合图1介绍本发明实施例方法的技术方案为一种基于关系图卷积网络的深度代码搜索方法,具体如下:
步骤1:引入多个代码片段以及多个代码片段对应的代码注释;
步骤2:将每个代码片段依次通过爬虫方法处理得到每个预处理后代码片段,并筛选每个预处理后代码片段对应的代码注释;
步骤3:将每个预处理后代码片段通过抽象语法树图构建方法处理得到每个代码图,将每个预处理后代码片段对应的代码注释通过选区解析树构建方法处理得到每个文本图,将每个文本图对应的代码图定义为每个文本图对应的正样本代码图,在剩余的多个样本图中随机选择一个样本图作为每个文本图对应的负样本代码图;
步骤4:将每个代码图通过图深度学习扩展计算得到每个代码图的向量,将每个文本图通过图深度学习扩展计算得到每个文本图的向量;
步骤5:构建代码注释匹配相似度深度搜索神经网络,依次将每个代码图的向量及对应的每个文本图的向量输入至代码注释匹配相似度深度搜索神经网络进行相似度匹配计算,得到每个文本图与对应的每个正样本代码图之间的匹配相似度、每个文本图与对应的每个负样本代码图之间的匹配相似度,进一步构建三元组损失函数模型,通过Adam算法优化训练得到优化后代码注释匹配相似度深度搜索神经网络;
步骤5所述构建代码注释匹配相似度深度搜索神经网络,具体如下:
所述代码注释匹配相似度深度搜索神经网络包括:
代码图关系图卷积神经网络、文本图关系图卷积神经网络、基于多视角匹配函数的节点层面匹配计算模块、基于神经张量网络的图层面匹配计算模块、相似度加权计算模块;
所述的代码图关系图卷积神经网络、文本图关系图卷积神经网络均采用关系图卷积神经网络结构;
所述基于神经张量网络的图层面匹配计算模块采用神经张量网络结构;
所述代码图关系图卷积神经网络与所述多视角匹配函数的节点层面匹配计算模块连接;
所述文本图关系图卷积神经网与所述多视角匹配函数的节点层面匹配计算模块连接;
所述代码图关系图卷积神经网络与所述基于神经张量网络的图层面匹配计算模块连接;
所述文本图关系图卷积神经网与所述基于神经张量网络的图层面匹配计算模块连接;
所述多视角匹配函数的节点层面匹配计算模块与所述相似度加权计算模块连接;
所述基于神经张量网络的图层面匹配计算模块与所述相似度加权计算模块连接;
所述关系图卷积神经网络,将每个代码图的张量通过学习得到每个代码图的所有节点的初始节点嵌入向量,并分别输出至所述的多视角匹配函数的节点层面匹配计算模块、基于神经张量网络的图层面匹配计算模块;
所述文本图关系图卷积神经网络,将每个文本图的张量通过学习得到每个文本图的所有节点的初始节点嵌入向量,并分别输出至所述的多视角匹配函数的节点层面匹配计算模块、基于神经张量网络的图层面匹配计算模块;
所述基于多视角匹配函数的节点层面匹配计算模块,将每个代码图的所有节点的初始节点嵌入向量、每个文本图的所有节点的初始节点嵌入向量通过匹配计算,得到每个代码图与对应的每个文本图之间的节点层面相似度,并输出至所述相似度加权计算模块;
所述通过基于多视角匹配函数的节点层面匹配计算模块计算,具体过程如下:
所述的每个代码图的所有节点的初始节点嵌入向量,定义如下:
HAk,i
k∈[1,L],i∈[1,Nk]
其中,HAk,i表示第k个代码图的第i个节点的初始节点嵌入向量,L=20000表示代码图的数量,Nk表示第k个代码图的节点数量,最大节点数量为300;
所述的每个文本图的所有节点的初始节点嵌入向量,定义如下:
HBk,j
k∈[1,L],j∈[1,Mk]
其中,HBk,j表示第k个文本图的第j个节点的初始节点嵌入向量,L=20000表示文本图的数量,Mk表示第k个文本图的节点数量,最大节点数量为50;
将第k个代码图的第i个节点的初始节点嵌入向量、第k个文本图的第j个节点的初始节点嵌入向量通过余弦函数计算得到,第k个文本图的第j个节点与第k个代码图的所有节点的第i个节点之间的跨图注意力分数,定义为:αk,j,i;
计算从第k个文本图的第j个节点视角下,相应的第k个代码图的整体图嵌入向量,具体如下:
根据第k个文本图的第j个节点的初始节点嵌入向量、第k个文本图的第j个节点相应的第k个代码图的整体图嵌入向量进一步计算第k个文本图的第j个节点的更新节点嵌入向量,具体计算如下:
其中Wk,j表示第k个文本图的第j个节点的参数矩阵,⊙表示对应位置元素相乘,cosine表示余弦计算函数。
通过更新第k个文本图的第j个节点的初始节点嵌入向量;
将第k个文本图所有节点的更新后的节点嵌入向量通过最大池化操作处理得到第k个文本图的最大池化嵌入向量;
将第k个代码图的第i个节点的初始节点嵌入向量、第k个文本图的第j个节点的初始节点嵌入向量通过余弦函数计算得到,第k个代码图的第i个节点与第k个文本图的所有节点的第j个节点之间的跨图注意力分数,定义为:βk,i,j;
计算从第k个代码图的第i个节点视角下,相应的第k个文本图的整体图嵌入向量,具体如下:
根据第k个代码图的第i个节点的初始节点嵌入向量、第k个代码图的第i个节点相应的第k个代码图的整体图嵌入向量进一步计算第k个代码图的第i个节点的更新节点嵌入向量,具体计算如下:
其中,Wk,i表示第k个代码图的第i个节点的参数矩阵,⊙表示对应位置元素相乘,cosine表示余弦计算函数。
通过更新第k个代码图的第i个节点的初始节点嵌入向量;
将第k个代码图所有节点的更新后的节点嵌入向量通过最大池化操作处理得到第k个代码图的最大池化嵌入向量;
将第k个文本图的最大池化嵌入向量与第k个代码图的最大池化嵌入向量通过余弦函数计算得到每个代码图与对应的每个文本图之间的节点层面相似度;
所述基于神经张量网络的图层面匹配计算模块,将每个代码图的所有节点的初始节点嵌入向量、每个文本图的所有节点的初始节点嵌入向量通过匹配计算,得到每个代码图与对应的每个文本图之间的图层面相似度,并输出至所述相似度加权计算模块;
所述通过基于神经张量网络的图层面匹配计算模块计算,具体过程如下:
根据第k个代码图的第i个节点的初始节点嵌入向量,计算得到第k个代码图的全局图上下文感知向量,具体过程如下:
其中,tanh表示激活函数,Uk,i表示第k个代码图的第i个节点的参数矩阵,HAk,i表示第k个代码图的第i个节点的初始节点嵌入向量,Ck,i表示第k个代码图的全局图上下文感知向量;
根据第k个代码图的第i个节点的初始节点嵌入向量与第k个代码图的全局图上下文感知向量,计算得到第k个代码图的全局视角下的整体嵌入向量pak,具体过程如下:
其中,sigmoid表示激活函数,HAk,i T表示第k个代码图的第i个节点的初始节点嵌入向量的转置,pak表示第k个代码图的全局视角下的整体嵌入向量;
根据第k个文本图的第j个节点的初始节点嵌入向量,计算第k个文本图的全局图上下文感知向量,具体过程如下:
其中,Dk,j表示第k个文本图的全局图上下文感知向量,tanh表示激活函数,Uk,j表示第k个文本图的第j个节点的参数矩阵,HBk,j表示第k个文本图的第j个节点的初始节点嵌入向量;
根据第k个文本图的第j个节点的初始节点嵌入向量与第k个文本图的全局图上下文感知向量,计算得到第k个文本图的全局视角下的整体嵌入向量,具体过程如下:
其中,sigmoid表示激活函数,HBk,j T表示第k个文本图的第j个节点的初始节点嵌入向量的转置,pbk表示第k个文本图的全局视角下的整体嵌入向量;
将第k个代码图的全局视角下的整体嵌入向量与第k个文本图的全局视角下的整体嵌入向量输入神经张量网络,得到第k个代码图与第k个文本图全局图层面互动的相似性向量,定义为:
进一步地,将输入多层全连接神经网络以及相应的激活函数层,得到第k个代码图与第k个文本图之间的图层面相似度;
所述相似度加权计算模块,将每个文本图与对应的每个代码图之间的节点层面相似度、每个文本图与对应的每个代码图之间的图层面相似度通过加权计算,得到每个代码图与对应的每个文本图之间的匹配相似度;
所述的每个代码图与对应的每个文本图之间的节点层面相似度定义为所述每个文本图与对应的每个代码图之间的图层面相似度定义为/>
所述进行加权计算,具体过程如下:
其中,label取值1或2,ai是相应的权重参数,scorek表示计算得到的第k个文本图和第k个代码图最终的匹配相似度;
将每个文本图与对应的每个正样本代码图之间的节点层面相似度、每个文本图与对应的每个正样本代码图之间的图层面相似度输入所述相似度加权计算模块,得到每个文本图与对应的每个正样本代码图之间的匹配相似度,定义为:
将每个文本图与对应的每个负样本代码图之间的节点层面相似度、每个文本图与对应的每个负样本代码图之间的图层面相似度输入所述相似度加权计算模块,得到每个文本图与对应的每个负样本代码图之间的匹配相似度,定义为:
步骤5所述三元组损失函数模型,具体如下:
其中,θ表示待训练的模型参数,δ表示所述损失函数的边际值,L表示文本图的数量;
步骤6:输入查询文本,通过多个代码片段构建候选代码库,将查询文本通过步骤3-4处理得到查询文本的文本图的向量,将候选代码库中每个代码片段步骤3-4处理得到每个代码片段的代码图的向量,将查询文本的文本图的向量及每个代码片段的代码图的向量输入至优化后代码注释匹配相似度深度搜索神经网络进行相似度匹配计算,得到查询文本的文本图的向量与每个代码片段的代码图的向量之间的匹配相似度,将匹配相似度最高的代码片段的代码图的向量对应的代码片段作为返回推荐的代码;
实际应用场景如下:搭建代码搜索系统,整体框架图如附图2所示,后端数据库存储着候选代码片段,后端模型为所述优化后代码注释匹配相似度深度搜索神经网络。所述输入描述功能的查询文本设为“how to reverse a string”,则代码搜索系统返回推荐的代码片段为:
def reverse(s):
str=""
for i in s:
str=i+str
return str
另外,表1和表2给出了与7种常见的基线方法在FB-Java数据集和CSN-Python数据集上的实验数据对比。为了证明本发明的有效性,通过比较在FB-Java数据集和CSN-Python数据集上的平均倒数排名MRR和在k处的成功率S@k来定量评估模型的表现。
表1在FB-Java数据集上的实验结果
表2在CSN-Python数据集上的实验结果
与所有的基线模型相比,本发明在两个数据集上的四个评价指标都展现了最好的性能。可以看到,MRR指标在FB-Java数据集和CSN-Python数据集上都超过了85%,这意味着本发明可以很容易地找到查询相关的代码片段。在指标S@1上也超过了80%,比其他模型至少高出了10%。因此在实时搜索时本发明返回的首个代码片段与查询文本更相似。
基于传统信息检索技术的代码搜索方法只能捕捉到文本和代码的浅层特征,而运用深度神经网络得到代码和查询语言的向量表示,然后对向量之间的空间距离进行优化能够挖掘更高层次的特征,模型可以搜索出更加多样化的结果。
本发明提出的基于关系图卷积网络的代码搜索方法,图表示能够完整保留代码片段的结构和语义信息,提出的匹配策略能够探索文本图与代码图的细粒度匹配关系和全局关系,相比现有的技术在搜索性能上有较大的进步。
应当理解的是,本说明书未详细阐述的部分均属于现有技术。
应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。
Claims (4)
1.一种基于关系图卷积网络的深度代码搜索方法,其特征在于,包括以下步骤:
步骤1:引入多个代码片段以及多个代码片段对应的代码注释;
步骤2:将每个代码片段依次通过爬虫方法处理得到每个预处理后代码片段,并筛选每个预处理后代码片段对应的代码注释;
步骤3:将每个预处理后代码片段通过抽象语法树图构建方法处理得到每个代码图,将每个预处理后代码片段对应的代码注释通过选区解析树构建方法处理得到每个文本图,将每个文本图对应的代码图定义为每个文本图对应的正样本代码图,在剩余的多个样本图中随机选择一个样本图作为每个文本图对应的负样本代码图;
步骤4:将每个代码图通过图深度学习扩展计算得到每个代码图的向量,将每个文本图通过图深度学习扩展计算得到每个文本图的向量;
步骤5:构建代码注释匹配相似度深度搜索神经网络,依次将每个代码图的向量及对应的每个文本图的向量输入至代码注释匹配相似度深度搜索神经网络进行相似度匹配计算,得到每个文本图与对应的每个正样本代码图之间的匹配相似度、每个文本图与对应的每个负样本代码图之间的匹配相似度,进一步构建三元组损失函数模型,通过Adam算法优化训练得到优化后代码注释匹配相似度深度搜索神经网络;
步骤6:输入查询文本,通过多个代码片段构建候选代码库,将查询文本通过步骤3-4处理得到查询文本的文本图的向量,将候选代码库中每个代码片段步骤3-4处理得到每个代码片段的代码图的向量,将查询文本的文本图的向量及每个代码片段的代码图的向量输入至优化后代码注释匹配相似度深度搜索神经网络进行相似度匹配计算,得到查询文本的文本图的向量与每个代码片段的代码图的向量之间的匹配相似度,将匹配相似度最高的代码片段的代码图的向量对应的代码片段作为返回推荐的代码;
步骤5所述构建代码注释匹配相似度深度搜索神经网络,具体如下:
所述代码注释匹配相似度深度搜索神经网络包括:
代码图关系图卷积神经网络、文本图关系图卷积神经网络、基于多视角匹配函数的节点层面匹配计算模块、基于神经张量网络的图层面匹配计算模块、相似度加权计算模块;
所述的代码图关系图卷积神经网络、文本图关系图卷积神经网络均采用关系图卷积神经网络结构;
所述基于神经张量网络的图层面匹配计算模块采用神经张量网络结构;
所述代码图关系图卷积神经网络与所述多视角匹配函数的节点层面匹配计算模块连接;
所述文本图关系图卷积神经网络与所述多视角匹配函数的节点层面匹配计算模块连接;
所述代码图关系图卷积神经网络与所述基于神经张量网络的图层面匹配计算模块连接;
所述文本图关系图卷积神经网络与所述基于神经张量网络的图层面匹配计算模块连接;
所述多视角匹配函数的节点层面匹配计算模块与所述相似度加权计算模块连接;
所述基于神经张量网络的图层面匹配计算模块与所述相似度加权计算模块连接;
所述代码图关系图卷积神经网络,将每个代码图的张量通过学习得到每个代码图的所有节点的初始节点嵌入向量,并分别输出至所述的多视角匹配函数的节点层面匹配计算模块、基于神经张量网络的图层面匹配计算模块;
所述文本图关系图卷积神经网络,将每个文本图的张量通过学习得到每个文本图的所有节点的初始节点嵌入向量,并分别输出至所述的多视角匹配函数的节点层面匹配计算模块、基于神经张量网络的图层面匹配计算模块;
所述基于多视角匹配函数的节点层面匹配计算模块,将每个代码图的所有节点的初始节点嵌入向量、每个文本图的所有节点的初始节点嵌入向量通过匹配计算,得到每个代码图与对应的每个文本图之间的节点层面相似度,并输出至所述相似度加权计算模块。
2.根据权利要求1所述的基于关系图卷积网络的深度代码搜索方法,其特征在于:
所述通过基于多视角匹配函数的节点层面匹配计算模块计算,具体过程如下:
所述的每个代码图的所有节点的初始节点嵌入向量,定义如下:
HAk,i
k∈[1,L],i∈[1,Nk]
其中,HAk,i表示第k个代码图的第i个节点的初始节点嵌入向量,L=20000,Nk表示第k个代码图的节点数量;
所述的每个文本图的所有节点的初始节点嵌入向量,定义如下:
HBk,j
k∈[1,L],j∈[1,Mk]
其中,HBk,j表示第k个文本图的第j个节点的初始节点嵌入向量,L=20000,Mk表示第k个文本图的节点数量;
将第k个代码图的第i个节点的初始节点嵌入向量、第k个文本图的第j个节点的初始节点嵌入向量通过余弦函数计算得到,第k个文本图的第j个节点与第k个代码图的所有节点的第i个节点之间的跨图注意力分数,定义为:αk,j,i;
计算从第k个文本图的第j个节点视角下,相应的第k个代码图的整体图嵌入向量,具体如下:
根据第k个文本图的第j个节点的初始节点嵌入向量、第k个文本图的第j个节点相应的第k个代码图的整体图嵌入向量进一步计算第k个文本图的第j个节点的更新节点嵌入向量,具体计算如下:
其中,Wk,j表示第k个文本图的第j个节点的参数矩阵,⊙表示对应位置元素相乘,cosine表示余弦计算函数;
通过更新第k个文本图的第j个节点的初始节点嵌入向量;
将第k个文本图所有节点的更新后的节点嵌入向量通过最大池化操作处理得到第k个文本图的最大池化嵌入向量;
将第k个代码图的第i个节点的初始节点嵌入向量、第k个文本图的第j个节点的初始节点嵌入向量通过余弦函数计算得到,第k个代码图的第i个节点与第k个文本图的所有节点的第j个节点之间的跨图注意力分数,定义为:βk,i,j;
计算从第k个代码图的第i个节点视角下,相应的第k个文本图的整体图嵌入向量,具体如下:
根据第k个代码图的第i个节点的初始节点嵌入向量、第k个代码图的第i个节点相应的第k个代码图的整体图嵌入向量进一步计算第k个代码图的第i个节点的更新节点嵌入向量,具体计算如下:
其中,Wk,i表示第k个代码图的第i个节点的参数矩阵,⊙表示对应位置元素相乘,cosine表示余弦计算函数;
通过更新第k个代码图的第i个节点的初始节点嵌入向量;
将第k个代码图所有节点的更新后的节点嵌入向量通过最大池化操作处理得到第k个代码图的最大池化嵌入向量;
将第k个文本图的最大池化嵌入向量与第k个代码图的最大池化嵌入向量通过余弦函数计算得到每个代码图与对应的每个文本图之间的节点层面相似度。
3.根据权利要求1所述的基于关系图卷积网络的深度代码搜索方法,其特征在于:
所述基于神经张量网络的图层面匹配计算模块,将每个代码图的所有节点的初始节点嵌入向量、每个文本图的所有节点的初始节点嵌入向量通过匹配计算,得到每个代码图与对应的每个文本图之间的图层面相似度,并输出至所述相似度加权计算模块;
所述通过基于神经张量网络的图层面匹配计算模块计算,具体过程如下:
根据第k个代码图的第i个节点的初始节点嵌入向量,计算得到第k个代码图的全局图上下文感知向量,具体过程如下:
其中,tanh表示激活函数,Uk,i表示第k个代码图的第i个节点的参数矩阵,HAk,i表示第k个代码图的第i个节点的初始节点嵌入向量,Ck,i表示第k个代码图的全局图上下文感知向量;Nk表示第k个代码图的节点数量;
根据第k个代码图的第i个节点的初始节点嵌入向量与第k个代码图的全局图上下文感知向量,计算得到第k个代码图的全局视角下的整体嵌入向量pak,具体过程如下:
其中,sigmoid表示激活函数,HAk,i T表示第k个代码图的第i个节点的初始节点嵌入向量的转置,pak表示第k个代码图的全局视角下的整体嵌入向量;
根据第k个文本图的第j个节点的初始节点嵌入向量,计算第k个文本图的全局图上下文感知向量,具体过程如下:
其中,Dk,j表示第k个文本图的全局图上下文感知向量,tanh表示激活函数,Uk,j表示第k个文本图的第j个节点的参数矩阵,HBk,j表示第k个文本图的第j个节点的初始节点嵌入向量;Mk表示第k个文本图的节点数量;
根据第k个文本图的第j个节点的初始节点嵌入向量与第k个文本图的全局图上下文感知向量,计算得到第k个文本图的全局视角下的整体嵌入向量,具体过程如下:
其中,sigmoid表示激活函数,HBk,j T表示第k个文本图的第j个节点的初始节点嵌入向量的转置,pbk表示第k个文本图的全局视角下的整体嵌入向量;
将第k个代码图的全局视角下的整体嵌入向量与第k个文本图的全局视角下的整体嵌入向量输入神经张量网络,得到第k个代码图与第k个文本图全局图层面互动的相似性向量,定义为:
将输入多层全连接神经网络以及相应的激活函数层,得到第k个代码图与第k个文本图之间的图层面相似度。
4.根据权利要求1所述的基于关系图卷积网络的深度代码搜索方法,其特征在于:
所述相似度加权计算模块,将每个文本图与对应的每个代码图之间的节点层面相似度、每个文本图与对应的每个代码图之间的图层面相似度通过加权计算,得到每个代码图与对应的每个文本图之间的匹配相似度;
所述的每个代码图与对应的每个文本图之间的节点层面相似度定义为所述每个文本图与对应的每个代码图之间的图层面相似度定义为/>
所述进行加权计算,具体过程如下:
其中,label取值1或2,alabel是相应的权重参数,scorek表示计算得到的第k个文本图和第k个代码图最终的匹配相似度;
将每个文本图与对应的每个正样本代码图之间的节点层面相似度、每个文本图与对应的每个正样本代码图之间的图层面相似度输入所述相似度加权计算模块,得到每个文本图与对应的每个正样本代码图之间的匹配相似度,定义为:
将每个文本图与对应的每个负样本代码图之间的节点层面相似度、每个文本图与对应的每个负样本代码图之间的图层面相似度输入所述相似度加权计算模块,得到每个文本图与对应的每个负样本代码图之间的匹配相似度,定义为:
步骤5所述三元组损失函数模型,具体如下:
其中,θ表示待训练的模型参数,δ表示所述损失函数的边际值,L=20000。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211270478.7A CN115577075B (zh) | 2022-10-18 | 2022-10-18 | 一种基于关系图卷积网络的深度代码搜索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211270478.7A CN115577075B (zh) | 2022-10-18 | 2022-10-18 | 一种基于关系图卷积网络的深度代码搜索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115577075A CN115577075A (zh) | 2023-01-06 |
CN115577075B true CN115577075B (zh) | 2024-03-12 |
Family
ID=84584517
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211270478.7A Active CN115577075B (zh) | 2022-10-18 | 2022-10-18 | 一种基于关系图卷积网络的深度代码搜索方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115577075B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117349453B (zh) * | 2023-12-04 | 2024-02-23 | 武汉大学 | 一种基于扩展代码的深度学习代码搜索模型的加速方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112507065A (zh) * | 2020-11-18 | 2021-03-16 | 电子科技大学 | 一种基于注释语义信息的代码搜索方法 |
CN112800172A (zh) * | 2021-02-07 | 2021-05-14 | 重庆大学 | 一种基于两阶段注意力机制的代码搜索方法 |
CN113342318A (zh) * | 2021-04-19 | 2021-09-03 | 山东师范大学 | 基于多视图代码特征的细粒度代码自动生成方法及系统 |
CN113761163A (zh) * | 2021-08-18 | 2021-12-07 | 浙江大学 | 基于代码结构语义信息的深度代码搜索方法、系统及装置 |
CN113886520A (zh) * | 2021-08-26 | 2022-01-04 | 广东工业大学 | 一种基于图神经网络的代码检索方法、系统及计算机可读存储介质 |
CN113901177A (zh) * | 2021-10-27 | 2022-01-07 | 电子科技大学 | 一种基于多模态属性决策的代码搜索方法 |
CN115017294A (zh) * | 2022-05-31 | 2022-09-06 | 武汉大学 | 代码搜索方法 |
CN115062106A (zh) * | 2022-06-07 | 2022-09-16 | 华南理工大学 | 基于函数功能多重图嵌入的代码搜索方法、系统及介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10803055B2 (en) * | 2017-12-15 | 2020-10-13 | Accenture Global Solutions Limited | Cognitive searches based on deep-learning neural networks |
US11720346B2 (en) * | 2020-10-02 | 2023-08-08 | International Business Machines Corporation | Semantic code retrieval using graph matching |
-
2022
- 2022-10-18 CN CN202211270478.7A patent/CN115577075B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112507065A (zh) * | 2020-11-18 | 2021-03-16 | 电子科技大学 | 一种基于注释语义信息的代码搜索方法 |
CN112800172A (zh) * | 2021-02-07 | 2021-05-14 | 重庆大学 | 一种基于两阶段注意力机制的代码搜索方法 |
CN113342318A (zh) * | 2021-04-19 | 2021-09-03 | 山东师范大学 | 基于多视图代码特征的细粒度代码自动生成方法及系统 |
CN113761163A (zh) * | 2021-08-18 | 2021-12-07 | 浙江大学 | 基于代码结构语义信息的深度代码搜索方法、系统及装置 |
CN113886520A (zh) * | 2021-08-26 | 2022-01-04 | 广东工业大学 | 一种基于图神经网络的代码检索方法、系统及计算机可读存储介质 |
CN113901177A (zh) * | 2021-10-27 | 2022-01-07 | 电子科技大学 | 一种基于多模态属性决策的代码搜索方法 |
CN115017294A (zh) * | 2022-05-31 | 2022-09-06 | 武汉大学 | 代码搜索方法 |
CN115062106A (zh) * | 2022-06-07 | 2022-09-16 | 华南理工大学 | 基于函数功能多重图嵌入的代码搜索方法、系统及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115577075A (zh) | 2023-01-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109271505B (zh) | 一种基于问题答案对的问答系统实现方法 | |
Zhou et al. | A comprehensive survey on pretrained foundation models: A history from bert to chatgpt | |
CN111159223B (zh) | 一种基于结构化嵌入的交互式代码搜索方法及装置 | |
CN103778227B (zh) | 从检索图像中筛选有用图像的方法 | |
CN111291188B (zh) | 一种智能信息抽取方法及系统 | |
CN112434169A (zh) | 一种知识图谱的构建方法及其系统和计算机设备 | |
CN112417097B (zh) | 一种用于舆情解析的多模态数据特征提取与关联方法 | |
CN105912611A (zh) | 一种基于cnn的快速图像检索方法 | |
CN112182154B (zh) | 一种利用个人词向量消除关键词歧义的个性化搜索模型 | |
CN108984642A (zh) | 一种基于哈希编码的印花织物图像检索方法 | |
CN111414845B (zh) | 基于空间-时间图推理网络的多形态语句视频定位方法 | |
Tian et al. | Multi-scale hierarchical residual network for dense captioning | |
CN115577075B (zh) | 一种基于关系图卷积网络的深度代码搜索方法 | |
Hu et al. | Multi-resolution representation with recurrent neural networks application for streaming time series in IoT | |
CN114090861A (zh) | 一种基于知识图谱的教育领域搜索引擎构建方法 | |
CN111753888B (zh) | 智能环境下多粒度时空事件相似度匹配工作方法 | |
CN116450877A (zh) | 一种基于语义选择与层次对齐的图像文本匹配方法 | |
CN113111837B (zh) | 基于多媒体语义解析的监控视频智能预警方法 | |
Hu et al. | Co-attention enabled content-based image retrieval | |
CN116661852B (zh) | 一种基于程序依赖图的代码搜索方法 | |
CN117033609A (zh) | 文本视觉问答方法、装置、计算机设备和存储介质 | |
CN115757464B (zh) | 一种基于深度强化学习的智能物化视图查询方法 | |
CN116861923A (zh) | 多视图无监督图对比学习模型构建方法、系统、计算机、存储介质及应用 | |
Huang et al. | Modeling multiple aesthetic views for series photo selection | |
CN116204673A (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 |