利索能及
我要发布
收藏
专利号: 2024100560647
申请人: 广东工业大学
专利类型:发明专利
专利状态:已下证
更新日期:2024-12-17
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

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作为训练模型,利用特征向量 及其对应的标签对循环递归网络RNN进行训练,其中,将交叉熵函数作为循环递归网络RNN的损失函数,交叉熵函数如下:其中,M表示编程语言的类别个数; 表示符号函数,取0或1,符号函数 中,若数据集中样本i的真实类别等于c, 取值1,否则 取值0; 表示样本i属于类别c的预测概率。

6.根据权利要求5所述的方法,其特征在于,步骤6包括:步骤6.1: 使用节点嵌入技术将数据流语法图DFSG中的节点转换为节点嵌入特征向量;

步骤6.2:使用边嵌入技术将数据流语法图DFSG中的边转换为边嵌入特征向量;

步骤6.3:构建图结构数据,将点嵌入特征向量 和边嵌入特征向量 通过维度拼接进行结合,得到图结构数据特征向量 ;

步骤6.4:使用图结构数据特征向量 训练第一编码器,输出特征向量 。

7.根据权利要求6所述的方法,其特征在于,步骤7包括:步骤7.1:从特征向量 提取均值特征向量和标准差特征向量;具体包括:构建第一全连接层、第二全连接层作为隐层Φ和隐层ψ,通过隐层Φ和隐层ψ提取特征向量 的特征信息;将第一全连接层的权重矩阵表示为Φw={Φ1,  Φ2, …  Φn_matrix},将第二全连接层的权重矩阵表示为ψw={ψ1, ψ2, … ψn_matrix};每个隐层的输出通过预设的激活函数Relu进行特征向量的非线性变换;

将特征向量 输入到隐层Φ输出后再通过激活函数Relu进行激活获得特征向量vΦ,将特征向量vΦ输入到隐层ψ输出后再通过激活函数Relu进行激活后获得特征向量vψ;

构建第三全连接层,权重矩阵表示为muw={ mu1, mu2, …,mun_matrix },用于从特征向量提取均值特征向量;

构建第四全连接层,权重矩阵表示为lvw = { lv1, lv2, …, lvn_matrix },用于提取标准差特征向量;将特征向量vψ分别输入到第三全连接层和第四全连接层,分别得到均值特征向量 和标准差特征向量 ;

步骤7.2:使用均值特征向量 和标准差特征向量 进行重参化,得到特征向量 ;

即,

计算标准差特征向量 的标准差std,标准差std表示为:从高斯分布上随机采样噪声特征向量 ,基于均值特征向量 、噪声特征向量 ,构建特征向量 :。

8.根据权利要求7所述的方法,其特征在于,所述采用训练代码函数数据和验证集对预设的函数注释生成网络模型进行训练,生成训练好的函数注释生成网络模型,包括:将训练代码函数数据和验证集输入所述函数注释生成网络模型,生成对应的训练代码函数注释;

基于预设的损失函数,计算所述训练代码函数注释与关联的标准代码函数注释之间的多个轮次的平均损失值;

计算每一轮次的所述平均损失值与前一轮次的所述平均损失值之差,生成多个目标损失值;

若所有所述目标损失值的绝对值均小于预设的标准阈值时,停止训练,生成训练好的函数注释生成网络模型。

9.根据权利要求8所述的方法,其特征在于,步骤8所述通过目标解码器对目标代码函数数据中的预设特征向量进行解码,包括:使用解码器对特征向量 的编码特征进行解码,输出概率分布,将最高概率对应的单词作为输出;若概率最高的单词不是未知单词,则输出最高概率对应的单词;否则,执行以下步骤:步骤9.1:将特征向量 对应的原始代码函数进行分割以及清洗,得到目标代码函数序列数据;使用空格对目标代码函数序列数据进行切割,得到目标代码函数单词组列表;将目标代码函数词组列表中的单词按顺序以“单词‑位置”的形式保存到目标代码函数索引词典中;使用词嵌入的方式将目标代码函数索引词典的单词进行从单词到特征向量的映射,得到目标特征向量词库;

步骤9.2:在目标特征向量词库中寻找目标替代词来代替未知单词,如果目标特征向量词库中的所有的向量与向量 的编码特征的相似度小于设定阈值,则转而在特征向量词库中寻找目标替代词来代替未知单词;

步骤9.3:目标代码函数解码出注释后,清空目标特征向量词库。

10.根据权利要求9所述的方法,其特征在于,所述判别器用于对特征向量 打分,具体如下:将原始注释通过词嵌入的方式编码成特征向量 ;

将特征向量 与特征向量 输入判别器中进行训练并打分,对特征向量 打出高分,对特征向量 打出低分;

对判别器使用BCE损失函数进行训练,BCE损失函数表示为:其中, 是第i个样本的二元标签值;p( )是第i个样本的打分结果,表示判别器对第i个样本的特征向量 打出的评分。