云环境下软件错误报告自动分类算法改进

2016-05-14 14:30黄伟林劼江育娥
计算机应用 2016年5期
关键词:云计算

黄伟 林劼 江育娥

摘要:用户提交的软件错误报告随意性大、主观性强且内容少导致自动分类正确率不高,需要花费大量人工干预时间。随着互联网的快速发展用户提交的错误报告数量也不断增加,如何在海量数据下提高其自动分类的精确度越来越受到关注。通过改进词频逆文档频率(TFIDF),考虑到词条在类间和类内出现情况对文本分类的影响,提出一种基于软件错误报告数据集的改进多项式朴素贝叶斯算法,同时在Hadoop平台下使用MapReduce计算模型实现该算法的分布式版本。实验结果表明,改进的多项式朴素贝叶斯算法将F1值提高到71%,比原算法提高了27个百分点,同时在海量数据下可以通过拓展节点的方式缩短运行时间,有较好的执行效率。

关键词:多项式朴素贝叶斯;错误报告;文本自动分类;词频逆文档频率;云计算

中图分类号:TP311 文献标志码:A

Abstract:Usersubmitted bug reports are arbitrary and subjective. The accuracy of automatic classification of bug reports is not ideal. Hence it requires many human labors to intervention. With the bug reports database growing bigger and bigger, the problem of improving the accuracy of automatic classification of these reports is becoming urgent. A TFIDF (Term FrequencyInverse Document Freqency) based Naive Bayes (NB) algorithm was proposed. It not only considered the relationship of a term in different classes but also the relationship of a term inside a class. It was also implemented in distributed parallel environment of MapReduce model in Hadoop platform. The experimental results show that the proposed Naive Bayes algorithm improves the performance of F1 measument to 71%, which is 27 percentage points higher than the stateoftheart method. And it is able to deal with massive amounts of data in distributed way by addding computational node to offer shorter running time and has better effective performance.

Key words:Naive Bayes of polynomials; bug report; text automatic classification; Term FrequencyInverse Document Frequency (TFIDF); cloud computing

0 引言

随着大数据时代的到来,海量数据的处理速度越来越受到重视,传统的单机处理已经呈现出其弊端,如何在大量的数据情况下提高处理速度受到广泛的关注。Hadoop作为一个分布式的框架,其在超大数据集下的表现令人满意。开源软件的错误报告随着版本的更新收到用户越来越多的反馈,如何在短时间内将用户的反馈分门别类更快地进行修复已经成为各企业提升自我软件竞争力的重点。用户提交软件错误报告有着很大的随意性,即使事先给出类别也无法保证用户能够正确地选对,因此将错误报告进行自动分类能够节省时间并提高效率。目前对于软件错误报告的分析主要集中在错误报告的质量、错误报告的最优化、错误报告的分类和错误报告的修复,机器学习算法和信息检索技术已经被广泛应用到其中[1]; 然而对于软件错误报告自动分类改进方法的结果却不理想[2]。Shokripour等[3]提出的基于时间算法的精确度可以提高到45.52%。Shokripour等[4]提出仅采用名词和时间元数据的词条权重的方法可以将准确度提高到49%。Alenezi等[5]通过词条选择的方法将F1值提高到38.2%。Shokripour等[6]提出基于位置的错误报告加权方法使得准确度提高到50%左右;黄小亮等[7]提出的潜在Dirichlet分配(Latent Dirichlet Allocation, LDA)的软件缺陷分派方法,将准确度提高到37.54%。业界对此也进行大量的研究,比如基于马尔可夫链的方法[8]、基于词汇知识模型的方法 [9]和Shokripour等[10]提出的信息提取的方法。以上提到的这些研究,都是为了提高软件错误报告自动分类的精确度。

