首页 / 专利库 / 计算机网络 / 软件缺陷 / 一种基于监督式表示学习的跨项目软件缺陷预测方法

一种基于监督式表示学习的跨项目软件缺陷预测方法

阅读:557发布:2020-05-13

专利汇可以提供一种基于监督式表示学习的跨项目软件缺陷预测方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种监督式表示学习的跨项目 软件 缺陷 预测方法:(1)选择缺陷数据集,对缺陷数据做预处理;(2)以无监督预训练方式训练迁移自 编码器 ,迁移自编码器包括特征编码层和标签编码层;(3)借助迁移交叉验证方法,从源项目所有样本隐层特征表示中选择与目标项目样本隐层特征分布最接近的样本作为验证集,其余作为训练集;(4)对训练集样本进行过 采样 处理;(5)微调迁移自编码器,选择模型超参数以及提早停止策略;(6)将经预处理后的目标项目的数据输入给迁移自编码器,由标签编码层的输出得到最终的预测结果。本发明将源项目样本的标签信息引入到特征表示学习过程中,提高了跨项目 软件缺陷 预测模型 的预测性能。,下面是一种基于监督式表示学习的跨项目软件缺陷预测方法专利的具体信息内容。

1.一种基于监督式表示学习的跨项目软件缺陷预测方法,其特征在于:该方法包括以下步骤:
步骤1)、明确待预测的目标项目和用来训练模型的源项目,并对源项目和目标项目的原始数据进行标准化或归一化预处理操作;
步骤2)、将源项目和目标项目中所有样本的特征向量输入给迁移自编码器,并以无监督预训练方式初步训练迁移自编码器,再由迁移自编码器的特征编码层得到源项目和目标项目所有样本的初步隐层特征表示;
步骤3)、在步骤2)中得到初步特征表示的基础上,借助迁移交叉验证方法,从源项目样本的隐层特征表示中选择与目标项目样本隐层特征表示分布最接近的部分样本作为验证集,剩下的源项目样本作为训练集;
步骤4)、对训练集样本进行过采样处理;
步骤5)、在步骤4)过采样处理后的训练集上继续微调迁移自编码器,并借助验证集上的预测性能选择模型超参数以及提早停止策略完成模型的训练;
步骤6)、迁移自编码器训练完成后,再将目标项目经过预处理的样本数据输入给迁移自编码器,并由其标签编码层得到最终的预测结果。
2.根据权利要求1所述的一种基于监督式表示学习的跨项目软件缺陷预测方法,其特征在于:所述的迁移自编码器是一种具有双编码层结构的自编码器;所述的双编码层为特征编码层和标签编码层;其中,第一层编码层是特征编码层,负责将源项目和目标项目中所有样本的特征向量编码为隐层特征表示,而标签编码层则是在隐层特征表示的基础上实现对样本的分类。
3.根据权利要求1所述的一种基于监督式表示学习的跨项目软件缺陷预测方法,其特征在于:所述迁移自编码器采用不同形式的损失函数;模型预训练过程和微调过程通过调整损失函数,使其包含或不包含标签损失项,分别实现无监督和有监督两种训练方式。
4.根据权利要求3所述的一种基于监督式表示学习的跨项目软件缺陷预测方法,其特征在于:所述无监督训练方式,训练过程中没有引入标签信息,损失函数由重构误差项和隐层特征分布差异项这两部分组成;通过最小化该损失函数,网络可以学到所有样本的隐层特征表示。
5.根据权利要求3所述的一种基于监督式表示学习的跨项目软件缺陷预测方法,其特征在于:所述监督式训练方式,即训练过程引入源项目样本的标签信息,此时的损失函数有
4项内容组成,包括重构误差项、隐层特征分布差异项、源项目样本的标签损失项以及正则损失项。
6.根据权重要求1所述的一种基于监督式表示学习的跨项目软件缺陷预测方法,其特征在于:步骤3)中所述的迁移交叉验证方法,依据特征分布差异性选择与目标项目数据分布接近的部分训练数据作为验证集,并将其余数据作为训练集;所采用的特征变换是通过迁移自编码器得到的。

