利索能及
我要发布
收藏
专利号: 2024116727575
申请人: 南京信息工程大学
专利类型:发明专利
专利状态:已下证
更新日期:2026-06-16
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.一种基于跨模态信息融合的代码摘要生成方法,其特征在于,包括:由工具数据库中获取新增源代码,将新增源代码输入至预训练的代码摘要生成器获得新增代码摘要;所述代码摘要生成器包括解析单元、编码单元和解码单元;

构建代码摘要生成器的过程包括:

由公共数据集中获取训练源代码,通过解析单元对训练源代码进行解析获得标记序列特征、AST节点特征和CFG节点特征;

将标记序列特征、AST节点特征和CFG节点特征输入至编码单元,对AST节点特征进行图卷积、图注意力和位置编码信息融合获得第一特征矩阵 ;

对CFG节点特征进行图卷积、图注意力和位置编码信息融合获得第二特征矩阵,过程包括:首先对CFG节点特征的前向聚合表示与后向聚合表示赋初值,表达公式为:;

其中, 表示CFG节点特征的前向聚合初始表示矩阵, 表示CFG节点特征的后向聚合初始表示矩阵, 表示CFG节点特征的初始表示矩阵;

将CFG节点特征的后向聚合初始表示和前向聚合初始经过GNN模块进行图卷积和图注意力处理获得前向聚合矩阵 和后向聚合矩阵 ,对前向聚合矩阵和后向聚合矩阵 进行拼接和最大池化处理获得中间特征图;

公式中, 为第n个GNN模块的输出特征; 为经过第n个GNN模块前向聚合更新后的CFG节点表示; 为经过第n个GNN模块后向聚合更新后的CFG节点表示;||为拼接操作; 为最大池化函数; 为输出特征 中的第2d‑1维度特征; 为输出特征 中的第2d维度特征;

将CFG节点特征经过N个堆叠的GNN模块进行图卷积和图注意力处理获得中间特征图;对中间特征图 进行位置编码信息融合获得第二特征矩阵 ;

将标记序列特征输入至编码器中的codebert预训练模型获得第三特征矩阵 ;对第三特征矩阵 进行位置编码信息融合获得序列特征矩阵 ;将第一特征矩阵和序列特征矩阵 进行特征融合获得标记融合表征 ,过程包括:将序列特征矩阵 与查询权重矩阵相乘获得查询矩阵 ;将第一特征矩阵 与键权重矩阵相乘获得键矩阵 ;将第一特征矩阵 与值权重矩阵相乘获得值矩阵 ;表达公式为:

公式中, 为查询权重矩阵; 为键权重矩阵; 为值权重矩阵;

根据查询矩阵 、键矩阵 和值矩阵 计算获得标记融合表征,表达公式为:

公式中, 为激活函数; 为特征嵌入维度;

将第一特征矩阵 和第二特征矩阵 输入至编码器中的自注意力机制获得抽象代码树表征 和控制流图表征 ,过程包括:将第一特征矩阵 与查询权重矩阵、键权重矩阵以及值权重矩阵相乘获得查询矩阵 、键矩阵 和值矩阵 ;

采用 激活函数根据查询矩阵 、键矩阵 和值矩阵计算获得抽象代码树表征 ;

将第二特征矩阵 与查询权重矩阵、键权重矩阵以及值权重矩阵相乘获得查询矩阵 、键矩阵 和值矩阵 ;

采用 激活函数根据查询矩阵 、键矩阵 和值矩阵计算获得控制流图表征 ;

将标记融合表征 、抽象代码树表征 和控制流图表征 输入至解码单元获得训练代码摘要;

将训练源代码中实际摘要作为真实标签,根据训练代码摘要和真实标签计算训练损失,根据训练损失对代码摘要生成器的参数进行优化,重复迭代直至达到训练终止条件输出训练后的代码摘要生成器。