文本自动分类的算法多种多样,朴素贝叶斯算法以其简单高效的特点受到青睐,在其基础上的改进算法也层出不穷,比如,李文进等[11]提出的基于改进朴素贝叶斯的区间不确定性数据分类方法,翟军昌等[12]提出的基于增益比对特征词的朴素贝叶斯改进算法,罗凌等[13]提出的基于树增强型贝叶斯网络(Tree Augmented Bayes Network,TAN)的改进等。在大数据环境下实现文本自动分类算法更加有意义,比如张红蕊等[14]提出的基于关联规则和置信度的朴素贝叶斯算法,卫洁等[15]在云环境下实现别人改进的朴素贝叶斯算法。尽管如此,对于软件错误报告的自动分类研究结果仍然不理想,同时在大数据环境下对其的关注也较少。本文在Hadoop框架下实现多项式朴素贝叶斯算法并对其进行改进,经过实验验证了其在时间和精度上均有较好表现。

2 云环境下的改进算法实现

在Hadoop平台下使用MapReduce计算模型来实现改进的多项式朴素贝叶斯算法。MapReduce模型主要采用对数据“分而治之”的方法,定义Map和Reduce两个抽象的编程接口,用键值对(key,value)来表示数据。首先是各个Map节点对数据进行并行计算,将中间结果输出到各个Reduce节点,最后汇总所有Reduce节点的结果,以键值对的形式输出结果。改进算法的实现主要分训练和测试两个阶段,训练阶段采用四个MapReduce,测试阶段采用一个MapReduce。

2.1 训练阶段

训练阶段的输入为一个预处理过的文件,每行均代表一个文件,第一个词条为文档所属类别名称,之后为特征属性,以空格为间隔符。例如第1行为c、w1、w2w3、w4,c表示所属类别,w表示分词后的词条。如表1所示,Map函数中主要进行词频的计算以及其他基本数据的计算,在Reduce中进行合并统计,并将结果输出到相应文件中。在Reduce输出过程中,利用setOutputFormat方法设置输出格式,将每个key得到的结果输出到单独文件中去,以供后续计算。

经过4个MapReduce之后,训练阶段完成。在测试阶段即可进行预测新文本所属的类别。

2.2 测试阶段

测试阶段的输入文件为测试文件,文件的格式和训练阶段的格式一致。先对每一行所代表的文档进行词频统计。对于每一个类cj,计算每个词条wt的tf*lg P(wt|cj)值并进行累加,其所属类别为 c=arg maxcj∈C P(cj|di),在Map阶段将判断结果和原始类别进行比较,相符不相符作出相应输出,Reduce阶段对Map阶段的结果进行累加。

3 实验及结果分析

3.1 实验数据与环境

本文的实验数据来自开源软件Eclipse 官网中2001—2013年用户提交的部分错误报告,涉及到Tools、 Modeling、 Technology、 SOA等11 个类别,总共包含大概50000份错误报告。由于每个类别的错误报告份数不同,考虑到样本的均匀性,在抽取样本时保证每个类别的样本份数一致,约为3000份每类别,处理过程中遇到个别类别总数不足3000份的,采取放回继续抽取的随机方式获得。首先处理下载的Eclipse 错误报告数据,留下错误报告的类别和错误报告的内容描述2个属性。利用R语言的TM(TextMining)包对错误报告的内容描述进行预处理。将其错误报告的内容描述小写化、去空格、去数字、去停用词、词干化、进行分词。采用10×10交叉验证方法。每一次打散数据,任意选择70%数据为训练数据,余下的30%为验证数据。训练数据(70%)被用来建模,余下的数据(30%) 被用来匹配此模型以验证模型的有效性,记录下相应的性能指标(精确度、召回率和F1值)。此训练和验证过程重复进行10 次,对性能指标取平均值作为每次的计算结果。本文采用分布式集群,每台电脑配置一致,均为32位计算机,centos6.4系统,2GB内存,Hadoop版本为2.2.0,Java版本1.7。搭建的集群为1个NameNode,6个DataNode。在运行过程中,所有参数均为默认值,暂时没有进行优化。

3.2 评价指标