说明书全文

一种基于监督式表示学习的跨项目软件缺陷预测方法

技术领域

[0001] 本发明属于软件工程应用的软件缺陷预测技术领域,尤其涉及一种基于监督式表示学习的跨项目软件缺陷预测方法。

背景技术

[0002] 软件缺陷预测技术通过从历史缺陷数据中学习并构建预测模型,以此预测当前软件项目中可能存在的缺陷。它可以帮助测试人员快速查找缺陷,极大提升软件测试效率,因而成为当前软件工程领域的一个研究热点。
[0003] 软件缺陷预测的通常做法是,先从软件代码中提取各种特征,例如Halstead度量、McCabe度量、CK度量、MOOD度量、代码变更度量以及其他面向对象度量,将所有代码段以特征向量表示,并根据有无实际缺陷进行标记,然后将这些特征向量以及标注的标签输入给机器学习模型进行训练,并最终构建出软件缺陷预测模型,用来在新的软件代码中预测可能存在的缺陷。
[0004] 过去的软件缺陷预测方法大都基于传统机器学习方法构建软件缺陷预测模型。传统机器学习方法要想取得优良的性能往往需要满足:训练样本和测试样本的数据分布相同或相似、正负样例分布较均衡,并且用于训练的标注样本充足。但在实际应用中,由于人工标注的难度极大,能够用于训练模型的标注样本十分稀少,再加上软件缺陷本身的发生概率极低,标注样本中大部分也是无缺陷样本,有缺陷样本只占到很小的一部分。因此,标注数据稀少、类别不平衡问题就成为软件缺陷预测技术所要面临的最大的两个挑战。
[0005] 对于类别不平衡的研究,目前大部分的工作主要采用数据重采样的方法进行处理,例如随机过采样或者人工合成少数类样本过采样方法等,而对于训练数据稀缺的问题,目前的一种解决思路是利用不同项目的缺陷数据训练预测模型,这就是跨项目缺陷预测技术。由于标注样本稀少,仅仅利用单个项目中获取到的标注数据去训练机器学习模型是不够的,跨项目缺陷预测技术的基本思路是利用其它项目中的缺陷数据(也称为源项目或者源域)训练预测模型,然后再将训练得到的预测模型应用于待预测的软件项目(也称为目标项目或者目标域),这就在一定程度上缓解了训练数据稀缺的问题。
[0006] 然而,跨项目软件缺陷预测的一个困难在于,训练数据和测试数据往往并不能满足分布相同或相近,这就与传统机器学习模型的假设相违背,因此,传统机器学习模型无法直接用于跨项目缺陷预测。近几年,迁移学习方法逐渐开始应用于跨项目软件缺陷预测任务。其中应用最广的一种方法是迁移成分分析方法(Transfer Component Analysis,TCA),该方法属于一种无监督表示学习方法,其特点是在学习表征的过程中无法利用源域样本的标注信息。此外,这类方法通过分治法将无监督特征学习过程和分类器的训练过程割裂开来,例如首先学习源项目和目标项目样本的隐层表示,再在这个新的特征空间中重新训练机器学习分类器。但是分治法本身存在一个问题:在分步解决子问题时,尽管可在子问题上得到最优解,但在子问题上的最优并不意味着就能得到全局问题的最优解。前期学习到的特征对于后期训练分类器而言可能并不合适,这就可能导致最终的软件缺陷预测模型的实际预测能受到影响。

发明内容

