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

一种基于对抗迁移学习的预训练漏洞修复方法技术

技术编号:39581845 阅读:7 留言:0更新日期:2023-12-03 19:32
本发明专利技术公开了一种基于对抗迁移学习的预训练漏洞修复方法,包括:构建浅编码器

【技术实现步骤摘要】
一种基于对抗迁移学习的预训练漏洞修复方法


[0001]本专利技术属于软件调试领域,具体涉及一种基于对抗迁移学习的预训练漏洞修复方法


技术介绍

[0002]随着软件漏洞的数量和复杂性的增加,开发人员需要对软件漏洞深入了解,并尽可能的减少对系统功能的影响,大大增加了软件漏洞修复的成本

为了减小软件漏洞修复成本,研究人员提出了自动修复软件漏洞的技术

但是从互联网能够采集到的漏洞修复数据集规模小,给研究人员带来了很大的挑战

[0003]扬州大学在其申请的专利文献“一种基于树的漏洞修复系统及修复方法”(专利申请号:
202210027014.7
,公开号:
CN114547619A
)中提出了一种使用语法树表征代码进行漏洞代码自动修复的技术

该方法首先在
GitHub
上收集漏洞修复数据集,将漏洞修复数据集中的代码转为具有数据流依赖和控制流依赖的语法树
AST
,将所述语法树
AST
进行抽象化和规范化得到
token
序列,然后将所述
token
序列划分为训练集和测试集,将训练集和测试集输入具有相同编码器和解码器数量的
Transformer
模型进行训练和测试

该专利技术利用语法树和
Transformer
模型,实现了对代码的自动修复,提高了代码修复的效率

但是该方法依然存在不足:
[0004](1)该方法仅依赖漏洞修复数据集进行模型训练,在漏洞修复数据集规模较小的现状下,个别
CWE
类型的漏洞在数据集里面数量少或者干扰较强,导致模型未完全学习到该漏洞的特征时,会使模型表现不佳,泛化性

鲁棒性减弱;
[0005](2)该方法对代码数据集的抽象化和规范化处理时,会将数据的函数名

变量

值进行替换,不能让模型学习到代码潜在的语意,导致模型的代码理解能力差;
[0006](3)该方法过度依赖
Transformer
模型生成修复代码,模型会将部分正确代码错误修复,导致模型过拟合

[0007]本专利技术提出了一种基于对抗迁移学习的预训练漏洞修复方法,其优点在于:
[0008](1)本专利技术通过在大型代码数据集上进行预训练后得到预训练的代码生成器模型,使得模型具备更好的代码理解能力

代码生成和补全能力;
[0009](2)本专利技术借助生成对抗网络架构在漏洞修复数据集上对预训练的代码生成器模型进行微调,通过生成对抗网络的对抗训练机制,提升模型的抗干扰能力和修复能力,使得模型具备更高的鲁棒性

泛化性,同时解决模型过拟合的问题

[0010]本专利技术首先在大型代码数据集上进行预训练后得到预训练的代码生成器模型,然后直接使用漏洞修复数据集进行对抗训练,使得模型减少源领域数据的依赖性,模型能够更好的适应目标领域的数据和特征分布,有助于减小源领域和目标领域的差异,并且提高了模型的训练速度,最终使得模型的漏洞修复准确率提升


技术实现思路

[0011]专利技术目的:本专利技术的目的是设计一种泛化能力强

鲁棒性强和修复准确率高的漏洞修复方法,以适应漏洞修复数据集规模小的现状

[0012]技术方案:为了解决上述技术问题,本专利技术设计了一种基于对抗迁移学习的预训练漏洞修复方法,包括以下步骤:
[0013]S100.
构建浅编码器

深解码器架构的代码生成器模型;
[0014]S200.
基于步骤
S100
,利用函数级别的大型代码数据集对所述代码生成器模型使用改进的预训练技术进行预训练,得到预训练的代码生成器模型;
[0015]S300.
基于步骤
S200
,提取所述代码生成器模型的编码器组构建判别器模型;
[0016]S400.
基于步骤
S200
和步骤
S300
,利用所述预训练代码生成器模型和判别器模型构建生成对抗网络;利用函数级别的漏洞修复数据集对所述生成对抗网络进行再训练,得到适用于修复漏洞代码的最优代码生成器模型;
[0017]S500.
基于步骤
S400
,将函数级别的漏洞代码输入所述最优代码生成器模型,得到修复的代码

[0018]进一步的,在步骤
S100
中,步骤
S100
具体为:
[0019]所述编码器和解码器是基于
CodeT5
模型中的编码器和解码器,所述浅编码器

