摘要
针对重复缺陷报告检测研究中存在语义长距离依赖以及缺陷报告特征的单一性问题,提出一种强化文本关联语义和多特征提取的重复缺陷报告检测模型。引入自注意力机制捕获缺陷报告文本序列内部的语义关联性,从而动态计算上下文语义向量进行语义分析,解决长距离依赖问题;利用隐含狄利克雷分布算法捕获缺陷报告文本的主题特征,同时针对缺陷报告的类别信息,构建一种特征提取网络计算类别差异特征;最后基于3类特征向量进行综合检测。实验结果表明,该模型实现了更优的检测性能。
软件缺陷报告作为缺陷跟踪系统的实体之一,是描述软件缺陷、失效或不符合用户预期的软件表现的文档。软件缺陷报告由文本信息和类别信息组成,其中文本信息是以自然语言对软件缺陷进行描述,类别信息通过枚举值确定缺陷报告所属的类别。现实中由于不同人员之间信息不共享,往往针对同一个软件缺陷各自提交缺陷报告,从而导致了缺陷报告重复问题。据统计,Mozilla Core、Firefox和 Eclipse Platform开源项目中含有的重复缺陷报告占比分别到达了21.8%、30.9%和16.9
目前对于重复缺陷报告检测已有大量研究。早期的研究主要是结合自然语言处理与文本检索技术的方面展开,这类研究的缺点在于难以解决同义不同词的匹配检索问题,导致检测性能较
为此,文中提出一种新的重复缺陷报告检测方法,通过构建一种基于自注意力机
早期对重复缺陷报告检测的主要手段是基于传统的机器学习技术。Runeso
为了解决传统机器学习方法的不足,不少学者相继提出了一些基于深度学习方法的模型,这些模型直接研究缺陷报告文本语义信息。Kukkar
重复缺陷报告检测的目标是针对当前缺陷报告,准确地从缺陷报告库返回与之重复的缺陷报告,实现篇章级检测。它的核心策略是迭代地计算缺陷报告之间的相似性程度,返回相似度最高的缺陷报告。
针对上述目标,文中提出的重复缺陷报告检测模型如

图1 总体框架图
Fig. 1 Overall framework
该层的目标是将缺陷报告中的自然语言文本转换为神经网络能够处理的向量,具体而言是将缺陷报告中的title和description字段域中的文本所包含的每一个单词转换为一个固定维度的向量。基于Pennington
, | (1) |
式中,为缺陷报告中title和description文本字段域的文本的总长度。
对于词向量,它的形式为,是词向量维度。其中是利用Glove模型得到的词嵌入向量,由于涉及到需要对来自2个不同字段域的信息进行处理,使用作为是一个数值标识位,以表示该单词所归属的字段域,其值取0或1。符号表示将向量扩充一个维度,由的值进行填充。
理论上CNN和RNN神经网络都可用于编码缺陷报告的语义,但是CNN通过滑动窗口仅能捕捉局部特征,同时经典的RNN网络通常更适应短文本分析,而缺陷报告的title和description字段域中的文本总长度往往较长,容易导致在反向传播过程中的出现梯度消失的问题。为此,该层使用RNN的一种变种网络GRU模型对缺陷报告进行初步编码。GRU模型引入可学习的重置门控单元和更新门控单元控制输入信息的流动,从而捕获时间步距离较大的依赖关系,如

图2 门控循环单元(GRU)
Fig. 2 Gated recurrent unit(GRU)
在当前时间步,GRU单元接收2个输入:前一时刻的隐状态和当前时刻的词向量,然后分别计算重置门和更新门向量,分别决定上文环境信息哪些需要遗忘或继续传递,为
, | (2) |
, | (3) |
式中:符号表示向量水平拼接;和均是可训练权重参数;和是偏置量;符号是sigmoid激活函数。
重置门向量被用来丢弃与当前输入无关的历史信息,然后和更新门向量共同计算得出当前时刻的隐状态,为
(4) |
(5) |
式中:符号表示逐元素相乘;和同样分别是可训练权重参数和偏置量;tanh为激活函数。
将缺陷报告的词向量序列前向依次传入到GRU中,即可生成相应的隐状态序列。由于前向迭代只能捕捉上文环境信息,为了同时能够捕捉下文环境信息,再将词向量序列后向依次传入到GRU中得到后向隐状态序列。最终通过向量水平拼接生成每一个时间步的综合隐状态,其形式为
。 | (6) |
对任意,它的计算方法为
。 | (7) |
GRU模型引入2类门控单元优化语义分析过程,输出的隐状态序列中的每一个成员向量理论上融合了当前时间步的全局上下文信息,因此理论上的最后一个序列成员应当表征了整个缺陷报告的综合语义。然而当文本的长度过长时,较远时间步所生成的隐状态由于迭代次数的增多,对当前时间步的隐状态的影响越来越小。因此对于来说,实际上几乎只表征了临近几个单词所构成的上下文语义,即存在长距离依赖的问题。为了克服这一问题同时提升模型的语义表征能力,引入自注意力机制,分析其他时间步的隐藏状态和当前时间步的隐状态的交互信息,如