[0007] 本发明的一个目的是:为了弥补上述方法的不足,本发明提出一种基于监督式表示学习的跨项目软件缺陷预测方法。该方法借助一种具有双编码层结构的迁移自编码器,在学习隐层特征表示的过程中能同时利用源域样本的标签信息,因而属于一种监督式表示学习方式。此外,通过调整网络的损失函数,分别实现无监督预训练和监督式微调网络的训练方式,在无监督预训练完成得到初步的隐层特征表示后,借助迁移交叉验证方法,在迁移学习背景下实现对训练集和验证集的合理划分,并依据验证集上的预测性能选择模型超参数。
[0008] 本发明的另一个目的是:提供一种名为迁移自编码器的深度学习模型,该模型为我们提供了一种“端对端”的学习方式,在整个学习流程中不再进行人为的子问题划分,而是完全交给深度学习模型直接学到从原始输入到期望输出的映射。相比分治策略,“端对端”的学习方式具有协同增效的优势,有更大可能获得全局最优解。实验表明,该监督式表示学习方法能够提升跨项目软件缺陷预测的效果。
[0009] 本发明的技术方案是:一种基于监督式表示学习的跨项目软件缺陷预测方法,包括以下步骤:
[0010] 步骤1)、明确待预测的目标项目和用来训练模型的源项目,并对源项目和目标项目的原始数据进行标准化或归一化等预处理操作;
[0011] 步骤2)、将源项目和目标项目中所有样本的特征向量输入给迁移自编码器,并以无监督预训练的方式初步训练迁移自编码器,再由迁移自编码器的特征编码层得到源项目和目标项目所有样本的初步隐层特征表示;
[0012] 其中,所述的迁移自编码器是一种具有双编码层结构的新型自编码器。所述的双编码层为特征编码层和标签编码层;其中,第一层编码层是特征编码层,负责将源项目和目标项目中所有样本的特征向量编码为隐层特征表示,而标签编码层则是在隐层特征表示的基础上实现对样本的分类。训练过程中通过最小化源项目样本的标签损失项,实现对源项目样本的监督式学习过程。同时,源项目和目标项目之间的模型权重共享,目标项目的样本可以直接输入给已经训练好的模型,并由模型的标签编码层的输出得到最终的预测结果,从而实现迁移学习目的。
[0013] 步骤3)、通过步骤2)中得到的初步隐层特征表示,借助迁移交叉验证方法,从源项目样本的隐层特征表示中选择与目标项目样本隐层特征表示分布最接近的部分样本(例如取1/3)为验证集,剩下的源项目样本为训练集;
[0014] 步骤4)、考虑到训练集样本中缺陷类与非缺陷类样本严重不平衡,对训练集样本进行过采样处理(例如随机过采样方法或人工合成过采样方法);
[0015] 步骤5)、在步骤4)得到的过采样处理后的训练集上进一步微调迁移自编码器,并借助验证集上的预测性能选择模型超参数以及提早停止策略实现模型的训练;
[0016] 步骤6)、迁移自编码器训练完成后,再将目标项目经过预处理的数据输入给迁移自编码器,并由该网络的标签编码层得到最终的预测结果。
[0017] 其中,步骤2)和步骤5)中的迁移自编码器采用不同形式的损失函数。步骤2)属于一种无监督训练方式,因而训练过程中没有引入标签信息,故此时的损失函数由重构误差项和隐层特征分布差异项这两部分组成。通过最小化该损失函数,网络可以学到所有样本的隐层特征表示,该隐层特征表示具有很好的重构性,并且源项目样本与目标项目各自样本的隐层特征分布接近。步骤5)则属于监督式训练方式,即训练过程引入源项目样本的标签信息,此时的损失函数有4项内容组成,包括重构误差项、隐层特征分布差异项、源项目样本的标签损失项以及正则损失项。模型预训练过程和微调过程通过调整损失函数,使其包含或不包含标签损失项,分别实现无监督和有监督两种训练方式。
[0018] 本发明提出的一种基于监督式表示学习的跨项目软件缺陷预测方法,与现有软件缺陷预测方法相比较,其优点在于:本发明打破传统机器学习方法要求训练集和测试集分布相同或相近的假设,可以从相关项目中迁移信息来提高对当前软件项目数据的学习。并且,与当前的无监督表示学习的跨项目缺陷预测方法不同,本发明所采用的迁移自编码器可以在学习隐层特征表示的过程中充分利用源域样本的标签信息,并且可以实现特征学习和模型构建一步到位的端对端模式,因而可以进一步提升跨项目软件缺陷预测性能。附图说明
[0019] 图1基于迁移自编码器的监督式表示学习方法
[0020] 图2基于监督式表示学习的跨项目软件缺陷预测方法

