1.一种基于GVG的代码函数注释生成方法,其特征在于,包括以下步骤:步骤1:构建代码函数-注释对数据集,数据集由代码函数及其注释构成;
步骤2:将代码函数-注释对数据集划分为训练集、验证集和测试集;
步骤3:将训练集作为训练代码函数数据,通过代码函数类别分类神经网络对训练代码函数数据进行分类,得到代码函数类别;
步骤4:对所述训练代码函数数据进行函数预处理,生成代码函数序列数据;
所述代码函数序列数据包括原始单词序列、原始代码函数标识符序列、标点符号序列,原始代码函数标识符包括驼峰标识符和蛇形标识符;
步骤5:使用训练集中的代码函数构建特征向量词库;具体包括:步骤5.1:通过按行读取的方式获取第一文件中的代码函数数据,对每一行代码函数使用空格进行切割,得到代码函数单词组列表;
步骤5.2:为代码函数构建代码函数索引词典,将代码函数单词组列表中的单词按顺序以“单词-位置”的形式保存到代码函数索引词典中;
步骤5.3:构建特征向量词库,使用词嵌入的方式将代码函数索引词典中的单词进行从单词到特征向量的映射;
步骤6:基于特征向量词库,采用多个预设目标编码器、预设目标解码器与判别器构建函数注释生成网络模型;
步骤7:接收并分类目标代码函数数据,采用训练代码函数数据和验证集对预设的函数注释生成网络模型进行训练,生成训练好的函数注释生成网络模型,使用测试集检验模型训练效果;
步骤8:通过目标解码器对目标代码函数数据中的预设特征向量进行解码,生成对应的目标代码函数注释。
2.根据权利要求1所述的方法,其特征在于,步骤4对所述训练代码函数数据进行函数预处理,包括:步骤4.1:将构建数据集时的代码函数和注释分别作为原始代码函数和原始注释,对原始代码函数进行分割以及清洗,生成原始单词序列;
步骤4.2:通过预设语法树解析器将所述训练代码函数数据转换为AST语法树,对AST语法树进行位置编码;
将位置编码融入到对应的AST语法树中作为AST语法树中节点的数据之一;使用正弦函数和余弦函数对AST语法进行位置编码,具体如下:其中,PE表示位置编码特征向量,pos表示代码函数元素在输入序列中位置,步骤4.3: 根据AST语法树提取代码函数的变量关系,将代码函数的变量关系构建为数据流图DFG。
3.根据权利要求2所述的方法,其特征在于,步骤4.1对原始代码函数进行分割以及清洗包括:步骤4.1.1:将驼峰标识符按驼峰命名规则进行切割,得到一组分割单词,记为驼峰单词;
步骤4.1.2:将蛇形标识符按蛇形命名规则进行切割,得到一组分割单词,记为蛇形单词;
步骤4.1.3:将单词与单词、单词与标点符号、标点符号与标点符号之间用空格进行分割,使单词与标点符号成为独立的个体;
步骤4.1.4:删除代码函数中的转义字符;
步骤4.1.5:将删除转义字符后的代码函数按行的方式保存到预设的第一文件中;
步骤4.1.6:记录单词的处理痕迹,若单词由驼峰标识符或由蛇形标识符切割所得,则记为1,否则记为0;
步骤4.1.7:将代码函数单词的痕迹记录按行的方式保存到预设的第二文件中。
4.根据权利要求3所述的方法,其特征在于,步骤4.4结合AST语法树与数据流图DFG构建数据流语法图DFSG;具体为:根据数据流图DFG中节点之间数据流的信息,向数据流添加对应的边,构建数据流语法图DFSG;即:设定AST语法树存在节点a和节点b,若在数据流图DFG中存在节点a到节点b或者节点b到节点a的数据流,则为数据流添加目标连接边,目标连接边的指向取决于数据流图DFG中节点的指向。
5.根据权利要求4所述的方法,其特征在于,所述代码函数类别分类神经网络采用循环递归网络RNN,循环递归网络RNN的训练过程为:为原始代码函数标记对应的编程语言种类标签;
将原始代码函数进行代码函数分单词与清洗后转化为单词序列,代码函数分单词与清洗包括分单词操作、去除标点符号;
训练循环递归网络RNN:
使用词嵌入的方法将代码函数分单词与清洗后的代码函数转换为特征向量使用循环递归网络RNN作为训练模型,利用特征向量其中,M表示编程语言的类别个数;
6.根据权利要求5所述的方法,其特征在于,步骤6包括:步骤6.1: 使用节点嵌入技术将数据流语法图DFSG中的节点转换为节点嵌入特征向量步骤6.2:使用边嵌入技术将数据流语法图DFSG中的边转换为边嵌入特征向量步骤6.3:构建图结构数据,将点嵌入特征向量步骤6.4:使用图结构数据特征向量
7.根据权利要求6所述的方法,其特征在于,步骤7包括:步骤7.1:从特征向量
构建第一全连接层、第二全连接层作为隐层Φ和隐层ψ,通过隐层Φ和隐层ψ提取特征向量将特征向量
构建第三全连接层,权重矩阵表示为mu
构建第四全连接层,权重矩阵表示为lv
步骤7.2:使用均值特征向量
计算标准差特征向量
从高斯分布上随机采样噪声特征向量
8.根据权利要求7所述的方法,其特征在于,所述采用训练代码函数数据和验证集对预设的函数注释生成网络模型进行训练,生成训练好的函数注释生成网络模型,包括:将训练代码函数数据和验证集输入所述函数注释生成网络模型,生成对应的训练代码函数注释;
基于预设的损失函数,计算所述训练代码函数注释与关联的标准代码函数注释之间的多个轮次的平均损失值;
计算每一轮次的所述平均损失值与前一轮次的所述平均损失值之差,生成多个目标损失值;
若所有所述目标损失值的绝对值均小于预设的标准阈值时,停止训练,生成训练好的函数注释生成网络模型。
9.根据权利要求8所述的方法,其特征在于,步骤8所述通过目标解码器对目标代码函数数据中的预设特征向量进行解码,包括:使用解码器对特征向量
步骤9.1:将特征向量
步骤9.2:在目标特征向量词库中寻找目标替代词来代替未知单词,如果目标特征向量词库中的所有的向量与向量步骤9.3:目标代码函数解码出注释后,清空目标特征向量词库。
10.根据权利要求9所述的方法,其特征在于,所述判别器用于对特征向量将原始注释通过词嵌入的方式编码成特征向量将特征向量
对判别器使用BCE损失函数进行训练,BCE损失函数表示为:其中,