2.根据权利要求1所述的代码摘要生成方法,其特征在于,通过解析单元对训练源代码进行解析获得标记序列特征、AST节点特征和CFG节点特征,过程包括:通过解析单元对训练源代码进行解析获得代码标记序列、抽象代码树和控制流图;将代码标记序列转换获得标记特征;对抽象代码树和控制流图进行特征提取获得AST节点特征和CFG节点特征。

3.根据权利要求2所述的代码摘要生成方法,其特征在于,将代码标记序列转换获得标记特征,过程包括:所述解析单元包括codebert预训练模型,将所述代码标记序列中代码标记转换为词表索引,将词表索引转换为固定维度的标记嵌入向量,包括为:;

其中,dim为标记嵌入向量的维度, 为在序列中的第i个单词的词表索引,embedding表示所述解析单元中codebert预训练模型的嵌入操作函数, 为标记嵌入向量;

基于各代码标记对应标记嵌入向量构建嵌入矩阵,记为标记特征。

4.根据权利要求2所述的代码摘要生成方法,其特征在于,对抽象代码树和控制流图进行特征提取获得AST节点特征和CFG节点特征,过程包括:由抽象代码树的节点和控制流图的节点中提取AST节点单词序列和CFG节点单词序列,将AST节点单词序列和CFG节点单词序列加上起止标签转换为对应的AST词表索引序列和CFG词表索引序列;表达公式为:;

公式中, 为AST词表索引序列; 为CFG词表索引序列; 表示为AST词表索引序列中第 个词表索引, ; 为AST词表索引序列中词表索引的数量; 表示为CFG词表索引序列中第 个词表索引, ; 为CFG词表索引序列中词表索引的数量; 和 为起止标签;

通过解析单元中codebert预训练模型将AST词表索引序列转换为AST节点嵌入向量,将CFG词表索引序列转换为CFG节点嵌入向量,表达公式为:;

公式中, 为AST节点嵌入向量; 为起止标签 的索引;

为codebert预训练模型; 为CFG节点嵌入向量;

将CFG节点嵌入向量作为CFG节点特征,将AST节点嵌入向量作为AST节点特征。

5.根据权利要求1所述的代码摘要生成方法,其特征在于,对AST节点特征进行图卷积、图注意力和位置编码信息融合获得第一特征矩阵 ,过程包括:将AST节点特征经过GNN模块进行图卷积和图注意力处理获得中间特征图 ;

所述GNN模块包括图卷积神经网络和图注意力神经网络;

将AST节点特征输入至图卷积神经网络获得AST图特征,表达公式为:;

公式中, 表示第n层GNN模块的输出特征, 表示第N+1层图卷积神经网络输出的AST图特征;当n=0时, 为AST节点特征, 表示第n+1层网络的可学习权重,A表示语法抽象树节点的邻接矩阵,为邻接矩阵与单位矩阵的和, 为 的度矩阵, 为度矩阵的半逆,ReLU是一种具体的非线性激活函数;

将AST图特征输入至图注意力神经网络获得中间特征图 ,表达公式为:;

公式中, 表示为AST图特征中节点 的嵌入向量; 表示为AST图特征中节点i的邻居节点j的嵌入向量;W为可学习的权重矩阵, 为可学习的向量; 为激活函数; 为节点 对节点 的原始注意力分数; 为节点 对节点 的原始注意力分数;

为指数函数; 为AST图特征中节点的数量; 为对原始注意力分数进行归一化的注意力权重; 为非线性激活函数;

将AST节点特征经过N个堆叠的GNN模块进行图卷积处理获得中间特征图 ;

对中间特征图 进行位置编码信息融合获得第一特征矩阵 ,表达公式为:

公式中, 为节点i在中间特征图 的位置;PE表示位置编码;dmodel为向量的嵌入维度。

6.根据权利要求1所述的代码摘要生成方法,其特征在于,根据训练代码摘要和真实标签计算训练损失,过程包括:;

公式中, 为训练损失;为预测序列的长度;为词表长度; 为在时间步t中第z个词的实际概率; 为在时间步t中预测词表中第z个词的预测概率。

