System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于信息处理,更进一步涉及人工智能自然语言处理领域中的代码补全任务。本专利技术可用于对待补全源代码空缺的部分进行补全。
技术介绍
1、代码补全是一项自然语言处理任务,目标是基于开发人员的输入和已有项目代码后,立即预测下一个应该写进代码中的标识符、关键词和代码片段等,提高软件开发的效率。
2、随着深度学习在自然语言处理领域的广泛应用,许多深度学习模型如循环神经网络(rnn),图神经网络(gnn)被提出并应用于代码补全技术,其基本思路是将源代码表示为序列、抽象语法树和图的形式,经过处理后输入到深度学习模型中,利用这类模型学习源代码中隐藏的深层次特征,得到源代码的向量表示,从而进行代码补全。
3、公开号为cn116700780a的中文专利文献公开了一种基于抽象语法树代码表征的代码补全方法。该方法将java源代码转换为ast,使用切分遍历算法遍历ast,利用预训练gpt-2模型对代码补全任务进行微调,并使用bpe算法对输入的文本序列进行分词,在微调过程中使用fgm算法进行了对抗训练。
4、公开号为cn113064586a的中文专利文献公开了一种基于抽象语法树增广图模型的代码补全方法。该方法将待补全的源代码表示为ast,遍历ast上各节点之间的顺序、语法和语义关系,使用带不同标记的有向边连接这些节点,得带图的表示形式,并进行编码,将编码后的图信息输入代码补全模型,给出预测结果。
5、公开号为cn116225525a的中文专利文献公开了一种结合用户反馈和深度学习的代码补全方法。该方法
6、当前基于深度学习和机器学习的代码补全方法存在以下问题:
7、(1)许多现有方法直接将代码表示成连续的序列或遍历抽象语法树得到结点序列,使用rnn、lstm等与序列相关的神经网络进行预测,这种方式只关注代码的序列信息,忽略了代码及其抽象语法树所带有的层次结构信息。
8、(2)目前许多基于提取ast特征的方法,往往会将ast的每个结点视作具有同等的重要性,而程序代码具有层次结构,譬如必须首先进行函数的定义才能进行函数体的编写,这意味着ast中各个结点的重要程度可以各不相同。因此,如果将ast的每个结点视作同等重要,会导致代码的层次结构信息在程序表示中没有得到充分的利用。
技术实现思路
1、本专利技术的目的是针对上述
技术介绍
中存在的问题,提出了一种基于层次结构特征和序列特征的代码补全方法。
2、本专利技术还提供了一种基于层次结构特征和序列特征的代码补全装置,将待补全代码输入到该装置后,该系统即可借助补全模型预测并输出代码补全的结果,可用于辅助代码的编写。
3、术语解释:
4、抽象语法树(abstract syntax tree,ast):是源代码的抽象语法结构的树状表示。ast中的每一个结点包含结点类型和结点值两个属性,不同的结点类型表示源代码中的不同结构,结点值为源代码。
5、待补全源代码:需要进行代码补全的源代码。
6、补全代码:由代码补全模型生成的代码,用于插入至待补全源代码中需要进行代码补全的位置。
7、函数调用图(call graph,cg):是一种源代码中函数之间调用关系的图形化表示,包含了源代码的函数调用信息。在cg中,结点表示函数,边表示调用关系。
8、图注意力网络(graph attention networks,gat):一种基于注意力的体系结构来执行图结构数据结点分类的网络,利用隐藏的自我注意层(self-attention layer)来解决基于图卷积或其近似方法的不足。
9、基于树的卷积神经网络(tree-based convolutional neural network,tbcnn):一种基于ast的卷积神经网络,该卷积神经网络设计了卷积核用于捕获ast的结构信息。
10、门控图神经网络(gated graph sequence neural networks,ggnn):一种基于gru(gate recurrent unit)的循环神经网络模型。
11、占位结点:一个代表某棵子树的符号,各棵子树对应的占位结点均不相同。
12、实现本专利技术目的的思路是,首先对数据集中的每一份待补全源代码进行数据预处理:解析待补全源代码,生成与待补全源代码对应的ast,然后解析ast,生成与ast对应的cg,再通过先序遍历ast,将ast中的所有结点转化为结点序列;其次构建基于层次结构特征和序列特征的代码补全模型:首先根据结点序列构建assg,使用ggnn提取assg的特征;然后根据ast逐步构建ast-sl和ast-bl,根据ast-bl和cg构建sa-cg,使用gat提取sa-cg的特征;最后根据提取得到的特征生成补全代码;然后将数据集进行划分,设置基于层次结构特征和序列特征的代码补全模型的所有初始参数和超参数,将训练集和验证集加载至模型中进行训练,训练结束后得到对于该模型最优参数;最后将训练好的基于层次结构特征和序列特征的代码补全模型应用于代码补全任务中。实现流程如图1所示,模型架构如图2所示。
13、s100:数据预处理:对于数据集中的每一份待补全源代码,将待补全源代码解析为待补全源代码对应的ast,然后解析ast,生成与ast对应的函数调用图,再通过先序遍历ast,将ast中的所有结点转化为结点序列,结点序列中的每一个结点都与ast中的结点一一对应。
14、s200:构建基于层次结构特征和序列特征的代码补全模型:首先根据数据预处理中得到的结点序列,构建assg,使用ggnn提取assg包含的序列特征和重复性特征;然后使用ast逐步构建ast-sl、ast-bl和sa-cg,使用gat提取sa-cg包含的层次结构特征和函数调用特征;最后根据提取得到的特征生成补全代码。
15、s300:将经过数据预处理后的数据集划分为训练集、验证集和测试集,设置基于层次结构特征和序列特征的代码补全模型的所有初始参数,设置批处理的大小、迭代次数、神经网路的隐藏层数等与于该模型相关的超参数;将训练集和验证集加载至模型中进行训练,训练结束后得到对于该模型最优参数。
16、s400:将测试集输入到构建得到的代码补全模型中进行测试,使用准确率和bleu作为该代码补全模型在执行代码补全任务时的评估指标,然后将该代码补全模型运用于不同数据集的代码补全任务当中。
17、进一步地,步骤s200中所述的基于层次结构特征和序列特征的代码补全模型的构建过程如图3所示。
18、具体步骤如下:
19、s本文档来自技高网...
【技术保护点】
1.一种基于层次结构特征和序列特征的代码补全方法,其特征在于,提取了代码的层次结构特征和函数调用特征,同时结合了代码的序列特征和重复性特征进行代码补全,该方法包括以下步骤:
2.根据权利要求1所述的基于层次结构特征和序列特征的代码补全方法,其特征在于,所述的第二步中,构建基于层次结构特征和序列特征的代码补全模型的步骤包括有:
3.根据权利要求2所述的基于层次结构特征和序列特征的代码补全方法,其特征在于,所述的构建ASSG的具体步骤包括:
4.根据权利要求2所述的基于层次结构特征和序列特征的代码补全方法,其特征在于,所述的构建SA-CG的步骤包括:
5.根据权利要求4所述的基于层次结构特征和序列特征的代码补全方法,其特征在于,所述的构建AST-BL的具体步骤包括:
6.根据权利要求4所述的基于层次结构特征和序列特征的代码补全方法,其特征在于,所述的构建SA-CG的具体方法为:
7.根据权利要求2所述的基于层次结构特征和序列特征的代码补全方法,其特征在于,生成补全代码的具体方法为:
8.一种基于层次结
...【技术特征摘要】
1.一种基于层次结构特征和序列特征的代码补全方法,其特征在于,提取了代码的层次结构特征和函数调用特征,同时结合了代码的序列特征和重复性特征进行代码补全,该方法包括以下步骤:
2.根据权利要求1所述的基于层次结构特征和序列特征的代码补全方法,其特征在于,所述的第二步中,构建基于层次结构特征和序列特征的代码补全模型的步骤包括有:
3.根据权利要求2所述的基于层次结构特征和序列特征的代码补全方法,其特征在于,所述的构建assg的具体步骤包括:
4.根据权利要求2所述的基于层次结构特征和序列特征的代码补全方法,其特征在于,所述的构建sa-cg的步骤包括:
5.根据...
【专利技术属性】
技术研发人员:苏庆,黄炜谦,黄佳庆,洪新杰,谢国波,
申请(专利权)人:广东工业大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。