(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202210049022.1
(22)申请日 2022.01.17
(71)申请人 扬州大学
地址 225009 江苏省扬州市大 学南路88号
(72)发明人 李斌 张浩宇 孙小兵 唐奔
薄莉莉 吴潇雪
(74)专利代理 机构 南京苏高专利商标事务所
(普通合伙) 32204
专利代理师 张弛
(51)Int.Cl.
G06F 11/36(2006.01)
G06F 8/65(2018.01)
G06F 40/211(2020.01)
G06F 40/289(2020.01)
G06F 40/30(2020.01)G06N 3/04(2006.01)
G06N 3/08(2006.01)
(54)发明名称
一种基于预训练模型的方法级程序修复系
统及修复方法
(57)摘要
本发明公开了一种基于预训练模型的方法
级程序修复系统及修复方法, 包括构建训练数据
集; 对预训练模型GraphCodeBert进行训练得到
训练好的GraphCodeBert模型; 对基于Sequence ‑
to‑Sequence架构的翻译模型进行训练得到训练
好的翻译模 型; 将新的存在缺陷的程序进行处理
并输入至训练好的翻译模型中, 输出通过测试用
例的候选补丁序列, 并将输出的候选补丁序列作
为 正 确补丁 。本发 明 使 用了 预 训练 模 型
GraphCodeBert, 可以挖掘源代码中缺陷语句及
其上下文之间的语法、 语义和结构信息, 能够更
好地学习缺陷的特征, 从而提高代码补丁的质
量。
权利要求书5页 说明书10页 附图3页
CN 114546828 A
2022.05.27
CN 114546828 A
1.一种基于预训练模型的方法级程序修复系统, 其特 征在于, 包括:
训练数据集构 建模块, 用以从github开源社 区项目中收集存在缺 陷的Java代码文件以
及修复该缺陷提交的补丁文件, 使用所述Java代码文件和所述补丁文件构建训练数据集;
预训练模型训练模块, 用以将所述训练数据集中的代码语句输入至代码文本摘要生成
模型中生 成自然语 言文本Text, 同时通过所述代码 语句生成抽象语法树AST, 通过该抽象语
法树AST构建数据流图DFG并生 成代码变量序列, 将所述自然语言文本Text、 buggy ‑fixed方
法对以及所述代码变量序列进行 组合, 再通过BP E分词生成Token序列, 将该Token序列输入
至预训练模型Graph CodeBert中进行训练, 得到训练好的Graph CodeBert模型;
翻译模型训练模块, 用以通过所述训练好的GraphCodeBert模型得到Encoder向量和
Decoder向量, 使用所述Encoder向量和所述Decoder向量对基于Sequence ‑to‑Sequence架
构的翻译模型进行训练, 得到训练好的翻译模型;
程序修复补丁生成模块, 用以将新的存在缺陷的程序进行数据 预处理得到该程序中缺
陷所在的Java方法, 将所述Java方法进行预处理得到对应的词向量, 将所述词向量输入至
所述训练好的翻译模 型中预测候选Token序列, 使用BP E分词法还原所述候选Token序列, 并
生成候选补丁序列, 使用所述候选补丁序列替换所述Java方法中的缺陷语句, 并使用测试
用例验证所述候选补丁的正确 性, 输出通过测试用例的候选补丁序列, 并将输出 的候选补
丁序列作为正确补丁。
2.根据权利要求1所述的基于预训练模型的方法级程序修复系统, 其特征在于: 在训练
数据集构建模块中,
从github开源社区项目中收集存在缺陷的Java代码文件以及修复该缺陷提交的补丁
文件, 用以构建bug gy‑fixed方法对并作为训练数据集, 其中fixed方法作为预训练数据;
对于训练数据 集, 选取其 中仅修复单行语句的b uggy‑fixed方法对, 去除方法长度大于
等于设定阈值的数据, 去除重复出现的方法。
3.根据权利要求2所述的基于预训练模型的方法级程序修复系统, 其特征在于: 在预训
练模型训练模块中,
通过代码文本摘要生成模型将buggy ‑fixed方法对转化为自然语言文本Text; 使用开
源工具Tree ‑sitter给buggy ‑fixed方法对构建抽象语法树AST, 利用抽象语法树AST构建数
据流图DFG并通过该数据流图DFG生成变量序列; 将自然语言文本、 buggy ‑fixed方法对以及
变量序列组合为序列并按字词分 隔, 利用BP E分词法将组合的序列进 行拆分并重组为Token
序列, 该Token序列是以Token为单位的序列; 将Token序列输入至预训练模型
GraphCodeBert中进行训练, 得到训练好的GraphCodeBert模型; 将buggy ‑fixed方法对输入
至训练好的Graph CodeBert模型并得到对应的i nputs向量和outputs向量。
4.根据权利要求3所述的基于预训练模型的方法级程序修复系统, 其特征在于: 在翻译
模型训练模块中,
为inputs向量 生成位置编码Positi onal Encoding:
权 利 要 求 书 1/5 页
2
CN 114546828 A
2其中, 2i表示偶数, 2i+1表示奇数, pos表示Token在序列中的绝对位置, dmodel表示词向
量的维数;
将位置编码Positional Encoding与inputs向量相加, 再通过权值矩阵WQ、 WK和WV将添
加过位置编码的i nputs向量分别转变成Querys向量、 K eys向量和Values向量:
MultiHead(Q,K,V)=Co ncat(head1,…,headh)WO
其中, Concat表示向量的拼接操作, headi表示词向量通过矩阵WQ、 WK和WV计算出的
Attention值, MultiHead(Q,K,V)表示计算出的Attention值组成的矩阵, Q表示Querys向
量, K表示Ke ys向量, V表示Values向量, C oncat(head1,…,headh)表示一共有h个矩阵拼接起
来, WO表示权值矩阵;
计算Token序列中To ken之间的相关性得分:
score=Q·KT
其中, Q表示 Querys向量, KT表示Keys向量的转置;
将计算出的相关性得分 score进行归一 化:
其中, dk表示K向量的维度;
通过softmax函数, 将归一化后的相关性得分score转换成[0,1]之间的概率分布, 再乘
上对应的Values向量计算出A ttention值:
将得到的每 个Token对应的A ttention值进行拼接;
将拼接后的Attention值通过残差连接和层归一化操作之后输入一个两层的全连接前
馈网络Ful ly ConnectedFeed Forward Networks:
FFN(x)=max(0,xW1+b1)W2+b2
其中, x为输入 全连接前馈网络之前的向量, W1、 W2表示权值矩阵, b1、 b2表示偏置量;
将全连接前馈网络的输出向量进行残差连接和层归一 化操作得到新的向量;
将上述过程进行迭代, 迭代六次之后得到最终的Encoder向量;
为outputs向量计算并添加位置编码Positional Encoding, 将多头注意力Multi ‑Head
Attention进行Mask处理得到Masked Multi‑Head Attention, 再经过残差连接和层归 一化
操作之后生成Querys向量; 通过Querys向量与Encoder向量的Keys 向量和Values向量计算
多头注意力Multi ‑Head Attention, 然后经过残差连接和层归一化操作后输入至全 连接前
馈网络; 将全连接前馈网络的输出向量经 过残差连接和层归一 化操作, 得到新的向量;
将上述过程进行迭代, 迭代六次之后得到最终的Decoder向量;
使用Encoder向量和Decoder向量训练基于Sequence ‑to‑Sequence架构的翻译模型, 得
到训练好的翻译模型。权 利 要 求 书 2/5 页
3
CN 114546828 A
3
专利 一种基于预训练模型的方法级程序修复系统及修复方法
文档预览
中文文档
19 页
50 下载
1000 浏览
0 评论
0 收藏
3.0分
温馨提示:本文档共19页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 SC 于 2024-02-18 22:33:53上传分享