7.一种基于跨模态信息融合的代码摘要生成系统,其特征在于,包括:摘要生成模块,用于由工具数据库中获取新增源代码,将新增源代码输入至预训练的代码摘要生成器获得新增代码摘要;所述代码摘要生成器包括解析单元、编码单元和解码单元;

数据获取模块,用于由公共数据集中获取训练源代码,通过解析单元对训练源代码进行解析获得标记序列特征、AST节点特征和CFG节点特征;

数据提取模块,用于将标记序列特征、AST节点特征和CFG节点特征输入至编码单元,对AST节点特征和CFG节点特征进行图卷积、图注意力和位置编码信息融合获得第一特征矩阵和第二特征矩阵 ;将第一特征矩阵 和第二特征矩阵 输入至编码器中的自注意力机制获得抽象代码树表征 和控制流图表征 ;

数据融合模块,将标记序列特征输入至编码器中的codebert预训练模型获得第三特征矩阵 ;对第三特征矩阵 进行位置编码信息融合获得序列特征矩阵 ;将第一特征矩阵 和序列特征矩阵 进行特征融合获得标记融合表征 ;

输出模块,将标记融合表征 、抽象代码树表征 和控制流图表征输入至解码单元获得训练代码摘要;将训练源代码中实际摘要作为真实标签,根据训练代码摘要和真实标签计算训练损失,根据训练损失对代码摘要生成器的参数进行优化,重复迭代直至达到训练终止条件输出训练后的代码摘要生成器;

所述数据提取模块对CFG节点特征进行图卷积、图注意力和位置编码信息融合获得第二特征矩阵 ,过程包括:首先对CFG节点特征的前向聚合表示与后向聚合表示赋初值,表达公式为:;

其中, 表示CFG节点特征的前向聚合初始表示矩阵, 表示CFG节点特征的后向聚合初始表示矩阵, 表示CFG节点特征的初始表示矩阵;

将CFG节点特征的后向聚合初始表示和前向聚合初始经过GNN模块进行图卷积和图注意力处理获得前向聚合矩阵 和后向聚合矩阵 ,对前向聚合矩阵和后向聚合矩阵 进行拼接和最大池化处理获得中间特征图;

公式中, 为第n个GNN模块的输出特征; 为经过第n个GNN模块前向聚合更新后的CFG节点表示; 为经过第n个GNN模块后向聚合更新后的CFG节点表示;||为拼接操作; 为最大池化函数; 为输出特征 中的第2d‑1维度特征; 为输出特征 中的第2d维度特征;

将CFG节点特征经过N个堆叠的GNN模块进行图卷积和图注意力处理获得中间特征图;对中间特征图 进行位置编码信息融合获得第二特征矩阵 ;

所述数据融合模块将第一特征矩阵 和序列特征矩阵 进行特征融合获得标记融合表征 ,过程包括:

将序列特征矩阵 与查询权重矩阵相乘获得查询矩阵 ;将第一特征矩阵 与键权重矩阵相乘获得键矩阵 ;将第一特征矩阵 与值权重矩阵相乘获得值矩阵 ;表达公式为:

公式中, 为查询权重矩阵; 为键权重矩阵; 为值权重矩阵;

根据查询矩阵 、键矩阵 和值矩阵 计算获得标记融合表征,表达公式为:

公式中, 为激活函数; 为特征嵌入维度;

输出模块将第一特征矩阵 和第二特征矩阵 输入至编码器中的自注意力机制获得抽象代码树表征 和控制流图表征 ,过程包括:将第一特征矩阵 与查询权重矩阵、键权重矩阵以及值权重矩阵相乘获得查询矩阵 、键矩阵 和值矩阵 ;

采用 激活函数根据查询矩阵 、键矩阵 和值矩阵计算获得抽象代码树表征 ;

将第二特征矩阵 与查询权重矩阵、键权重矩阵以及值权重矩阵相乘获得查询矩阵 、键矩阵 和值矩阵 ;

采用 激活函数根据查询矩阵 、键矩阵 和值矩阵计算获得控制流图表征 。