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

摘要:

权利要求书:

1.一种基于多粒度特征融合的代码摘要生成方法,其特征在于,包括以下步骤:

步骤1,对数据集中样本进行预处理操作,将源代码处理为词元序列、抽象语法树、控制流图三种粒度特征,以获取代码整体语义信息;

步骤2,搭建源代码多粒度特征编码器,基于词元序列、抽象语法树和控制流图三种粒度特征的数据规模和数据结构差异,设置不同的编码方式,并获得各个粒度特征的上下文向量;

步骤3,对不同粒度特征编码器的输出进行基于交叉注意力计算实现粒度特征融合;

步骤4,将融合后所得到的具有抽象语法树AST特征的词元序列融合特征与控制流图融合特征输入到基于Transformer的解码器中,通过每个时间步得到的词表中所有单词的输出概率,输出当前时间步预测单词,并最终组成摘要;

步骤1包括如下步骤:

步骤1.1,获取源代码的词元序列特征:对源代码中词元序列的函数名称进行标记,将函数名作为序列的自然语言NL部分,所标记的位置统一替换为func name,再将源码分词后的序列作为程序语言PL部分,自然语言NL部分和程序语言PL部分合并后作为整体词元序列;

步骤1.2,获取源代码的抽象语法树特征:对于Python语言,通过抽象语法树AST模块的ast.dump()方法获取源代码的抽象语法树AST字符串表示,采用一种抽象语法树AST图结构的生成方法,将抽象语法树AST字符串生成树形结构表示:筛选出抽象语法树AST字符串中的空值属性并进行删除,对抽象语法树AST字符串以节点为单位进行划分,并保留括号以获得节点间结构层次信息;根据括号表示的源代码结构,将每个划分出的节点指向节点唯一的父节点,从而构建完整的树形结构;

对于Java语言,通过Javalang模块来获得源代码抽象语法树AST的字符串表示;

步骤1.3,获取源代码的控制流图特征:在Python中pycfg模块的基础上引入可识别的节点类型,并纠正潜在的错误路径,使得生成的控制流图CFG图结构由基于语句的节点组成,连接所有节点可重构代码的内容;对于Java语言,使用anger工具对抽象语法树AST特征进行再处理,并结合Soot开源工具来获得控制流图CFG信息;

步骤1.4,使用字节对编码BPE算法对源代码所有特征,即词元序列、抽象语法树和控制流图三种粒度特征,进行分词并映射为词汇表中的唯一索引,通过词表索引最终嵌入为稠密向量,对于词元序列、抽象语法树、控制流图三种粒度特征,分别设置特征序列的最大长度,小于最大长度的序列以标记进行填充,截断大于最大长度的序列;

对于词元序列,在词元序列所对应的词表索引序列的开头与结尾分别添加对应词表中索引,以满足预训练模型输入格式;

对于抽象语法树AST,利用最大池化操作将分词后词元序列数大于一的节点聚合为单个向量表示;

对于控制流图CFG,利用CodeBERT模型,将每个节点视作词元序列进行预训练,以第一个输出的标记的嵌入向量表示节点的整体含义。

2.根据权利要求1所述的方法,其特征在于,步骤2包括如下步骤:

步骤2.1,搭建词元序列token编码器;

步骤2.2,搭建抽象语法树AST编码器;

步骤2.3,搭建控制流图CFG编码器。

3.根据权利要求2所述的方法,其特征在于,步骤2.1包括:通过对词元序列进行编码来获得基础的语法信息,使用CodeBERT模型作为词元序列编码器,编码过程表示为:其中, 是经过CodeBERT模型预训练所直接输出的词元序列的上下文向量,是经过全连接层训练后输出的词元序列的上下文向量, 为经过全连接层微调后的词元序列特征上下文向量构成的矩阵,l代表词元序列长度,dmodel为词元嵌入维度,Wt为全连接层。

4.根据权利要求3所述的方法,其特征在于,步骤2.2包括:采用先序遍历的方式对抽象语法树AST的节点进行序列化,并通过数组存储抽象语法树AST中叶子节点在先序遍历序列N×N N×N中的索引序列,定义S∈R 矩阵与P∈R 矩阵分别存储节点之间的父子关系与兄弟关系,N为节点总数;将由上至下与由左至右定义为正方向,如果序列中第i个节点为第j个节点的祖父节点,则第i个节点和第j个节点的最短路径距离为2,记作pji=2,同时有pij=-2;