深解码器架构表示代码生成器模型中解码器数量多于编码器数量

[0020]进一步的,在步骤
S200
中,步骤
S200
包括以下步骤:
[0021]S210.
利用初始
Unigram LM
(一元语言模型)分词器将所述函数级别的大型代码数据集转为代码
token
序列,得到预训练的分词器

代码
token
序列;
[0022]S220.
基于步骤
S100
和步骤
S210
,利用改进的因果语言建模技术对所述代码生成器模型进行第一步预训练,得到初步预训练的代码生成器模型;
[0023]S230.
基于步骤
S210
和步骤
S220
,利用改进的
Span Denoising
(跨度去噪)技术对所述初步预训练的代码生成器模型进行第二步预训练,得到预训练的代码生成器模型;
[0024]其中,所述改进的
Span Denoising
技术包括:
[0025]在编码器的输入
token
序列中按
50%
的概率替换
10%

token“[TOKEN 0],,,[ TOKEN n]”为预定义
token“[LABEL 0],,,[LABEL n]”,并在其之前添加特殊
token“[SOM]”;在正确的
token
序列之前添加特殊
token“[EOM]”作为解码器输出的目标
token
序列;让解码器生成被替换的
token
序列“[TOKEN 0],,,[ TOKEN n]”,得到预训练的代码生成器模型

[0026]进一步的,在步骤
S220
中,步骤
S2本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种基于对抗迁移学习的预训练漏洞修复方法,其特征在于,包括以下步骤
:S100.
构建浅编码器

深解码器架构的代码生成器模型;
S200.
基于步骤
S100
,利用函数级别的大型代码数据集对所述代码生成器模型使用改进的预训练技术进行预训练,得到预训练的代码生成器模型;
S300.
基于步骤
S200
,提取所述代码生成器模型的编码器组构建判别器模型;
S400.
基于步骤
S200
和步骤
S300
,利用所述预训练的代码生成器模型和判别器模型构建生成对抗网络;利用函数级别的漏洞修复数据集对所述生成对抗网络进行再训练,得到适用于修复漏洞代码的最优代码生成器模型;
S500.
基于步骤
S400
,将函数级别的漏洞代码输入所述最优代码生成器模型,得到修复的代码
。2.
根据权利要求1所述的一种基于对抗迁移学习的漏洞修复方法,其特征在于,所述的代码生成器模型:浅编码器

深解码器架构;其中,所述编码器和解码器是基于
CodeT5
模型中的编码器和解码器,所述浅编码器

深解码器架构表示代码生成器模型中解码器数量多于编码器数量
。3.
根据权利要求2所述的一种基于对抗迁移学习的漏洞修复方法,其特征在于,所述步骤
S200
包括以下步骤:
S210.
利用初始
Unigram LM
(一元语言模型)分词器将所述函数级别的大型代码数据集转为代码
token
序列,得到预训练的分词器

代码
token
序列;
S220.
基于步骤
S100
和步骤
S210
,利用改进的因果语言建模技术对所述代码生成器模型进行第一步预训练,得到初步预训练的代码生成器模型;
S230.
基于步骤
S210
和步骤
S220
,利用改进的
Span Denoising
(跨度去噪)技术对所述初步预训练的代码生成器模型进行第二步预训练,得到预训练的代码生成器模型;其中,所述改进的
Span Denoising
技术包括:在编码器的输入代码
token
序列中按
50%
的概率替换
10%

token“[TOKEN 0],,,[ TOKEN n]”为预定义
token“[LABEL 0],,,[LABEL n]”,并在其之前添加特殊
token“[SOM]”;在正确的
token
序列之前添加特殊
token“[EOM]”作为解码器输出的目标
token
序列;让解码器生成被替换的
token“[TOKEN 0],,,[ TOKEN n]”,得到预训练的代码生成器模型
。4.
根据权利要求2所述的一种基于对抗迁移学习的漏洞修复方法,其特征在于,步骤
S220
所述改进的因果语言建模技术包括以下步骤:
S221.
在所述代码
token
序列中的
5%

100%
之间按照
50%
的概率选择一个
token
;在所选
token
之前的
token
序列的后面添加一个特殊
token“[GOB]”;将添加特殊
token
后的
token
序列作为模型输入,将所选
token
之后的
token
序列作为模型输出;
S222.
在所述代码
token
...

【专利技术属性】
技术研发人员:黄诚侯靖韦英炜李乐融
申请(专利权)人:四川大学
类型:发明
国别省市:

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

1