CN109960506B - 一种基于结构感知的代码注释生成方法 - Google Patents
一种基于结构感知的代码注释生成方法 Download PDFInfo
- Publication number
- CN109960506B CN109960506B CN201811467831.4A CN201811467831A CN109960506B CN 109960506 B CN109960506 B CN 109960506B CN 201811467831 A CN201811467831 A CN 201811467831A CN 109960506 B CN109960506 B CN 109960506B
- Authority
- CN
- China
- Prior art keywords
- sequence
- annotation
- vector
- abstract syntax
- tree
- 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
- 238000000034 method Methods 0.000 title claims abstract description 29
- 230000008447 perception Effects 0.000 title claims abstract description 8
- 230000007246 mechanism Effects 0.000 claims abstract description 8
- 239000013598 vector Substances 0.000 claims description 62
- 230000006870 function Effects 0.000 claims description 26
- 230000015654 memory Effects 0.000 claims description 16
- 238000012549 training Methods 0.000 claims description 13
- 239000011159 matrix material Substances 0.000 claims description 10
- 238000005457 optimization Methods 0.000 claims description 7
- 230000009977 dual effect Effects 0.000 claims description 6
- 230000000007 visual effect Effects 0.000 claims description 4
- 210000004556 brain Anatomy 0.000 claims description 2
- 238000011156 evaluation Methods 0.000 claims description 2
- 238000012886 linear function Methods 0.000 claims description 2
- 238000012360 testing method Methods 0.000 claims description 2
- 238000001514 detection method Methods 0.000 abstract description 4
- 238000004883 computer application Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000006403 short-term memory Effects 0.000 description 2
- ORILYTVJVMAKLC-UHFFFAOYSA-N Adamantane Natural products C1C(C2)CC3CC1CC2C3 ORILYTVJVMAKLC-UHFFFAOYSA-N 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Machine Translation (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明属于计算机应用技术领域,具体为一种基于结构感知的代码注释生成方法。本发明利用抽象语法树得到代码片段的层次信息,以此来构建一个基于结构感知的代码注释生成器。本发明提出一个称为Code2Text的模型将源代码与其抽象语法树结合,应用在代码注释领域。Code2Text中的双重编码器分别对源代码序列输入与抽象语法结构输入进行编码,并通过双重注意力机制,利用源代码中的每一个单词和抽象语法树中的每一个结点来精确调整生成单词,以此来引导解码过程。本发明可以辅助程序员生成注释以减少手工撰写成本,也可为没有经验的程序员理解现有代码提供参考;并且可以用于数据使用的应用程序代码检测。
Description
技术领域
本发明属于计算机应用技术领域,具体涉及基于结构感知的代码注释生成方法。
背景技术
我们观察了最近几年发布的大量程序源码,发现为它们手工撰写详细的注释是一件乏味而且消耗时间的工作。但是,这些注释在软件开发中扮演了不可替代的角色。举个例子,它可以指导新手工程师快速理解每一块代码的用途,也可以帮助他们读懂一段用非主流编程语言编写的遗留代码。因此,我们需要一个有效的自动源代码注释方法,目标是能够为代码自动添加相应的高质量的自然语言,也就是注释。
由代码生成注释的方法还可以运用在对数据使用的应用程序代码的检测中。数据拥有者将数据提供给数据使用者访问使用,数据使用者会上传他们针对数据所编写的代码,同时也需要标注这段代码的功能。通过本发明的方法,可以自动为使用者上传的代码生成注释,然后将使用者标注的功能与自动生成的注释进行比对,确认使用者通过代码的对数据进行的实际操作与他所标注的功能是否相符,同时也可以避免用户上传一些对系统或者数据进行恶意破坏、修改,或是会对数据造成泄露的代码。
针对上述问题,本发明提出了一种基于结构感知的代码注释自动生成方法,相较于传统的基于模板和基于规则的生成固定模式的结构化注释,本发明提出的方法可无人工干预地自动为代码生成自然语言注释,并且能捕捉到源代码中的语义信息与层次信息。
发明内容
本发明的目的在于提供一种能够有效提高程序员编程效率的基于结构感知的代码注释生成方法。
本发明提出基于结构感知的代码注释生成方法,采用一个名为Code2Text的语法注释模型,将源代码与其抽象语法树(abstract syntax tree,AST)结合到注释生成中,其架构如图1所示,该模型具体分为如下三个部分:
(1)双重编码器,该模块包含了两个编码器,一个是针对源代码进行编码的序列编码器,另一个是针对抽象语法树进行编码的树编码器,分别将源代码和抽象语法树嵌入到不同的向量空间中;
(2)解码器。该模块根据双重编码器生成的源代码与抽象语法树在各自向量空间中的向量,预测与源代码相关的注释;
(3)双重注意力机制。该模块借鉴人脑的视觉注意力机制,帮助解码器在生成注释时,能够将生成的每一个词语与输入的源代码和抽象语法树中的部分词语和结点相关联,以此来选择更加合理且精确的词语。
代码注释生成方法的具体步骤如下:
(1)生成抽象语法树
(2)用序列编码器对源代码的数据进行编码
序列编码器采用长短期记忆网络LSTM(Long Short-Term Memory),目的是将源代码序列嵌入到d维的向量空间中。设第j个LSTM单元有三个门:一个输入门一个遗忘门一个输出门以及两个状态:一个隐层状态和一个记忆单元每个LSTM单元的更新法则如下:
其中,表示记忆单元用来更新的状态;函数embed()将一个词语嵌入到一个d维向量中,它可以采用预训练模型中的固定向量或者由模型本身训练出来;W(·),U(·)∈Rd×d是权重矩阵,b(·)∈Rd×1是一个偏差向量,σ是逻辑函数,运算符⊙表示两个向量的点积。我们使用一个d维的全零向量来初始化后使用上述更新规则对源代码序列进行迭代,最终序列编码器在源代码的末尾处得到序列隐层状态它综合了这条源代码的序列语义信息。
(3)用树形编码器对抽象语法树的数据进行编码
树形解码器采用一种特殊的长短记忆单元——树形长短记忆(Tree-LSTM)单元来对抽象语法树进行编码,将抽象语法树序列嵌入到d维的向量空间中。我们规定Cj表示抽象语法树中第j个结点的子节点数。每个树形结点隐层状态与记忆单元的更新规则如下:
其中,在③式中,k∈Cj;是子隐层状态的求和;表示记忆单元用来更新的状态;分别是是输入门、输出门和遗忘门;W(·),U(·)∈Rd×d是权重矩阵,b(·)∈Rd×1是一个偏差向量,σ是逻辑函数,运算符⊙表示两个向量的点积。我们使用一个d维的全零向量来初始化使用上述更新规则对树形结构进行迭代,最终在语法树根节点处得到它综合了这棵抽象语法树的结构信息。
(4)用解码器进行解码
经过步骤(2)、(3),我们得到两个嵌入后的向量:序列表示向量和树结构表示向量解码器同样使用长短记忆单元来预测注释的序列。我们定义dj为解码器的第j个隐层状态,已知作为输入的源代码序列的嵌入后向量embed(xs),抽象语法树序列的嵌入后向量embed(xt),以及之前生成的注释单词序列y<j,我们得到第j个单词的概率分布:
p(yj|y<j,embed(xs),embed(xt))=softmax(dj),
其中,softmax()函数根据第j个隐层状态dj来生成概率,dj由另一个非线性函数fd计算得到:
dj=fd(dj-1,embed(yj-1)),
(5)利用双重注意力机制来改善训练
其中,score()函数将解码器的隐层状态dj与每一个序列编码器的隐层状态进行比较,计算它们的相似度,再进行标准化操作生成注意力权重。接下来,根据注意力权重来计算第j个源代码序列的上下文向量即原始隐层状态的加权平均:
然后根据如下公式计算最终的注意力向量aj:
其中Wd∈Rd×2d是权重矩阵,bd∈Rd×1是偏差向量;
最后根据如下公式计算每一个输出词的概率分布:
p(yj|y<1,embed(xs),embed(xt))=softmax(aj),
(6)迭代优化函数
本方法中的学习误差函数采用了语言模型评价指标:困惑度(Perplexity),公式如下:
其中S表示注释,n表示注释的长度,xi表示注释中的第i个词,p(xi|x1x2…xi-1)表示已知前i-1个词,接下来生成的第i个词是xi的概率。PP(S)越小,说明生成目标注释的概率越大。
我们使用迭代优化函数对参数做梯度下降操作。
(7)重复上述(2)~(6)步骤,直至达到预定义的训练步数或者优化函数的值不再下降,此时得到一个训练好的注释生成器;
(8)在测试步骤或预测步骤时,我们将注释生成器生成的所有注释单词连接在一起,得到代码对应的注释。
本发明使用深度学习方法,提供基于结构感知的代码注释生成模型。该模型能够从大量已有的代码与注释中自动学习注释的撰写,优点在于无人工干预地自动生成自然语言注释,无需设定特定的注释撰写规则,也无需设计特定规则的模板,可直接给程序员提供代码阅读的帮助。
本发明可用于代码注释的自动生成,为没有经验的程序员阅读代码提供指导,降低程序员的工作强度与难度。
本发明方法还可以运用在对数据使用的应用程序代码的检测中。数据拥有者将数据提供给数据使用者访问使用,数据使用者会上传他们针对数据所编写的代码,同时也需要标注这段代码的功能。本发明方法可以为使用者上传的代码自动生成注释,然后将使用者标注的功能与自动生成的注释进行比对,确认使用者通过代码的对数据进行的实际操作与他所标注的功能是否相符,同时也可以避免用户上传一些对系统或者数据进行恶意破坏、修改,或是会对数据造成泄露的代码。
附图说明
图1为本发明架构图示。
图2为由代码“for cache in caches.all():”生成的语法树。
图3为注意力矩阵的可视化效果图。
具体实施方式
下面将给出注释生成器的具体训练过程以及Python代码的注释生成的具体实施方式。
1、注释生成器的训练,具体步骤为:
(1)准备大量的代码以及其每一句代码对应的注释作为训练数据。此处以Python代码为例,例如训练数据集中的一句代码为“for cache in caches.all():”,对应的注释是“for every cache in return value of the function caches.all.”。接下来我们将主要关注这句代码在训练过程中对模型参数的调整。
(2)为每一句代码序列xs生成其对应的抽象语法树。对于Python的代码,可以使用自带的ast包完成该过程。此时,抽象语法树中的每一个结点所代表的单词组成抽象语法树序列xt;对语法树中的每一个结点进行标号,再记录下每一个结点的父节点的标号,记为p,其中根(root)节点的标号为0。由代码“for cache in caches.all():”生成的语法树如图2所示。
(3)将代码序列xs中的每一个单词嵌入(embed)到向量空间(设为256维),输入到序列编码器中。例如“for”对应的向量空间为[-0.0647,-0.0777,…,-0.0142,-0.0382]。序列编码器中的LSTM单元包含了输入门遗忘门输出门隐层状态记忆单元根据发明内容中代码注释生成方法的具体步骤里第(2)步的更新法则,最终得到隐层状态其中作为源代码序列的综合信息。
(4)将抽象语法树序列xt中的每一个单词嵌入(embed)到向量空间之后,输入到树形LSTM(Tree-LSTM)编码器中。树形编码器中的LSTM单元与序列编码器类似,根据发明内容中代码注释生成方法的具体步骤里第(3)步骤的更新法则,最终得到隐层状态其中作为这句代码的树结构信息。
(6)在注释生成过程中,我们应用双重注意力模块。首先分别计算出序列和树形的注意力权重与然后再计算序列的与树形的上下文向量与连结成wj,将wj与隐层状态dj,以及之前预测的单词向量yj,根据代码注释生成方法的具体步骤里第(4)、(5)步里的公式,经过一系列计算后得到下一个单词的概率分布。简单选择概率最大的作为该步骤的单词,若该单词为<eos>则结束,输出之前的所有单词作为该步骤的句子输出,否则继续下一个单词的生成直至达到最大句子长度,这里设置为300。举个例子,在第(4)步中得到的隐层向量d0之后,先根据公式d1=fd(d0,embed(y0)),将起始词y0=<st>的嵌入后向量与d0输入到LSTM单元中,根据上述的LSTM的更新法则,计算得到隐层向量d1。接着对d1与(2)、(3)步中的隐层状态进行计算,根据公式:
计算得到第1个上下文向量w1,然后再利用公式:
计算得到最终的注意力向量a1,接着可以利用公式:
p(y1|y<1,embed(xs),embed(xt))=softmax(a1)
来计算第一个位置输出的所有词的概率分布,根据一定的规则选择输出词y1。接着再根据d0与第一个位置的输出词y1计算d1,再结合计算与然后依次计算得到w2、a2,最后就可以得到第二个输出词的概率分布,选择第二个输出词y2……依此类推,直到出现输出词为<eos>或者达到最大句子长度300时停止输出。
(7)在第(6)步中计算每一个位置的输出词的概率分布时,对照代码序列xs对应的注释“for every cache in return value of the function caches.all.”,假设在每一个输出位置下出现的就是这条注释中对应位置的那个词,记录这个词出现的概率,根据困惑度(Perplexity)公式计算误差。例如第一个输出位置的概率分布为[0.012,0.947,0.041],实际际样本为[0,1,0],此时的误差值为利用反向传播将误差从最后一个LSTM单元往回传,最终调整权重矩阵W(·)、U(·)、偏差向量b(·)、计算注意力向量时的权重矩阵Wd和偏差向量bd,以及所有输入词和输出词yj的嵌入后向量embed(yj)。此处选择了Adam优化算法来进行梯度下降。
(8)针对其他输入的代码和注释,重复步骤(2)到(6),直到误差函数不再下降或者达到预定的最大训练轮数。此处最大训练轮数设为20。最后将网络里的参数确定下来,就完成了注释生成器的训练。
2、利用注释生成器的进行注释生成
(1)如图3左部所示,输入的Python代码为“status_code=400”,源代码序列标为xs=["status_code","=","400"],对应的抽象语法树序列为xt=["root","Assign","expr*","expr","targets","expr","value","Num","Name","str","id","source_code","int","n","400"]。
(2)将上述序列中的每个词嵌入到256维的向量空间中,例如,“status_code”的向量为[0.0576,-0.0439,…,0.0694,-0.0519],其他源代码序列和抽象语法树序列中的单词按照类似方法转化。
(3)与注释生成器的训练过程中的(3)~(5)类似,将上述嵌入向量输入到双重编码器中,得到解码器的初始隐层状态d0(设为256维)。例如,上述源代码“status_code=400”对应的d0为[11.2955,-9.5370,…,-1.9248,3.7074]。
(4)在解码过程中,每计算出一个新的隐层向量,将其与序列编码器和树形编码器的隐层输出进行权重计算。例如,给定解码器初始输入<st>,生成第一个256维的隐层向量d1=[0.5895,0.2659,…,-3.3518,-5.1875],再根据(6)中的公式计算得到第一个位置的注意力向量a1=[-2.0321,-2.6163,…,0.3313,2.3193]。
(5)下一步,利用softmax(a1)来计算第一个位置输出的所有词的概率分布,再根据一定的规则选择输出词y1。例如,我们计算得到的第一个词的概率分布为[0.0325,0.1263,…,0.6178,0.0058],选择出现概率最高的(0.6178)位置所对应的单词(status_code),作为我们的第一个输出词y1。重复解码器的过程,将所有输出词序列(y1,y2,…,ym)作为这句代码的注释。最终生成的注释内容为:“status_code is an integer400.”。
(6)图3为注意力矩阵的可视化效果图。我们将代码生成的注释单词与源代码序列和抽象语法树节点之间的注意力权重以灰度值的形式描绘,颜色越浅,表明单词和源代码或树节点的关系最强。例如,注释中的“status_code”和“400”与源代码中的相应部分注意力关系最强,而注释中的“integer”则与抽象语法树中的“int”节点注意力关系最强。这个例子可以证明,我们的模型既可以学习源代码序列的基本语义信息,也可以学习代码抽象语法树隐含的层次信息,从而生成合理、准确的自然语言注释。
本发明方法能够自动生成注释,耗时短,生成的注释语言流畅自然,能够捕捉到代码中的语义与层次信息。这对于新手工程师,可提供一个参考;对于有经验的工程师,先提供一个基础版本的注释,工程师可以根据进一步的观察修改注释。这样可为工程师减少工作强度,缩短写注释的时间,方便他们进一步对其精细化;并且可以用于数据使用的应用程序代码检测。
Claims (1)
1.一种基于结构感知的代码注释生成方法,其特征在于采用Code2Text的语法注释模型,将源代码与其抽象语法树结合到注释生成中;该模型分为如下三个模块:
(1)双重编码器,该模块包含了两个编码器,一个是针对源代码进行编码的序列编码器,另一个是针对抽象语法树进行编码的树编码器,分别将源代码和抽象语法树嵌入到不同的向量空间中;
(2)解码器,该模块根据双重编码器生成的源代码与抽象语法树在各自向量空间中的向量,预测与源代码相关的注释;
(3)双重注意力机制,该模块借鉴人脑的视觉注意力机制,帮助解码器在生成注释时,能够将生成的每一个词语与输入的源代码和抽象语法树中的部分词语和结点相关联,以此来选择更加合理且精确的词语;
代码注释生成的具体步骤如下:
(1)生成抽象语法树
(2)用序列编码器对源代码的数据进行编码
序列编码器采用长短期记忆网络LSTM,目的是将源代码序列:
其中,表示记忆单元用来更新的状态;函数embed()将一个词语嵌入到一个d维向量中,它采用预训练模型中的固定向量或者由模型本身训练出来;W(·),U(·)∈Rd×d是权重矩阵,b(·)∈Rd×1是一个偏差向量,σ是逻辑函数,运算符⊙表示两个向量的点积;使用一个d维的全零向量来初始化然后使用上述更新规则对源代码序列进行迭代,最终序列编码器在源代码的末尾处得到序列隐层状态它综合了这条源代码的序列语义信息;
(3)用树形编码器对抽象语法树的数据进行编码
树形解码器采用一种特殊的长短记忆单元——树形长短记忆(Tree-LSTM)单元来对抽象语法树进行编码,将抽象语法树序列嵌入到d维的向量空间中;规定Cj表示抽象语法树中第j个结点的子节点数;每个树形结点隐层状态与记忆单元的更新规则如下:
其中,在③式中,k∈Cj;是子隐层状态的求和;表示记忆单元用来更新的状态;分别是是输入门、输出门和遗忘门;W(·),U(·)∈Rd×d是权重矩阵,b(·)∈Rd×1是一个偏差向量,σ是逻辑函数,运算符⊙表示两个向量的点积;使用一个d维的全零向量来初始化使用上述更新规则对树形结构进行迭代,最终在语法树根节点处得到它综合了这棵抽象语法树的结构信息;
(4)用解码器进行解码
经过步骤(2)、(3),得到两个嵌入后的向量:序列表示向量和树结构表示向量解码器同样使用长短记忆单元来预测注释的序列;定义dj为解码器的第j个隐层状态,已知作为输入的源代码序列的嵌入后向量embed(xs),抽象语法树序列的嵌入后向量embed(xt),以及之前生成的注释单词序列y<j,得到第j个单词的概率分布:
p(yj|y<j,embed(xs),embed(xt))=softmax(dj),
其中,softmax()函数根据第j个隐层状态dj来生成概率,dj由另一个非线性函数fd计算得到:
dj=fd(dj-1,embed(yj-1)),
(5)利用双重注意力机制来改善训练
其中,score()函数将解码器的隐层状态dj与每一个序列编码器的隐层状态进行比较,计算它们的相似度,再进行标准化操作生成注意力权重;接下来,根据注意力权重来计算第j个源代码序列的上下文向量即原始隐层状态的加权平均:
然后根据如下公式计算最终的注意力向量aj:
其中,Wd∈Rd×2d是权重矩阵,bd∈Rd×1是偏差向量;
最后根据如下公式计算每一个输出词的概率分布:
p(yj|y<1,embed(xs),embed(xt))=softmax(aj);
(6)迭代优化函数
学习误差函数采用语言模型评价指标:困惑度,公式如下:
其,中S表示注释,n表示注释的长度,xi表示注释中的第i个词,p(xi|x1x2…xi-1)表示已知前i-1个词;接下来生成的第i个词是xi的概率;PP(S)越小,说明生成目标注释的概率越大;使用迭代优化函数对参数做梯度下降操作;
(7)重复上述(2)~(6)步骤,直至达到预定义的训练步数或者优化函数的值不再下降,此时得到一个训练好的注释生成器;
(8)在测试步骤或预测步骤时,将注释生成器生成的所有注释单词连接在一起,得到代码对应的注释。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811467831.4A CN109960506B (zh) | 2018-12-03 | 2018-12-03 | 一种基于结构感知的代码注释生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811467831.4A CN109960506B (zh) | 2018-12-03 | 2018-12-03 | 一种基于结构感知的代码注释生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109960506A CN109960506A (zh) | 2019-07-02 |
CN109960506B true CN109960506B (zh) | 2023-05-02 |
Family
ID=67023300
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811467831.4A Active CN109960506B (zh) | 2018-12-03 | 2018-12-03 | 一种基于结构感知的代码注释生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109960506B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399162B (zh) * | 2019-07-09 | 2021-02-26 | 北京航空航天大学 | 一种源代码注释自动生成方法 |
CN111090461B (zh) * | 2019-11-18 | 2023-04-28 | 中山大学 | 一种基于机器翻译模型的代码注释生成方法 |
CN110908709B (zh) * | 2019-11-25 | 2023-05-02 | 中山大学 | 一种基于代码更改关键类判定的代码提交注释预测方法 |
CN111158691B (zh) * | 2019-12-05 | 2023-10-13 | 杭州安恒信息技术股份有限公司 | 实现规则引擎动态化的方法 |
CN111290756B (zh) * | 2020-02-10 | 2023-08-18 | 大连海事大学 | 一种基于对偶强化学习的代码-注释转换方法 |
US11262985B2 (en) | 2020-03-10 | 2022-03-01 | International Business Machines Corporation | Pretraining utilizing software dependencies |
CN113535136A (zh) * | 2020-04-14 | 2021-10-22 | 北京沃东天骏信息技术有限公司 | Python函数类型声明模型建立方法及装置、介质及设备 |
CN111522581B (zh) * | 2020-04-22 | 2021-06-25 | 山东师范大学 | 一种增强型代码注释自动生成方法及系统 |
CN111857660B (zh) * | 2020-07-06 | 2021-10-08 | 南京航空航天大学 | 一种基于查询语句的情境感知api推荐方法及终端 |
CN112162775A (zh) * | 2020-10-21 | 2021-01-01 | 南通大学 | 一种基于Transformer和混合代码表示的Java代码注释自动生成方法 |
CN112394974B (zh) * | 2020-11-23 | 2024-05-07 | 平安科技(深圳)有限公司 | 代码变更的注释生成方法、装置、电子设备及存储介质 |
CN112698831B (zh) * | 2020-12-25 | 2022-08-09 | 昆明理工大学 | 一种代码自动生成质量评估方法 |
CN112783505B (zh) * | 2021-01-28 | 2023-07-18 | 东北大学 | 一种用于源代码的函数智能重命名方法 |
CN113065322B (zh) * | 2021-04-06 | 2022-02-08 | 中山大学 | 一种代码段注释生成方法、系统及可读存储介质 |
CN113128229B (zh) * | 2021-04-14 | 2023-07-18 | 河海大学 | 一种中文实体关系联合抽取方法 |
CN113342343B (zh) * | 2021-04-20 | 2022-05-27 | 山东师范大学 | 基于多跳推理机制的代码摘要生成方法及系统 |
CN113076133B (zh) * | 2021-04-25 | 2023-09-26 | 南京大学 | 基于深度学习的Java程序内部注释的生成方法及系统 |
CN114185595B (zh) * | 2021-11-02 | 2024-03-29 | 武汉大学 | 基于代码结构引导的方法名生成方法 |
CN116628707A (zh) * | 2023-07-19 | 2023-08-22 | 山东省计算中心(国家超级计算济南中心) | 一种可解释性的基于多任务的源代码漏洞检测的方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108519890A (zh) * | 2018-04-08 | 2018-09-11 | 武汉大学 | 一种基于自注意力机制的鲁棒性代码摘要生成方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10070145B2 (en) * | 2014-02-07 | 2018-09-04 | Mediatek Singapore Pte. Ltd. | Method of coding based on string matching for video compression |
US20150363196A1 (en) * | 2014-06-13 | 2015-12-17 | The Charles Stark Draper Laboratory Inc. | Systems And Methods For Software Corpora |
CN108345457B (zh) * | 2018-01-24 | 2021-03-09 | 上海交通大学 | 一种对程序源代码自动生成功能描述性注释的方法 |
CN108491208A (zh) * | 2018-01-31 | 2018-09-04 | 中山大学 | 一种基于神经网络模型的代码注释分类方法 |
-
2018
- 2018-12-03 CN CN201811467831.4A patent/CN109960506B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108519890A (zh) * | 2018-04-08 | 2018-09-11 | 武汉大学 | 一种基于自注意力机制的鲁棒性代码摘要生成方法 |
Non-Patent Citations (1)
Title |
---|
张峰逸 ; 彭鑫 ; 陈驰 ; 赵文耘 ; .基于深度学习的代码分析研究综述.计算机应用与软件.2018,(第06期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN109960506A (zh) | 2019-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109960506B (zh) | 一种基于结构感知的代码注释生成方法 | |
CN109359293B (zh) | 基于神经网络的蒙古文命名实体识别方法及其识别系统 | |
CN107967262B (zh) | 一种神经网络蒙汉机器翻译方法 | |
CN109800298B (zh) | 一种基于神经网络的中文分词模型的训练方法 | |
CN110688394B (zh) | 面向新型供电城轨列车大数据运维的nl生成sql方法 | |
CN108519890A (zh) | 一种基于自注意力机制的鲁棒性代码摘要生成方法 | |
CN111291534A (zh) | 面向中文长文本自动摘要的全局编码方法 | |
CN110688861B (zh) | 一种多特征融合的句子级译文质量估计方法 | |
CN109522403A (zh) | 一种基于融合编码的摘要文本生成方法 | |
CN112000772B (zh) | 面向智能问答基于语义特征立方体的句子对语义匹配方法 | |
CN112347796B (zh) | 一种基于蒸馏BERT与改进Transformer相结合的蒙汉神经机器翻译方法 | |
CN111291175B (zh) | 一种基于策略梯度算法的自动生成提交需求摘要的方法 | |
KR102352251B1 (ko) | 자질 선별을 통한 고성능 기계독해 방법 | |
CN109062907A (zh) | 融入依存关系的神经机器翻译方法 | |
CN112613326B (zh) | 一种融合句法结构的藏汉语言神经机器翻译方法 | |
CN112446221B (zh) | 翻译评估方法、装置、系统及计算机存储介质 | |
CA3135717A1 (en) | System and method for transferable natural language interface | |
CN112417901A (zh) | 基于环顾解码和词汇注意力的非自回归蒙汉机器翻译方法 | |
CN115906815B (zh) | 一种用于修改一种或多种类型错误句子的纠错方法及装置 | |
CN114925170B (zh) | 文本校对模型训练方法及装置、计算设备 | |
CN114648015A (zh) | 一种基于依存关系注意力模型的方面级情感词识别方法 | |
CN117094325B (zh) | 水稻病虫害领域命名实体识别方法 | |
CN111382333A (zh) | 基于案件相关性联合学习与图卷积的新闻文本句中案件要素抽取方法 | |
CN113239166B (zh) | 一种基于语义知识增强的自动化人机互动方法 | |
CN113515960A (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 |