对两种类型的关系,即父子关系与兄弟关系,设置最大相对距离阈值k,如果两个节点之间相对距离超过k,判定两个节点之间没有关系,并将矩阵中对应位置设置为无穷大,祖先后代关系矩阵定义具体规则为:其中,PAR(i,j)表示当节点i是节点j的后代节点或祖先节点时,节点i与节点j之间的相对距离;SIB(i,j)表示当节点i与节点j互为兄弟节点时,节点i与节点j之间的水平相对距离;pij代表父子关系中第i个节点与第j个节点的最短路径距离,sij代表父兄弟关系中第i个节点与第j个节点的最短路径距离,接下来,将矩阵中存储的节点间相对距离信息转换为相对位置嵌入,使用中间参数rji统一表示pji或sji,并根据rji的值来获得唯一的相对距离指数:其中,δ(i,j)是第i个节点与第j个节点的相对距离指数,如果一个节点与第i个节点的相对距离指数大于0,则判定所述节点是与第i个节点具有强关系的节点;

采用如下公式计算第i个节点与第j个节点之间的相关性:

其中ai,j代表第i个节点与第j个节点的关系相关性,xi与xj分别代表第i个节点的嵌入和第j个节点的嵌入;Q是基于内容的查询函数,K是基于内容的关键函数, 是基于相对距离指数δ(i,j)的查询函数, 是基于相对位置δ(i,j)的关键函数,T表示转置。

5.根据权利要求4所述的方法,其特征在于,步骤2.3包括:使用图卷积网络GCN对控制流图CFG嵌入矩阵进行初步特征融合,公式为:(l) (l+1)

其中,H 代表l层的控制流图CFG节点的特征矩阵,H 代表更新后的CFG节点特征矩阵,σ代表sigmoid数学函数,为包含控制流图CFG内节点连接信息的邻接矩阵,为 的度(l)矩阵, 代表度矩阵的逆平方根,W 表示可学习的权重矩阵;N(i)代表节点i的邻居节点集合,j指代节点i的任一邻居节点,di代表节点i的度数,dj代表节点j的度数, 表示进行第l次迭代时节点j的特征向量, 表示进行第l+1次迭代时节点i的特征向量;

通过多头自注意模块对节点特征进行更新,公式为:

其中,xc代表控制流图CFG的特征矩阵,V代表值函数,Hcfg为控制流图CFG节点序列的最终全局表示。

6.根据权利要求5所述的方法,其特征在于,步骤3包括如下步骤:

步骤3.1,对于抽象语法树特征矩阵,在经过AST编码器的解耦注意力编码后,通过预先存储的叶子节点索引信息,从抽象语法树AST整体特征矩阵中提取出其中的叶子节点特征矩阵,所述叶子节点特征矩阵用于与词元序列编码器中生成的上下文表示向量进行交叉注意力融合;

步骤3.2,对不同粒度特征进行融合,采用如下公式将三个不同的粒度特征的中间表示融合在一起:其中,HTok代表经过词元序列编码器处理后的上下文向量,HCfg代表经过控制流图CFG编码器处理后的上下文向量,HAst代表经过抽象语法树AST编码器处理后的上下文向量,HAst_tok代表从抽象语法树AST中抽取出的叶子节点序列,Hcross_Token为词元序列粒度特征与抽象语法树粒度特征融合后的特征向量,Hcross_AST为控制流图粒度特征与抽象语法树粒度特征融合后的特征向量,Softmax是归一化指数函数;通过聚合词元序列,抽象语法树,控制流图三个不同粒度的特征,获得融合后代码特征的最终全局表示。

7.根据权利要求6所述的方法,其特征在于,步骤4包括如下步骤:

步骤4.1,搭建解码器,解码器包括N个堆叠的解码器层,每个解码器层分为三个部分,第一部分包括掩码多头自注意力、残差连接与归一化;第二部分包括交叉注意力,残差连接与归一化,其中交叉注意力用来处理步骤3获得的最终全局表示;第三部分包括前馈网络、残差连接和归一化,用于捕捉深层次的特征;

步骤4.2,利用一个维度为嵌入维度到词表容量大小的投影层与softmax激活函数来得到每个时间步中词表中所有词元的输出概率,并且选取在各时间步中最高概率对应的索引为本时间步中的最终输出,最终输出即词表索引,词表索引根据词表生成最终的代码摘要。

8.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述的方法的步骤。

9.一种存储介质,其特征在于,存储有计算机程序或指令,当所述计算机程序或指令在计算机上运行时,执行如权利要求1至7中任一项所述的方法的步骤。