CN113064633A - 一种代码摘要自动生成方法及系统 - Google Patents
一种代码摘要自动生成方法及系统 Download PDFInfo
- Publication number
- CN113064633A CN113064633A CN202110327114.7A CN202110327114A CN113064633A CN 113064633 A CN113064633 A CN 113064633A CN 202110327114 A CN202110327114 A CN 202110327114A CN 113064633 A CN113064633 A CN 113064633A
- Authority
- CN
- China
- Prior art keywords
- vector
- code
- abstract
- syntax tree
- aggregation
- 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 65
- 239000013598 vector Substances 0.000 claims abstract description 147
- 230000002776 aggregation Effects 0.000 claims abstract description 60
- 238000004220 aggregation Methods 0.000 claims abstract description 60
- 230000004927 fusion Effects 0.000 claims abstract description 40
- 238000003062 neural network model Methods 0.000 claims abstract description 15
- 238000007781 pre-processing Methods 0.000 claims abstract description 7
- 239000011159 matrix material Substances 0.000 claims description 49
- 238000010586 diagram Methods 0.000 claims description 16
- 230000008569 process Effects 0.000 claims description 16
- 230000006870 function Effects 0.000 claims description 15
- 230000007246 mechanism Effects 0.000 claims description 12
- 238000012549 training Methods 0.000 claims description 12
- 238000012545 processing Methods 0.000 claims description 10
- 238000003860 storage Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 description 8
- 239000012634 fragment Substances 0.000 description 8
- JXSJBGJIGXNWCI-UHFFFAOYSA-N diethyl 2-[(dimethoxyphosphorothioyl)thio]succinate Chemical compound CCOC(=O)CC(SP(=S)(OC)OC)C(=O)OCC JXSJBGJIGXNWCI-UHFFFAOYSA-N 0.000 description 5
- 238000010606 normalization Methods 0.000 description 4
- 230000004931 aggregating effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 230000004913 activation Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000012512 characterization method Methods 0.000 description 2
- 238000013527 convolutional neural network Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000003058 natural language processing Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000009472 formulation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 238000000844 transformation Methods 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/70—Software maintenance or management
- G06F8/72—Code refactoring
-
- 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/433—Dependency analysis; Data or control flow analysis
-
- 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
-
- 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)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Machine Translation (AREA)
Abstract
本公开提供了一种代码摘要自动生成方法及系统,获取待处理的代码;对获取的代码进行预处理,得到抽象语法树聚合向量和API调用依赖关系图聚合向量;将抽象语法树聚合向量和API调用依赖关系图聚合向量集成到单个表示中,生成多视角融合向量;将多视角融合向量输入到预设神经网络模型中,得到代码对应的自然语言摘要;本公开充分提取了代码语义信息与语法信息,对代码的语义结构信息进行创新性表达,通过分析代码的API调用依赖关系对代码语义结构进行图表示,增强了代码语义结构表达能力。
Description
技术领域
本公开涉及代码摘要生成技术领域,特别涉及一种代码摘要自动生成方法及系统。
背景技术
本部分的陈述仅仅是提供了与本公开相关的背景技术,并不必然构成现有技术。
与自然语言不同,代码本身不易理解且具有较强的抽象性。大多数程序开发者会面临语义鸿沟现象,如何分析代码本身的规律,突破语义鸿沟问题以帮助程序开发者理解代码已成为现代软件工程的热点问题。在此基础上,代码摘要自动生成应运而生。
代码摘要自动生成旨在为代码片段生成相应的自然语言摘要。代码是一种结构化语言,具有特殊的语义与语法结构。因此,大多数代码摘要自动生成方法的研究角度是对语义与语法结构进行分析,以建立与自然语言结构的联系。伴随着人工智能与深度学习的兴起,对程序结构进行图嵌入技术处理并采用自动化训练的方式可生成优秀的自然语言摘要。
然而,发明人发现,代码是语义与语法的混合结构,现有大多数代码摘要自动生成方法只对单一程序结构进行处理,造成程序结构探索不够全面;此外,对代码语义结构的表达也不够深入,难以体现代码方法之间的调用依赖关系。
发明内容
为了解决现有技术的不足,本公开提供了一种代码摘要自动生成方法及系统,对代码的语义结构信息进行创新性表达,通过分析代码的API调用依赖关系对代码语义结构进行图表示,增强了代码语义结构表达能力。
为了实现上述目的,本公开采用如下技术方案:
本公开第一方面提供了一种代码摘要自动生成方法。
一种代码摘要自动生成方法,包括以下过程:
获取待处理的代码;
对获取的代码进行预处理,得到抽象语法树聚合向量和API调用依赖关系图聚合向量;
将抽象语法树聚合向量和API调用依赖关系图聚合向量集成到单个表示中,生成多视角融合向量;
将多视角融合向量输入到预设神经网络模型中,得到代码对应的自然语言摘要。
进一步的,提取代码的语法信息,生成相应的抽象语法树;
对抽象语法树进行深度优先遍历,遍历并保存每个节点的信息以及与边的关系;
将抽象语法树中每个节点进行初始化特征表示,得到每个节点的初始化节点向量,将抽象语法树的每个节点的初始化节点向量合并,形成抽象语法树初始化向量矩阵;
根据抽象语法树的初始化向量矩阵、邻接矩阵和度矩阵,结合图卷积网络,得到抽象语法树聚合向量矩阵。
进一步的,提取代码的语法信息,生成相应的抽象语法树,提取代码中定义的函数,识别函数调用关系,得到结点信息、边的关系和标签,进而得到API调用依赖关系图;
将得到的API调用依赖关系图进行初始化特征表示;
将每个节点表示合并为API调用依赖关系图初始化向量矩阵;
根据API调用依赖关系图初始化向量矩阵、邻接矩阵和度矩阵,结合图卷积网络,得到API调用依赖关系图聚合向量。
更进一步的,利用图卷积网络聚合策略时采用权重匹配策略,对向量矩阵施加权重并改变维度,再对抽象语法树聚合向量和API调用依赖关系图聚合向量进行级联,得到多视角融合向量。
进一步的,预设神经网络模型包括编码器和解码器,编码器和解码器均由Block组成,每个Block包括多头注意力机制、全连接层以及残差网络;
预设神经网络模型的训练时,编码器以训练用代码的多视角融合向量为输入,以过程向量为输出;解码器以过程向量以及训练用代码对应的自然语言摘要向量表示为输入,以预测概率为输出,当预测概率收敛到预设值时,训练完成。
更进一步的,在输入编码器之前,对多视角融合向量进行位置编码,加入相对位置信息。
更进一步的,残差网络将多视角融合向量和多头注意力机制的输出进行连接。
更进一步的,将自然语言摘要转化为自然语言摘要向量表示,包括以下过程:
将目标自然语言摘要按照词汇数进行位置标记;
将目标自然语言摘要每个词汇进行one-hot向量编码;
使用特征矩阵对自然语言摘要进行特征表示,得到特征矩阵;
使用每个词汇的one-hot向量与特征矩阵进行点乘,得到每个词汇的初始化节点向量。
本公开第二方面提供了一种代码摘要自动生成系统。
一种代码摘要自动生成系统,包括:
数据获取模块,被配置为:获取待处理的代码;
数据处理模块,被配置为:对获取的代码进行预处理,得到抽象语法树聚合向量和API调用依赖关系图聚合向量;
向量融合模块,被配置为:将抽象语法树聚合向量和API调用依赖关系图聚合向量集成到单个表示中,生成多视角融合向量;
摘要生成模块,被配置为:将多视角融合向量输入到预设神经网络模型中,得到代码对应的自然语言摘要。
本公开第三方面提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开第一方面所述的代码摘要自动生成方法中的步骤。
本公开第四方面提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开第一方面所述的代码摘要自动生成方法中的步骤。
与现有技术相比,本公开的有益效果是:
1、本公开所述的代码摘要生成方法、系统、介质或电子设备,对代码的语义结构信息进行创新性表达,通过分析代码的API调用依赖关系对代码语义结构进行图表示,增强了代码语义结构表达能力。
2、本公开所述的代码摘要生成方法、系统、介质或电子设备,将码片段的语法与语义结构信息进行融合,对代码结构的探索更加全面,经过语法与语义结构融合后所生成的自然语言摘要鲁棒性更好。
3、本公开所述的代码摘要生成方法、系统、介质或电子设备,利用图卷积神经网络(GCN)对AST和ADG进行卷积操作,通过GCN强大的聚合能力使生成的聚合向量包含更多结构信息,从而使生成的自然语言摘要更直观地反应代码功能。
4、本公开所述的代码摘要生成方法、系统、介质或电子设备,通过大量数据进行学习训练,可以生成高质量的自然语言摘要,可充分表达代码含义,提高了程序工作者程序理解效率,降低代码维护代价,具有非常高的应用价值。
本公开附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本公开的实践了解到。
附图说明
构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
图1为本公开实施例1提供的代码摘要生成方法的神经网络模型训练方法的总示意图。
图2为本公开实施例1提供的抽象语法树(AST)生成示意图。
图3为本公开实施例1提供的API调用依赖关系图(ADG)生成示意图。
图4为本公开实施例1提供的AST聚合向量生成示意图。
图5为本公开实施例1提供的ADG聚合向量生成示意图。
图6为本公开实施例1提供的多视角融合向量生成示意图。
图7为本公开实施例1提供的Transformer结构示意图。
具体实施方式
下面结合附图与实施例对本公开作进一步说明。
应该指出,以下详细说明都是示例性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
实施例1:
本公开实施例1提供了一种代码摘要自动生成方法,包括以下过程:
获取待处理的代码;
对获取的代码进行预处理,得到抽象语法树聚合向量和API调用依赖关系图聚合向量;
将抽象语法树聚合向量和API调用依赖关系图聚合向量集成到单个表示中,生成多视角融合向量;
将多视角融合向量输入到预设神经网络模型中,得到代码对应的自然语言摘要。
具体的,预设神经网络模型的训练过程,如图1所示,包括以下内容:
S1:从Github上获取源代码数据集,该数据集格式为:代码-自然语言摘要。
S2:读取数据集中的代码片段,利用Javaparser提取代码片段的语法信息,生成相应的抽象语法树(AST),对该抽象语法树(AST)进行初始化向量编码。最后借助图卷积神经网络(GCN)聚合AST节点向量信息,生成AST聚合向量。
S3:读取与S2相同代码片段,首先使用Javaparser工具将程序解析为AST,然后提取程序中定义的函数,借助Javaparser.symbolsolver工具识别函数调用关系,建立边的关系,并记录结点信息,边的关系和标签,得到API调用依赖关系图(ADG)。
随后对该ADG进行初始化向量编码,借助图卷积神经网络(GCN)聚合ADG节点向量信息,生成ADG聚合向量。
S4:将步骤S2与S3生成的AST聚合向量和ADG聚合向量集成到单个表示中,生成多视角融合向量。
S5:将S4生成的多视角融合向量输入到Transformer中,建立端到端的神经网络模型。
本实施例中,利用Flair工具对抽象语法树(AST)和API调用依赖关系图进行初始化特征表示,每个节点表示为一个向量,Flair是一个功能强大的自然语言处理(NLP)框架,它直接在Pytorch下构建,可应用于嵌入任务。
对目标自然语言摘要进行one-hot向量编码,即对自然语言摘要的词汇位置进行标记,例如对第i个词汇进行向量表示,则把第一个位置标记为1,其余位置标记为0,向量维度为目标自然语言摘要词汇数。另外,对目标自然语言摘要进行特征矩阵表示,例如对每个词汇分配p个特征,词汇数为m,则可形成p×m形状的特征矩阵,将每个词汇的one-hot表示与特征矩阵进行点乘,得到最终的自然语言摘要向量表示。
Transformer分为编码器和解码器两个部分,每部分由Block组成,每个Block包括多头注意力机制,全连接层以及残差网络,在本实施例中,编码器的输入为多视角融合向量,输出为过程向量。解码器的输入为过程向量以及对应的自然语言摘要的向量表示序列,输出为预测概率。
需要注意的是,本实施例针对Java语言进行代码自动摘要任务,理论上可扩展到其他编程语言。
对目标代码片段构建AST聚合向量可分成两个部分:代码语法结构建模与AST节点信息聚合,代码语法结构建模部分的目的是挖掘目标代码语法信息,构建AST并进行建模,AST节点信息聚合部分的目的是利用图嵌入技术将AST中的节点信息进行聚合,最后通过全连接层进行输出。
具体而言,代码语法结构建模部分可对代码片段的语法结构进行深入地表示,从而提高代码摘要模型的有效性。为此,本实施例使用抽象语法树(AST)来表达代码片段的语法关系,图2展示了代码数据集中一个简单的代码片段和其对应的抽象语法树(AST),过程如下:
步骤(1):对代码进行语法信息提取,生成抽象语法树(AST),步骤如下:
步骤(1-1):利用Eclipse中的JDT编译器对代码进行词法分析和语法分析。
步骤(1-2):使用Javaparser提取代码片段的语法信息,生成相应的抽象语法树(AST)。
步骤(1-3):对AST进行深度优先遍历,将遍历每个结点的信息以及与边的关系保存下来。
步骤(2):为对AST进行初始化特征表示,步骤如下:
步骤(2-1):借助Flair文本处理库将AST中每个节点进行初始化特征表示,例如AST树节点个数R,使用Flair工具对AST节点进行特征表示,将每个节点进行768维度的特征表示,得到每个节点的初始化节点向量,表示为Hi (0)。
具体来说,所述AST节点信息聚合部分将AST输入至图卷积神经网络(GCN)进行节点聚合操作。如图4所示,通过GCN对AST进行聚合可以更多的保留代码片段语法信息,将AST的邻接矩阵表示为A(R*R),AST的度矩阵DR*R输入到图卷积网络中进行节点信息的聚合,公式表达为:
其中,H(l)代表第l层节点聚合向量矩阵,记为A~是抽象语法树(AST)的邻接矩阵加上单位矩阵E,即:A~=A+E,H(0)是抽象语法树(AST)初始嵌入矩阵,W(l)是权重参数,δ表示激活函数,D~是A~的度矩阵。
对目标代码片段构建ADG聚合向量可分成两个部分:代码语义结构建模与ADG节点信息聚合,代码语义结构建模部分的目的是挖掘目标代码语义信息,构建ADG并进行建模,ADG节点信息聚合部分的目的是利用图嵌入技术将ADG中的节点信息进行聚合,最后通过全连接层进行输出。
具体来说,代码语义结构建模部分通过表示代码之间的调用依赖关系,对于代码的语义结构具有极强的反映,图3展示了代码数据集中一个简单的代码片段和其对应的API调用依赖关系图(ADG),过程如下:
步骤(1):获取目标代码片段的API调用依赖关系图(ADG),步骤如下:
步骤(1-1):使用Javaparser工具将程序解析为AST,然后提取程序中定义的函数。
步骤(1-2):借助Javaparser.symbolsolver工具识别函数调用关系,建立边的关系,并记录结点信息,边的关系和标签。
步骤(1-3):原代码数据集中每个被调用的方法对应ADG中一个节点,节点之间有边的条件为:假设数据集中存在两个被调用的方法M和N,对应ADG中两个节点,如果M方法中存在某个参数可以由N方法提供,则可形成M指向N的一条边,即说明这两个方法存在依赖关系。
步骤(2):为对ADG进行初始化特征表示,步骤如下:
步骤(2-1):将得到ADG利用Flair文本处理库进行初始化特征表示。将ADG每个节点进行768维度的特征表示(Sn (0))。
步骤(2-2):将每个节点表示合并为ADG初始化向量矩阵:
具体而言,ADG节点信息聚合部分是对代码片段语义结构进行向量化嵌入,与AST节点信息聚合部分类似,对ADG应用GCN聚合算法,如图5所示,将ADG的邻接矩阵表示为A(V*V),ADG的度矩阵D(V*V)输入到图卷积网络中进行节点信息的聚合,公式表达为:
其中,S(l)代表第l层节点聚合向量矩阵,记为A~是API调用依赖关系图(ADG)的邻接矩阵A加上单位矩阵E,即:A~=A+E,S(0)是API调用依赖关系图(ADG)初始嵌入矩阵,W(l)是权重参数,δ表示激活函数,D~代表A~的度矩阵。
为对代码片段结构信息进行深入探索融合,需要将与语法与语义结构进行向量融合输出,如图6所示。因此,本实施例将AST聚合向量与ADG聚合向量集成到单个表示中,最终多视角融合向量x。值得一提的是,为方便集成,利用GCN聚合策略时采用权重匹配策略,即对向量矩阵施加权重改变维度,使AST聚合向量和ADG聚合向量方便进行级联,得到多视角融合向量,公式表达如下:
x=w[H(l+1);S(l+1)] (3)
所述Transformer输入为多视角融合向量x以及喜迎自然语言摘要向量表示。具体来说,将多视角融合向量输入到编码器中,通过注意力机制进行权重分配,随后进入解码器中与目标自然语言摘要一同训练,最终得到端到端的神经网络模型,如图7所示,具体描述如下:
步骤(1):将目标自然语言摘要转化为二进制向量表示序列{V1,V2,...,Vm},过程如下:
步骤(1-1):将目标自然语言摘要按照词汇数进行位置标记,例如有m个词汇,则有m个位置。
步骤(1-2):对目标自然语言摘要进行one-hot向量表示,例如要表示第i个词汇,则把第i个位置记为1,其余位置记为0,即{0,0,...,1,...,0},向量维度为1×m。
步骤(1-3):将目标自然语言摘要每个词汇按照步骤(1-2)进行one-hot向量编码。
步骤(1-4):使用特征矩阵对目标自然语言摘要进行特征表示,将每个词汇进行P个特征表示,构建m×p维数的特征矩阵。
步骤(1-5):使用每个词汇one-hot向量与特征矩阵进行点乘,得到每个词汇的初始化节点向量,表示为Vi。
步骤(2):将多视角融合向量输入Transformer的编码器端,编码器由N个Block组成,每个Block可细分为多头注意力机制(multi-head self-attention)和全连接网络(fully connected feed-forward network);此外,编码器端还包含多个残差连接(residual connection)和归一化(normalisation),详细步骤如下:
步骤(2-1):在输入编码器之前,Transformer会首先对多视角融合向量x进行位置编码,使其加入相对位置信息,公式表达如下:
其中,pos是位置索引,即如果x长度为L,则pos=0,1,2,...,L-1;i是某一向量的维度,即若dmodel=512,则i=0,1,...,255。
步骤(2-2):多视角融合向量x将被输入每个Block块,首先进入多头注意力机制。多头注意力机制包含多个自注意力层(self-Attention),每个自注意力层的表达方式如下:
步骤(2-3):多头注意力机制由多个自注意力层拼接而成,公式化表达如下:
MultiHead(Q,K,V)=Concat(head1,…,headh)Wo (7)
步骤(2-4):经多头注意力机制输出后的向量进入全连接层,表达如下:
FFN(x)=max(0,xW1+b1)W2+b2 (9)
步骤(2-5):残差连接(residual connection)将x和多头注意力机制的输出进行连接以解决多层网络训练的问题,归一化(normalisation)将每一层神经元的输入进行均值方差化以加快收敛,公式化表达如下:
LayerNorm=(x+MultiHeadAttention(x)) (10)
LayerNorm=(x+FeedForward(x)) (11)
步骤(3):将目标自然语言编码x和编码器的输出向量输入到解码器端进行训练,输出为对应i位置的输出词的概率分布,解码器端的构造与编码器端的构造一致。其中,注意力机制的Q来自上一位置的输出线性变换,K和V为来自编码器的输出向量的线性变换。
实施例2:
本公开实施例2提供了一种代码摘要自动生成系统,包括:
数据获取模块,被配置为:获取待处理的代码;
数据处理模块,被配置为:对获取的代码进行预处理,得到抽象语法树聚合向量和API调用依赖关系图聚合向量;
向量融合模块,被配置为:将抽象语法树聚合向量和API调用依赖关系图聚合向量集成到单个表示中,生成多视角融合向量;
摘要生成模块,被配置为:将多视角融合向量输入到预设神经网络模型中,得到代码对应的自然语言摘要。
所述系统的工作方法与实施例1提供的一种代码摘要自动生成方法相同,这里不再赘述。
实施例3:
本公开实施例3提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开实施例1所述的代码摘要自动生成方法中的步骤。
实施例4:
本公开实施例4提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开实施例1所述的代码摘要自动生成方法中的步骤。
本领域内的技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (10)
1.一种代码摘要自动生成方法,其特征在于:包括以下过程:
获取待处理的代码;
对获取的代码进行预处理,得到抽象语法树聚合向量和API调用依赖关系图聚合向量;
将抽象语法树聚合向量和API调用依赖关系图聚合向量集成到单个表示中,生成多视角融合向量;
将多视角融合向量输入到预设神经网络模型中,得到代码对应的自然语言摘要。
2.如权利要求1所述的代码摘要自动生成方法,其特征在于:
提取代码的语法信息,生成相应的抽象语法树;
对抽象语法树进行深度优先遍历,遍历并保存每个节点的信息以及与边的关系;
将抽象语法树中每个节点进行初始化特征表示,得到每个节点的初始化节点向量,将抽象语法树的每个节点的初始化节点向量合并,形成抽象语法树初始化向量矩阵;
根据抽象语法树的初始化向量矩阵、邻接矩阵和度矩阵,结合图卷积网络,得到抽象语法树聚合向量矩阵。
3.如权利要求1所述的代码摘要自动生成方法,其特征在于:
提取代码的语法信息,生成相应的抽象语法树,提取代码中定义的函数,识别函数调用关系,得到结点信息、边的关系和标签,进而得到API调用依赖关系图;
将得到的API调用依赖关系图进行初始化特征表示;
将每个节点表示合并为API调用依赖关系图初始化向量矩阵;
根据API调用依赖关系图初始化向量矩阵、邻接矩阵和度矩阵,结合图卷积网络,得到API调用依赖关系图聚合向量。
4.如权利要求2或3所述的代码摘要自动生成方法,其特征在于:
利用图卷积网络聚合策略时采用权重匹配策略,对向量矩阵施加权重并改变维度,再对抽象语法树聚合向量和API调用依赖关系图聚合向量进行级联,得到多视角融合向量。
5.如权利要求1所述的代码摘要自动生成方法,其特征在于:
预设神经网络模型包括编码器和解码器,编码器和解码器均由Block组成,每个Block包括多头注意力机制、全连接层以及残差网络;
预设神经网络模型的训练时,编码器以训练用代码的多视角融合向量为输入,以过程向量为输出;解码器以过程向量以及训练用代码对应的自然语言摘要向量表示为输入,以预测概率为输出,当预测概率收敛到预设值时,训练完成。
6.如权利要求5所述的代码摘要自动生成方法,其特征在于:
在输入编码器之前,对多视角融合向量进行位置编码,加入相对位置信息;
或者,
残差网络将多视角融合向量和多头注意力机制的输出进行连接。
7.如权利要求5所述的代码摘要自动生成方法,其特征在于:
将自然语言摘要转化为自然语言摘要向量表示,包括以下过程:
将目标自然语言摘要按照词汇数进行位置标记;
将目标自然语言摘要每个词汇进行one-hot向量编码;
使用特征矩阵对自然语言摘要进行特征表示,得到特征矩阵;
使用每个词汇的one-hot向量与特征矩阵进行点乘,得到每个词汇的初始化节点向量。
8.一种代码摘要自动生成系统,其特征在于:包括:
数据获取模块,被配置为:获取待处理的代码;
数据处理模块,被配置为:对获取的代码进行预处理,得到抽象语法树聚合向量和API调用依赖关系图聚合向量;
向量融合模块,被配置为:将抽象语法树聚合向量和API调用依赖关系图聚合向量集成到单个表示中,生成多视角融合向量;
摘要生成模块,被配置为:将多视角融合向量输入到预设神经网络模型中,得到代码对应的自然语言摘要。
9.一种计算机可读存储介质,其上存储有程序,其特征在于,该程序被处理器执行时实现如权利要求1-7任一项所述的代码摘要自动生成方法中的步骤。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7任一项所述的代码摘要自动生成方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110327114.7A CN113064633A (zh) | 2021-03-26 | 2021-03-26 | 一种代码摘要自动生成方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110327114.7A CN113064633A (zh) | 2021-03-26 | 2021-03-26 | 一种代码摘要自动生成方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113064633A true CN113064633A (zh) | 2021-07-02 |
Family
ID=76563848
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110327114.7A Pending CN113064633A (zh) | 2021-03-26 | 2021-03-26 | 一种代码摘要自动生成方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113064633A (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104750484A (zh) * | 2015-03-23 | 2015-07-01 | 福建工程学院 | 一种基于最大熵模型的代码摘要生成方法 |
CN107169358A (zh) * | 2017-05-24 | 2017-09-15 | 中国人民解放军信息工程大学 | 基于代码指纹的代码同源性检测方法及其装置 |
CN108459874A (zh) * | 2018-03-05 | 2018-08-28 | 中国人民解放军国防科技大学 | 融合深度学习和自然语言处理的代码自动化摘要方法 |
CN109783079A (zh) * | 2018-12-21 | 2019-05-21 | 南京航空航天大学 | 一种基于程序分析和循环神经网络的代码注释生成方法 |
GB201917161D0 (en) * | 2019-08-23 | 2020-01-08 | Praetorian | System and method for automatically detecting a security vulnerability in a source code using a machine learning model |
CN110673840A (zh) * | 2019-09-23 | 2020-01-10 | 山东师范大学 | 一种基于标签图嵌入技术的自动代码生成方法及系统 |
CN111488137A (zh) * | 2020-04-07 | 2020-08-04 | 重庆大学 | 一种基于共同注意力表征学习的代码搜索方法 |
CN111625276A (zh) * | 2020-05-09 | 2020-09-04 | 山东师范大学 | 基于语义与语法信息融合的代码摘要生成方法及系统 |
CN111651198A (zh) * | 2020-04-20 | 2020-09-11 | 北京大学 | 代码摘要自动化生成方法及装置 |
CN111797242A (zh) * | 2020-06-29 | 2020-10-20 | 哈尔滨工业大学 | 一种基于代码知识图谱和知识迁移的代码摘要生成方法 |
-
2021
- 2021-03-26 CN CN202110327114.7A patent/CN113064633A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104750484A (zh) * | 2015-03-23 | 2015-07-01 | 福建工程学院 | 一种基于最大熵模型的代码摘要生成方法 |
CN107169358A (zh) * | 2017-05-24 | 2017-09-15 | 中国人民解放军信息工程大学 | 基于代码指纹的代码同源性检测方法及其装置 |
CN108459874A (zh) * | 2018-03-05 | 2018-08-28 | 中国人民解放军国防科技大学 | 融合深度学习和自然语言处理的代码自动化摘要方法 |
CN109783079A (zh) * | 2018-12-21 | 2019-05-21 | 南京航空航天大学 | 一种基于程序分析和循环神经网络的代码注释生成方法 |
GB201917161D0 (en) * | 2019-08-23 | 2020-01-08 | Praetorian | System and method for automatically detecting a security vulnerability in a source code using a machine learning model |
CN110673840A (zh) * | 2019-09-23 | 2020-01-10 | 山东师范大学 | 一种基于标签图嵌入技术的自动代码生成方法及系统 |
CN111488137A (zh) * | 2020-04-07 | 2020-08-04 | 重庆大学 | 一种基于共同注意力表征学习的代码搜索方法 |
CN111651198A (zh) * | 2020-04-20 | 2020-09-11 | 北京大学 | 代码摘要自动化生成方法及装置 |
CN111625276A (zh) * | 2020-05-09 | 2020-09-04 | 山东师范大学 | 基于语义与语法信息融合的代码摘要生成方法及系统 |
CN111797242A (zh) * | 2020-06-29 | 2020-10-20 | 哈尔滨工业大学 | 一种基于代码知识图谱和知识迁移的代码摘要生成方法 |
Non-Patent Citations (3)
Title |
---|
XUEJIAN GAO等: "A Multi-Module Based Method for Generating Natural Language Descriptions of Code Fragments", IEEE ACCESS, 25 February 2021 (2021-02-25), pages 21579 - 21590 * |
张海杰: "基于多重构件的程序摘要自动生成方法研究", CNKI优秀硕士学位论文全文库 信息科技辑, no. 09, 15 September 2019 (2019-09-15), pages 17 - 37 * |
韩承锋等: "适用于分布式静态检测的 Java 代码依赖性 分析技术", 计算机系统应用, vol. 28, no. 3, 15 March 2019 (2019-03-15), pages 133 - 139 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
CN110018820B (zh) | 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法 | |
CN107632981B (zh) | 一种引入源语组块信息编码的神经机器翻译方法 | |
CN109492113B (zh) | 一种面向软件缺陷知识的实体、关系联合抽取方法 | |
CN113064586B (zh) | 一种基于抽象语法树增广图模型的代码补全方法 | |
US8849673B2 (en) | Rule generation | |
CN109491658A (zh) | 计算机可执行代码数据的生成方法及装置 | |
CN106843849B (zh) | 一种基于文档的库函数的代码模型的自动合成方法 | |
CN112764738A (zh) | 基于多视图程序特征的代码自动生成方法及系统 | |
CN114201406B (zh) | 基于开源组件的代码检测方法、系统、设备及存储介质 | |
CN113591093B (zh) | 基于自注意力机制的工业软件漏洞检测方法 | |
CN113505583B (zh) | 基于语义决策图神经网络的情感原因子句对提取方法 | |
CN115048141A (zh) | 一种基于图引导的Transformer模型代码注释自动生成方法 | |
CN116403253A (zh) | 基于卷积神经网络的人脸识别监控管理系统及其方法 | |
Liu et al. | Transforming entity-relationship diagrams to relational schemas using a graph grammar formalism | |
CN115543437A (zh) | 一种代码注释生成方法和系统 | |
CN113807079B (zh) | 一种基于序列到序列的端到端实体和关系联合抽取方法 | |
CN113064633A (zh) | 一种代码摘要自动生成方法及系统 | |
CN110286891A (zh) | 一种基于代码属性张量的程序源代码编码方法 | |
Butting et al. | Language engineering for heterogeneous collaborative embedded systems | |
KR20230065017A (ko) | 인공지능 분석 기반 프로그램 소스코드의 요약문 생성 장치 및 방법 | |
CN116628695A (zh) | 基于多任务学习的漏洞挖掘方法及装置 | |
CN111562943A (zh) | 一种基于事件嵌入树及gat网络的代码克隆检测方法和装置 | |
CN117573084B (zh) | 一种基于逐层融合抽象语法树的代码补全方法 | |
KR102066022B1 (ko) | 실행 코드 상의 함수 시그니처 생성 장치 및 방법 |
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 |