【技术实现步骤摘要】
一种基于对抗迁移学习的预训练漏洞修复方法
[0001]本专利技术属于软件调试领域,具体涉及一种基于对抗迁移学习的预训练漏洞修复方法
。
技术介绍
[0002]随着软件漏洞的数量和复杂性的增加,开发人员需要对软件漏洞深入了解,并尽可能的减少对系统功能的影响,大大增加了软件漏洞修复的成本
。
为了减小软件漏洞修复成本,研究人员提出了自动修复软件漏洞的技术
。
但是从互联网能够采集到的漏洞修复数据集规模小,给研究人员带来了很大的挑战
。
[0003]扬州大学在其申请的专利文献“一种基于树的漏洞修复系统及修复方法”(专利申请号:
202210027014.7
,公开号:
CN114547619A
)中提出了一种使用语法树表征代码进行漏洞代码自动修复的技术
。
该方法首先在
GitHub
上收集漏洞修复数据集,将漏洞修复数据集中的代码转为具有数据流依赖和控制流依赖的语法树
AST
,将所述语法树
AST
进行抽象化和规范化得到
token
序列,然后将所述
token
序列划分为训练集和测试集,将训练集和测试集输入具有相同编码器和解码器数量的
Transformer
模型进行训练和测试
。
该专利技术利用语法树和
Transformer
模型,实现了对代码的自动修复,提高了代码修复的效率
。 ...
【技术保护点】
【技术特征摘要】
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
...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。