CN117573084A - 一种基于逐层融合抽象语法树的代码补全方法 - Google Patents
一种基于逐层融合抽象语法树的代码补全方法 Download PDFInfo
- Publication number
- CN117573084A CN117573084A CN202310959780.1A CN202310959780A CN117573084A CN 117573084 A CN117573084 A CN 117573084A CN 202310959780 A CN202310959780 A CN 202310959780A CN 117573084 A CN117573084 A CN 117573084A
- Authority
- CN
- China
- Prior art keywords
- code
- ast
- complement
- model
- layer
- 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.)
- Granted
Links
- 230000000295 complement effect Effects 0.000 title claims abstract description 118
- 238000000034 method Methods 0.000 title claims abstract description 73
- 230000004927 fusion Effects 0.000 title claims abstract description 39
- 239000013598 vector Substances 0.000 claims abstract description 124
- 238000012549 training Methods 0.000 claims abstract description 34
- 238000012795 verification Methods 0.000 claims abstract description 12
- 238000007781 pre-processing Methods 0.000 claims abstract description 10
- 230000006870 function Effects 0.000 claims description 62
- 238000012360 testing method Methods 0.000 claims description 18
- 239000011159 matrix material Substances 0.000 claims description 13
- 238000000605 extraction Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 claims description 11
- 238000010276 construction Methods 0.000 claims description 10
- 230000007246 mechanism Effects 0.000 claims description 10
- 238000004364 calculation method Methods 0.000 claims description 9
- 238000012545 processing Methods 0.000 claims description 9
- 239000000284 extract Substances 0.000 claims description 8
- 238000011156 evaluation Methods 0.000 claims description 6
- 238000010801 machine learning Methods 0.000 claims description 6
- 238000013527 convolutional neural network Methods 0.000 claims description 5
- 230000003190 augmentative effect Effects 0.000 claims description 4
- 230000009466 transformation Effects 0.000 claims description 4
- 238000013507 mapping Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 11
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000007499 fusion processing Methods 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000003058 natural language processing Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000000547 structure data 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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- 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
-
- 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/0464—Convolutional networks [CNN, ConvNet]
-
- 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)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公布了一种基于逐层融合抽象语法树的代码补全方法,具体实现步骤如下:(1)对数据集中的每一份待补全源程序进行预处理:将待补全源程序解析为对应的抽象语法树、控制流程图、数据流程图和函数调用图,并将经过预处理后的数据集进行划分。(2)搭建一个基于逐层融合抽象语法树的代码补全模型:逐步构建语句级抽象语法树、增强语句级抽象语法树和信息增强函数调用图,使用图注意力网络提取信息增强函数调用图的信息,得到对应的特征向量,根据该特征向量生成补全代码。(3)设置模型的所有初始参数和超参数,将训练集和验证集加载至该模型中进行训练,训练结束后得到对于该模型最优的参数。(4)运用该模型进行代码补全。
Description
技术领域
本发明属于软件程序设计领域,更进一步涉及结合人工智能自然语言处理技术进行代码补全。本发明可用于对待补全源程序空缺的部分进行补全。
背景技术
代码补全是指基于上下文中的现有代码,预测接下来要输入的类名、方法名和关键字等代码片段。代码补全是程序开发自动化的重要功能之一,是大多数现代集成开发环境和源代码编辑器的重要组件。随着软件规模和复杂性的提高,对程序编写准确性和效率的要求也日益提升,如何基于现有的代码做出更加准确的预测已经成为了软件工程的领域的热门方向之一。
将待补全源程序表示为序列,是代码补全中的一种常用的方法,然而这种方法会导致代码的层次结构信息的丢失,进而导致无法产生语法正确的补全代码。而使用抽象语法树(Abstract Syntax Tree,AST)来表示待补全源程序,能够保持更丰富的代码层次结构。
公开号为CN114924741A的中文专利文献公开了一种基于结构特征和序列特征的代码补全方法。该方法将源代码转换为抽象语法树,采用字节对编码方式建立对应词表。代码转换部分使用扩展的注意力机制抽取代码的结构特征和序列特征。最后采用Transfomer解码器作为基本网络模型,扩展注意力机制,经过softmax层计算概率,并输出结果。通过从代码的两个维度上考虑了代码的语义信息,使得代码补全的准确度提高,帮助用户得到更为准确的候选。
公开号为CN115167863A的中文专利文献公开了一种基于代码序列和代码图融合的代码补全方法。该方法使用特殊字符串代替需要补全的代码片段待补全位置,将原始代码数据集中的代码片段分别转换为代码序列和代码图,并分别作为所述序列编码器和图编码器的输入,将目标代码作为所述解码器的输入。当解码结束时,获取代码补全的结果。
公开号为CN114296787A的中文专利文献公开了一种基于图神经网络的智能合约代码补全方法。该方法根据智能合约源代码的版本号构建多个智能合约源代码数据集,将各数据集中的各智能合约源代码解析成对应的抽象语法树,将抽象语法树中的结点作为代码表示图的结点,根据智能合约源代码的语义信息在代码表示图中添加多种类型的语义边,筛选出符合业界安全实践的代码片段,在代码表示图中为代码片段中的结点间添加特征边。代码表示图嵌入到训练好的门控图神经网络中,进行代码补全预测。
发明内容
本发明的目的是针对上述背景技术中存在的问题:①只关注AST结构信息,而忽略了其他语义信息。②对层次结构信息的提取不足。③功能相同而AST结构不同的代码片段带来的模型泛化能力不足,提出一种基于逐层融合抽象语法树的代码补全方法。
本发明还提供了一种基于逐层融合抽象语法树的代码补全装置,将待补全代码输入到该系统后,该系统即可借助补全模型预测并输出代码补全的结果,可用于辅助代码的编写。
术语解释:
待补全源程序:需要进行代码补全的源程序。
补全代码:由代码补全模型生成的代码,用于插入至待补全源程序中需要进行代码补全的位置。
控制流程图(Control Flow Graph,CFG):是一个过程或程序的抽象表现,使用图的形式表示一个过程内所有基本块执行的可能流向,包含了源程序的控制流信息。
控制流边:根据CFG中表示的控制流关系,在S-AST上添加的一种边,包含了待补全源程序的控制流信息。
数据流图(Data Flow Graph,DFG):一种反映程序执行时各种数据信息在程序中的流动、处理和存储情况的图,包含了源程序的数据流信息。
数据流边:根据DFG中表示的数据流关系,在S-AST上添加的一种边,包含了待补全源程序的数据流信息。
函数调用图(Call Graph,CG):是源程序中函数之间调用关系的图形化表示,包含了源程序的函数调用信息。在CG中,结点表示函数,边表示调用关系。
图注意力网络(Graph attention networks,GAT):一种基于注意力的体系结构来执行图结构数据结点分类的网络,利用隐藏的自我注意层(self-attention layer)来解决基于图卷积或其近似方法的不足。
基于树的卷积神经网络(Tree-Based Convolutional Neural Network,TBCNN):一种基于AST的卷积神经网络,该卷积神经网络设计了卷积核用于捕获AST的结构信息。
异构图:包含多种类型结点或边的图。
异构图变换模型(Heterogeneous Graph Transformer,HGT):一种用于处理异构图数据和动态异构图数据的变换模型。该变换模型引入了与节点和边类型相关的注意力机制来为不同类型的结点和边生成专用的表示;另外还引入了相对时间编码机制来捕获任意时间段内的动态结构依赖关系。
子树根结点类型集合:待补全源程序的每一条语句在AST中都对应一棵子树,所有子树的根结点类型构成一个子树根结点类型集合。
子树集合:待补全源程序的每一条语句在AST中都对应一棵子树,所有子树构成一个子树集合。
占位结点:一个代表某棵子树的符号,各棵子树对应的占位结点均不相同。
语句级抽象语法树(Sentence-Abstract Syntax Tree,S-AST):一种对待补全源程序的每一条语句对应AST的子树进行融合后得到的树形数据结构,包含了待补全源程序的层次结构信息。
BERT模型(Bidirectional Encoder Representations from Transformers):是一种面向自然语言处理的无监督预训练语言模型(pre-trained language model,PLM)。
路径集合:由S-AST中所有从根结点到终端结点的路径构成的集合。
路径向量集合:将路径集合中所有路径编码为向量得到的集合。
源结点:若结点a和结点b之间存在一条有向边,且该有向边是从a指向b,则称结点a为源结点。
路径相似边:在最相似的两条路径向量对应的两个终端结点之间添加的边。
语义信息:本发明涉及的语义信息包括控制流信息、数据流信息、语义相似信息和函数调用信息。
语义相似信息:代表路径相似边两端的结点对应的路径语义是相似的。
增强语句级抽象语法树(Augmented Sentence-Abstract Syntax Tree,AS-AST):一种在S-AST上添加控制流边、数据流边和路径相似边后得到的树形数据结构。AS-AST不仅包含S-AST中的层次结构信息,还包含了控制流信息、数据流信息和语义相似信息。
信息增强函数调用图(Information Augmented Call Graph,IA-CG):一种根据AS-AST和CG构建而成的图,包含了语义信息和层次结构信息。相比于AS-AST,IA-CG包含了更深的层次结构信息,IA-CG包含了CG中的函数调用信息,使得其包含的语义信息更加丰富。
实现本发明目的的思路是,首先对数据集中每一份待补全源程序进行预处理:解析待补全源程序,生成与待补全源程序对应的AST、CFG、DFG和CG,并将预处理后的数据集进行划分;其次搭建一个基于逐层融合抽象语法树的代码补全模型:根据AST构建S-AST,根据CFG和DFG,对S-AST进行语义信息增强得到AS-AST,根据AS-AST和CG构建IA-CG,并使用GAT提取IA-CG特征,根据IA-CG特征提取后得到的特征向量,生成补全代码;然后设置模型所有的初始参数以及超参数,将训练集和验证集加载至该模型中进行训练,得到对于该模型最优的参数;最后将该模型应用于代码补全任务中。实现流程如图1所示,模型框架如图2所示。
S100:对数据集中的每一份待补全源程序进行预处理:对待补全源程序进行解析,生成与待补全源程序对应的AST、CFG、DFG和CG;将经过预处理后的数据集划分为训练集、验证集和测试集。
S200:搭建一个基于逐层融合抽象语法树的代码补全模型:首先根据AST构建S-AST,接着根据CFG和DFG,对S-AST进行语义信息增强得到AS-AST,然后根据AS-AST和CG构建IA-CG,使用GAT提取IA-CG包含的层次结构信息和语义信息,其中语义信息包括AS-AST中含有的语义相似信息、控制流信息、数据流信息和CG中含有的函数调用信息;最后根据IA-CG特征提取后得到的特征向量,生成补全代码。
S300:设置基于逐层融合抽象语法树的代码补全模型的所有初始参数,设置词向量的维度、批处理的大小、学习率的大小、优化器的选择等与该模型相关的超参数;将训练集和验证集加载至该模型中进行训练,训练结束后得到对于该模型最优的参数。
S400:运用该代码补全模型,对待补全源程序进行代码补全,将测试集输入到训练好的代码补全模型中进行测试,使用机器学习中的准确率和MRR作为该代码补全模型在执行代码补全任务时的评估指标,然后将该代码补全模型运用于不同数据集的代码补全任务当中。
进一步地,步骤S200中所述的搭建一个基于逐层融合抽象语法树的代码补全模型过程如图3所示,具体步骤如下:
S210:构建S-AST:使用TBCNN,分别对待补全源程序的每一条语句对应AST的子树进行融合,得到对应于每一棵子树的唯一的特征向量,根据得到的子树特征向量构建S-AST。
进一步地,构建S-AST的具体步骤如下:
S211:待补全源程序的每一条语句在AST中都对应一棵子树,提取所有子树根结点的类型,并添加到一个子树根结点类型集合Q中。
S212:在得到子树根结点类型集合Q后,对AST进行先序遍历,同时构建子树集合S:
对于每一个AST中的结点i,如果i所属的类型存在于Q,则使用一个占位结点替换以i为根的
整棵子树,同时将加入至S中;上述过程递归执行,直到所有子树全部被替换为占位结
点,其中占位结点是一个代表某棵子树的符号,各棵子树对应的占位结点均不相同。
S213:将S中的所有子树编码为向量。
S214:使用TBCNN分别对编码后的每一棵子树进行融合,得到与每一棵子树对应
的、唯一的特征向量;使用上述特征向量替换对应的占位结点,重复上述操作直至所有的
占位结点均被替换,最终构建得到S-AST。
S220:构建AS-AST:基于CFG和DFG,在S-AST上添加控制流边、数据流边和路径相似边,构建得到AS-AST。其中控制流边包含了待补全源程序的控制流信息,数据流边包含了待补全源程序的数据流信息,路径相似边包含了待补全源程序的语义相似信息。
进一步地,构建AS-AST的具体步骤如下:
S221:在最相似的两条路径向量对应的两个终端结点之间添加路径相似边。
进一步地,添加路径相似边的具体步骤如下:
(1)先序遍历S-AST,获取所有从根结点到终端结点的路径,将所有路径构成一个路径集合R。
(2)对R中的每一条路径,使用BERT对路径进行编码,得到每一条路径对应的特征
向量,将所有特征向量构成一个路径向量集合。
(3)对于中的任意一条路径向量,将与中其他路径向量都进行相似度比
较,得到与最相似的路径向量,然后在所代表的路径的终端结点和所代表的路
径的终端结点之间添加一条无向边,这条边称为路径相似边,它包含了和之间的语
义相似信息,即对应的路径和对应的路径语义是相似的;其中和的相似度计算公
式如下:
其中d为路径向量和的欧几里得距离;
重复上述操作,直至为所有路径都找到与其最相似的路径,并添加路径相似边。
S222:根据CFG中表示的控制流关系和DFG表示的数据流关系,在S-AST的结点间添加控制流边和数据流边,得到AS-AST。
S230:构建IA-CG:将AS-AST按函数拆分,拆分得到的每一棵子树与每一个函数一一对应,使用HGT分别对每一棵子树进行融合,得到与每一棵子树对应的、唯一的特征向量,使用上述特征向量分别替换CG中对应的结点,构建出IA-CG。
进一步地,构建IA-CG的具体步骤如下:
首先遍历AS-AST,当遇到结点类型为FunctionDef 的结点n时,将以n为根的整棵
子树进行拆分,拆分得到的每一棵子树与每一个函数一一对应。然后将各棵子树编码为向
量,将上述向量转换为有向的异构图后输入到HGT中,使用HGT分别融合每一棵子树信息,得
到与每一棵子树对应的、唯一的特征向量,这些子树特征向量构成一个集合。最后
根据中的子树特征向量所代表的函数,替换CG中对应结点即可构建出IA-CG。
S240:提取IA-CG特征:使用GAT提取IA-CG包含的层次结构信息和语义信息,得到与IA-CG中的每一个结点对应的、唯一的特征向量。在待补全源程序中,将需要插入补全代码的函数记为fun_p,使用注意力机制提升与fun_p相关的所有函数的重要程度;将所有结点的特征向量进行加权平均,得到表示IA-CG的特征向量。
进一步地,提取IA-CG特征的具体步骤如下:
对于有n个结点的IA-CG,其结点集为,其中每一个结点
都代表一个函数。首先使用GAT提取IA-CG包含的层次结构信息和语义信息,得到与IA-CG中
的每一个结点对应的、唯一的特征向量,所有结点的特征向量构成特征向量集。在待补全源程序中,将需要插入补全代码的函数记为fun_p,记fun_p
对应的特征向量为,然后使用注意力机制提升与fun_p相关的所有函数的重要
程度:对于任意特征向量,计算与的相关程度:
其中、和为权重矩阵,为注意力打分函数。
最后将所有结点的特征向量进行加权平均:
得到表示IA-CG的特征向量。
S250:根据IA-CG特征提取后得到的特征向量,生成补全代码。
进一步地,根据特征向量生成补全代码的具体步骤如下:
在得到表示IA-CG的特征向量后,使用Sigmoid函数,将映射为一个
表示词汇表中的词汇出现概率的向量,的维度与词汇表的维度相同,其计算公式如下
式所示:
其中为权重矩阵;
选取中概率最高的值对应词汇表中的词汇,得到补全代码。
本发明还提供了一种基于逐层融合抽象语法树的代码补全装置,包括:
数据集的预处理和划分模块,被配置为,对数据集中的每一份待补全源程序进行预处理,解析待补全源程序,生成对应的AST、CFG、DFG和CG,并将预处理后的数据集划分为训练集、验证集和测试集。
构建基于逐层融合抽象语法树的代码补全模型模块,被配置为,首先根据AST构建S-AST,接着根据CFG和DFG,对 S-AST进行语义信息增强得到AS-AST,然后根据AS-AST和CG构建IA-CG,使用GAT提取IA-CG包含的层次结构信息和语义信息,最后根据IA-CG特征提取后得到的特征向量,生成补全代码。
模型训练模块,被配置为,设置基于逐层融合抽象语法树的代码补全模型的所有初始参数,设置词向量的维度、批处理的大小、学习率的大小、优化器的选择等与该模型相关的超参数;将训练集和验证集加载至该模型中进行训练,训练结束后得到对于该模型最优的参数。
代码补全模型应用模块,被配置为,运用该代码补全模型,对待补全的源程序进行代码补全,将测试集输入到训练好的代码补全模型中进行测试,使用机器学习中的准确率和MRR作为该代码补全模型在执行代码补全任务时的评估指标,然后将该代码补全模型运用于不同数据集的代码补全任务当中。
本发明与现有技术相比具有以下优点:
(1)本发明能够提取AST的层次结构信息。相比与其他提取AST信息的技术,本发明通过逐层融合AST的信息,逐步构建得到S-AST、AS-AST以及IA-CG,能够提取出AST的层次结构信息。
(2)本发明能够提取出S-AST的语义相似信息。本发明在S-AST上添加了路径相似边,相比于其他提取AST信息的技术,本发明能够使模型对于语义相似的代码片段有更好的泛化能力。
(3)本发明结合了语义相似信息、控制流信息、数据流信息和函数调用信息。相比于其他将AST转化为序列或AST构建为图的现有技术,本发明不仅提取了AST的层次结构信息,同时还结合了语义相似信息、控制流信息、数据流信息和函数调用信息,可以帮助模型更好地理解代码,做出更加准确的预测和补全。
附图说明
图1为本发明的实现流程图。
图2为模型框架图。
图3为搭建基于逐层融合抽象语法树的代码补全模型流程图。
图4为示例待补全源程序文本图。
图5为示例待补全源程序的AST。
图6为示例待补全源程序的S-AST。
图7为示例待补全源程序的AS-AST。
图8为示例待补全源程序的AS-AST分解得到的子树。
图9为示例待补全源程序的IA-CG构建过程。
图10为根据示例待补全源程序的IA-CG的特征向量生成补全代码的过程。
具体实施方式
下面结合说明书附图和实施例对本发明作进一步限定,但不限于此。
实施例1
本领域技术人员将会理解,下列实施例仅用于说明本发明,而不应视为限定本发明的范围。实施例中未注明具体技术或条件者,按照本领域内的文献所描述的技术或条件或者按照产品说明书进行。所用材料或设备未注明生产厂商者,均为可以通过购买获得的常规产品。
一种基于逐层融合抽象语法树的代码补全方法实施流程图如图1所示,包括以下步骤:
步骤S100:对数据集中的每一份待补全源程序进行预处理:解析待补全源程序,生成与待补全源程序对应的AST、CFG、DFG和CG;将预处理后的数据集划分为训练集、验证集和测试集。其中,数据集的每一条数据由待补全源程序和补全结果构成。数据集经过预处理后,数据集中每一条数据包含了待补全源程序对应的AST、待补全源程序对应的CFG、待补全源程序对应的DFG、待补全源程序对应的CG、补全结果。
步骤S200:搭建一个基于逐层融合抽象语法树的代码补全模型:首先根据AST构建S-AST,接着根据CFG和DFG,对 S-AST进行语义信息增强得到AS-AST,然后根据AS-AST和CG构建IA-CG,使用GAT提取IA-CG包含的层次结构信息和语义信息,其中语义信息包括AS-AST中含有的语义相似信息、控制流信息、数据流信息和CG中含有的函数调用信息。最后根据IA-CG特征提取后得到的特征向量,生成补全代码。
步骤S300:设置基于逐层融合抽象语法树的代码补全模型的所有初始参数,设置词向量的维度、批处理的大小、学习率的大小、优化器的选择等与该模型相关的超参数;将训练集和验证集加载至该模型中进行训练,训练结束后得到对于该模型最优的参数。
步骤S400:运用该代码补全模型,对待补全源程序进行代码补全,将测试集输入到训练好的代码补全模型中进行测试,使用机器学习中的准确率和MRR作为该代码补全模型在执行代码补全任务时的评估指标,然后将该代码补全模型运用于不同数据集的代码补全任务当中。
优选地,步骤S100解析待补全源程序生成AST具体为:
以“给定两个参数a和b,求两者的绝对值,如果a的绝对值大于b的绝对值,则把a的绝对值和b的绝对值的乘积赋给a,并返回a”的待补全源程序为例,待补全源程序文本如图4所示,第10行中的下划线即为该待补全源程序需要插入补全代码的位置,将该待补全源程序解析为AST,如图5所示。
优选地,步骤S200搭建一个基于逐层融合抽象语法树的代码补全模型过程如图3所示。具体为:
S210:构建S-AST:使用TBCNN分别对待补全源程序的每一条语句对应AST的子树进行融合,构建得到S-AST。
优选地,步骤S210构建S-AST具体为:
S211:待补全源程序的每一条语句在AST中都对应一棵子树,提取所有子树根结点的类型,并添加到一个子树根结点类型集合Q中。如图5中的AST所示,结点Assign为变量声明语句对应AST的子树的根结点类型,若Assign不存在于Q中,则往Q中添加一条名为Assign的根结点类型信息。
S212:在得到子树根结点类型集合Q后,对AST进行先序遍历,同时构建子树集合S:
对于每一个AST中的结点i,如果i所属的类型存在于Q,则使用一个占位结点替换以i为根的
整棵子树,同时将加入至S中;上述过程递归执行,直到所有子树全部被替换为占位结
点,其中占位结点是一个代表某棵子树的符号,各棵子树对应的占位结点均不相同。
S213:将S中的所有子树编码为向量。
S214:使用TBCNN分别对编码后的每一棵子树进行融合,得到与每一棵子树对应
的、唯一的特征向量,使用上述特征向量替换对应的占位结点。重复上述操作直至所有的
占位结点均被替换,最终构建得到S-AST。对于上述子树,将编码为向量后,得到子树向
量,使用TBCNN对进行融合的过程如下:使用固定深度的树型卷积核遍历,设卷积核
遍历过的的结点为,则该卷积核的输出为:
其中为权重矩阵,为偏差。
以图5的AST为例,融合AST的子树后构建得到的S-AST如图6所示。
S220:构建AS-AST:根据CFG和DFG,在S-AST上添加控制流边、数据流边和路径相似边构建AS-AST。
优选地,步骤S220构建AS-AST具体为:
S221:在最相似的两条路径向量对应的两个终端结点之间添加路径相似边。
优选地,步骤S221添加路径相似边具体为:
(1)先序遍历S-AST,获取所有从根结点到终端结点的路径,将所有路径构成一个路径集合R。如图6的AST中的一个终端结点CompareGt,该结点对应的路径为:{Module,FunctionDef,if,CompareGt}。
(2)对R中的每一条路径,使用BERT对路径进行编码,得到每一条路径对应的特征
向量,将所有特征向量构成一个路径向量集合。
(3)对于中的任意一条路径向量,将与中其他路径向量都进行相似度比
较,得到与最相似的路径向量,然后在所代表的路径的终端结点和所代表的路
径的终端结点之间添加一条无向边,这条边称为路径相似边,包含了和之间的语义
相似信息,即对应的路径和对应的路径语义是相似的;其中和的相似度计算公式
如下:
其中d为路径向量和的欧几里得距离;
重复上述操作,直至为所有路径都找到与其最相似的路径,然后添加路径相似边。
S222:根据CFG中表示的控制流关系和DFG中表示的数据流关系,在S-AST的结点间添加控制流边和数据流边,得到AS-AST。以图6中的S-AST为例,在图6中的S-AST添加路径相似边、控制流边和数据流边后,构建得到的AS-AST如图7所示。
S230:构建IA-CG:将AS-AST按函数进行拆分,拆分得到的每一棵子树与每一个函数一一对应,使用HGT分别对每一棵子树进行融合,得到与每一棵子树对应的、唯一的特征向量,使用上述特征向量分别替换CG中对应的结点,即可构建出IA-CG。
优选地,步骤S230构建IA-CG具体为:
首先遍历AS-AST,当遇到结点类型为FunctionDef 的结点n时,将以n为根的整棵
子树进行拆分,拆分得到的每一棵子树与每一个函数一一对应。然后将各棵子树编码为向
量,将上述向量转换为有向的异构图后输入到HGT中,使用HGT分别融合每一棵子树信息,得
到与每一棵子树对应的、唯一的特征向量,这些子树特征向量构成一个集合。最后
根据中的子树特征向量所代表的函数,替换CG中对应结点即可构建出IA-CG。对于
任意一棵子树的一个结点n,HGT的融合过程如下:
其中运算符·为向量相乘运算,是n的源结点集合,表示从结点m到
结点n的所有边,是对于结点n的第l个HGT层的输出,下一层接收它作为输入。融合过
程使用了三个函数:函数用于评估每个源结点m对于n的重要程度,函
数用于提取源结点m的信息,函数用于根据每个源结点的重要程度,聚合n的相
邻结点的信息。
以图8中的AS-AST为例,根结点Module的左子树为函数abs对应的子树,右子树为函数func对应的子树,遍历该AS-AST,将该AS-AST拆分为函数abs对应的子树和函数func对应的子树,使用HGT分别融合这两棵子树的信息,得到与这两棵子树对应的、唯一的特征向量abs_AS_AST和func_AS_AST,过程如图8所示。使用abs_AS_AST替换CG中函数名为abs的结点,使用func_AS_AST替换CG中函数名为func的结点,过程如图9所示。
S240:提取IA-CG特征:使用GAT提取IA-CG包含的层次结构信息和语义信息,得到与IA-CG中的每一个结点对应的、唯一的特征向量。在待补全源程序中,将需要插入补全代码的函数记为fun_p,使用注意力机制提升与fun_p相关的所有函数的重要程度;将所有结点的特征向量进行加权平均,得到表示IA-CG的特征向量。
优选地,步骤S240提取IA-CG特征具体为:
对于有n个结点的IA-CG,其结点集为,其中每一个结点
都代表一个函数。首先使用GAT提取IA-CG包含的层次结构信息和语义信息,得到与IA-CG中
的每一个结点对应的、唯一的特征向量,所有结点的特征向量构成特征向量集。GAT的特征提取过程如下:
其中为权重矩阵,为结点i的邻接结点,表示计算得到的结点i和结点j之
间的权重系数,表示非线性激活函数。
在待补全源程序中,将需要插入补全代码的函数记为fun_p,fun_p对应的特征
向量为,然后使用注意力机制提升与fun_p相关的所有函数的重要程度:对于任意
特征向量,计算与的相关程度:
其中、和为权重矩阵,为注意力打分函数;
最后将所有结点的特征向量进行加权平均:
得到表示IA-CG的特征向量。
S250:根据IA-CG特征提取后得到的特征向量,生成补全代码。
优选地,步骤S25根据特征向量生成补全代码具体为:
在得到IA-CG的特征向量后,使用Sigmoid函数,将映射为一个表示
词汇表中的词汇出现概率的向量,的维度与词汇表的维度相同,其计算公式如下式所
示:
其中为权重矩阵;
选取中概率最高的值对应词汇表中的词汇,得到补全代码。以图9的IA-CG为例,
经过步骤S24得到IA-CG的特征向量后,根据生成的补全代码如图10所示。
实施例2,本发明还提供了一种基于逐层融合抽象语法树的代码补全装置的实施例,包括:
数据集的预处理和划分模块,被配置为,对数据集中的每一份待补全源程序进行预处理:解析待补全源程序,生成与待补全源程序对应的AST、CFG、DFG和CG。然后将经过预处理后的数据集分为训练集、验证集和测试集。
构建基于逐层融合抽象语法树的代码补全模型模块,被配置为,首先根据AST构建S-AST,接着根据CFG和DFG,对 S-AST进行语义信息增强得到AS-AST,然后根据AS-AST和CG构建IA-CG,使用GAT提取IA-CG包含的层次结构信息和语义信息,最后根据IA-CG特征提取后得到的特征向量,生成补全代码。
模型训练模块,被配置为,设置基于逐层融合抽象语法树的代码补全模型的所有初始参数,设置词向量的维度、批处理的大小、学习率的大小、优化器的选择等与该模型相关的超参数;将训练集和验证集加载至该模型中进行训练,训练结束后得到对于该模型最优的参数。
代码补全模型应用模块,被配置为,运用该代码补全模型,对待补全源程序进行代码补全,将测试集输入到训练好的代码补全模型中进行测试,使用机器学习中的准确率和MRR作为该代码补全模型在执行代码补全任务时的评估指标,然后将该代码补全模型运用于不同数据集的代码补全任务当中。
本实施例提供的一种基于逐层融合抽象语法树的代码补全装置,通过逐层融合AST的信息,逐步构建得到S-AST、AS-AST和IA-CG,能够提取出AST的层次结构信息,同时结合了语义相似、控制流信息、数据流信息和函数调用信息,可以帮助模型更好地理解代码,做出更加准确的补全。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (9)
1.一种基于逐层融合抽象语法树的代码补全方法,其特征在于提取代码抽象语法树的层次结构信息,同时结合语义信息进行代码补全,该方法包括以下步骤:
第一步,对数据集中的每一份待补全源程序进行预处理:对待补全源程序进行解析,生成与待补全源程序对应的抽象语法树(Abstract Syntax Tree,AST)、控制流程图(ControlFlow Graph,CFG)、数据流程图(Data Flow Graph,DFG)和函数调用图(Call Graph,CG);将经过预处理后的数据集划分为训练集、验证集和测试集;
第二步,搭建一个基于逐层融合抽象语法树的代码补全模型:首先根据AST构建语句级抽象语法树(Sentence-Abstract Syntax Tree,S-AST),接着根据CFG和DFG,对 S-AST进行语义信息增强得到增强语句级抽象语法树(Augmented Sentence-Abstract Syntax Tree,AS-AST),然后根据AS-AST和CG构建信息增强函数调用图(Information Augmented CallGraph,IA-CG),使用图注意力网络(Graph attention networks,GAT)提取IA-CG包含的层次结构信息和语义信息,其中语义信息包括AS-AST中含有的语义相似信息、控制流信息、数据流信息和CG中含有的函数调用信息;最后根据IA-CG特征提取后得到的特征向量,生成补全代码;
第三步,设置基于逐层融合抽象语法树的代码补全模型的所有初始参数,设置词向量的维度、批处理的大小、学习率的大小、优化器的选择等与该模型相关的超参数;将训练集和验证集加载至该模型中进行训练,训练结束后得到对于该模型最优的参数;
第四步,运用该代码补全模型,对待补全源程序进行代码补全,将测试集输入到训练好的代码补全模型中进行测试,使用机器学习中的准确率和MRR作为该代码补全模型在执行代码补全任务时的评估指标,然后将该代码补全模型运用于不同数据集的代码补全任务当中。
2.根据权利要求1所述的基于逐层融合抽象语法树的代码补全方法,其特征在于,所述的第二步中,搭建一个基于逐层融合抽象语法树的代码补全模型的步骤包括有:
(1)构建S-AST:使用基于树的卷积神经网络(Tree-Based Convolutional NeuralNetwork,TBCNN),分别对待补全源程序的每一条语句对应AST的子树进行融合,得到对应于每一棵子树的唯一的特征向量,根据得到的子树特征向量构建S-AST;
(2)构建AS-AST:在S-AST中添加控制流边、数据流边和路径相似边,构建得到AS-AST;其中控制流边包含了待补全源程序的控制流信息,数据流边包含了待补全源程序的数据流信息,路径相似边包含了待补全源程序的语义相似信息;
(3)构建IA-CG:将AS-AST按函数进行拆分,拆分得到的每一棵子树与每一个函数一一对应,使用异构图变换模型(Heterogeneous Graph Transformer,HGT)分别对每一棵子树进行融合,得到与每一棵子树对应的、唯一的特征向量,使用上述特征向量分别替换CG中对应的结点,即可构建出IA-CG;
(4)提取IA-CG特征:使用GAT提取IA-CG包含的层次结构信息和语义信息,得到与IA-CG中的每一个结点对应的、唯一的特征向量;在待补全源程序中,将需要插入补全代码的函数记为fun_p,使用注意力机制提升与fun_p相关的所有函数的重要程度;将所有结点的特征向量进行加权平均,得到表示IA-CG的特征向量;
(5)根据IA-CG特征提取后得到的特征向量,生成补全代码。
3.根据权利要求2所述的基于逐层融合抽象语法树的代码补全方法,其特征在于,所述的构建S-AST的具体步骤包括:
(1)待补全源程序的每一条语句在AST中都对应一棵子树,提取所有子树根结点的类型,并添加到一个子树根结点类型集合Q中;
(2)在得到子树根结点类型集合Q后,对AST进行先序遍历,同时构建子树集合S:对于每
一个AST中的结点i,如果i所属的类型存在于Q,则使用一个占位结点替换以i为根的整棵
子树,同时将加入至S中;上述过程递归执行,直到所有子树全部被替换为占位结点,其
中占位结点是一个代表某棵子树的符号,各棵子树对应的占位结点均不相同;
(3)将S中的所有子树编码为向量;
(4)使用TBCNN分别对编码后的每一棵子树进行融合,得到与每一棵子树对应的、唯一
的特征向量,使用上述特征向量替换对应的占位结点;重复上述操作直至所有的占位结
点均被替换,最终构建得到S-AST。
4.根据权利要求2所述的基于逐层融合抽象语法树的代码补全方法,其特征在于,所述的构建AS-AST的具体步骤包括:
(1)在最相似的两条路径向量对应的两个终端结点之间添加路径相似边;
(2)根据CFG中表示的控制流关系和DFG中表示的数据流关系,在S-AST的结点间添加控制流边和数据流边,得到AS-AST。
5.根据权利要求4所述的基于逐层融合抽象语法树的代码补全方法,其特征在于,所述的添加路径相似边的具体步骤包括:
(1)先序遍历S-AST,获取所有从根结点到终端结点的路径,将所有路径构成一个路径集合R;
(2)对R中的每一条路径,使用BERT对路径进行编码,得到每一条路径对应的特征向量,
将所有特征向量构成一个路径向量集合;
(3)对于中的任意一条路径向量,将与中其他路径向量都进行相似度比较,
得到与最相似的路径向量,然后在所代表的路径的终端结点和所代表的路径的
终端结点之间添加一条无向边,这条边称为路径相似边,它包含了和之间的语义相
似信息,即对应的路径和对应的路径语义是相似的;其中和的相似度计算公式如
下:
其中d为路径向量和的欧几里得距离;
重复上述操作,直至为所有路径都找到与其最相似的路径,并添加路径相似边。
6.根据权利要求2所述的基于逐层融合抽象语法树的代码补全方法,其特征在于,所述的构建IA-CG的具体方法为:
首先遍历AS-AST,当遇到结点类型为FunctionDef 的结点n时,将以n为根的整棵子树
进行拆分,拆分得到的每一棵子树与每一个函数一一对应;然后将各棵子树编码为向量,将
上述向量转换为有向的异构图后输入到HGT中,使用HGT分别融合每一棵子树信息,得到与
每一棵子树对应的、唯一的特征向量,这些子树特征向量构成一个集合;最后根据中的子树特征向量所代表的函数,替换CG中对应结点即可构建出IA-CG。
7.根据权利要求2所述的基于逐层融合抽象语法树的代码补全方法,其特征在于,所述的提取IA-CG特征的具体方法为:
对于有n个结点的IA-CG,其结点集为,其中每一个结点都代
表一个函数;首先使用GAT提取IA-CG包含的层次结构信息和语义信息,得到与IA-CG中的每
一个结点对应的、唯一的特征向量,所有结点的特征向量构成特征向量集;在待补全源程序中,将需要插入补全代码的函数记为fun_p,记fun_p
对应的特征向量为,然后使用注意力机制提升与fun_p相关的所有函数的重要
程度:对于任意特征向量,计算与的相关程度:
其中、和为权重矩阵,为注意力打分函数;
最后将所有结点的特征向量进行加权平均:
得到表示IA-CG的特征向量。
8.根据权利要求2所述的基于逐层融合抽象语法树的代码补全方法,其特征在于,所述的根据特征向量,生成补全代码的具体方法为:
在得到表示IA-CG的特征向量,使用Sigmoid函数,将映射为一个表示
词汇表中的词汇出现概率的向量,的维度与词汇表的维度相同,其计算公式如下式所
示:
其中为权重矩阵;
选取中概率最高的值对应词汇表中的词汇,得到补全代码。
9.一种基于逐层融合抽象语法树的代码补全装置,用于运行权利要求1-8任一所述的基于逐层融合抽象语法树的代码补全方法,其特征在于,包括代码预处理模块、搭建基于逐层融合抽象语法树的代码补全模型模块、模型训练模块、代码补全模型应用模块;
所述数据集的预处理和划分模块用于:对数据集的每一份待补全源程序进行预处理:解析待补全源程序,生成与待补全源程序对应的AST、CFG、DFG和CG,然后将经过预处理后的数据集划分为训练集、验证集和测试集;所述搭建基于逐层融合抽象语法树的代码补全模型模块用于:首先根据AST构建S-AST,接着根据CFG和DFG,对S-AST进行语义信息增强得到AS-AST,然后根据AS-AST和CG构建IA-CG,使用GAT提取IA-CG包含的语义信息和层次结构信息,最后根据得到的IA-CG特征向量,生成补全代码;所述模型训练模块用于:设置模型的所有初始参数,设置词向量的维度、批处理的大小、学习率的大小、优化器的选择等与该模型相关的超参数,将训练集和验证集加载至模型中进行训练,训练结束后得到对于该模型最优的参数;所述代码补全模型应用模块用于:运用该代码补全模型,对待补全源程序进行代码补全,将测试集输入到训练好的代码补全模型中进行测试,使用机器学习中的准确率和MRR作为该代码补全模型在执行代码补全任务时的评估指标,然后将该代码补全模型运用于不同数据集的代码补全任务当中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310959780.1A CN117573084B (zh) | 2023-08-02 | 2023-08-02 | 一种基于逐层融合抽象语法树的代码补全方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310959780.1A CN117573084B (zh) | 2023-08-02 | 2023-08-02 | 一种基于逐层融合抽象语法树的代码补全方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117573084A true CN117573084A (zh) | 2024-02-20 |
CN117573084B CN117573084B (zh) | 2024-04-12 |
Family
ID=89888715
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310959780.1A Active CN117573084B (zh) | 2023-08-02 | 2023-08-02 | 一种基于逐层融合抽象语法树的代码补全方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117573084B (zh) |
Citations (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7765097B1 (en) * | 2006-03-20 | 2010-07-27 | Intuit Inc. | Automatic code generation via natural language processing |
US20140282373A1 (en) * | 2013-03-15 | 2014-09-18 | Trinity Millennium Group, Inc. | Automated business rule harvesting with abstract syntax tree transformation |
US20150135166A1 (en) * | 2013-11-12 | 2015-05-14 | Microsoft Corporation | Source code generation, completion, checking, correction |
CN109582352A (zh) * | 2018-10-19 | 2019-04-05 | 北京硅心科技有限公司 | 一种基于双ast序列的代码补全方法及系统 |
CN110232280A (zh) * | 2019-06-20 | 2019-09-13 | 北京理工大学 | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 |
US20200249918A1 (en) * | 2019-02-02 | 2020-08-06 | Microsoft Technology Licensing, Llc. | Deep learning enhanced code completion system |
CN112764738A (zh) * | 2021-01-19 | 2021-05-07 | 山东师范大学 | 基于多视图程序特征的代码自动生成方法及系统 |
CN113064586A (zh) * | 2021-05-12 | 2021-07-02 | 南京大学 | 一种基于抽象语法树增广图模型的代码补全方法 |
CN113238797A (zh) * | 2021-04-16 | 2021-08-10 | 山东师范大学 | 基于分层对比学习的代码特征提取方法及系统 |
CN113761163A (zh) * | 2021-08-18 | 2021-12-07 | 浙江大学 | 基于代码结构语义信息的深度代码搜索方法、系统及装置 |
CN114385178A (zh) * | 2021-12-14 | 2022-04-22 | 厦门大学 | 基于抽象语法树结构信息增强的代码生成方法 |
CN114489669A (zh) * | 2022-01-12 | 2022-05-13 | 南京大学 | 一种基于图学习的Python语言代码片段生成方法 |
US20220198294A1 (en) * | 2020-12-23 | 2022-06-23 | Oracle International Corporation | Generalized production rules - n-gram feature extraction from abstract syntax trees (ast) for code vectorization |
CN114721640A (zh) * | 2022-03-08 | 2022-07-08 | 阿里云计算有限公司 | 代码补全方法及装置、存储介质、处理器、终端 |
CN114816517A (zh) * | 2022-05-06 | 2022-07-29 | 哈尔滨工业大学 | 一种层次语义感知的代码表示学习方法 |
CN114924741A (zh) * | 2022-05-10 | 2022-08-19 | 南京航空航天大学 | 一种基于结构特征和序列特征的代码补全方法 |
CN115048141A (zh) * | 2022-07-01 | 2022-09-13 | 南京工业大学 | 一种基于图引导的Transformer模型代码注释自动生成方法 |
CN115167863A (zh) * | 2022-05-31 | 2022-10-11 | 中南大学 | 基于代码序列和代码图融合的代码补全方法、装置 |
CN115291854A (zh) * | 2022-07-30 | 2022-11-04 | 华为技术有限公司 | 代码补全方法、装置及设备 |
CN115512852A (zh) * | 2022-09-16 | 2022-12-23 | 浪潮卓数大数据产业发展有限公司 | 一种生成融合码的方法及设备 |
CN115600012A (zh) * | 2022-12-01 | 2023-01-13 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院)(Cn) | 一种基于知识增强和结构对比的api推荐方法 |
CN115617694A (zh) * | 2022-11-30 | 2023-01-17 | 中南大学 | 基于信息融合的软件缺陷预测方法、系统、设备及介质 |
CN115700492A (zh) * | 2022-10-24 | 2023-02-07 | 南京大学 | 一种基于图区间神经网络的程序语义表示学习和预测方法 |
WO2023033922A1 (en) * | 2021-09-01 | 2023-03-09 | Microsoft Technology Licensing, Llc | Neural transformer code completion for command line interface |
CN115859307A (zh) * | 2022-12-26 | 2023-03-28 | 哈尔滨工业大学 | 基于树型注意力和加权图匹配的相似漏洞检测方法 |
CN116089957A (zh) * | 2022-12-29 | 2023-05-09 | 河南大学 | 一种基于语法和语义特征融合的智能合约漏洞检测方法及装置 |
US20230141348A1 (en) * | 2021-11-11 | 2023-05-11 | Kunming University Of Science And Technology | Method and apparatus for determining code generation quality and efficiency evaluation values based on multiple indicators |
CN116151132A (zh) * | 2023-04-19 | 2023-05-23 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种编程学习场景的智能代码补全方法、系统及储存介质 |
-
2023
- 2023-08-02 CN CN202310959780.1A patent/CN117573084B/zh active Active
Patent Citations (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7765097B1 (en) * | 2006-03-20 | 2010-07-27 | Intuit Inc. | Automatic code generation via natural language processing |
US20140282373A1 (en) * | 2013-03-15 | 2014-09-18 | Trinity Millennium Group, Inc. | Automated business rule harvesting with abstract syntax tree transformation |
US20150135166A1 (en) * | 2013-11-12 | 2015-05-14 | Microsoft Corporation | Source code generation, completion, checking, correction |
CN109582352A (zh) * | 2018-10-19 | 2019-04-05 | 北京硅心科技有限公司 | 一种基于双ast序列的代码补全方法及系统 |
US20200249918A1 (en) * | 2019-02-02 | 2020-08-06 | Microsoft Technology Licensing, Llc. | Deep learning enhanced code completion system |
CN110232280A (zh) * | 2019-06-20 | 2019-09-13 | 北京理工大学 | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 |
US20220198294A1 (en) * | 2020-12-23 | 2022-06-23 | Oracle International Corporation | Generalized production rules - n-gram feature extraction from abstract syntax trees (ast) for code vectorization |
CN112764738A (zh) * | 2021-01-19 | 2021-05-07 | 山东师范大学 | 基于多视图程序特征的代码自动生成方法及系统 |
CN113238797A (zh) * | 2021-04-16 | 2021-08-10 | 山东师范大学 | 基于分层对比学习的代码特征提取方法及系统 |
CN113064586A (zh) * | 2021-05-12 | 2021-07-02 | 南京大学 | 一种基于抽象语法树增广图模型的代码补全方法 |
CN113761163A (zh) * | 2021-08-18 | 2021-12-07 | 浙江大学 | 基于代码结构语义信息的深度代码搜索方法、系统及装置 |
WO2023033922A1 (en) * | 2021-09-01 | 2023-03-09 | Microsoft Technology Licensing, Llc | Neural transformer code completion for command line interface |
US20230073052A1 (en) * | 2021-09-01 | 2023-03-09 | Microsoft Technology Licensing, Llc. | Neural transformer code completion for command line interface |
US20230141348A1 (en) * | 2021-11-11 | 2023-05-11 | Kunming University Of Science And Technology | Method and apparatus for determining code generation quality and efficiency evaluation values based on multiple indicators |
CN114385178A (zh) * | 2021-12-14 | 2022-04-22 | 厦门大学 | 基于抽象语法树结构信息增强的代码生成方法 |
CN114489669A (zh) * | 2022-01-12 | 2022-05-13 | 南京大学 | 一种基于图学习的Python语言代码片段生成方法 |
CN114721640A (zh) * | 2022-03-08 | 2022-07-08 | 阿里云计算有限公司 | 代码补全方法及装置、存储介质、处理器、终端 |
CN114816517A (zh) * | 2022-05-06 | 2022-07-29 | 哈尔滨工业大学 | 一种层次语义感知的代码表示学习方法 |
CN114924741A (zh) * | 2022-05-10 | 2022-08-19 | 南京航空航天大学 | 一种基于结构特征和序列特征的代码补全方法 |
CN115167863A (zh) * | 2022-05-31 | 2022-10-11 | 中南大学 | 基于代码序列和代码图融合的代码补全方法、装置 |
CN115048141A (zh) * | 2022-07-01 | 2022-09-13 | 南京工业大学 | 一种基于图引导的Transformer模型代码注释自动生成方法 |
CN115291854A (zh) * | 2022-07-30 | 2022-11-04 | 华为技术有限公司 | 代码补全方法、装置及设备 |
CN115512852A (zh) * | 2022-09-16 | 2022-12-23 | 浪潮卓数大数据产业发展有限公司 | 一种生成融合码的方法及设备 |
CN115700492A (zh) * | 2022-10-24 | 2023-02-07 | 南京大学 | 一种基于图区间神经网络的程序语义表示学习和预测方法 |
CN115617694A (zh) * | 2022-11-30 | 2023-01-17 | 中南大学 | 基于信息融合的软件缺陷预测方法、系统、设备及介质 |
CN115600012A (zh) * | 2022-12-01 | 2023-01-13 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院)(Cn) | 一种基于知识增强和结构对比的api推荐方法 |
CN115859307A (zh) * | 2022-12-26 | 2023-03-28 | 哈尔滨工业大学 | 基于树型注意力和加权图匹配的相似漏洞检测方法 |
CN116089957A (zh) * | 2022-12-29 | 2023-05-09 | 河南大学 | 一种基于语法和语义特征融合的智能合约漏洞检测方法及装置 |
CN116151132A (zh) * | 2023-04-19 | 2023-05-23 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种编程学习场景的智能代码补全方法、系统及储存介质 |
Non-Patent Citations (4)
Title |
---|
DAYA GUO: "GraphCodeBERT:Pre-training code Representations with Data Flow", ARXIV:2009.08366V4, 13 September 2021 (2021-09-13), pages 1 - 18 * |
YAPENG LIU: "Improving code Completion by Sequence Features and Structural Features", WSSE\'22:PROCEEDINGS OF THE 4TH WORLD SYMPOSIUM ON SOFTWARE ENGINEERING, 23 December 2022 (2022-12-23) * |
付善庆: "语法与语义结合的代码补全方法", 软件学报, vol. 33, no. 11, 15 November 2022 (2022-11-15), pages 3390 - 3943 * |
张俊男: "基于程序分析和神经网络语言模型的代码推荐研究", 信息科技, 31 December 2018 (2018-12-31), pages 138 - 2023 * |
Also Published As
Publication number | Publication date |
---|---|
CN117573084B (zh) | 2024-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110348016B (zh) | 基于句子关联注意力机制的文本摘要生成方法 | |
CN111090461B (zh) | 一种基于机器翻译模型的代码注释生成方法 | |
CN108563433B (zh) | 一种基于lstm自动补全代码的装置 | |
CN112000772B (zh) | 面向智能问答基于语义特征立方体的句子对语义匹配方法 | |
CN110888966A (zh) | 自然语言问答 | |
CN113435211B (zh) | 一种结合外部知识的文本隐式情感分析方法 | |
CN112306494A (zh) | 一种基于卷积和循环神经网络的代码分类及聚类方法 | |
CN112380319A (zh) | 一种模型训练的方法及相关装置 | |
CN112764738A (zh) | 基于多视图程序特征的代码自动生成方法及系统 | |
US20200311345A1 (en) | System and method for language-independent contextual embedding | |
CN113657123A (zh) | 基于目标模板指导和关系头编码的蒙语方面级情感分析方法 | |
US10394960B2 (en) | Transliteration decoding using a tree structure | |
CN114528898A (zh) | 基于自然语言命令的场景图修改 | |
CN113705196A (zh) | 基于图神经网络的中文开放信息抽取方法和装置 | |
CN113822054A (zh) | 基于数据增强的中文语法纠错方法及装置 | |
CN114528398A (zh) | 一种基于交互双重图卷积网络的情感预测方法及系统 | |
US10402489B2 (en) | Transliteration of text entry across scripts | |
CN111241820A (zh) | 不良用语识别方法、装置、电子装置及存储介质 | |
CN116432125A (zh) | 基于哈希算法的代码分类方法 | |
CN110852066B (zh) | 一种基于对抗训练机制的多语言实体关系抽取方法及系统 | |
CN117573084B (zh) | 一种基于逐层融合抽象语法树的代码补全方法 | |
CN112464673B (zh) | 融合义原信息的语言含义理解方法 | |
CN114997190A (zh) | 机器翻译方法、装置、计算机设备和存储介质 | |
CN114138929A (zh) | 问答方法及装置 | |
CN110059314B (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 |