当前位置: 首页 > 专利查询>武汉大学专利>正文

基于注意力机制的图序列关联的代码摘要方法技术

技术编号:37448881 阅读:16 留言:0更新日期:2023-05-06 09:20
本发明专利技术涉及代码摘要技术领域,涉及一种基于注意力机制的图序列关联的代码摘要方法,包括:一、对代码进行处理,对源代码进行分词得到代码序列;解析代码得到抽象语法树,通过添加序列流和数据流得到代码图;二、通过序列编码器和图编码器分别对代码序列和代码图进行编码,得到序列编码向量和图编码向量;三、在解码器端,输入代码摘要的起始单词<BOS>,在解码器中同时根据序列编码向量和图编码向量分别进行注意力计算,融合后,通过全连接映射计算得到解码器的输出,即预测的单词;四、将上一时刻输出单词作为当前时刻解码器的输入,重复第三步,直到解码器输出遇到终止单词<EOS>结束。本发明专利技术能较佳地进行代码摘要。发明专利技术能较佳地进行代码摘要。发明专利技术能较佳地进行代码摘要。

【技术实现步骤摘要】
基于注意力机制的图序列关联的代码摘要方法


[0001]本专利技术涉及代码摘要
,具体地说,涉及一种基于注意力机制的图序列关联的代码摘要方法。

技术介绍

[0002]代码摘要是一项通过自然语言描述代码的任务,包括代码的功能、用途和注意事项等对于程序理解有益的描述。随着软件代码量越加庞大,近90%的开发时间都是用在软件维护上,如版本迭代、程序理解和bug修复。长时间的程序理解这无疑给软件的开发效率带来的极大的影响。实际上,大部分的代码注释往往都会由于人为的原因导致代码注释的缺失、不足或者注释与代码不匹配等一系列问题。开发人员对于注释的重视程度往往决定了代码注释是否能被有效的理解。高质量的代码摘要便是能极大的降低开发人员在程序理解上的开销,代码摘要通过提供简介的代码描述,能让开发人员迅速理解代码的功能和用法。因此代码摘要生成便是一件对于开发人员非常有意义的工作,高质量的代码注释能极大的减少开发过程中不必要的花销。
[0003]目前的研究中,大多数代码摘要工作的都是基于检索或基于生成的方法。基于检索的代码摘要主要问题是当遇到与数据库中代码相差较大的代码,其表现会很差。目前生成模型的输入主要有三种,分别是代码序列、AST树和图,但是生成模型往往都是通过序列或展平的AST树得到代码的摘要,并没有有效考虑代码的结构信息。

技术实现思路

[0004]本专利技术的内容是提供一种基于注意力机制的图序列关联的代码摘要方法,其能够克服现有技术的某种或某些缺陷。
[0005]根据本专利技术的基于注意力机制的图序列关联的代码摘要方法,其特征在于:包括以下步骤:
[0006]一、对代码进行处理,对源代码进行分词得到代码序列;通过开源工具 tree

sitter解析代码得到抽象语法树,通过添加序列流和数据流得到代码图;
[0007]二、通过序列编码器和图编码器分别对代码序列和代码图进行编码,得到序列编码向量和图编码向量;
[0008]三、在解码器端,输入代码摘要的起始单词<BOS>,在解码器中同时根据序列编码向量和图编码向量分别进行注意力计算,融合后,通过全连接映射计算得到解码器的输出,即预测的单词;
[0009]四、将上一时刻输出单词作为当前时刻解码器的输入,重复第三步,直到解码器输出遇到终止单词<EOS>结束。
[0010]作为优选,序列编码器为Transformer,Transformer采用多头自注意力机制,具体如下:
[0011]对于给定的输入序列X={x1,x2,x3,...,x
n
},其中R是向量空间的集合,
d
model
表示向量的维度;经过计算后的到输出Output={o1,o2,o3,...,o
n
};首先初始化4个d
model
×
d
model
可学习矩阵W
Q
,W
K
,W
V
,W
O
;按照下列公式计算得到多头注意力的输出:
[0012]Output=Concat(head1,...,head
h
)W
O
[0013][0014]Q
i
,K
i
,V
i
=XW
iQ
,XW
iK
,XW
iV
[0015]其中W
iQ
,W
iK
,并且d
k
=d
model
//h;h为头的数量;最终的输出结果由多个头的输出拼接后经过映射得到。
[0016]作为优选,图编码器为图神经网络GAT,具体如下:
[0017]给定输入图G=(V,E,X),其中V,E,X分别表示节点集合、边集和节点向量集;对于e∈E,e∈R
D
×
D
,D是邻接矩阵的维度;GAT由堆叠简单的图注意力层来实现;图注意力针对节点对(i,j)计算注意力系数,计算方式如下:
[0018][0019]其中α
ij
是节点j到节点i的注意力系数,N
i
表示节点i的邻域节点集合;节点的输入特征为n={n1,n2,...,n
N
},且h
i
∈R
D
,h
i
是节点i的隐层向量,N和D分别表示节点的数量和向量维度;节点的输出特征O={o1,...,o
N
},o∈R
D

