CN116627487A - 基于词级别检索的源代码注释自动化生成方法和系统 - Google Patents
基于词级别检索的源代码注释自动化生成方法和系统 Download PDFInfo
- Publication number
- CN116627487A CN116627487A CN202310550101.5A CN202310550101A CN116627487A CN 116627487 A CN116627487 A CN 116627487A CN 202310550101 A CN202310550101 A CN 202310550101A CN 116627487 A CN116627487 A CN 116627487A
- Authority
- CN
- China
- Prior art keywords
- word
- annotation
- code
- text
- attention
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 239000013598 vector Substances 0.000 claims abstract description 182
- 238000012512 characterization method Methods 0.000 claims abstract description 58
- 238000012549 training Methods 0.000 claims abstract description 26
- 230000007246 mechanism Effects 0.000 claims description 14
- 230000008569 process Effects 0.000 claims description 10
- 238000004364 calculation method Methods 0.000 claims description 8
- 230000003993 interaction Effects 0.000 claims description 8
- 238000013528 artificial neural network Methods 0.000 claims description 7
- 230000004927 fusion Effects 0.000 claims description 6
- 238000010276 construction Methods 0.000 claims description 5
- 230000001351 cycling effect Effects 0.000 claims description 2
- 230000006870 function Effects 0.000 abstract description 41
- 238000003058 natural language processing Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 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
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
- G06F40/216—Parsing using statistical methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- 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
- G06N3/0455—Auto-encoder networks; Encoder-decoder 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/0499—Feedforward networks
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Library & Information Science (AREA)
- Probability & Statistics with Applications (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于词级别检索的源代码注释自动化生成方法和系统,属于自然语言处理文本生成领域。利用由代码函数文本、代码抽象语法树、代码注释文本构成的训练集训练编码‑解码网络;获取代码注释文本中每一个注释词的总体表征向量,构建近邻词数据库;针对待注释的代码函数文本及其抽象语法树,自回归地生成当前时间步的基于模型的目标词概率分布和目标词总体表征向量;在近邻词数据库中检索与目标词总体表征向量的相似度最高的K个近邻词,生成基于近邻词的目标词概率分布;融合两个目标词概率分布,取概率最大的目标词作为当前时间步生成的注释词。本发明可大幅度提高原模型的注释生成质量,同时还能够提高代码注释中低频词的生成概率。
Description
技术领域
本发明涉及自然语言处理文本生成领域,涉及一种基于词级别检索的源代码注释自动化生成方法和系统。
背景技术
随着大规模软件开发中功能越来越复杂以及体系越来越庞大,软件开发者快速理解和维护软件的门槛变得越来越高。在这种情形下,代码注释,作为大规模软件开发和维护过程中不可或缺的文本信息,能够极大程度地缓解软件开发者的开发负担和维护负担。由于代码的复杂性,生成高质量的代码文本注释是一件很有挑战性和意义的工作。在常规的代码注释生成方法中,代码被视作一种人类语言文本,利用自然语言处理的常用方法以及编码器-解码器的结构来进行代码注释的自动化生成。其中编码器主要对代码进行理解,解码器对理解的代码语义进行解码,生成代码的文本注释。
在常规的基于编码器-解码器的生成框架之中,研究人员对代码本身的语义理解设计各种各样的语义提取方式;此外,除了加强模型本身对代码的语义理解来生成更好的代码注释之外,研究人员还考虑了如何利用外部的信息来辅助模型对代码注释的生成效果,其主要流程为:首先利用文本相似度指标检索代码仓库中有哪些代码和要生成代码注释的目标代码相似,取出最相似代码及其配对的代码注释,通过额外的编码器对相似代码和/或相似代码配对的代码注释文本进行编码,得到相似代码表征,再将得到的相似代码表征连同目标代码的代码表征进行聚合,将聚合后的代码表征放入解码器中进行解码操作,生成目标代码的代码注释。在这种基于句子级别检索的代码注释生成过程中,模型利用了检索出来的整个代码文本和代码注释句子,直接融合到解码器的目标词生成过程中。
然而以上这种基于句子级别检索的方法,至少存在以下缺陷:(1)利用传统的文本相似距离或者编辑距离来进行检索最相似代码,只考虑了两段代码之间的文本相似度,而完全没有考虑代码的语义信息;(2)将检索得到的代码文本及其注释句子直接用编码器进行语义提取并与目标代码的语义特征向量进行拼接,引入了很多无关的甚至负面的语义表征信息。由于上述两点局限的存在,最终检索得到的代码并不一定和目标代码相似;此外,将相似代码及其注释文本直接编码拼接的方法将在很大程度上引入很多无关词语的表征信息,由此带来大量噪声,大大影响模型最终的注释生成质量。
生成高质量的代码注释是软件工程中的一项十分重要且能大幅度提高生产力的工作,近期以来研究人员尝试利用外部知识来辅助模型生成的方式取得了一定的效果,然而如何对外部知识进行细粒度地利用,对于模型最后的生成质量是关键且重要的,亟须更深一步的探索。
发明内容
针对现有基于句子级别的检索方式上的不足,本发明提供一种基于词级别检索的源代码注释自动化生成方法和系统。
本发明的目的是通过以下技术方案实现的:
第一方面,本发明提出了一种基于词级别检索的源代码注释自动化生成方法,包括:
(1)获取由代码函数文本、代码抽象语法树、代码注释文本构成的训练数据集;
(2)利用训练数据集训练编码-解码网络,其中编码-解码网络中的编码器用于提取代码函数文本的语义表征向量和代码抽象语法树的结构表征向量,编码-解码网络中的解码器用于对代码注释文本的注意力结果、语义表征向量和结构表征向量进行交互并解码生成注释文本;
(3)利用训练后的编码-解码网络,获取代码注释文本中每一个注释词的总体表征向量,构建近邻词数据库;
(4)针对待注释的代码函数文本及其抽象语法树,利用训练后的编码-解码网络以自回归生成方式生成当前时间步的基于模型的目标词概率分布和目标词总体表征向量;
(5)在近邻词数据库中检索与目标词总体表征向量的余弦相似度最高的K个近邻词,生成基于近邻词的目标词概率分布;
(6)融合基于模型的目标词概率分布和基于近邻词的目标词概率分布,取融合概率分布中概率最大的目标词作为当前时间步生成的注释词;
(7)循环步骤(4)-(6),直至注释结束。
进一步的,所述的解码器包括带掩码的多头自注意力模块、基于语义的多头交叉注意力模块、基于结构的多头交叉注意力模块和前馈神经网络;
首先利用带掩码的多头自注意力模块获取输入的代码注释文本的注意力结果,再分别通过基于语义的多头交叉注意力模块、基于结构的多头交叉注意力模块进行交互,最后由前馈神经网络生成基于模型的目标词概率分布。
进一步的,所述的步骤(3)包括:
(3-1)对代码函数文本编码得到语义表征向量,对代码抽象语法树编码得到结构表征向量;
(3-2)获取代码注释文本中的每一个注释词的词表征向量,将代码注释文本中的每一个注释词的词表征向量与语义表征向量通过点积的方式,获取代码函数文本中每个词的注意力分数;将代码注释文本中的每一个注释词的词表征向量与结构表征向量通过点积的方式,获取代码结构中每个节点的注意力分数;
(3-3)将代码函数文本中每个词的注意力分数与语义表征向量进行加权求和,得到代码注释文本中的注释词对于代码函数文本的总体语义表征向量;将代码结构中每个节点的注意力分数与结构表征向量进行加权求和,得到代码注释文本中的注释词对于代码抽象语法树的总体结构表征向量;
(3-4)将每一个注释词的词表征向量与总体语义表征向量、总体结构表征向量进行拼接,将拼接结果正则化后得到注释词的总体表征向量,将注释词的总体表征向量与对应的注释词作为键值对放入近邻词数据库中。
进一步的,所述的代码注释文本中的每一个注释词的词表征向量获取方法具体为:
将代码注释文本作为解码器中的带掩码的多头自注意力模块的输入,输出注释文本的注意力结果;将注释文本的注意力结果和语义表征向量作为解码器中的基于语义的多头交叉注意力模块的输入,输出基于语义的注意力结果;将基于语义的注意力结果和结构表征向量作为解码器中的基于结构的多头交叉注意力模块的输入,输出基于结构的注意力结果,正则化后得到词表征结果,所述的词表征结果中的每一个向量对应代码注释文本中的每一个注释词的词表征向量。
进一步的,在所述的基于语义的多头交叉注意力模块中,将注释文本的注意力结果作为注意力机制中的查询向量,语义表征向量作为注意力机制中的键向量和值向量;在所述的基于结构的多头交叉注意力模块中,将基于语义的注意力结果作为注意力机制中的查询向量,结构表征向量作为注意力机制中的键向量和值向量。
进一步的,所述的步骤(4)中,获取目标词总体表征向量时,将当前时间步t之前所生成的注释词S<t作为解码器中的带掩码的多头自注意力模块的输入,输出注释词S<t的注意力结果;再分别通过基于语义的多头交叉注意力模块、基于结构的多头交叉注意力模块进行交互后生成词表征结果,将词表征结果中的最后一个向量作为当前词表征向量;将当前词表征向量与总体语义表征向量、总体结构表征向量进行拼接,将拼接结果正则化后得到目标词总体表征向量。
进一步的,将基于模型的目标词概率分布和基于近邻词的目标词概率分布进行加权,得到融合概率分布。
第二方面,本发明公开了一种基于词级别检索的源代码注释自动化生成系统,包括:
数据获取模块,其用于获取由代码函数文本、代码抽象语法树、代码注释文本构成的训练数据集,以及用于获取待注释的代码函数文本及其抽象语法树;
编码-解码网络模块,其用于提取代码函数文本的语义表征向量和代码抽象语法树的结构表征向量,以及用于对代码注释文本的注意力结果、语义表征向量和结构表征向量进行交互并解码生成注释文本;
编码-解码网络训练模块,其用于利用训练数据集训练编码-解码网络模块;
近邻词数据库构建模块,其用于利用训练后的编码-解码网络,获取代码注释文本中每一个注释词的总体表征向量,构建近邻词数据库;
初始目标词概率分布计算模块,其用于针对待注释的代码函数文本及其抽象语法树,利用训练后的编码-解码网络以自回归生成方式生成当前时间步的基于模型的目标词概率分布和目标词总体表征向量;
近邻词搜索模块,其用于在近邻词数据库中检索与目标词总体表征向量的余弦相似度最高的K个近邻词,生成基于近邻词的目标词概率分布;
概率分布融合模块,其用于融合基于模型的目标词概率分布和基于近邻词的目标词概率分布,取融合概率分布中概率最大的目标词作为当前时间步生成的注释词。
本发明具备的有益效果是:
本发明利用自然语言模型的编码器、图神经网络的编码器和自然语言处理的解码器这三者的表征向量来表征每个目标词的语义信息,构建一个大规模(词表征-目标词)的数据库;在模型解码器每个时间步生成目标词的过程中都融合检索得到的近邻词,智能化地利用检索出的近邻词来修正模型原本词分布概率,可大幅度提高原模型的注释生成质量,同时还能够提高代码注释中低频词的生成概率。本发明首次提出在词级别细粒度下的表征检索机制,模型的可解释性强。
附图说明
图1是本发明的基于词级别检索的源代码注释自动化生成方法的总体结构框图。
图2是本发明方法近邻数据库示意图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细说明。
本发明提供的一种基于词级别检索的源代码注释自动化生成方法,包括如下步骤:
(1)构建代码-注释数据集:利用常见的编程语言(Python,Java,C)代码,利用开源tree-sitter工具构建代码抽象语法树(AST),其中每个数据样本包括:代码函数文本、代码抽象语法树、代码注释文本。
(2)模型构建与训练:针对代码函数文本,构建代码函数文本编码器Transformer_encoder,利用相对位置表征的方法来表示代码不同词之间的位置关系;针对代码抽象语法树,构建代码结构编码器GAT_encoder来表征代码抽象语法树的结构信息;针对代码注释文本,构建代码注释文本解码器Transformer_decoder来进行代码注释文本的生成。
本实施例中,基于编码器和解码器的总体架构如图1所示,所述的代码函数文本编码器由图自注意力网络GNN(如GAT)、激活函数(如ReLU)和残差结构组成,用于获取代码函数文本的语义表征向量;所述的代码结构编码器由多头注意力模块和前馈神经网络组成,用于获取代码抽象语法树的结构表征向量。两个编码器还可以采用本领域中的其他网络结构。
所述的解码器由带掩码的多头自注意力模块、基于语义的多头交叉注意力模块、基于结构的多头交叉注意力模块和前馈神经网络构成,首先利用带掩码的多头自注意力模块获取输入的代码注释文本的注意力结果,再分别通过基于语义的多头交叉注意力模块、基于结构的多头交叉注意力模块进行特征的交互。在交互顺序上,先进行代码函数文本的语义表征向量的注意力机制下的交互,再进行代码抽象语法树的结构表征向量的注意力机制下的交互。
上述两个编码器和一个解码器一起利用teacher-lorcing和最小化交叉熵损失的方式同时训练和优化。一旦完成训练,所有模型的参数将被固定住,在后续的操作中不再进行优化。整个模型的训练只需进行一次。
(3)近邻词数据库的构建:利用上述训练好的模型,使用训练数据集构建近邻词数据库。将训练集中的所有样本依次输入模型中,假设代码共由p个词组成,即代码函数文本表示为t1,t2,…,tp;在代码抽象语法树中,共有q个节点,即代码抽象语法树表示为n1,n2,…,nq;在代码注释文本中,假设代码注释文本共由m个注释词组成,即代码函数文本表示为z1,z2,…,zm。
(3-1)针对代码函数文本,利用代码函数文本编码器进行编码,代码函数文本中的每个词ti都会编码为语义表征hi,即代码函数文本的语义表征向量表示为h1,h2,…,hp.;
针对代码抽象语法树,利用代码结构编码器进行编码,代码抽象语法树中的每个节点ni都会编码为结构表征ri,即代码抽象语法树的结构表征向量表示为r1,r2,…,rq。
将上述编码过程表示为:
h1,h2,…,hp=Transformer_encoder(t1,t2,…,tp)
r1,r2,…,rq=GAT_encoder(n1,n2,…,nq)
(3-2)针对代码注释文本,将z1,z2,…,zm作为解码器中的带掩码的多头自注意力模块的输入,输出注释文本的注意力结果Z;将注释文本的注意力结果Z和语义表征向量h1,h2,…,hp作为解码器中的基于语义的多头交叉注意力模块的输入,其中将Z作为注意力机制中的查询向量,h1,h2,…,hp作为注意力机制中的键向量和值向量,输出基于语义的注意力结果将基于语义的注意力结果/>和结构表征向量r1,r2,…,rq作为解码器中的基于结构的多头交叉注意力模块的输入,其中将/>作为注意力机制中的查询向量,r1,r2,…,rq作为注意力机制中的键向量和值向量,输出基于结构的注意力结果/>进一步正则化后得到词表征结果D=d1,d2,...dm。对于代码注释文本中的注释词zi,其词表征向量为di。
将代码注释文本中的每一个注释词zi的词表征向量di与语义表征向量h1,h2,…,hp通过点积的方式,获取代码函数文本中每个词的注意力分数α1,α2,…,αp;将代码注释文本中的每一个注释词zi的词表征向量di与结构表征向量r1,r2,…,rq通过点积的方式,获取代码结构中每个节点的注意力分数β1,β2,…,βq,其公式表示如下:
di×[h1,h2,…,hp]=[α1,α2,…,αp]
di×[r1,r2,…,rq]=[β1,β2,…,βq]
(3-3)将代码函数文本中每个词的注意力分数α1,α2,…,αp与语义表征向量h1,h2,…,hp进行加权求和,得到代码注释文本中的注释词zi对于代码函数文本的总体语义表征向量Hi;同理,将代码结构中每个节点的注意力分数β1,β2,…,βq与结构表征向量r1,r2,…,rq进行加权求和,得到代码注释文本中的注释词zi对于代码抽象语法树的总体结构表征向量Ri。
将上述过程表示为:
[α1,α2,…,αp]×[h1,h2,…,hp]T=Hi
[β1,β2,…,βq]×[r1,r2,…,rq]T=Ri
(3-4)将注释词zi的词表征向量di与总体语义表征向量Hi、总体结构表征向量Ri进行拼接,得到Ti,正则化L2_Normalize后得到注释词zi的总体表征向量与注释词zi构成二元组/>作为键值对(key,value)放入近邻词数据库中,如图2所示。
Ti=Concat(di,Hi,Ri)
(3-5)将所有训练样本的注释词放入近邻词数据库后,最终的近邻词数据库即构建完毕。利用FAISS库中的FAISS.METRIC_INNER_PRODUCT来为近邻词数据库构建索引index,方便后续的快速检索。
(4)模型自回归生成过程:针对待注释的代码函数文本及其抽象语法树,利用传统的自回归生成方式进行解码,在每一个时间步得到目标词在词表中的概率分布和目标词总体表征向量qt,将该概率分布记为基于模型的目标词概率分布Pm(St|Code,S<t),表示基于代码函数文本及代码结构Code以及之前时间步所生成的词S<t,生成当前目标词St的概率分布。
所述的目标词总体表征向量qt生成过程参照上述步骤(3),不同之处在于,将S<t作为解码器中的带掩码的多头自注意力模块的输入,将词表征结果中的最后一个向量作为词表征向量dt。将词表征向量dt与总体语义表征向量Ht、总体结构表征向量Rt进行拼接,将拼接结果正则化,得到目标词总体表征向量qt。
(5)近邻词检索过程:对目标词总体表征向量qt,利用余弦相似度指标在步骤(3)中构建好的近邻词数据库中进行检索,得到Top_K=8个近邻词[neigh1,neigh2,…,neigh8]、以及近邻词与目标词总体表征向量之间的相似距离[dist1,dist2,…,dist8];根据相似距离计算基于近邻词的目标词概率分布Pr(St|Code,S<t),计算公式如下:
g[dist,Temperature]=[dist1,dist2,…,dist8]*Temperature
其中,g[dist,Temperature]表示缩放后的相似距离,Temperature表示温度调节系数,exp(.)表示归一化指数函数,exp(g[dist,Temperature])检索出的近邻词根据相似距离重新调整计算概率分布;表示当Vt=St成立时为1,否则为0;Vt表示近邻词[neigh1,neigh2,…,neigh8]中的一个元素。
(6)概率分布的融合:将步骤(4)中的基于模型的目标词概率分布Pm(St|Code,S<t)和步骤(5)中的基于近邻词的目标词概率分布Pr(St|Code,S<t)按一定的权重系数λ进行融合,得到最终的目标词概率分布,计算公式如下:
P(St|Code,S<t)=(1-λ)*Pn(St|Code,S<t)+λ*Pr(St|Code,S<t)
根据最终的目标词概率分布,取概率最大的词作为当前时间步的输出结果。
在本实施例中还提供了一种基于词级别检索的源代码注释自动化生成系统,该系统用于实现上述实施例。以下所使用的术语“模块”、“单元”等可以实现预定功能的软件和/或硬件的组合。尽管在以下实施例中所描述的系统较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能的。
本实施例提供的一种基于词级别检索的源代码注释自动化生成系统,包括:
数据获取模块,其用于获取由代码函数文本、代码抽象语法树、代码注释文本构成的训练数据集,以及用于获取待注释的代码函数文本及其抽象语法树;
编码-解码网络模块,其用于提取代码函数文本的语义表征向量和代码抽象语法树的结构表征向量,以及用于对代码注释文本的注意力结果、语义表征向量和结构表征向量进行交互并解码生成注释文本;
编码-解码网络训练模块,其用于利用训练数据集训练编码-解码网络模块;
近邻词数据库构建模块,其用于利用训练后的编码-解码网络,获取代码注释文本中每一个注释词的总体表征向量,构建近邻词数据库;
初始目标词概率分布计算模块,其用于针对待注释的代码函数文本及其抽象语法树,利用训练后的编码-解码网络以自回归生成方式生成当前时间步的基于模型的目标词概率分布和目标词总体表征向量;
近邻词搜索模块,其用于在近邻词数据库中检索与目标词总体表征向量的余弦相似度最高的K个近邻词,生成基于近邻词的目标词概率分布;
概率分布融合模块,其用于融合基于模型的目标词概率分布和基于近邻词的目标词概率分布,取融合概率分布中概率最大的目标词作为当前时间步生成的注释词。
在本发明的一项具体实施中,所述的近邻词数据库构建模块的计算过程包括:
对代码函数文本编码得到语义表征向量,对代码抽象语法树编码得到结构表征向量;
获取代码注释文本中的每一个注释词的词表征向量,将代码注释文本中的每一个注释词的词表征向量与语义表征向量通过点积的方式,获取代码函数文本中每个词的注意力分数;将代码注释文本中的每一个注释词的词表征向量与结构表征向量通过点积的方式,获取代码结构中每个节点的注意力分数;
将代码函数文本中每个词的注意力分数与语义表征向量进行加权求和,得到代码注释文本中的注释词对于代码函数文本的总体语义表征向量;将代码结构中每个节点的注意力分数与结构表征向量进行加权求和,得到代码注释文本中的注释词对于代码抽象语法树的总体结构表征向量;
将每一个注释词的词表征向量与总体语义表征向量、总体结构表征向量进行拼接,将拼接结果正则化后得到注释词的总体表征向量,将注释词的总体表征向量与对应的注释词作为键值对放入近邻词数据库中。
对于系统实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可,其余模块的实现方法此处不再赘述。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明的系统的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。系统实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。
以上所述的实施例对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的具体实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于词级别检索的源代码注释自动化生成方法,其特征在于,包括:
(1)获取由代码函数文本、代码抽象语法树、代码注释文本构成的训练数据集;
(2)利用训练数据集训练编码-解码网络,其中编码-解码网络中的编码器用于提取代码函数文本的语义表征向量和代码抽象语法树的结构表征向量,编码-解码网络中的解码器用于对代码注释文本的注意力结果、语义表征向量和结构表征向量进行交互并解码生成注释文本;
(3)利用训练后的编码-解码网络,获取代码注释文本中每一个注释词的总体表征向量,构建近邻词数据库;
(4)针对待注释的代码函数文本及其抽象语法树,利用训练后的编码-解码网络以自回归生成方式生成当前时间步的基于模型的目标词概率分布和目标词总体表征向量;
(5)在近邻词数据库中检索与目标词总体表征向量的余弦相似度最高的K个近邻词,生成基于近邻词的目标词概率分布;
(6)融合基于模型的目标词概率分布和基于近邻词的目标词概率分布,取融合概率分布中概率最大的目标词作为当前时间步生成的注释词;
(7)循环步骤(4)-(6),直至注释结束。
2.根据权利要求1所述的一种基于词级别检索的源代码注释自动化生成方法,其特征在于,所述的解码器包括带掩码的多头自注意力模块、基于语义的多头交叉注意力模块、基于结构的多头交叉注意力模块和前馈神经网络;
首先利用带掩码的多头自注意力模块获取输入的代码注释文本的注意力结果,再分别通过基于语义的多头交叉注意力模块、基于结构的多头交叉注意力模块进行交互,最后由前馈神经网络生成基于模型的目标词概率分布。
3.根据权利要求2所述的一种基于词级别检索的源代码注释自动化生成方法,其特征在于,所述的步骤(3)包括:
(3-1)对代码函数文本编码得到语义表征向量,对代码抽象语法树编码得到结构表征向量;
(3-2)获取代码注释文本中的每一个注释词的词表征向量,将代码注释文本中的每一个注释词的词表征向量与语义表征向量通过点积的方式,获取代码函数文本中每个词的注意力分数;将代码注释文本中的每一个注释词的词表征向量与结构表征向量通过点积的方式,获取代码结构中每个节点的注意力分数;
(3-3)将代码函数文本中每个词的注意力分数与语义表征向量进行加权求和,得到代码注释文本中的注释词对于代码函数文本的总体语义表征向量;将代码结构中每个节点的注意力分数与结构表征向量进行加权求和,得到代码注释文本中的注释词对于代码抽象语法树的总体结构表征向量;
(3-4)将每一个注释词的词表征向量与总体语义表征向量、总体结构表征向量进行拼接,将拼接结果正则化后得到注释词的总体表征向量,将注释词的总体表征向量与对应的注释词作为键值对放入近邻词数据库中。
4.根据权利要求3所述的一种基于词级别检索的源代码注释自动化生成方法,其特征在于,所述的代码注释文本中的每一个注释词的词表征向量获取方法具体为:
将代码注释文本作为解码器中的带掩码的多头自注意力模块的输入,输出注释文本的注意力结果;将注释文本的注意力结果和语义表征向量作为解码器中的基于语义的多头交叉注意力模块的输入,输出基于语义的注意力结果;将基于语义的注意力结果和结构表征向量作为解码器中的基于结构的多头交叉注意力模块的输入,输出基于结构的注意力结果,正则化后得到词表征结果,所述的词表征结果中的每一个向量对应代码注释文本中的每一个注释词的词表征向量。
5.根据权利要求4所述的一种基于词级别检索的源代码注释自动化生成方法,其特征在于,在所述的基于语义的多头交叉注意力模块中,将注释文本的注意力结果作为注意力机制中的查询向量,语义表征向量作为注意力机制中的键向量和值向量;在所述的基于结构的多头交叉注意力模块中,将基于语义的注意力结果作为注意力机制中的查询向量,结构表征向量作为注意力机制中的键向量和值向量。
6.根据权利要求3所述的一种基于词级别检索的源代码注释自动化生成方法,其特征在于,所述的步骤(4)中,获取目标词总体表征向量时,将当前时间步t之前所生成的注释词S<t作为解码器中的带掩码的多头自注意力模块的输入,输出注释词S<t的注意力结果;再分别通过基于语义的多头交叉注意力模块、基于结构的多头交叉注意力模块进行交互后生成词表征结果,将词表征结果中的最后一个向量作为当前词表征向量;将当前词表征向量与总体语义表征向量、总体结构表征向量进行拼接,将拼接结果正则化后得到目标词总体表征向量。
7.根据权利要求1所述的一种基于词级别检索的源代码注释自动化生成方法,其特征在于,所述的基于近邻词的目标词概率分布的计算公式如下:
g[dist,Temperature]=[dist1,dist2,…,distK]*Temperature其中,Pr(St|Code,S<t)表示基于近邻词的目标词概率分布,Code表示待注释的代码函数文本及其抽象语法树,S<t表示当前时间步t之前所生成的注释词,St表示当前时间步t的目标词,Vt表示近邻词[neigh1,neigh2,…,neigh8]中的一个元素,distK表示余弦相似度最高的第K个近邻词,g[dist,Temperature]表示缩放后的相似距离,Temperature表示温度调节系数,dist表示与目标词总体表征向量的余弦相似度最高的K个近邻词的相似距离,exp(.)表示归一化指数函数;表示当Vt=St成立时为1,否则为0。
8.根据权利要求1所述的一种基于词级别检索的源代码注释自动化生成方法,其特征在于,将基于模型的目标词概率分布和基于近邻词的目标词概率分布进行加权,得到融合概率分布。
9.一种基于词级别检索的源代码注释自动化生成系统,其特征在于,包括:
数据获取模块,其用于获取由代码函数文本、代码抽象语法树、代码注释文本构成的训练数据集,以及用于获取待注释的代码函数文本及其抽象语法树;
编码-解码网络模块,其用于提取代码函数文本的语义表征向量和代码抽象语法树的结构表征向量,以及用于对代码注释文本的注意力结果、语义表征向量和结构表征向量进行交互并解码生成注释文本;
编码-解码网络训练模块,其用于利用训练数据集训练编码-解码网络模块;
近邻词数据库构建模块,其用于利用训练后的编码-解码网络,获取代码注释文本中每一个注释词的总体表征向量,构建近邻词数据库;
初始目标词概率分布计算模块,其用于针对待注释的代码函数文本及其抽象语法树,利用训练后的编码-解码网络以自回归生成方式生成当前时间步的基于模型的目标词概率分布和目标词总体表征向量;
近邻词搜索模块,其用于在近邻词数据库中检索与目标词总体表征向量的余弦相似度最高的K个近邻词,生成基于近邻词的目标词概率分布;
概率分布融合模块,其用于融合基于模型的目标词概率分布和基于近邻词的目标词概率分布,取融合概率分布中概率最大的目标词作为当前时间步生成的注释词。
10.根据权利要求9所述的一种基于词级别检索的源代码注释自动化生成系统,其特征在于,所述的近邻词数据库构建模块的计算过程包括:
对代码函数文本编码得到语义表征向量,对代码抽象语法树编码得到结构表征向量;
获取代码注释文本中的每一个注释词的词表征向量,将代码注释文本中的每一个注释词的词表征向量与语义表征向量通过点积的方式,获取代码函数文本中每个词的注意力分数;将代码注释文本中的每一个注释词的词表征向量与结构表征向量通过点积的方式,获取代码结构中每个节点的注意力分数;
将代码函数文本中每个词的注意力分数与语义表征向量进行加权求和,得到代码注释文本中的注释词对于代码函数文本的总体语义表征向量;将代码结构中每个节点的注意力分数与结构表征向量进行加权求和,得到代码注释文本中的注释词对于代码抽象语法树的总体结构表征向量;
将每一个注释词的词表征向量与总体语义表征向量、总体结构表征向量进行拼接,将拼接结果正则化后得到注释词的总体表征向量,将注释词的总体表征向量与对应的注释词作为键值对放入近邻词数据库中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310550101.5A CN116627487A (zh) | 2023-05-16 | 2023-05-16 | 基于词级别检索的源代码注释自动化生成方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310550101.5A CN116627487A (zh) | 2023-05-16 | 2023-05-16 | 基于词级别检索的源代码注释自动化生成方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116627487A true CN116627487A (zh) | 2023-08-22 |
Family
ID=87635829
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310550101.5A Pending CN116627487A (zh) | 2023-05-16 | 2023-05-16 | 基于词级别检索的源代码注释自动化生成方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116627487A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117421392A (zh) * | 2023-12-15 | 2024-01-19 | 武汉大学 | 一种基于词级对齐的代码搜索方法及装置 |
CN117873487A (zh) * | 2024-01-15 | 2024-04-12 | 广东工业大学 | 一种基于gvg的代码注释生成方法 |
-
2023
- 2023-05-16 CN CN202310550101.5A patent/CN116627487A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117421392A (zh) * | 2023-12-15 | 2024-01-19 | 武汉大学 | 一种基于词级对齐的代码搜索方法及装置 |
CN117421392B (zh) * | 2023-12-15 | 2024-03-08 | 武汉大学 | 一种基于词级对齐的代码搜索方法及装置 |
CN117873487A (zh) * | 2024-01-15 | 2024-04-12 | 广东工业大学 | 一种基于gvg的代码注释生成方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Alomari et al. | Deep reinforcement and transfer learning for abstractive text summarization: A review | |
He et al. | See: Syntax-aware entity embedding for neural relation extraction | |
Zhang et al. | SG-Net: Syntax guided transformer for language representation | |
US20220164626A1 (en) | Automated merge conflict resolution with transformers | |
CN116627487A (zh) | 基于词级别检索的源代码注释自动化生成方法和系统 | |
US20220308848A1 (en) | Semi-supervised translation of source code programs using neural transformers | |
US11829282B2 (en) | Automatic generation of assert statements for unit test cases | |
CN113190219A (zh) | 一种基于递归神经网络模型的代码注释生成方法 | |
Gong et al. | Continual pre-training of language models for math problem understanding with syntax-aware memory network | |
CN115437626A (zh) | 一种基于自然语言的ocl语句自动生成方法和装置 | |
Jia et al. | Hybrid neural tagging model for open relation extraction | |
Xie et al. | Osworld: Benchmarking multimodal agents for open-ended tasks in real computer environments | |
Yonglan et al. | [Retracted] English‐Chinese Machine Translation Model Based on Bidirectional Neural Network with Attention Mechanism | |
Choi et al. | Source code summarization using attention-based keyword memory networks | |
CN116521857A (zh) | 基于图形增强的问题驱动抽象式多文本答案摘要方法与装置 | |
CN115495085A (zh) | 一种基于深度学习细粒度代码模板的生成方法及装置 | |
Thu et al. | Myanmar news headline generation with sequence-to-sequence model | |
Fang et al. | RepresentThemAll: A universal learning representation of bug reports | |
Bahaweres et al. | Hybrid software defect prediction based on LSTM (long short term memory) and word embedding | |
Kumar et al. | ManuBERT: A pretrained Manufacturing science language representation model | |
Zhou et al. | Topic-attentive encoder-decoder with pre-trained language model for keyphrase generation | |
Deng et al. | From code to natural Language: type-aware sketch-based seq2seq learning | |
Xu et al. | A Multi-Task Instruction with Chain of Thought Prompting Generative Framework for Few-Shot Named Entity Recognition | |
CN112131363A (zh) | 自动问答方法、装置、设备及存储介质 | |
Liang et al. | Named Entity Recognition Method Based on BERT-whitening and Dynamic Fusion Model |
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 |