实验评价标准主要有精确率P(precision)、召回率R(recall)和F1值,如表5所示,A表示属于某类别的文本且预测结果也是属于某类别的,D表示不属于某类别的文本预测结果为属于某类别,C表示属于某类别的文本预测结果显示不属于某类别。依据表5,几个评估指标的计算公式如式(8)~(10)。F1值综合了精确率和召回率,能总体地反映出整体的指标,因而本文主要采用F1值来评估算法在不同类别上的分类性能。

3.3 实验结果与分析

采用交叉验证方法,将结果取平均值得到F1结果对比表,第2列为采用原始TFIDF算法的多项式朴素贝叶斯方法[15]得到的结果,第3列为本文改进TFIDF算法后的多项式朴素贝叶斯算法得到的结果,因为类别较多,所以仅列出前几个类别,最后一行为所有类别的平均值。从数据可以看出,改进算法在各个小类别上的F1值均有相当幅度的提高,而且在所有类别的平均值上,改进的算法比原算法提高了27%,提高了原来结果的61%。而在精确度上(未在表中标出),由原始算法的44%提高到改进算法的69%。由此可见改进的算法使得软件错误报告的自动分类结果得到了改善,同时使得海量数据在单机情况下的内存不足瓶颈得以解决。由于业界并没有将改进的算法应用于软件错误数据集上,基于数据集的特殊性,因而无法直观比较结果,但是可以对比最近业界在eclipse软件错误报告数据集上做的实验,最好的结果也是将精确度提高到50%左右[6],可见本文的改进算法对比业界相关研究的结果具有一定的优势。

同时本文还对并行算法的性能进行测试,分别在两个节点的集群和6个节点的集群上对2GB,4GB,…,10GB数据集进行测试,分别计算其运行时间。而在单机运行时,一旦数据量足够大,则会出现内存不足的情况而导致程序无法继续执行,因而并行计算解决了大数据下单机运行的内存瓶颈。从图1中可以看出,随着数据集大小的增加,其运行时间趋于缓和,可见数据量越大越适合并行分布式改进的算法。同时随着节点的增加,运行时间缩短,可见可以通过增加节点进一步的缩短运行时间。

4 结语

本文对多项式朴素贝叶斯算法进行了改进,在软件错误报告集上进行自动分类,结果表明其在F1值指标上相对原有算法有了较大的提高。同时在大数据环境下实现改进的算法,表明在海量数据前其运行时间缩短同时效率提高,使得原来在单机上的串行计算得以并行实现。改进的算法除了适合于开源软件错误报告的自动分类,也适合于大型企业收集客户信息,通信运行商对客户投诉和建议的自动分类以及其他需要人工提交文本描述、随意性比较强的数据的自动分类。

参考文献:

[1]ZHANG J, WANG X Y, HAO D, et al. A survey on bugreport analysis[J]. Science China Information Sciences, 2015, 58(2):1-24.

[2]STRATE J D, LAPLANTE P A. A literature review of research in software defect reporting[J]. IEEE Transactions on Reliability,2013, 62(2): 444-454.

[3]SHOKRIPOUR R, ANVIK J, KASIRUN Z M, et al. A timebased approach to automatic bug report assignment[J]. Journal of Systems & Software, 2015,102:109-122.

[4]SHOKRIPOUR R, ANVIK J, KASIRUN Z M, et al. Improving automatic bug assignment using timemetadata in termweighting[J]. IET Software, 2014, 8(6):269-278.

[5]ALENEZI M, MAGEL K, BANITAAN S. Efficient bug triaging using text mining[J]. Journal of Software, 2013, 8(9):2185-2190.

[6]SHOKRIPOUR R, ANVIK J, KASIRUN Z M, et al. Why so complicated? Simple term filtering and weighting for locationbased bug report assignment recommendation[C]// Proceedings of the 10th International Workshop on Mining Software Repositories. Piscataway, NJ: IEEE, 2013: 2-11.

