Duplicate Bug Report Detection Using Dual-Channel Convolutional Neural Networks翻译

Duplicate Bug Report Detection Using Dual-Channel Convolutional Neural Networks翻译

  1. ABSTRACT

开发人员依靠错误报告来修复错误,错误报告通常在bug跟踪系统中存储和管理。由于表达习惯不同,不同的报告者可能会使用不同的表达方式来描述错误跟踪系统中的同一错误。结果,错误跟踪系统通常包含许多重复的错误报告。自动检测这些重复的错误报告将节省大量的错误分析工作。先前的研究发现,深度学习技术可有效地检测到重复的错误报告。受最近自然语言处理(NLP)研究的启发,我们提出了一种基于双通道卷积神经网络(DC-CNN)的重复错误报告检测方法。我们通过串联表示错误报告的两个单通道矩阵,提出了一种新颖的错误报告对表示形式,即双通道矩阵。将此类错误报告对馈送到CNN模型以捕获错误报告之间的相关语义关系。然后,我们的方法使用关联功能对一对错误报告是否重复进行分类。我们对来自三个开源项目的三个大型数据集(包括Open Office,Eclipse,Net Beans和更大的组合数据集)评估了我们的方法,分类的准确性分别达到0.9429、0.9685、0.9534和0.9552。这种性能优于两种也使用深度学习技术的最新方法。结果表明,我们的双通道矩阵表示法可有效地检测重复的错误报告。

  1. INTRODUCTION

现代软件项目使用错误跟踪系统(例如Bugzilla)来存储和管理错误报告,由于错误报告始终以自然语言编写,因此可以用许多不同的方式描述同一错误。有了大量的错误报告,手动检测重复的错误报告是一个费力的过程。提供自然语言编写的错误报告的标准样式是不可能的。因此,自动重复错误报告检测是一项有意义的任务,可以帮助避免重复修复同一错误。近年来,已经提出了许多自动重复错误报告检测技术来解决这个问题。其中一些方法,例如主题模型(topic models)重点在于根据文字描述计算相似度;还采用了其他一些方法通过自学习算法挖掘潜在特征,例如学习排名(Learning to Rank ,L2R)支持向量机(SVM)。典型的文本相似性技术很难基于关键字检测重复的错误报告,最近,最先进的深度学习技术(state-of-the-art deep-learning techniques)已被证明在自然语言处理(NLP)上优于传统方法。Deshmukh等首先提出了一种深度学习方法来检测重复的错误报告,他们使用连体单层神经网络(Siamese Single Layered Neural Network)来处理结构化信息, 卷积神经网络(CNN)进行过程描述,并使用长短期记忆(LSTM)进行过程摘要。这两个错误报告分别用作编码输入,然后计算这两种编码以获得相似性。Budhiraja等提取错误报告中的非结构化信息(摘要和描述),并使用词嵌入将每个错误报告转换为矩阵。他们对矩阵的每一列取平均值,以获得固定尺寸的矢量来表示错误报告。将代表错误报告的两个向量串联起来,放进深度神经网络,以预测两个错误报告的相似性。
在本文中,我们通过构建双通道卷积神经网络(DC-CNN)模型提出了一种新颖的重复错误报告检测方法。在我们的方法中,通过使用词嵌入将每个错误报告转换为二维矩阵。该矩阵类似于灰度图像,因此我们将其称为单通道矩阵。我们没有像Deshmukh等人那样分别编码两个报告,而是将两个错误报告的两个单通道矩阵组合成一个双通道矩阵来表示一个错误报告对。
已经发现深度学习技术对于处理文本分类是有效的。与其他深度神经网络模型(例如递归神经网络(RNN)和长期短期记忆(LSTM))相比,CNN可以处理多通道输入。因此,我们选择CNN来构造一个分类器,该分类器旨在通过使用不同大小的内核来捕获上下文词之间的关系。

**

  1. CONTRIBUTIONS

**
(1)我们提出了一种使用双通道CNN模型的新颖的重复bug报告检测方法。此方法在bug报告中同时使用了结构化信息和非结构化信息。我们方法的新颖之处在于使用双通道矩阵表示错误报告对。此类对将被送到CNN,以提取两个错误报告之间的关联特征。最后,我们的方法使用关联功能对一对错误报告是否重复进行分类。
(2)我们将我们的方法与Deshmukh等人提出的两种基于深度学习的最新方法进行了比较。 (Siamese Networks)和Budhiraja等(DWEN)涉及三个大型开放源代码项目(Open Office,Eclipse和Net Beans),以及包含这三个项目的较大数据集,总共包含531,267个错误报告对。实验结果表明我们的方法优于最新的基于深度学习的方法来检测重复的错误报(the state-of-the-art deep-learning-based approaches for duplicate bug report detection)
**

  1. APPROACH