图3 自注意力模块
Fig. 3 Self-attention module
自注意力机制可以自动地发现隐状态序列内部的关联关系,得到相应的注意力权重,能够聚合向量,从而达到强化上下文语义向量的目的,为
, | (8) |
, | (9) |
, | (10) |
式中:表示在时间步生成的隐状态向量;和是可训练参数;是偏置量;表示第个隐状态与进行动态关联的注意力得分;是进行归一化后的分数;是经过对各个隐状态加权后最终得到的综合语义特征向量;ReLu是激活函数;exp是绝对值函数。
自注意力机制通过
语义特征提取将缺陷报告所包含的信息通过深度学习映射到一个语义空间中,这一过程可以理解为一种语义归纳。缺陷报告的内容也可以被看作是反映一个或多个技术问题的表述,如软件适配错误、网络异常等。因此,有必要引入LDA模型对缺陷报告的主题分布进行推断。LDA模型是一种无监督的生成模型,如

图4 LDA的图过程
Fig. 4 The graph process of the LDA
。 | (11) |
通过Gibbs采样算法使得联合概率函数收敛,即可得到“文档-主题”概率分布 和“主题-词”概率分布,有关具体实现细节可查文献[
与一般的文本相似性度量任务不同,缺陷报告不仅包括由自然语言构成的文本域信息,还包含一些其他枚举类型数据,例如bug severity、priority和component等类别信息。这些分类信息无法提取出语义或主题,但是它们对重复缺陷报告检测的作用不可忽视。为此,文中提出一种类别差异特征提取方法,如

图5 类别差异特征提取模块
Fig. 5 Category difference feature extraction module
采用One-hot方法分别对类别信息的每一种枚举值进行映射。由于bug severity、priority和component类别属性分别有5、4和7种枚举值,因此对于任意一个缺陷报告都将被转换为一个16维度的向量,其中3个维度为1,剩余维度为0。依次通过编码层和比较层得到类别差异特征,为
, | (12) |
, | (13) |
, | (14) |
式中:仍然表示向量逐元素相乘;和分别是待检测的缺陷报告和的One-hot向量;、和是可训练参数;和是偏置量;是超参;控制编码向量和类别差异特征向量的维度。
值得注意的是,理论上和可以直接传入比较层,但这种方式无法有效地刻画枚举值之间的差异。以bug severity类别属性为例,它的枚举值有low、medium、high、critical和catastrophic五种。假设缺陷报告的bug severity属性为low,对应的One-hot向量为[1,0,0,0,0],不论缺陷报告的One-hot向量是[0,1,0,0,0]还是[0,0,0,0,1],如果没有编码层,那么它们在比较层的输出结果是一致的,均为零向量。但事实上,当缺陷报告的bug severity类别属性值为medium比catastrophic应当更接近缺陷报告。因此加入编码层的意义就在于学习同一类别属性值之间的差异关系。
为了验证文中所提方法的有效性,采用Eclipse公开的缺陷报告数据
文中所提出的模型每次同时处理任意一组缺陷报告和,并输出重复概率,同时记缺陷报告和的标签为,定义交叉熵损失函数为
, | (17) |
式中:和分别是正则化参数和模型权重;表示对损失函数进行正则化以缓解过拟合问题。
由于重复缺陷报告检测的实质是从缺陷报告库已有的缺陷报告中选出与当前缺陷报告相似度最高的一份或几份,并按照相似度生成一个有序列表,实际上是一种排序任务。文中采用平均精度均值(mean average precision, MAP)和k召回率(recall rate@k, RR@k)作为评估模型性能的指标,分别记为和。的计算方法为
, | (18) |
式中:是测试集中的样本个数;是第个样本所记录的重复缺陷报告在生成的有序列表中的位置。的计算方法为
, | (19) |
式中,表示有序列表的前项包含重复缺陷报告的样本的个数。
在实验中,是使用Natural Language Tool Kit工具对缺陷报告文本进行数据预处理。模型训练过程中,参数设置如
超参数 | 值 | 超参数 | 值 |
---|---|---|---|
文本最大长度 | 200 | 批处理大小 | 32 |
词向量维度 | 100 | 学习率 | 0.000 1 |
GRU单元堆叠层数 | 1 | 正则化参数 | 8 |
GRU隐状态维度 | 100 | 失活率 | 0.2 |
主题数 | 10 | 优化器算法 | Adam |
类别差异特征向量维度 | 10 |
本节将从以下3个方面加以阐述:1)与其他模型相比,文中所提出的模型是否表现出更优的性能;2)各个模块对模型性能的影响;3)模型在不同参数下的性能。
为验证文中所提出的重复缺陷报告检测模型的有效性,在Eclipse公开缺陷报告数据集上进行实验,并与REP、DWEN和BSO模型进行对比。相关模型在数据集上的实验结果如
模型 | ||||||
---|---|---|---|---|---|---|
REP | 35.12 | 44.25 | 48.92 | 52.32 | 54.29 | 42.61 |
DWEN | 25.71 | 30.58 | 35.84 | 37.86 | 40.68 | 38.95 |
BSO | 36.15 | 46.52 | 52.16 | 53.89 | 56.21 | 45.48 |
文中模型 | 37.29 | 47.95 | 53.84 | 55.61 | 57.53 | 47.25 |
从
RE
BS
为了验证文中所提出的模型中不同模块对模型性能的影响,本组实验设计一个基准模型,该模型以不具备自注意力加权的语义特征作为分类器的唯一输入向量,分别针对自注意力加权模块、主题特征提取模块和类别差异特征提取模块对实验结果的影响进行验证。实验结果见
模型 | ||||||
---|---|---|---|---|---|---|
Baseline | 27.58 | 31.49 | 37.67 | 40.26 | 42.31 | 40.03 |
+自注意力机制 | 32.49 | 41.62 | 46.28 | 50.24 | 52.03 | 44.29 |
+主题特征 | 28.84 | 33.16 | 38.49 | 42.55 | 44.03 | 41.24 |
+类别差异特征 | 29.85 | 35.28 | 40.29 | 44.62 | 46.09 | 42.05 |
文中模型 | 37.29 | 47.95 | 53.84 | 55.61 | 57.53 | 47.25 |
从
值得注意的是,在与
相较于主题特征,引入类别差异特征对模型能力的提升能力更强,原因在于类别信息由枚举值进行清晰刻画,相较于对文本信息进行主题分析,后者更容易受噪声信息的影响。纵向地对比各模块对模型性能提升作用可以发现,尽管引入自注意力机制的绝对提升幅度最大,但主题特征和类别差异特征能从其他侧面刻画语义分析难以挖掘的其他特征模式,从而使得模型检测性能进一步提升。因此通过3种模块进行基于多特征检测的策略达到了最佳的检测效果,在各个评价指标上依次提高了35.21%、52.27%、42.92%、38.12%、35.97%和18.04%。
本节对模型中涉及的一些参数设置对实验性能的影响进行分析。
1)向量维度对模型性能的影响。
在语义特征提取中有2种重要的向量:作为输入的词向量和决定输出的隐状态向量。在训练中,它们同时具有相同的维度。为了分析这2类向量维度对实验结果的影响,本组实验设计向量维度分别为25维、50维、100维和200维的4组实验。实验结果见
向量维度 | ||||||
---|---|---|---|---|---|---|
25 | 36.54 | 46.14 | 51.73 | 52.11 | 54.19 | 45.35 |
50 | 37.08 | 47.12 | 52.42 | 53.33 | 55.27 | 46.19 |
100 | 37.29 | 47.95 | 53.84 | 55.61 | 57.53 | 47.25 |
200 | 36.89 | 47.03 | 52.97 | 54.20 | 55.79 | 46.25 |
由
2)失活率对模型性能的影响。
使用失活率是一种有效减缓模型过拟合的方法,本组实验为了分析不同失活率下模型的性能,设计失活率由0.05增长至0.25的多次实验。实验结果见
失活率 | ||||||
---|---|---|---|---|---|---|
0.05 | 36.82 | 46.15 | 53.25 | 54.95 | 56.26 | 45.07 |
0.10 | 37.29 | 47.95 | 53.84 | 55.61 | 57.53 | 47.25 |
0.15 | 35.10 | 45.05 | 52.49 | 53.13 | 55.39 | 45.05 |
0.20 | 32.91 | 41.86 | 49.30 | 50.68 | 52.50 | 42.19 |
0.25 | 29.84 | 37.62 | 45.62 | 46.29 | 49.90 | 40.25 |
从
提出了一种强化文本关联语义和多特征提取的重复缺陷报告检测模型,该模型包括基于双向门控循环单元的语义特征提取、基于隐含狄利克雷分布的文本主题特征挖掘以及基于全连接神经网络的类别差异信息度量。在语义特征提取中,还通过引入自注意力机制,评估跨时间步之间的上下语义之间的相关性,实现语义聚合以克服语义长距离依赖问题。实验结果表明,该模型在平均精度均值和召回率上优于近期提出的其他模型。在下一步的工作中,将深入地研究获得更准确的缺陷报告语义向量表征,此外,将对缺陷报告之间的语义关联关系进行探索。
参考文献
Xie Q, Wen Z Y, Zhu J M, et al. Detecting duplicate bug reports with convolutional neural networks[C]//2018 25th Asia-Pacific Software Engineering Conference(APSEC). IEEE, 2018:416-425. [百度学术]
Zou W Q, Lo D, Chen Z Y, et al. How practitioners perceive automated bug report management techniques[J]. IEEE Transactions on Software Engineering, 2020, 46(8):836-862. [百度学术]
Altınel B, Ganiz M C. Semantic text classification: a survey of past and recent advances[J]. Information Processing & Management, 2018, 54(6):1129-1153. [百度学术]
Lin Z H, Feng M W, dos Santos C N, et al. A structured self-attentive sentence embedding[EB/OL]. 2017: arXiv: 1703.03130. https://arxiv.org/abs/1703.03130. [百度学术]
Runeson P, Alexandersson M, Nyholm O. Detection of duplicate defect reports using natural language processing[C]//29th International Conference on Software Engineering. IEEE, 2007: 499-510. [百度学术]
Sureka A, Jalote P. Detecting duplicate bug report using character N-gram-based features[C]//2010 Asia Pacific Software Engineering Conference. IEEE, 2011: 366-374. [百度学术]
Sun C N, Lo D, Khoo S C, et al. Towards more accurate retrieval of duplicate bug reports[C]//26th IEEE/ACM International Conference on Automated Software Engineering (ASE 2011). IEEE, 2011:253-262. [百度学术]
Yang C Z, Du H H, Wu S S, et al. Duplication detection for software bug reports based on BM25 term weighting[C]//2012 Conference on Technologies and Applications of Artificial Intelligence. IEEE, 2013: 33-38. [百度学术]
Kukkar A, Mohana R, Kumar Y, et al. Duplicate bug report detection and classification system based on deep learning technique[J]. IEEE Access, 2020,8: 200749-200763. [百度学术]
He J J, Xu L, Yan M, et al. Duplicate bug report detection using dual-channel convolutional neural networks[C]//Proceedings of the 28th International Conference on Program Comprehension. New York: ACM, 2020: 117-127. [百度学术]
Deshmukh J, Annervaz K M, Podder S, et al. Towards accurate duplicate bug retrieval using deep learning techniques[C]//2017 IEEE International Conference on Software Maintenance and Evolution(ICSME). IEEE, 2017:115-124. [百度学术]
Prifti T, Banerjee S, Cukic B. Detecting bug duplicate reports through local references[C]//Proceedings of the 7th International Conference on Predictive Models in Software Engineering. IEEE, 2011:1-9. [百度学术]
Poddar L, Neves L, Brendel W, et al. Train one get one free: partially supervised neural network for bug report duplicate detection and clustering[C]//Proceedings of the 2019 Conference of the North. Minneapolis-Minnesota. Stroudsburg, PA, USA: Association for Computational Linguistics, 2019: 157-165. [百度学术]
Rocha T M, Da Costa Carvalho A L. SiameseQAT: a semantic context-based duplicate bug report detection using replicated cluster information[J]. IEEE Access, 2021, 9: 44610-44630. [百度学术]
Pennington J, Socher R, Manning C. Glove: global vectors for word representation[C]//Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). Stroudsburg, PA, USA: Association for Computational Linguistics, 2014: 1532-15. [百度学术]
Chai H M, Lei J N, Fang M. Estimating Bayesian networks parameters using EM and Gibbs sampling[J]. Procedia Computer Science, 2017, 111:160-166. [百度学术]
Lazar A, Ritchey S, Sharif B. Generating duplicate bug datasets[C]//Proceedings of the 11th Working Conference on Mining Software Repositories. New York: ACM, 2014:392-395. [百度学术]
Budhiraja A, Dutta K, Reddy R, et al. DWEN: deep word embedding network for duplicate bug report detection in software repositories[C]//Proceedings of the 40th International Conference on Software Engineering: Companion Proceeedings. New York: ACM, 2018: 193-194. [百度学术]