;W∈R
D
′×
D
是在每一个节点上应用的线性变换权重矩阵,D'为变换矩阵的维度,a是权重向量; LeakyReLU是非线性激活函数,使用softmax进行归一化;
[0020]节点的最终输出按照下列公式得到:
[0021][0022]其中W为线性变换矩阵;σ为非线性激活函数。
[0023]作为优选,步骤三中,对于图编码器的输出G={g1,...,g
n
}和序列编码器的输出 S={s1,...,s
n
};按照下列公式计算得分,利用得分得到序列信息和结构信息的关联:
[0024][0025]score
i,j
=softmax(a
i,j
)
[0026]其中W是可学习的矩阵。
[0027]本专利技术提出了一种基于抽象语法树(AST树)构建的静态代码图SCG,图在AST的基础之上加入了数据流和序列流;分别通过序列编码器和图编码器对两种信息分别编码,通过注意力机制对序列编码信息和图编码信息进行关联。本专利技术综合考虑了序列信息和结构信息,在解码时考虑了对生成单词影响最大的特征编码,能够较佳地进行代码摘要。
附图说明
[0028]图1为实施例1中基于注意力机制的图序列关联的代码摘要方法的流程图;
[0029]图2为实施例1中注意力得分的计算形式示意图。
具体实施方式
[0030]为进一步了解本专利技术的内容,结合附图和实施例对本专利技术作详细描述。应当理解的是,实施例仅仅是对本专利技术进行解释而并非限定。
[0031]实施例1
[0032]如图1所示,本实施例提出了序列

图结合代码摘要模型TGCS,该模型在 Transformer的基础上,结合图神经网络分别对序列和图进行编码。TGCS包括以下步骤:
[0033]一、对代码进行处理,对源代码进行分词得到代码序列;通过开源工具 tree

sitter解析代码得到抽象语法树,通过添加序列流和数据流得到代码图;
[0034]二、通过序列编码器和图编码器分别对代码序列和代码图进行编码,得到序列编码向量和图编码向量;
[0035]三、在解码本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于注意力机制的图序列关联的代码摘要方法,其特征在于:包括以下步骤:一、对代码进行处理,对源代码进行分词得到代码序列;通过开源工具tree

sitter解析代码得到抽象语法树,通过添加序列流和数据流得到代码图;二、通过序列编码器和图编码器分别对代码序列和代码图进行编码,得到序列编码向量和图编码向量;三、在解码器端,输入代码摘要的起始单词<BOS>,在解码器中同时根据序列编码向量和图编码向量分别进行注意力计算,融合后,通过全连接映射计算得到解码器的输出,即预测的单词;四、将上一时刻输出单词作为当前时刻解码器的输入,重复第三步,直到解码器输出遇到终止单词<EOS>结束。2.根据权利要求1所述的基于注意力机制的图序列关联的代码摘要方法,其特征在于:序列编码器为Transformer,Transformer采用多头自注意力机制,具体如下:对于给定的输入序列X={x1,x2,x3,...,x
n
},其中R是向量空间的集合,d
model
表示向量的维度;经过计算后的到输出Output={o1,o2,o3,...,o
n
};首先初始化4个d
model
×
d
model
可学习矩阵W
Q
,W
K
,W
V
,W
O
;按照下列公式计算得到多头注意力的输出:Output=Concat(head1,...,head
h
)W
O
Q
i
,K
i
,V
i
=XW
iQ
,XW
iK
,XW
iV
其中并且d
...

【专利技术属性】
技术研发人员:蔡波于耀翔曾键徽
申请(专利权)人:武汉大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1