standard library
(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

PDF文档 专利 一种基于预训练模型的方法级程序修复系统及修复方法

文档预览
中文文档 19 页 50 下载 1000 浏览 0 评论 0 收藏 3.0分
温馨提示:本文档共19页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 一种基于预训练模型的方法级程序修复系统及修复方法 第 1 页 专利 一种基于预训练模型的方法级程序修复系统及修复方法 第 2 页 专利 一种基于预训练模型的方法级程序修复系统及修复方法 第 3 页
下载文档到电脑,方便使用
本文档由 SC 于 2024-02-18 22:33:53上传分享
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。