具体实施方式

[0021] 下面结合附图对本发明作近一步说明。首先结合附图1,对本发明所采用的迁移自编码器进行详细说明。
[0022] 所述的迁移自编码器是一种具有双编码层结构的新型自编码器。所述的双编码层是指特征编码层和标签编码层;其中,第一层编码层是特征编码层,负责将源项目和目标项目中所有样本的特征向量编码为隐层特征表示,而标签编码层则是在隐层特征表示的基础上实现对样本的分类。训练过程中通过最小化源项目样本的标签损失项,实现对源项目样本的监督式学习过程。同时,源项目和目标项目之间的模型权重共享,目标项目的样本可以直接输入给已经训练好的模型,并由模型的标签编码层的输出得到最终的预测结果,从而实现迁移学习目的。
[0023] 迁移自编码器具体结构如下:
[0024] 给定一个带标签的源域数据集 和一个待预测的目标域数据集 m表示输入样本的特征数, 0表示
非缺陷类,1表示缺陷类。ns和nt分别表示源域和目标域的样本数。迁移自编码器的损失函数如下:
[0025]
[0026] 第1项为源域和目标域样本的重构误差项:
[0027]
[0028] 其中,
[0029]
[0030]
[0031] 模型的第1层隐层为特征编码层,编码层有k(k≤m)个节点,编码层输出为该层的权重参数为W1∈Rk×m,偏置参数为b1∈Rk×1。网络第2层是标签编码层,该层有2个节点,其输出为z∈R2×1,该层的权重参数为W2∈R2×k,偏置参数为b2∈R2×1。对于一个测试样例 我们可以估计其属于某类的概率为:
[0032]
[0033] 因此,在模型训练完成后,标签编码层的输出可以用来预测目标域样本。第3个隐层的输出 是特征编码层的重构输出,该层的权重参数为W′2∈Rk×2,偏置参数为b′2∈Rk×1。最后1层的输出为样本的重构输出 该层的权重参数W′1∈Rm×k和b′1∈Rm×1。此外,f为非线性激活函数sigmoid函数。
[0034] 损失函数的第2项是分布差异项,这里采用KL散度来定义:
[0035] Γ(ξ(s),ξ(t))=DKL(Ps||Pt)+DKL(Pt||Ps)  (6)
[0036] 其中,
[0037]
[0038]
[0039] 其中的KL散度是一种衡量两个概率分布差异的非对称散度度量。假设给定两个不同的概率分布P∈Rk×1和Q∈Rk×1,则用Q近似估计P时,从P到Q的信息损失就被定义为这里采用DKL(P||Q)+DKL(Q||P)来衡量源域和目标域的分布差异。通过缩小该项的值,可以使源域和目标域在新的表征空间下的分布差异尽可能缩小。标签损失项的定义如下:
[0040]
[0041] 其中, 即W2的第j行。最后1项是模型的正则损失项:
[0042]
[0043] 整个损失函数存在3个需要选择的系数:α,β和γ。连同编码器的隐层神经元节点数n,这些都属于模型的超参数。不妨设定n的取值范围为[10,50],取值间隔为5;α的取值范围不妨设定为[10,20,50,100,200],β的取值范围设定为[50,100,200,500,1000],γ的取值范围为[0.0001,0.001,0.01,0.1]。为提高超参数搜索效率,这里采用随机搜索方式,最大搜索次数取200。
[0044] 超参数的选择通过交叉验证确定。下面介绍迁移交叉验证划分训练集和测试集的具体过程。本发明采用的特征变换是通过自编码器网络得到的,所以定义非线性分布差异(Nonlinear Distribution Discrepancy,NDD)如下:
[0045]
[0046] 这里通过调整源域样本的权重{αi:xi∈Xs}来最小化NDD距离:
[0047]
[0048] B是上界值(设置为1)避免α发散到无穷大。计算最优α值使其最小化:
[0049]
[0050] 最后,将{αi}从大到小排序,根据{αi}的顺序从中选择1/3的源域样本作为验证集样本,剩下的2/3作为训练集。在划分为数据集以后,对训练集样本进行随机过采样操作,以减轻类别不平衡的影响。
[0051] 基于监督式表示学习的跨项目软件缺陷预测方法如图2所示。以下将结合附图2,对本发明的技术方案进行详细说明,其具体实施步骤如下:
[0052] 1、明确目标项目和源项目,对其进行预处理。本发明是一种跨项目缺陷预测方法,当前待预测的项目为目标项目,用于训练的其他项目为源项目。为统一量纲,我们对源项目和目标项目分别进行归一化预处理,使其输入样本各维度保持在[0,1]之间。min(x.j)和max(x.j)表示第j维的最值:
[0053]
[0054] 2、无监督预训练网络,得到样本的初步隐层特征表示。将源项目和目标项目所有原始数据输入到迁移自编码器中,并以无监督预训练的方式初步训练迁移自编码器,此时的损失函数没有正则项和标签损失项,只有重构误差项和分布差异项。预训练过程中的初始学习率固定为0.01,迭代次数固定为500。
[0055] 3、由迁移交叉验证方法划分训练集和验证集。在第2步得到的源项目和目标项目所有样本的初步隐层特征表示的基础上,由迁移交叉验证方法划分数据集,其中与目标域隐层特征分布最接近的1/3源项目样本作为验证集,剩下的2/3样本作为训练集。迁移交叉验证的具体内容如前所述。
[0056] 4、对训练集样本进行过采样处理。考虑到训练集样本中缺陷类与非缺陷类样本严重不平衡,对训练集样本进行过采样处理。本发明主要采用随机过采样的方式,即随机选择少数类样本进行简单复制使少数类样本总数与多数类样本总数保持一致或近似。通过过采样处理,缓解类别不平衡问题。
[0057] 5、进一步有监督微调自编码器网络。在经过采样处理后的训练集上进一步微调迁移自编码器,并借助验证集选择模型超参数以及提早停止策略实现模型的训练。有监督微调过程中的学习率取0.001,最大训练迭代次数取5000。训练过程中每隔固定迭代次数就查看当前模型的分类性能(主要参考Bal值),并决定是否需要提早停止训练。这里的Bal值是二分类问题中用以衡量检出率和误报率的一个综合性的指标。以表1的二分类混淆矩阵为例:
[0058]
[0059] 表1
[0060]
[0061]
[0062]
[0063] 整个参数微调的过程不仅包括模型参数的微调,也包括超参数的微调。超参数的选择采用随机搜索方式,即设定最大随机搜索次数(例如200次)。每次选定超参数后,都会重新训练网络,并以固定间隔验证当前模型在验证集上的分类性能Bal值,并对当前最优模型予以保存。在达到最大搜索次数后选出其中的最优模型作为最终的缺陷预测模型。
[0064] 6、将目标项目数据输入给自编码器得到预测结果。将目标项目经预处理后输入给迁移自编码器网络,并由网络的标签编码层得到最终的预测结果。
[0065] 以上各步骤可整理为如下表2所示的完整过程:
[0066]
[0067]
[0068] 表2
[0069] 以上内容对本发明所述基于监督式表示学习的跨项目软件缺陷预测方法进行了详细的说明,但显然本发明的具体实现形式并不局限于此。对于本技术领域的一般技术人员来说,在不背离本发明的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