CN117421392B - 一种基于词级对齐的代码搜索方法及装置 - Google Patents

一种基于词级对齐的代码搜索方法及装置 Download PDF

Info

Publication number
CN117421392B
CN117421392B CN202311723167.6A CN202311723167A CN117421392B CN 117421392 B CN117421392 B CN 117421392B CN 202311723167 A CN202311723167 A CN 202311723167A CN 117421392 B CN117421392 B CN 117421392B
Authority
CN
China
Prior art keywords
code
word
information flow
level information
codes
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
Application number
CN202311723167.6A
Other languages
English (en)
Other versions
CN117421392A (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 CN202311723167.6A priority Critical patent/CN117421392B/zh
Publication of CN117421392A publication Critical patent/CN117421392A/zh
Application granted granted Critical
Publication of CN117421392B publication Critical patent/CN117421392B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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/205Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/253Grammatical analysis; Style critique
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • 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/042Knowledge-based neural networks; Logical representations of neural networks
    • 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/045Combinations of networks
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

本发明公开了一种基于词级对齐的代码搜索方法及装置,其中的方法包括如下步骤:输入带描述的代码;使用对齐工具对代码进行词级对齐处理;分别对代码和描述进行单独的嵌入,构建词级信息流图,用词级信息流图提取时序‑结构高度关联的特征;用Transformer分别计算代码和描述的表示向量;预测每个候选代码片段的余弦相似度分数,使用分数对所有候选代码片段进行重新排序,得到检索代码列表。本发明为了提升源代码与AST之间的关联性,使用对齐工具明确建立它们之间的词级别对应关系;基于自注意力机制的图生成网络,用于为每个源代码预测一个词级信息流图,通过阈值化处理去除相关性较低的冗余词。

Description

一种基于词级对齐的代码搜索方法及装置
技术领域
本发明涉及代码搜索技术领域,尤其涉及一种基于词级对齐的代码搜索方法及装置。
背景技术
代码搜索技术在软件工程中起着重要作用,有助于提高生产力并缩短产品开发周期。因此,高性能的代码搜索工具对开发人员来说至关重要。代码搜索的目标是检索与开发人员提供的查询最相关的代码片段。现有的代码搜索方法可以分为两类:信息检索(IR)方法和深度学习(DL)方法。IR方法依赖于自然语言文本和代码片段之间的重叠标签或语言结构,因此存在两个异构源之间的不匹配。最近的研究尝试使用深度学习技术来解决这个问题,将源代码和自然语言描述嵌入到同一个语义向量空间中。
编程语言具有高度结构化的特点,因此现有的深度代码搜索模型通常使用AST(抽象语法树)、CFG(控制流图)、DFG(数据流图)和代码序列来计算代码表示。一般情况下,代码图和代码序列会经过两个并行嵌入模块的处理,得到两个独立的表示,然后将这两个表示融合成一个代码向量。然而,在融合之前,代码图和代码序列是分别处理的,因此神经网络很难学习它们之间的相关性。另一方面,一些代码图具有非常深和复杂的结构,包含大量冗余信息,这经常会使神经网络困惑。
由此可知,现有技术的方法存在搜索效果不佳的问题。
发明内容
本发明提供了一种基于词级对齐的代码搜索方法及装置,用以解决或者至少部分解决现有技术中存在的搜索效果不佳的技术问题。
为了解决上述技术问题,本发明第一方面提供了一种基于词级对齐的代码搜索方法,包括:
输入带描述的代码;
使用对齐工具对代码进行词级对齐处理,建立代码与抽象语法树之间的词级别对应关系;
基于代码与抽象语法树之间的词级别对应关系,采用基于自注意力机制的图生成网络对代码进行嵌入,获得代码段的词级信息流图,采用自注意力机制对描述进行嵌入,获得描述的词级信息流图,其中,代码段的词级信息流图用以提取时序与结构关联的特征;
分别以代码段的词级信息流图和描述的词级信息流图作为掩码矩阵,利用Transformer编码器计算代码的表示向量和描述的表示向量;
根据代码的表示向量与描述的表示向量之间的余弦相似度,得到检索代码列表。
在一种实施方式中,输入带描述的代码,包括:
代码部分采用源代码作为输入,描述部分采用注释作为输入。
在一种实施方式中,使用对齐工具对代码进行词级对齐处理,包括:
将输入的代码解析为抽象语法树,以抽象语法树为指导将代码切分为代码序列;
将每个代码序列添加到对应的抽象语法树的叶节点上,得到具有对应关系的抽象语法树与代码序列,建立代码与抽象语法树之间的词级别对应关系。
在一种实施方式中,基于代码与抽象语法树之间的词级别对应关系,采用基于自注意力机制的图生成网络对代码进行嵌入,获得代码段的词级信息流图,包括:
采用图神经网络GNN对抽象语法书进行嵌入得到稠密表示,然后将对应的AST叶节点和代码序列拼接后作为代码段的词级信息流图的节点:
其中,表示代码段的词级信息流图的节点向量集合,/>表示第/>个节点向量,/>表示AST中第/>个叶节点向量,/>表示第/>个代码序列向量,/>与/>是一对具有对应关系的叶节点和代码序列;
使用自注意力机制构建的相关性矩阵,设定第一阈值/>,将相关性矩阵中不大于/>的位置置零,其余位置置一,得到代码段的词级信息流图的邻接矩阵/>
其中,表示矩阵中第i行第j列的元素,/>表示代码序列长度;
为节点,/>为边,构建代码段的词级信息流图/>,其中/>为代码段的词级信息流图的边的二元组集合。
在一种实施方式中,采用自注意力机制对描述进行嵌入,获得描述的词级信息流图,包括:
采用自注意力机制构建描述词序列的相关性矩阵,设定第二阈值,将相关性矩阵中不大于/>的位置置零,其余位置置一,得到描述的词级信息流图的邻接矩阵/>
其中表示描述序列长度;
为节点,/>为边,构建描述的词级信息流图/>,其中/>是描述的词级信息流图的边的二元组集合。
在一种实施方式中,分别以代码段的词级信息流图和描述的词级信息流图作为掩码矩阵,利用Transformer编码器计算代码的表示向量和描述的表示向量,包括:
以代码段的词级信息流图作为掩码矩阵,以代码序列作为序列特征作为特征输入Transformer编码器,得到代码的表示向量;
以描述的词级信息流图作为掩码矩阵,以词序列作为序列特征作为特征输入Transformer编码器,得到描述的表示向量。
在一种实施方式中,根据代码的表示向量与描述的表示向量之间的余弦相似度,得到检索代码列表,包括:
计算代码的表示向量与描述的表示向量之间的余弦相似度分数;
根据余弦相似度分数从高到低排序,得到检索代码列表。
基于同样的发明构思,本发明第二方面提供了一种基于词级对齐的代码搜索装置,包括:
输入模块,用于输入带描述的代码;
词级对齐模块,用于使用对齐工具对代码进行词级对齐处理,建立代码与抽象语法树之间的词级别对应关系;
嵌入模块,用于基于代码与抽象语法树之间的词级别对应关系,采用基于自注意力机制的图生成网络对代码进行嵌入,获得代码段的词级信息流图,采用自注意力机制对描述进行嵌入,获得描述的词级信息流图,其中,代码段的词级信息流图用以提取时序与结构关联的特征;
表示模块,用于分别以代码段的词级信息流图和描述的词级信息流图作为掩码矩阵,利用Transformer编码器计算代码的表示向量和描述的表示向量;
搜索模块,用于根据代码的表示向量与描述的表示向量之间的余弦相似度,得到检索代码列表。
基于同样的发明构思,本发明第三方面提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被执行时实现第一方面所述的方法。
基于同样的发明构思,本发明第四方面提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述的方法。
相对于现有技术,本发明的优点和有益的技术效果如下:
本发明提出了一种基于词级对齐的代码搜索方法及装置,使用对齐工具明确建立代码与抽象语法树之间的词级别对应关系,可以提升源代码与AST之间的关联性,使得时序特征和结构特征在物理意义上对齐,并采用基于自注意力机制的图生成网络,为每个源代码预测一个词级信息流图,通过物理对齐的时序特征和结构特征,词级信息流图保证了二者在整个嵌入过程高度关联,可以提取出时序-结构高度关联的特征,最后通过计算代码和描述表示向量的余弦相似度分数,并从高到低排序,从而得到检索代码列表,可以得到与描述高度相关的代码,因此改善了代码搜索的效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中基于词级对齐的代码搜索方法的流程示意图;
图2为本发明实施例中使用对齐工具对代码进行词级对齐处理的示意图;
图3为本发明实施例中词级信息流图生成示意图。
具体实施方式
现有技术中的深度代码搜索模型通常使用AST(抽象语法树)、CFG(控制流图)、DFG(数据流图)和代码序列来计算代码表示。一般情况下,代码图和代码序列会经过两个并行嵌入模块的处理,得到两个独立的表示,然后将这两个表示融合成一个代码向量。然而,本申请发明人通过大量的研究与实践发现,在融合之前,代码图和代码序列是分别处理的,因此神经网络很难学习它们之间的相关性。例如,AST是对代码文本的静态分析结果,AST和代码标记之间存在自然的联系。如果不考虑这种联系,简单地将AST和代码序列表示为两个独立的向量将导致语义信息的不充分学习。另一方面,一些代码图具有非常深和复杂的结构,包含大量冗余信息,这经常会使神经网络困惑。代码图和源代码是同一语义的两种不同表现形式,一种是以图形形式展示,另一种是以文本形式展示。因此,合理地减少代码图中的冗余信息并加强对它们之间相关性的理解非常重要。
基于以上考虑,本发明提出了一种基于词级对齐的代码搜索方法,包括如下步骤:输入带描述的代码;使用对齐工具对代码进行词级对齐处理;分别对代码和描述进行单独的嵌入,构建词级信息流图,用词级信息流图提取时序-结构高度关联的特征;采用Transformer分别计算代码和描述的表示向量;预测每个候选代码片段的余弦相似度分数,使用分数对所有候选代码片段进行重新排序,得到检索代码列表。本发明为了提升源代码与AST之间的关联性,使用对齐工具明确建立它们之间的词级别对应关系;基于自注意力机制的图生成网络,用于为每个源代码预测一个词级信息流图,通过阈值化处理去除相关性较低的冗余词。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例提供了一种基于词级对齐的代码搜索方法,请参见图1,该方法包括:
输入带描述的代码;
使用对齐工具对代码进行词级对齐处理,建立代码与抽象语法树之间的词级别对应关系;
基于代码与抽象语法树之间的词级别对应关系,采用基于自注意力机制的图生成网络对代码进行嵌入,获得代码段的词级信息流图,采用自注意力机制对描述进行嵌入,获得描述的词级信息流图,其中,代码段的词级信息流图用以提取时序与结构关联的特征;
分别以代码段的词级信息流图和描述的词级信息流图作为掩码矩阵,利用Transformer编码器计算代码的表示向量和描述的表示向量;
根据代码的表示向量与描述的表示向量之间的余弦相似度,得到检索代码列表。
具体来说,代码和对应的描述作为输入,代码是以本文的形式表示的,可以用于提取时序特征,抽象语法树是以图形形式展示的,可以用于提取结构特征,采用对齐工具对代码进行词级对齐处理,可以提升代码与抽象语法树之间的关联。利用代码段的词级信息流图可以提取到时序-结构高度关联的特征。根据代码的表示向量与描述的表示向量之间的余弦相似度,可以预测每个候选代码片段的余弦相似度分数,使用分数对所有候选代码片段进行重新排序,得到检索代码列表。
在一种实施方式中,输入带描述的代码,包括:
代码部分采用源代码作为输入,描述部分采用注释作为输入。
在一种实施方式中,使用对齐工具对代码进行词级对齐处理,包括:
将输入的代码解析为抽象语法树,以抽象语法树为指导将代码切分为代码序列;
将每个代码序列添加到对应的抽象语法树的叶节点上,得到具有对应关系的抽象语法树与代码序列,建立代码与抽象语法树之间的词级别对应关系。
具体来说,为了提升源代码与AST之间的关联性,使用对齐工具明确建立它们之间的词级别对应关系。如图2所示,输入源代码和对应的描述,使用对齐工具解析源代码生成对齐的AST和code token。对齐工具首先通过解析器生成抽象语法树AST,然后使用程序语言分词器将代码片段切分成code token(代码序列),切分过程以AST为指导,确保语法正确性;将每个token添加到其相应的AST叶节点上,得到具有对应关系的抽象语法树与代码序列,即AST代码序列具有严格一对一对应关系,从而使时序特征和结构特征在物理意义上对齐。具体而言,给定代码片段,可以获得对齐的AST和代码序列,分别记为/>。其中,/>表示节点,/>表示边,/>、/>分别表示第1个和第n个代码序列。
在一种实施方式中,基于代码与抽象语法树之间的词级别对应关系,采用基于自注意力机制的图生成网络对代码进行嵌入,获得代码段的词级信息流图,包括:
采用图神经网络GNN对抽象语法书进行嵌入得到稠密表示,然后将对应的AST叶节点和代码序列拼接后作为代码段的词级信息流图的节点:
其中,表示代码段的词级信息流图的节点向量集合,/>表示第/>个节点向量,/>表示AST中第/>个叶节点向量,/>表示第/>个代码序列向量,/>与/>是一对具有对应关系的叶节点和代码序列;
使用自注意力机制构建的相关性矩阵,设定第一阈值/>,将相关性矩阵中不大于/>的位置置零,其余位置置一,得到代码段的词级信息流图的邻接矩阵/>
其中,表示矩阵中第i行第j列的元素,/>表示代码序列长度;
为节点,/>为边,构建代码段的词级信息流图/>,其中/>为代码段的词级信息流图的边的二元组集合。
具体来说,、/>在对齐的AST中存在一条相连的边,即它们是一对具有对应关系的叶节点和code token。
具体实施过程中,设计了一个基于自注意力机制的图生成网络,用于为每个源代码预测一个词级信息流图。通过物理对齐的时序特征和结构特征,词级信息流图预测网络保证了二者在整个嵌入过程高度关联,从而提取出时序-结构高度关联的特征。将AST和code token输入基于自注意力机制的图生成网络,为每个源代码预测一个词级信息流图,如图3所示。
首先,将AST输入到图注意力网络(GAT)中,以获取树节点的嵌入表示,此处树节点的嵌入表示记作,即:
其中,输入的和/>表示与AST/>对齐的非终端节点和边。然后,使用基于自注意机制的图生成器将GNN的输出精细化到单词级别。具体而言,将对应的非终端节点/>和代码token/>的串联(拼接)作为字级信息流图的节点。生成器的任务是为这些节点预测边缘,而边缘的预测方法基于自注意机制,其中相关矩阵/>的计算如下:
其中,和/>表示线性变换矩阵,/>和/>则分别表示自注意力的查询向量和键向量。在/>中,可以获得单词之间的注意力得分。接下来,对/>进行阈值化处理,以去除具有低相关性的冗余单词。具体而言,设定第一阈值/>,将相关性矩阵中不大于/>的位置置零,其余位置置一,可以得到词级信息流图的邻接矩阵/>,它是代码片段的一个0-1矩阵。因此,可以获得代码段的词级信息流图,将其表示为/>,其中/>是由/>组成的元组集合。
在一种实施方式中,采用自注意力机制对描述进行嵌入,获得描述的词级信息流图,包括:
采用自注意力机制构建描述词序列的相关性矩阵,设定第二阈值,将相关性矩阵中不大于/>的位置置零,其余位置置一,得到描述的词级信息流图的邻接矩阵/>
其中表示描述序列长度;
为节点,/>为边,构建描述的词级信息流图/>,其中/>是描述的词级信息流图的边的二元组集合。
具体实施过程中,与代码的词级信息流图不同,对于描述文本,只使用词序列进行自注意力操作。假设从自然语言分词器解析的描述词汇为,则相关性矩阵可以通过以下方式获得:
其中,和/>表示线性变换矩阵,/>和/>则分别表示自注意力的查询向量和键向量。类似地,对于相关性矩阵/>,进行阈值化处理。设定第二阈值/>,根据前述操作得到描述的词级信息流图的邻接矩阵/>
在一种实施方式中,分别以代码段的词级信息流图和描述的词级信息流图作为掩码矩阵,利用Transformer编码器计算代码的表示向量和描述的表示向量,包括:
以代码段的词级信息流图作为掩码矩阵,以代码序列作为序列特征作为特征输入Transformer编码器,得到代码的表示向量;
以描述的词级信息流图作为掩码矩阵,以词序列作为序列特征作为特征输入Transformer编码器,得到描述的表示向量。
具体实施过程中,使用带有掩码矩阵的Transformer编码器,分别将生成的词级信息流图和相应的序列进行嵌入。假设生成的词级信息流图为,其中/>是/>或/>,分别对应于/>和/>。信息流图的对应序列为/>,在代码和描述的嵌入过程中,/>分别为/>和/>。形式上,序列/>和掩码矩阵/>被输入到Transformer编码器中进行如下操作:
对于代码和描述,其中分别表示code token序列/>和描述词序列/>,/>分别表示代码段的词级信息流图的邻接矩阵/>和描述的词级信息流图的邻接矩阵/>
在此过程中,嵌入表示为,它代表了代码或描述的向量表示,对应于cls token(类别标记)。掩码矩阵/>是基于词级信息流图计算得到的。当允许标记相互关注时,掩码矩阵的值被设置为0;否则,值被设置为/>。具体而言,对于序列/>中的第i个和第j个词,如果在信息流图/>中它们之间存在边,则/>的值被设置为0。
在一种实施方式中,根据代码的表示向量与描述的表示向量之间的余弦相似度,得到检索代码列表,包括:
计算代码的表示向量与描述的表示向量之间的余弦相似度分数;
根据余弦相似度分数从高到低排序,得到检索代码列表。
具体来说,在获得代码和描述的表示向量后,可以计算它们之间的余弦相似度以获得相关性得分。取Transformer网络输出的类别标记(cls token)表示作为代码表示向量和描述表示向量;计算代码和描述表示向量的余弦相似度分数,检索时,按相似度分数从高到低排序,从而得到检索代码列表。
下面介绍模型训练、代码搜索的模型预测的相关概念以及采用的数据集。
模型训练
如果代码片段和描述具有相似的语义,那么它们的嵌入式向量应该彼此接近。换句话说,给定任意代码片段和任意描述/>,如果/>是对/>的精确描述,我们希望它能够预测具有高相似性的距离,否则则有点相似性。在训练阶段,对于每个批次/>,包含/>个相关的代码-描述对。计算它们的余弦相似度作为相似性得分来衡量代码和描述之间的相关性,并使用批内负采样的交叉熵损失作为本发明的损失函数。
代码搜索的模型预测
经过模型训练后,可以通过嵌入一个大规模的代码库来部署模型在线进行代码搜索,其中每个代码都由一个向量c表示。对于开发人员的搜索查询,模型将描述嵌入为一个向量q。然后,描述q和代码c之间的语义相似性可以通过它们的余弦相似性来衡量;最后,该模型推荐了与代码搜索查询高度相关的top-k个代码:
数据集
CodeSearchNet Java数据集包含496,688对Java方法和文档字符串。根据以前的研究,本发明过滤掉包含非英语语言、标签、URL和文档字符串中的示例代码的文档字符串。过滤后的数据集包含471,987个数据,本实施方式将其中的10,000个数据用于测试,剩余的数据用于训练。如表1所示,然后,这些数据被发送到本文提出的对齐器中,以获得对齐的AST和代码序列。对齐器基于tree-sitter实现,tree-sitter被用作AST解析器。在实验中,为了限制词汇表的大小,代码令牌根据驼峰命名和蛇形命名被拆分为子令牌。
表1 统计数据
为了说明本发明方法的有效性,下面通过对比实验对本发明的方法与现有的方法进行比较:
对比
本实施例比较了最先进的模型DeepCS、CARLCS-CNN、CARLCS-TS、TabCS、FcarCS和本模型之间的代码搜索有效性。结果表明,本发明提出的模型(包括词级对齐模块、嵌入模块、表示模块以及搜索模块,其中嵌入模块包括代码嵌入模块和描述嵌入模块)优于五种基于深度学习的模型(即DeepCS、CARLCS-CNN、CARLCS-TS、TabCS、FcarCS)。
DeepCS,这是一种基于深度学习框架的代码搜索方法。它通过将源代码和描述嵌入到相同的向量空间中,实现了代码和描述的匹配。这种共享的向量表示使得代码和描述之间的语义相似性可以通过计算它们之间的向量相似度来衡量。DeepCS的深度学习模型可以学习到代码和描述之间的复杂语义关系,从而提高代码搜索的准确性和效率。
CARLCS-CNN,这是一种基于深度学习的代码搜索模型。它利用了CNN和LSTM等常见的注意机制,在将代码和查询分别嵌入到向量空间后,学习它们之间的相互依赖表示。CNN用于提取代码和查询中的局部特征,而LSTM则用于捕捉它们的序列信息。这种组合的深度学习模型使CARLCS-CNN能够更好地理解代码和查询之间的语义关系,从而提高代码搜索的准确性和鲁棒性。
CARLCS-TS,该模型在CARLCS-CNN基础上进一步发展的代码搜索模型。它将结构化代码特征融入到CARLCS-CNN中,通过单独的CNN网络对AST序列进行嵌入,并将其与其他特征合并到代码特征矩阵中。这样,CARLCS-TS能够利用代码的结构信息来增强代码搜索的性能。通过引入AST序列的嵌入表示,CARLCS-TS能够更好地捕捉代码的层次结构和组织方式,提高代码搜索的准确性和表达能力。
TabCS,这是一种代码搜索模型,旨在弥合代码和查询之间的语义差距。它采用了一个两阶段的注意网络结构,对文本和结构特征分别进行关注。在第一阶段,TabCS利用注意机制对文本特征进行建模,捕捉代码和查询之间的语义相关性。在第二阶段,它将结构特征引入模型,通过结构化信息的关注来进一步提升代码搜索的准确性。这种两阶段的注意网络结构使得TabCS能够综合利用文本和结构特征,更全面地理解代码和查询之间的语义关系。
FcarCS,这是一种用于语义代码搜索的细粒度共同注意力表示学习模型。它通过提取引入语句级代码结构的文本和结构特征,实现了对代码和查询的精细建模。FcarCS利用共同注意力机制将文本和结构特征融合,使得模型能够更好地关注与查询相关的代码片段。通过学习细粒度的共同注意力表示,FcarCS能够提高代码搜索的准确性和检索质量,为开发人员提供更精确和相关的代码搜索结果。
为了评估模型,使用了两个常见的评估指标SuccessRate@k和MRR。具体来说,对于测试数据集中的每一对代码片段和描述,将描述作为查询,并将相应的代码片段与测试集中的其他代码片段一起作为代码检索任务的候选对象。用这两种常用于信息检索的评估指标来衡量本发明的模型和基线模型的性能。
SuccessRate@k(SR@k)相关代码方法可以在排名前k的列表中找到的查询的比例。具体计算方法如下:
其中是测试集中的8712个查询,/>是一个指示函数。如果可以在排名前/>的列表中找到第/>个查询/>,则返回1,否则返回0。本实施例方式分别评估SuccessRate@1,SuccessRate@5和SuccessRate@10。
MRR测试查询结果的倒数秩的平均值,计算方法如下:
其中,是第/>个查询的结果列表中正确代码片段的排名位置。与SuccessRate@k不同,MRR使用倒数秩作为测量的权重。换句话说,当/>的排名超过10时,那么/>等于0。
本发明的模型是在PyTorch框架下实现的。选择AdamW作为优化器,并使用余弦退火算法作为调度器。学习率设置为0.001,批大小设置为1024。代码嵌入模块包含4个GAT层和3个Transformer编码器层。而描述嵌入模块则包含3个Transformer编码器层。代码和描述词级信息流图生成器的阈值率均设置为0.5。具体而言,阈值值等于阈值率除以序列长度(threshold = threshold rate / sequence length)。该模型在两个Tesla V100 GPU上进行了100个epochs的训练。
本实施方式将本模型与五种最先进的代码搜索模型进行了比较,并在表2中呈现了结果。
表2 对比表
具体而言,本实施方式在CodeSearchNet Java数据集上评估了DeepCS、CARLCS-CNN、CARLCS-TS、TabCS、FcarCS以及本发明的模型的性能。结果显示,本发明的模型分别在MRR指标上达到了76.8%,在Success Rate@1/5/10指标上达到了69.9%、85.2%和89.1%。此外,相对于DeepCS、CARLCS-CNN、CARLCS-TS、TabCS和FcarCS,本发明的方法在MRR指标上分别提高了48.6%、28.3%、25.7%、22.4%和15.5%,在SR@1/5/10指标上分别提高了42.1%、41.8%、37.5%;20.6%、20.1%、16.6%;17.9%、17.4%、14.1%;14.9%、13.3%、9.9%以及7.1%、8.2%、6.1%。这些结果清楚地表明本发明的模型在所有指标上优于最先进的模型,验证了本发明的方法在代码搜索任务中的有效性。
实施例二
基于同样的发明构思,本实施例公开了一种基于词级对齐的代码搜索装置,包括:
输入模块,用于输入带描述的代码;
词级对齐模块,用于使用对齐工具对代码进行词级对齐处理,建立代码与抽象语法树之间的词级别对应关系;
嵌入模块,用于基于代码与抽象语法树之间的词级别对应关系,采用基于自注意力机制的图生成网络对代码进行嵌入,获得代码段的词级信息流图,采用自注意力机制对描述进行嵌入,获得描述的词级信息流图,其中,代码段的词级信息流图用以提取时序与结构关联的特征;
表示模块,用于分别以代码段的词级信息流图和描述的词级信息流图作为掩码矩阵,利用Transformer编码器计算代码的表示向量和描述的表示向量;
搜索模块,用于根据代码的表示向量与描述的表示向量之间的余弦相似度,得到检索代码列表。
由于本发明实施例二所介绍的装置为实施本发明实施例一中基于词级对齐的代码搜索方法所采用的装置,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该装置的具体结构及变形,故而在此不再赘述。凡是本发明实施例一中方法所采用的装置都属于本发明所欲保护的范围。
实施例三
基于同一发明构思,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被执行时实现如实施例一中所述的方法。
由于本发明实施例三所介绍的计算机可读存储介质为实施本发明实施例一中基于词级对齐的代码搜索方法所采用的计算机可读存储介质,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该计算机可读存储介质的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的计算机可读存储介质都属于本发明所欲保护的范围。
实施例四
基于同一发明构思,本申请还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述程序时实现实施例一中的方法。
由于本发明实施例四所介绍的计算机设备为实施本发明实施例一中基于词级对齐的代码搜索方法所采用的计算机设备,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该计算机设备的具体结构及变形,故而在此不再赘述。凡是本发明实施例一中方法所采用的计算机设备都属于本发明所欲保护的范围。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (8)

1.一种基于词级对齐的代码搜索方法,其特征在于,包括:
输入带描述的代码;
使用对齐工具对代码进行词级对齐处理,建立代码与抽象语法树之间的词级别对应关系;
基于代码与抽象语法树之间的词级别对应关系,采用基于自注意力机制的图生成网络对代码进行嵌入,获得代码段的词级信息流图,采用自注意力机制对描述进行嵌入,获得描述的词级信息流图,其中,代码段的词级信息流图用以提取时序与结构关联的特征;
分别以代码段的词级信息流图和描述的词级信息流图作为掩码矩阵,利用Transformer编码器计算代码的表示向量和描述的表示向量;
根据代码的表示向量与描述的表示向量之间的余弦相似度,得到检索代码列表;
其中,使用对齐工具对代码进行词级对齐处理,包括:
将输入的代码解析为抽象语法树,以抽象语法树为指导将代码切分为代码序列;
将每个代码序列添加到对应的抽象语法树的叶节点上,得到具有对应关系的抽象语法树与代码序列,建立代码与抽象语法树之间的词级别对应关系;
基于代码与抽象语法树之间的词级别对应关系,采用基于自注意力机制的图生成网络对代码进行嵌入,获得代码段的词级信息流图,包括:
采用图神经网络GNN对抽象语法树进行嵌入得到稠密表示,然后将对应的AST叶节点和代码序列拼接后作为代码段的词级信息流图的节点:
其中,表示代码段的词级信息流图的节点向量集合,/>表示第/>个节点向量,/>表示AST中第/>个叶节点向量,/>表示第/>个代码序列向量,/>与/>是一对具有对应关系的叶节点和代码序列;
使用自注意力机制构建的相关性矩阵,设定第一阈值/>,将相关性矩阵中不大于/>的位置置零,其余位置置一,得到代码段的词级信息流图的邻接矩阵/>
其中,表示矩阵中第i行第j列的元素,/>表示代码序列长度;
为节点,/>为边,构建代码段的词级信息流图/>,其中/>为代码段的词级信息流图的边的二元组集合。
2.如权利要求1所述的基于词级对齐的代码搜索方法,其特征在于,输入带描述的代码,包括:
代码部分采用源代码作为输入,描述部分采用注释作为输入。
3.如权利要求1所述的基于词级对齐的代码搜索方法,其特征在于,采用自注意力机制对描述进行嵌入,获得描述的词级信息流图,包括:
采用自注意力机制构建描述词序列的相关性矩阵,设定第二阈值/>,将相关性矩阵中不大于/>的位置置零,其余位置置一,得到描述的词级信息流图的邻接矩阵
其中表示描述序列长度;以/>为节点,/>为边,构建描述的词级信息流图,其中/>是描述的词级信息流图的边的二元组集合。
4.如权利要求1所述的基于词级对齐的代码搜索方法,其特征在于,分别以代码段的词级信息流图和描述的词级信息流图作为掩码矩阵,利用Transformer编码器计算代码的表示向量和描述的表示向量,包括:
以代码段的词级信息流图作为掩码矩阵,以代码序列作为序列特征输入Transformer编码器,得到代码的表示向量;
以描述的词级信息流图作为掩码矩阵,以词序列作为序列特征输入Transformer编码器,得到描述的表示向量。
5.如权利要求1所述的基于词级对齐的代码搜索方法,其特征在于,根据代码的表示向量与描述的表示向量之间的余弦相似度,得到检索代码列表,包括:
计算代码的表示向量与描述的表示向量之间的余弦相似度分数;
根据余弦相似度分数从高到低排序,得到检索代码列表。
6.一种基于词级对齐的代码搜索装置,其特征在于,包括:
输入模块,用于输入带描述的代码;
词级对齐模块,用于使用对齐工具对代码进行词级对齐处理,建立代码与抽象语法树之间的词级别对应关系;
嵌入模块,用于基于代码与抽象语法树之间的词级别对应关系,采用基于自注意力机制的图生成网络对代码进行嵌入,获得代码段的词级信息流图,采用自注意力机制对描述进行嵌入,获得描述的词级信息流图,其中,代码段的词级信息流图用以提取时序与结构关联的特征;
表示模块,用于分别以代码段的词级信息流图和描述的词级信息流图作为掩码矩阵,利用Transformer编码器计算代码的表示向量和描述的表示向量;
搜索模块,用于根据代码的表示向量与描述的表示向量之间的余弦相似度,得到检索代码列表;
其中,词级对齐模块具体用于:
将输入的代码解析为抽象语法树,以抽象语法树为指导将代码切分为代码序列;
将每个代码序列添加到对应的抽象语法树的叶节点上,得到具有对应关系的抽象语法树与代码序列,建立代码与抽象语法树之间的词级别对应关系;
嵌入模块具体用于:
采用图神经网络GNN对抽象语法树进行嵌入得到稠密表示,然后将对应的AST叶节点和代码序列拼接后作为代码段的词级信息流图的节点:
其中,表示代码段的词级信息流图的节点向量集合,/>表示第/>个节点向量,/>表示AST中第/>个叶节点向量,/>表示第/>个代码序列向量,/>与/>是一对具有对应关系的叶节点和代码序列;
使用自注意力机制构建的相关性矩阵,设定第一阈值/>,将相关性矩阵中不大于/>的位置置零,其余位置置一,得到代码段的词级信息流图的邻接矩阵/>
其中,表示矩阵中第i行第j列的元素,/>表示代码序列长度;
为节点,/>为边,构建代码段的词级信息流图/>,其中/>为代码段的词级信息流图的边的二元组集合。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被执行时实现如权利要求1至5中任一项权利要求所述的方法。
8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至5中任一项权利要求所述的方法。
CN202311723167.6A 2023-12-15 2023-12-15 一种基于词级对齐的代码搜索方法及装置 Active CN117421392B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311723167.6A CN117421392B (zh) 2023-12-15 2023-12-15 一种基于词级对齐的代码搜索方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311723167.6A CN117421392B (zh) 2023-12-15 2023-12-15 一种基于词级对齐的代码搜索方法及装置

Publications (2)

Publication Number Publication Date
CN117421392A CN117421392A (zh) 2024-01-19
CN117421392B true CN117421392B (zh) 2024-03-08

Family

ID=89526983

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311723167.6A Active CN117421392B (zh) 2023-12-15 2023-12-15 一种基于词级对齐的代码搜索方法及装置

Country Status (1)

Country Link
CN (1) CN117421392B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017107154A1 (zh) * 2015-12-24 2017-06-29 华为技术有限公司 一种矩阵运算的源到源转换方法及源到源编译器
CN111159223A (zh) * 2019-12-31 2020-05-15 武汉大学 一种基于结构化嵌入的交互式代码搜索方法及装置
CN113609488A (zh) * 2021-07-19 2021-11-05 华东师范大学 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统
CN114924741A (zh) * 2022-05-10 2022-08-19 南京航空航天大学 一种基于结构特征和序列特征的代码补全方法
CN115017294A (zh) * 2022-05-31 2022-09-06 武汉大学 代码搜索方法
CN116627487A (zh) * 2023-05-16 2023-08-22 浙江大学 基于词级别检索的源代码注释自动化生成方法和系统
CN116661852A (zh) * 2023-04-06 2023-08-29 华中师范大学 一种基于程序依赖图的代码搜索方法
CN116991412A (zh) * 2022-10-31 2023-11-03 腾讯科技(深圳)有限公司 代码处理方法、装置、电子设备及存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190303141A1 (en) * 2018-03-29 2019-10-03 Elasticsearch B.V. Syntax Based Source Code Search
US11132512B2 (en) * 2019-11-08 2021-09-28 International Business Machines Corporation Multi-perspective, multi-task neural network model for matching text to program code
US11455152B2 (en) * 2020-09-01 2022-09-27 X Development Llc Matching graphs generated from source code
US11720346B2 (en) * 2020-10-02 2023-08-08 International Business Machines Corporation Semantic code retrieval using graph matching

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017107154A1 (zh) * 2015-12-24 2017-06-29 华为技术有限公司 一种矩阵运算的源到源转换方法及源到源编译器
CN111159223A (zh) * 2019-12-31 2020-05-15 武汉大学 一种基于结构化嵌入的交互式代码搜索方法及装置
CN113609488A (zh) * 2021-07-19 2021-11-05 华东师范大学 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统
CN114924741A (zh) * 2022-05-10 2022-08-19 南京航空航天大学 一种基于结构特征和序列特征的代码补全方法
CN115017294A (zh) * 2022-05-31 2022-09-06 武汉大学 代码搜索方法
CN116991412A (zh) * 2022-10-31 2023-11-03 腾讯科技(深圳)有限公司 代码处理方法、装置、电子设备及存储介质
CN116661852A (zh) * 2023-04-06 2023-08-29 华中师范大学 一种基于程序依赖图的代码搜索方法
CN116627487A (zh) * 2023-05-16 2023-08-22 浙江大学 基于词级别检索的源代码注释自动化生成方法和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSSAM: Code Search via Attention Matching of Code Semantics and Structures;Yi Hu等;axXiv;20220808;全文 *
基于代码语句掩码注意力机制的源代码迁移模型;徐明瑞;计算机系统应用;20230609;全文 *

Also Published As

Publication number Publication date
CN117421392A (zh) 2024-01-19

Similar Documents

Publication Publication Date Title
Lin et al. Bridging textual and tabular data for cross-domain text-to-SQL semantic parsing
Bui et al. Self-supervised contrastive learning for code retrieval and summarization via semantic-preserving transformations
Hu et al. A multi-type multi-span network for reading comprehension that requires discrete reasoning
CN111159223B (zh) 一种基于结构化嵌入的交互式代码搜索方法及装置
CN112528034B (zh) 一种基于知识蒸馏的实体关系抽取方法
CN114911892A (zh) 用于搜索、检索和排序的交互层神经网络
Xu et al. Post2vec: Learning distributed representations of Stack Overflow posts
CN112183094A (zh) 一种基于多元文本特征的中文语法查错方法及系统
CN115017294B (zh) 代码搜索方法
CN116304748B (zh) 一种文本相似度计算方法、系统、设备及介质
Ko et al. Natural language processing–driven model to extract contract change reasons and altered work items for advanced retrieval of change orders
Cui et al. Simple question answering over knowledge graph enhanced by question pattern classification
Liu et al. MGRC: An end-to-end multigranularity reading comprehension model for question answering
Wang et al. Aspect-based sentiment analysis with graph convolutional networks over dependency awareness
US11599814B2 (en) Automated exception featurization and search
CN117421392B (zh) 一种基于词级对齐的代码搜索方法及装置
Aghaebrahimian Linguistically-based deep unstructured question answering
Shuvo et al. Recommending Code Reviews Leveraging Code Changes with Structured Information Retrieval
CN115203206A (zh) 数据内容搜索方法、装置、计算机设备及可读存储介质
Tsai et al. Generating Construction Safety Observations via CLIP-Based Image-Language Embedding
Shi et al. Improving code search with multi-modal momentum contrastive learning
Zeng et al. CLG-Trans: Contrastive learning for code summarization via graph attention-based transformer
Lin et al. Multi-Modal Code Summarization with Retrieved Summary
Chen et al. Repo4QA: Answering Coding Questions via Dense Retrieval on GitHub Repositories
Wang et al. A Method for Automatic Code Comment Generation Based on Different Keyword Sequences

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