[7]黄小亮, 郁抒思, 关佶红. 基于 LDA 主题模型的软件缺陷分派方法[J]. 计算机工程, 2011, 37(21): 46-48.(HUANG X L,YU S S,GUAN J H. Software bug triage method based on LDA topic model[J]. Computer Engineering, 2011, 37(21): 46-48).

[8]JEONG G, KIM S, ZIMMERMANN T. Improving bug triage with bug tossing graphs[C]// Proceedings of the 7th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering. New York: ACM, 2009: 111-120.

[9]MATTER D, KUHN A, NIERSTRASZ O. Assigning bug reports using a vocabularybased expertise model of developers[C]// Proceedings of the 6th IEEE International Working Conference on Mining Software Repositories. Piscataway, NJ: IEEE, 2009: 131-140.

[10]SHOKRIPOUR R, KASIRUN Z M, ZAMANI S, et al. Automatic bug assignment using information extraction methods[C]// Proceedings of the 2012 International Conference on Computer Science Applications and Technologies. Piscataway, NJ: IEEE, 2012: 144-149.

[11]李文进, 熊小峰, 毛伊敏. 基于改进朴素贝叶斯的区间不确定性数据分类方法[J]. 计算机应用, 2014, 34(11):3268-3272.(LI W J,XIONG X F,MAO Y M. Classification method for interval uncertain data based on improved naive Bayes[J]. Journal of Computer Applications, 2014, 34(11):3268-3272.)

[12]翟军昌, 秦玉平, 车伟伟. 垃圾邮件过滤中信息增益的改进研究[J]. 计算机科学, 2014, 41(6):214-216.(ZHAI J C,QIN Y P,CHE W W. Improvement of information gain in spam filtering[J]. Computer Science, 2014, 41(6):214-216.)

[13]罗凌, 杨有, 马燕. 基于TAN贝叶斯网络的学习风格检测研究[J]. 计算机工程与应用, 2015,51(6):48-54.(LUO L, YANG Y, MA Y. Research on detecting learning style based on TAN Bayesian network[J]. Computer Engineering and Applications, 2015,51(6):48-54.)

[14]张红蕊, 张永, 于静雯. 云计算环境下基于朴素贝叶斯的数据分类[J]. 计算机应用与软件, 2015, 32(3):27-30.(ZHANG H R,ZHANG Y,YU J W. Data classification based on naive Bayes in cloud computing environment[J]. Computer Applications and Software, 2015, 32(3):27-30.)

[15]卫洁, 石洪波, 冀素琴. 基于Hadoop的分布式朴素贝叶斯文本分类[J]. 计算机系统应用, 2012, 21(2):210-213.(WEI J,SHI H B,JI S Q. Distributed naive Bayes text classification using Hadoop[J]. Computer Systems and Applications, 2012, 21(2):210-213.)

[16]MCCALLUM A, NIGAM K. A comparison of event models for naive Bayes text classification[C]// Proceedings of the 25th International Symposium on Computer and Information Sciences. Berlin: Springer, 1998:41-48.

[17]JIANG S, SAYYADSHIRABAD J, MATWIN S. Large scale text classification using semisupervised multinomial naive Bayes[C]// Proceedings of the 28th International Conference on Machine Learning. Bellevue, WA: ICML, 2011: 97-104.

[18]SALTON G, BUCKLEY C. Termweighting approaches in automatic text retrieval[J]. Information Processing & Management, 1988, 24(5): 513-523.

猜你喜欢
云计算
云计算虚拟化技术在电信领域的应用研究
基于云计算的医院信息系统数据安全技术的应用探讨
谈云计算与信息资源共享管理
志愿服务与“互联网+”结合模式探究
云计算与虚拟化
基于云计算的移动学习平台的设计
基于云计算环境下的ERP教学改革分析
基于MapReduce的故障诊断方法
实验云:理论教学与实验教学深度融合的助推器
云计算中的存储虚拟化技术应用