**
图1展示了DC-CNN的总体框架,该框架包含三个阶段:数据准备,训练和部署。在数据准备阶段,从错误报告中提取了有用的字段,包括组件,产品,摘要和描述。对于每个错误报告,结构化信息和非结构化信息都一起放入文本文档中。经过预处理后,所有错误报告的文本都会被收集并形成一个语料库,word2vec模型用于捕获语料库上的语义规则。我们将文本表示的每个错误报告转换为一个单通道矩阵。为了研究错误报告之间的关系,我们将单通道矩阵的报告合并为以双通道矩阵表示的错误报告对。然后,我们将其中一部分作为训练集,将另一部分作为测试集。在训练阶段,我们将训练集作为输入来训练CNN模型。在部署阶段,将测试集输入经过训练的模型,以预测每个错误报告对的相似性,这是一个独立的概率。然后将相似性与设置的阈值进行比较,以将一对错误报告分类为重复。

  1. Data Preparation

    Data Extraction bug报告由结构化信息(例如产品,组件,优先级,版本等)和非结构化信息(例如摘要和描述)组成。结构化信息通常是可选属性,而非结构化信息是bug的文本描述。在我们的实验中,我们仅考虑产品,组件,摘要和描述,并将它们放入每个错误报告的单个文本文件中。对于表2中所示的错误报告#11112,在提取数据后,我们获得了包含结构化信息和非结构化信息的一段文本:
    Preprocessing 对于每个bug报告,我们执行典型的预处理步骤,包括标记化,词干,停用词删除和大小写转换。我们使用Lucene的StandardAnalyzer(用于Apache的全文本搜索引擎工具包)进行预处理,删除停用词时,我们使用英语停用词的标准词汇表。我们发现,即使在两个完全不相关的报告中,也存在一些相同的词。这些单词通常是非常专业的单词,包括java,com或org,由于频繁出现,我们还将它们添加到停用词列表中。经过上述处理后,仍然有一些孤立的数字是无意义的非英语字母,例如文本中留下的日语,因此我们将其删除。
    Dual-Channel Matrix Presentation 经过预处理后,所有错误报告中的所有单词都由一个语料库组成。我们在语料库上使用word2vec和单词连续袋(CBOW)模型来获取每个单词的单词向量,并将单词向量维设置为20。然后,我们可以获得每个错误报告的二维矩阵。当新的错误报告包含不在语料库中的单词时,将该单词设置为0向量。由于CNN的输入要求为固定形状,并且错误报告的长度不同,因此我们采用了截断策略。超过300个单词的部分将被丢弃,当文本少于300个单词时,将以零向量进行补充。与灰度图像类似,我们也可以将其称为二维矩阵单通道矩阵。
    Deshmukh等人使用的暹罗网络分别对两个错误报告进行编码。然后,操作两个错误报告的编码以获得它们的相似性。我们的方法旨在找到一个新的错误报告对表示形式,以避免对两个错误报告进行单独编码。在图像领域中,灰度图像是单通道矩阵,而彩色图像是多通道矩阵,可以将其视为多个单通道矩阵的组合。受此启发,我们尝试将两个单通道矩阵合并为一个双通道矩阵以表示错误报告对,然后将其标记为重复(1)或非重复(0)。此过程如图2所示。
    与单通道相比,使用双通道错误报告对表示有一些好处。首先,这两个报告可以由CNN共同处理。因此,提高了训练速度。其次,发现使用双通道数据训练CNN模型可以实现较高的准确性。对于双通道CNN架构,它可以通过对输入进行卷积捕获bug报告之间的语义关系,该输入是从错误报告转换的两个单通道矩阵的串联。
    **

  2. CNN Model

**
为了从错误报告对中提取功能,我们在每个卷积层中设置了三种不同大小的内核。因此,在第一卷积层中有三个分支。对于三个分支的每一个分支在第二个卷积层中仍然存在三个新分支。由于三个分支的架构非常相似,因此图3展示了CNN模型的整体工作流程,其中仅详细介绍了第一卷积层的一个分支。所有卷积操作都使用Conv2D。表3提供了有关我们整个CNN模型的详细参数设置。对于超参数,学习率设置为0.001,batch_size为64,Adam用作优化器。此外,我们采用了早期停止策略。当验证损失不再落在5个纪元以内时,模型将停止训练。在第一卷积层中,存在n_{k1}核k1∈R^{d\times k_w},其中d是核的长度,而k_w是核的宽度。由于输入矩阵的每一行都代表一个单词,因此这些内核的宽度k_w相同且等于单词向量的维数m。在第一次卷积之后,双通道矩阵的两个通道合并为一个通道。因此,我们将这两个报告作为一个整体来处理以提取特征。给定输入的长度l(l =n_w),填充P(P = 0)和步幅S(S = 1),则输出O1的长度可以计算为:
在这里插入图片描述

