System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于软件调试与人工智能,尤其涉及一种基于扰动和冻结预训练模型的程序自动修复方法。
技术介绍
1、程序自动修复是指通过自动化的工具对有缺陷的代码生成修复后的补丁,减少开发人员调试代码的成本,提高开发效率。
2、现有研究大多通过深度学习方法训练模型来自动生成补丁,如基于神经机器翻译的模型和基于预训练模型。然而使用基于神经机器翻译模型的修复方案受限于训练数据集匮乏以及简单的模型架构,模型无法充分理解程序的语义,修复效果不佳,对于使用预训练模型的方案,由于预训练模型和程序修复任务之间存在过拟合问题,模型仍然只能达到次优的修复效果,并且因为预训练模型的参数量巨大,在训练过程中需要花费大量时间和计算资源。
技术实现思路
1、为了解决目前程序修复方案修复效果不佳以及训练成本过高的问题,本专利技术提出了一种基于扰动和冻结预训练模型的程序自动修复方法,包括以下4个步骤:
2、步骤1,构建程序缺陷修复数据集;
3、所述步骤1,构建程序缺陷修复数据集,包含以下步骤:
4、步骤1.1,在开源代码仓库的代码提交历史中,查询提交信息包含缺陷修复的历史记录;
5、步骤1.2,从缺陷修复历史记录中,提取缺陷代码、代码上下文、正确补丁,构建数据集;
6、步骤1.3,对数据集进行数据清洗,过滤数据集中重复的和修复代码缺失的数据;
7、步骤2,通过扰动和冻结的方法微调预训练模型;
8、所述步骤2,微调预训练模型,包
9、步骤2.1扰动预训练模型参数;
10、根据参数矩阵的方差,向不同的参数矩阵添加不同强度的噪声,帮助模型更好地适应下游任务的数据,缓解预训练阶段模型的过拟合问题;
11、步骤2.2,冻结模型的编码器;
12、执行该步骤的原因是,代码修复任务是一种生成类的任务,仅冻结编码器,能够保留模型在原始数据集上学习到的语义信息和修复能力,同时减少训练参数量,加快训练速度,节约计算资源。
13、步骤3,通过模型的多个检查点生成补丁;
14、所述步骤3,通过模型的多个检查点生成补丁,包含以下步骤:
15、步骤3.1,在模型训练阶段,保存k(k=5)个步骤中的检查点;
16、步骤3.2,在模型推理阶段,对需要修复的缺陷代码,将缺陷代码和代码上下文作为检查点的输入,在k个检查点上使用束搜索,在每个检查点上为缺陷代码生成n(n=100)个候选补丁。
17、步骤4,补丁排序和验证;
18、所述步骤4,补丁排序和验证,包括以下步骤:
19、步骤4.1,合并k个候选补丁列表,首先过滤掉重复的补丁,然后根据补丁的排名和置信度分数排序,得到最终的候选补丁列表;
20、步骤4.2,对于候选列表中top-n(n=100)的补丁,运行对应的测试套件,检查是否能够通过所有的测试用例。
21、执行该步骤的原因是,在列表中排名更靠前的补丁是正确补丁的概率更高,通过仅验证top-n个补丁可以减轻验证阶段的负担;
22、最后输出所有通过测试用例的补丁,完成程序修复。
23、与现有技术相比,本专利技术的有益效果:
24、本专利技术在模型训练阶段,通过基于矩阵的扰动方法在预训练模型的参数中增加噪声,缓解预训练模型与下游任务的过拟合问题,提升模型的修复性能,通过冻结编码器网络,降低微调时需要训练的参数量,减少模型训练需要消耗的时间和计算资源,此外,在模型训练过程中,应用检查点集成策略,保存多个模型的检查点,在推理阶段使用多个检查点生成补丁并验证,使用多个检查点更好地捕获缺陷修复数据中的多样性。
25、总的来说,本专利技术的方法能够降低模型训练的成本,同时提高修复成功率。
本文档来自技高网...【技术保护点】
1.一种基于扰动和冻结预训练模型的程序自动修复方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的方法,其特征在于,所述步骤2,通过扰动和冻结的方法微调预训练模型,进一步包括:
【技术特征摘要】
1.一种基于扰动和冻结预训练模型的程序自动修复方法,其特征在于,包括以下步骤:
2.根...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。