第一卷积层的结果的输出形式是O_1×1×n_{k1},为了进一步提取两个报表之间的关联特征,我们将其重塑为O_1×n_{k1}×1的形式并再次对其进行卷积。在第二个卷积层中,我们设置三种不同的内核k2∈R^{d\times k_w}(表3中的d = 1、2、3,k_w =n_{k1}),每种内核的数目为n_{k2}。在这两次卷积之后,我们得到三种大小为O_2×1×n_{k2}的特征图,其中O_2也可以根据l(l =O_1)和不同的内核长度d作为公式1计算。为了保留通过卷积提取的最重要特征并减小数据的维数,我们对所有特征图使用
O_2-max池化。因此,每个特征图被二次采样为1×1×n_{k2}的形状。最后,我们将来自第一个卷积层的所有三个分支的所有特征图重新塑形并连接成9×n_{k2}维向量,作为对全连接层的输入。经过三个完全连接的层之后,我们得到了一个独立的概率{sim}{predict}它代表了两个报告之间的预测相似性。在除最后一个完全连接的层之外的每一层,我们使用矩形线性单元(Relu)作为激活函数来提取更多非线性特征。在最后一层中,为了获得介于0和1之间的值来表示{sim}{predict},我们改用Sigmoid。给定第二个完全连接层的输出T = [x1,x2,…,x100],权重向量W = [w1,w2,…,w100],{sim}_{predict}可以计算为: 在这里插入图片描述

其中i是向量的第i个元素,b表示偏差。
为了使模型与Sigmoid一起自动调整参数,我们的损失函数设置为: 在这里插入图片描述

其中{label}_{real}表示错误报告对的实际标签,i表示第i个报告对,n表示对的总数。
**

  1. STUDY SETUP

**
Datasets我们使用由Lazar收集和处理的公共数据集。数据集包含三个大型开源项目:Open Office,Eclipse和Net Beans。 Open Office是类似于Microsoft Office的办公软件。 Eclipse和Net Beans是开源集成开发环境。为了在实验的时候有更多的训练样本,我们通过以加法方式合并这三个数据集,并将其命名为“组合”来创建一个更大的数据集,这些数据集还为我们提供了错误报告对。
Evaluation Metrics CNN模型的输出是一个介于0和1之间的值,该值表示成对的两个错误报告之间的相似性。为了进一步分类,设置阈值(0.5)。有了{sim}{predict}(请参阅第2节)后,我们可以计算{label}{predict},这意味着一对预测标签如下:
在这里插入图片描述

错误报告对可根据{label}{predict}和{label}{real}分为四类:TP,TN,FP,FN。
TP表示正确预测为重复的对的数量,TN表示正确预测为非重复的对的数量,FP表示被错误预测为重复的数量,FN表示被错误预测为非重复的数量。这四个基本绩效评估指标用于以下评估方法:
(1)Accuracy精确度:准确度表示所有正确预测的bug报告对占所有bug报告对的比例,并且它表明了我们模型对所有错误报告对进行正确分类的性能。精度计算为在这里插入图片描述

(2)Recall召回率:表示被正确预测出重复的占所有重复的bug报告对的比例。召回率计算为在这里插入图片描述

(3)精度表示正确预测为重复的占所有被预测为重复的bug报告的比例。精度计算为在这里插入图片描述

(4)F1-Score:F1-Score是对Recall和Precision的综合评估,这是它们的谐波平均值。它分别评估Precision(或Recall)的增加是否大于Recall(或Precision)的减少,并提供Precision和Recall的平衡视图。 F1-Score的计算公式为在这里插入图片描述

(5)AUC:AUC是接收器操作员特征曲线(ROC)下方的区域。可以通过根据不同的阈值计算正确率(TPR)和错误率(FPR)来绘制ROC.
TPR的计算方式为
在这里插入图片描述

FPR的计算方式为
在这里插入图片描述

将所有FPR值作为水平轴,将所有TPR值作为垂直轴,可以获得ROC曲线。上面已经提到,当确定一对错误报告是否重复时,模型首先为该对重复报告输出似然度。然后,似然分数需要与阈值进行比较。如果可能性得分高于阈值,则这对错误报告是重复的,否则这对错误报告是不重复的。阈值的范围可以从0 到 1。 AUC衡量所有阈值下所有方法的性能,因此,这是独立阈值的度量。
Normalized Improvement标准化改进表示改进的空间,这是Costa等人提出的,用来避免直接比较结果的差值或直接比例导致的虚假结果。由于先前的研究已经取得了较高的效果(Accurate> 0.8),因此,按照Costa等人的方法,标准化改进更适合于在我们的情况下衡量相对于基准的改进,形式上,标准化改进的计算方式为:
在这里插入图片描述

{Per}{ours}是我们方法的性能,{Per}{base}是基准的性能。
为了评估我们方法的有效性,我们采用分层的5折叠交叉验证设置。详细地说,我们使用分层随机抽样将数据集随机分为五折。这种采样技术旨在使每个折叠中重复报告对和非重复报告对的比率与原始数据集相同。然后,使用四折来训练模型,剩下的一折用来评估我们方法的性能。我们将这一过程重复五次,以便将每一折用作测试集。结果有五个有效性值,我们报告每个绩效指标的平均值。
**

  1. EXPERIMENTAL RESULTS

**
实验结果看原文表格即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值