软件开发中的情感状态分析研究综述
2020-05-14赵海燕徐英杰陈庆奎
赵海燕,徐英杰,陈庆奎,曹 健
1(上海市现代光学系统重点实验室,光学仪器与系统教育部工程研究中心,上海理工大学光电信息与计算机工程学院,上海 200093)
2(上海交通大学 计算机科学与技术系,上海 200030)
E-mail:750960480@qq.com
1 引 言
目前许多的研究都证实了在软件开发领域,开发人员可以从中体会到各种各样的情绪[1-4].情感、情绪是复杂心理活动的结果.心理学和神经科学的许多研究表明,情绪与许多认知过程密切相关.例如,Pessoa的研究表明[5],情感和认知过程使用了许多相同的基本神经回路,它们之间存在着相互作用.而由于软件开发本质上是一种复杂的认知行为同时也是一种社交活动,开发人员需要互相合作,协同工作[6].因此在软件开发这样的任务中,情绪会影响工作表现,对于生产力,创造力,软件质量,团队关系和工作满意度会产生较大的影响[7-9].
近年来针对软件开发中的情感的研究越来越多,学术界每年召开SEmotion WorkShop学术研讨会专门探讨关于软件开发情感的研究,而在Mining Software Repositories Working Conference上也有许多关于软件社区中情感的研究.
关于软件开发中情感的分析,目前有些情感分析任务采用的是调查访谈的方法[10-13],这些研究针对于在现实的开发活动中的某些问题,比如开发者会议的成功是否会影响开发人员的情感,进而对整个团队产生影响,以及不幸福感、愤怒对于软件开发的影响.随着web 2.0的火热,在如今的开发团队中,团队成员可能分布于世界的各个角落,通过各种社交媒体进行沟通,以及一些像GitHub这样的开源社区、Stack Overflow为代表的技术问答网站的蓬勃发展,都产生了大量的关于软件开发的文本信息,如Issue Comments,Commits Comments,技术问答网站中帖子和在线邮件列表等内容.文本的情感分析,或意见挖掘最初是一种用于提取在线发布的短文本(例如电影评论,商品评价,微博和推特)中的情感极性被开发出来的,通过分析文本给出当前文本的极性,积极或者消极,从而试图挖掘出这些文本创建者的一些想法[14].所以许多研究者根据软件开发领域的特点,改进或建立了许多新的文本情感分析的工具或方法,从而将文本情感分析应用到软件开发领域中来.这些研究中发现,在开源社区中的情绪确实对于软件开发的质量,效率等方面有着一定的影响[1,15-18].因此从这些文本中提取出针对一个软件开发团队,或某一款软件的,或某一个软件开发社区的一种情感的状态,可以协助改进一些工具或使用一些新的方法来提高软件工程中的开发效率,软件质量,软件维护等方面.
本文在分析情感分析技术的现状的基础上、对软件开发中的情感特点,情感分析的一些主流工具、主要方法、目前已有的实证研究,以及情感对于软件开发的影响进行了总结和分析.最后,对于软件开发情感分析一些存在的问题和未来的发展趋势进行了展望.
2 情感分析的现状
对于文本的情感分析目前主要分为三个级别:文本级别,句子级别,子句级别.其中文本级别代表整个文本整体的情感倾向,句子级别表示一句句子的情感倾向,而子句级别就表示一个短语或一个词组的情感倾向.情感分析常用的方法有两大类:基于词汇的方法和基于机器学习或深度学习的方法.情感分析的主要任务有:二分类的情感极性分析,细粒度的情绪识别以及情绪强度分析.
2.1 情感分析任务
针对情感分析任务,情感极性分析是情感分析的基本任务[19],简单来说就是通过分析将文本分为:积极,消极,有时候可以有中性这以类别,但总体而言还是一个二元的分类方法.它在商品评论,电影评论的分析方面已经得到了广泛的应用.另一个与情感极性分析相类似的是情绪一致性检测,这是一种针对两条文本来分析它们在情绪上的一致性,也就是它们是否表达了相同或相似的情绪.对于二元分类的一个提升就是添加对不同情感的强烈程度.在判断完情感的类别后,根据情感的强度给出一个相应的评分,这就是情绪强度分析也是对情感极性分析的一个提高.
多模态融合情感分析,是近几年新提出的一个概念.研究人员试图通过视频,语音,图片,文本等多种资料,并将从不同资料中提取的特征融合起来,进行综合的情感分析.
2.2 基于词汇的方法
基于词汇的情感分析是一种非常流行而且使用简单的方法,有着许多的优点[20],首先需要一个预先标注过的情绪词典,里面有例如 “happy”,“fear”,“sad” 这样的词汇,不同的词汇给予不同的情感标注,积极情绪或消极情绪.也能够识别一些程度副词如(very),或者某些否定结构,例如not happy.综合这些特征,然后对文本中情感进行判别.当然这一模式也有着一些的不足之处.它对于一些语法上复杂的短语识别会产生错误.其次这种方法需要一个可靠而一致的情感词典[20],而人类社会的语言是十分复杂的,包含了许许多多的综合信息,一个情感词典很难涵盖到很多不同的方面,因此对于想要挖掘出这其中的语义信息是很困难的.而且由于语料库源决定了词汇亲缘概率往往偏向于特定类型的文本.这使得开发可重用的、独立于领域的泛化模型变得困难[21].
2.3 基于机器学习的方法
基于机器学习的情感分析方法主要分为基于传统的机器学习算法和基于深度学习这两部分.而传统的机器学习算法通常以有监督学习为主,而基于深度学习的算法则会使用一些半监督或弱监督的方法.
机器学习的情感分析的流程主要是:对文本预处理完成之后,将文本进行向量化,让文本转换为可以用于计算的向量,主要方法有词袋模型,TF-IDF,word2vec等.其中词袋模型又称为One-hot representation是一种统计某个词在一份文档中出现次数的算法;TF-IDF是一种统计学方法,用以评估字词对于一个文件集或一个语料库中的其中一份文件的重要程度;word2vec是一个浅层的神经网络用于输出词向量.在得到文本的数值向量后,利用机器学习方法来对分类器进行训练.主流的一些分类方法有朴素贝叶斯(NB),支持向量机(SVM),最大熵(ME),RFC,GNB,决策树,逻辑斯蒂回归等.而进行这些机器学习的前提是需要一个很大的有标注的训练文本来对模型进行训练才能保证精度,这对于预先的准备工作有着很高的要求.另外机器学习学习方法的弊端是对于语义的理解有些糟糕,因此对于句子或短语的分类并不是很准确.
随着深度学习在图像处理领域的火热,深度学习在情感分析中也有良好的表现[22].这种方法与机器学习有类似之处,同样需要通过一些特征提取方法将文本向量化,区别在于最后提取出的特征是通过一些神经网络来进行训练,而不是机器学习算法.深度学习的优点在于,这些算法不需要很多的手工标注的数据集,它们会自动学习数据集中的复杂特征,但需要的是庞大的数据量,才能有良好的表现[23].现在的一些研究已经证明了,深度学习在情感分析方面,特别是微博,商品评论,电影评论方面,较传统方法有了一定的提高[24].目前在情感分析中主流都是采用循环神经网络,例如:RNN,LSTM,GRU等,也有一些研究使用卷积神经网络CNN,还有一部分研究将卷积神经网络与循环神经网络叠加一起进行情感分析[25].
3 针对软件工程领域的情感分析工具
目前的一些研究除了使用机器学习的方法之外,有一部份采用了SentiStrength[26]来进行情感的极性分析与评分[18,27,28].SentiStrength是基于词典的一种工具,可以处理短的非正式文本,包括缩写、增强词和表情符号.每个消极情感词汇的得分从-2到-5不等,这代表了它的极性.同样,积极情感词汇的得分在+2到+5之间,而中性词汇的得分为±1.通过输入一个句子,它会计算其中的情感词的得分,最终将它们的和输出,代表整个句子的得分.
还有其他的一些情感分析工具,比如Stanford开发的斯坦福情感分析工具、NLTK等.但这些工具由于原本是针对商品评论、推特、微博等短文本所构建的,并且各种的软件开发社区中文本的特殊性,相比于微博、推特等社交媒体文本,这些关于软件开发的文本会包含更多的技术领域的词语,包含一些代码段.这些专业性的词语,可能与平时所表达的含义有所不同.因此在分析软件工程领域的文本信息时,原有的一些工具的精度是无法得到保证的[29,30][19,20].因而,为了分析的精确性,一些专为软件工程领域开发,或改进的工具应运而生,包括了SentiStrength-SE[31],SentiCR[32],SentiSW[33],Senti4SD[34],EmoTxt[35]等.它们的主要信息如表1所示.
表1 软件工程领域情感分析工具
其中SentiStrength-SE[31]是基于SentiStrength的一种基于词汇的情感分析工具,主要是用于识别情感的极性.它使用了来自JIRA这个问题跟踪系统的Issue Comments中抽取的5,992条数据,利用手工标注情感极性的方式建立了一个数据集用于测试,并根据Islam等[27]之前的研究搜集了一个巨大的数据集,包含了Github中50个开源项目的490k commit messages,从中提取针对软件开发领域的情感词汇,还通过一些预处理和提高否定词识别率,最终提高情感极性判别的准确率,提高了SentiStrength在软件工程领域的不足.
Senti4SD[34]主要基于机器学习,使用了Stack Overflow中的4423个帖子.首先对它们的内容进行预处理,最后使用均匀抽样将样本分成均匀的三份,分别是积极,消极,中性,总共4800条.其次作者用StackOverflow中的数量为20M的帖子数据建立了一个分布的语义模型(DSM),这主要是利用word2vec去把文本中的词进行向量化,以便计算一些相似度.并从基于词汇的特征、基于关键字的特征和语义特征这三个方面来提高情感分析的准确率.最后作者使用了SVM的方法来训练这个分类器.对于同一StackOverflow的数据,它比SentiStrength降低了把中性情感误分成负性情感的情况.
SentiCR[32]是一个基于监督学习的情绪分类工具,主要被用于分析Code review comments中的情绪.作者手工标注了2000条review comments 作为训练集,并用这个训练集测试了现有的7个情感分析工具发现结果并不理想.因此,作者根据软件工程领域的一些特点,对数据集进行了一些特定的处理,并比较了ADB,DT,GBT,NB,RF,MLPC,SGD,SVC这几种不同的机器学习算法的效果,最终发现GBT的精度和召回率是最高的.
SentiSW[33]是一种实体级的情感分析工具,主要使用机器学习的方法进行情感分析以及一种基于规则的实体识别.作者从10个GitHub流行项目中的231,732个issue comments中选取3000条数据进行手工标注作为数据集,并设计了一个实体级别的情感分类工具,这种实体识别是为了分辨文本中的情感表达是针对人还是事物的.首先通过预处理将数据集中的噪声去除,比如去除URL、将缩写词扩展,然后使用了TF-IDF与Doc2vec这两个将文本向量化的方法对文本进行向量化操作,前者是一个统计学的方法,后者则是在Word2vec上添加了段落向量的一种新版本.接着横向比较了6种机器学习方法的精度与召回率,发现随机梯度提升树GBT的表现最好.最后使用基于规则实体识别来辨别issue comment中情感所针对的对象是人还是项目,并输出(情感,对象)的元组作为结果.
EmoTxt[35]是一个由支持向量机(SVM)训练而成的分类器,采用了StackOverflow中4800个帖子作为训练集,能够区分Joy、Love、Sadness、Anger、Surprise、Fear多种情感.
除了这些工具之外,Daviti等[7]构建了一个识别愤怒的分类器,因为他们认为,检测愤怒可能有助于支持遇到困难的开发人员,有助于软件社区的管理和有助于对项目的推荐和优化改进.
另外,针对以上的这些工具,一些研究者们对它们进行了比较评价.一项对于情感分析工具的基准研究[36]分析比较了SentiStrength,Senti4SD,SentiStrength-SE,改进的工具的表现都要优于SentiStrength,这表明根据软件开发领域开发的工具确实提高了分类精度.当使用其他的数据集来测试时,例如Code Review和Java libraries,虽然精度有所下降,但还在接受范围内.不过也有研究表明对于他们所运用的数据集,以上的一大部分工具都不能达到可接受的精度要求[37].因此在软件工程中可靠的情绪分析是有可能的,但仍旧有许多的不足之处.
3.1 软件工程领域情感分析相关的数据集
目前在软件工程领域情感分析相关的数据集主要有,由Ortu等[38]发布的JIRA仓库数据集,主要从the Apache Software Foundation、 Spring、 JBoss 和 CodeHaus,这四个社区中获取Issue Tracking System的相关数据.其中包含了超过1000个项目,以及70多万的Issue reports和2百万Issue comments.作者将issue划分为漏洞、升级、功能请求这三部分,并将它们都存入了SQL类型的数据库中.
后来作者在这个数据集的基础上,又发布了一个包含2000条issue comments 和 4000多个句子的数据集,并且手工标注了这些句子中开发者所包含的情感,例如爱、快乐、惊喜、愤怒、失望、害怕等.这些数据又被分为三组,分别包含392条comments、1600条comments、以及4000个句子,并分别由16名、3名、3名志愿者进行数据标注.在对392条comments数据的标注时发现在所有情感中爱、快乐、悲伤是得到最少出现分歧的.因此后面两组都只从爱、快乐、悲伤中选取标签,同时发现数据中中性情感的占比很高,达到了43.4%.最后一组4000条句子,进行了更细粒度的标注.
然而由于在软件工程领域的情感分析还处于一个起步阶段,暂时没有得到公认的数据集,许多研究处于自身的需要,更多地还是重新进行数据的收集与标注,来满足研究的需求.
3.2 软件开发相关文本数据与传统情感分析数据的区别
传统的社会媒体数据,例如,微博,推特,商品评论等,与软件开发相关的文本相比较.第一,就文本的内容而言,传统社会媒体数据,包罗万象,有许许多多不同的主题,而在软件开发中的文本所围绕的主题只是关于软件开发这一领域的.第二,其中蕴含的情感信息相比而言,通常类似商品评论这样的数据所表现的情感是比较明显的.而软件开发相关的文本数据,现有的一些研究发现其中包含更多的中性情感.第三,在文本的长度上,微博这样的数据,由于其本身的限制通常都是很短的文本(小于140字),而在软件开发中则没有这样的限制,所以文本的篇幅跨度较大.这也对情感分析方法的选择产生了影响.第四,由于软件开发的领域特殊性,文本通常会包含许多代码,以及在软件开发中常见的词汇,然而这些词汇与其一般的含义有所不同,所表达的情感也有很大的区别,因此假如使用以传统的社会媒体数据所建立的模型来预测软件开发相关的文本,这会使得预测精度的下降.
4 关于软件工程领域的情感分析实证研究
在软件开发中的情感分析的情感理论方面,主要是参考了心理学上的两个情感框架,一个是基本情绪理论,是离散的框架,也就是把情感分成快乐,伤心,愤怒等不同的基本情绪,这也是应用最多的一种,还有一种情感的维度理论,认为情感在大脑中是连续的而不是离散的,许多研究者认为情感至少是二维,提出了效价-唤醒模型(Valence-Arousal)[39],认为情感包含了效价与唤醒两个方面,效价被定义为快乐或悲伤的程度,而唤醒被定义为一种主观状态的感觉激活或失活,而情感就是这两者的混合.这也被一部分研究所使用[3].目前的许多研究大多描述性地分析软件开发中的各种文本资料所包含的情感信息.例如,GitHub中的Commit comments[15,16,27],Pull requests[16],Commit logs[17],Code review,Issue comments[40],JRIA中的Issue comments,Apache中的mailing lists[18],以及一些其他的IT文本数据[41].这些研究选取不同的数据集,主要以开源社区中的文本信息为主,通过一些情感分析工具,一些机器学习的文本分类算法,来提取文本中的情感信息.另一些研究将目光放在情感对于软件开发的影响,例如Issue Fixing的效率,Debugging的速度,不同情绪的开发人员的是否有效率上的差别,以及良好的团队氛围与软件的质量是否存在联系等等.
4.1 软件开发中的情感现状及影响情感的因素
已经有许多研究就目前软件开发中的情感的现状做了很多描述性的分析,从情感极性在整个数据集中所占的比例,以及积极情绪与消极情绪所表达的程度.由于情感分析的基础是基于心理学上两种不同的情感框架,即情感是离散的以及效价-唤醒模型,因而研究中也主要从分类与采用VAD(Valence,Arousal,Dominance)评价模式这两个方面来进行的.除了基本的情感理论的不同之外,目前的研究还分析了软件开发中情感的影响因素,主要从不同的文本来源,文本发布者的身份,项目所使用的语言,日期或者时间,关于不同话题的Issues,不同的开发任务(bug fix,Refactoring等),这些方面来探究它们对情感存在着什么样的影响.
4.1.1 角色的角度
从用户角度来看,Ortu等[40]认为用户类型的不同对情感存在一定的影响,他们将Github中Issue的评论者分为两种类型,纯粹的评论者和同时是贡献者的评论者.作者称前者为评论者后者为用户.根据研究结果,他们发现,评论者发表在Issue中的评论相比于用户的更不礼貌也包含更多的消极情绪,以及评论者表达的情绪更少,而他们交流时的兴奋、情感和支配水平更高.这也说明不同用户类型,不同的立场之间所表达的情感会存在某些差异.
4.1.2 主题的角度
Pletea等[16]则针对关于GitHub上关于安全的Commits和pull request,从话题的角度出发,分析安全话题与其他的话题之间在情感上的不同之处.他们利用了提取关键字与聚类的方法从文本中提取了话题,并使用NLTK来分析情感的极性.对结果进行分析后,作者发现比起非安全主题的话题,与安全相关的话题表现出更多消极情绪,或者说表现得更加情绪化.Islam等[16]根据软件开发中的不同任务种类,比如Bug-fixing,Energy-Aware,New feature,Refactoring,来分析它们对情感的影响,发现在energy-aware方面积极情绪与消极情绪大致相当,在Bug-fixing和refactoring方面积极情绪要远远高于消极情绪,而New feature则恰恰相反.与Lazar等[17]研究不同的是,Islam并没有发现在日期方面情绪有存在不同之处.最后还分析得出开发者在情绪较好的时候会倾向于发表更长的评论.
4.1.3 时间的角度
Lazar等[17]从7年时间里的大约28466个GitHub projects中提取出commits logs.通过SentiStrength分析得出大约74%的commits都是中性情感,7.19%的是积极的,剩余18.05%的是消极的.但作者在分析之前没有进行预处理,文本中包含的代码块,url地址可能导致结果中增加了很多中性成分.另外作者还根据提交的日期来作为影响情感的因素,按照周一到周日,进行比较分析,发现周二有着更多消极情绪,对于前五名的大项目周三周四有最多的消极情绪.以及发现了文件修改数量与情绪之间呈正相关变化.
4.1.4 团队的角度
Tourani等[18]的早期研究分析识别并评估开发团队中的痛苦或快乐.他们在Apache软件基金会选取了两个最成功、最成熟的项目的邮件列表,并对其进行了情感分析.他们发现,用户和开发者的邮件列表会带来正面和负面的情绪,而情感分析工具对电子邮件信息的准确性并不高,因为与tweet或发布的评论相比,它们的篇幅相对较长.Guzman等[15]以开源项目中的commit comments 为数据集,从项目使用的语言,时间与日期,团队的分布程度以及项目的认可度这四个方面来分析,主要采用了SentiStrength这一工具来为情感打分,并使用Wilcoxon秩和检验进行统计分析.情感得分在这些数据集中相对接近中性,这可能由于评论是关于技术为主,带有的情感不是很丰富.最终作者得出,Java语言包含更多的消极情感,在一周中周一的评论表现出更多的消极情绪,在一天的各个时间段中,下午的comments相比于傍晚的要更加积极.另外,研究也发现一个项目参与的开发者越多,comments中包含的积极情绪也会增加.而Karl等[42]从项目持续时间对情感的影响这一角度来研究随着项目的不断深入,整个团队的情感是否会产生变化,以及领导者的情绪,项目参与的人数与项目的大小也会不会对情感产生影响.结果显示,随着时间的持续,团队的积极情绪出现下降,这一趋势在项目周期的中间时得到延缓,但在项目接近尾声时又会加剧.领导者的情感表现出的积极性越多,项目的积极情绪下降的趋势就会变得更小.
4.2 情感对软件开发的影响
情感对于人的行为活动存在着很多方面的影响,这一点在许多心理学的研究中已经被证实了,而软件开发活动也同样受到情感的影响.从目前的研究来看情感对软件开发的影响主要集中在效率,质量,团队氛围,开发者的行为这几个方面.
从效率角度,Ortu等[4]分析情感与issues解决时间两者之间的关系,从Jira issue中选取了一些项目的Issue comments,从joy,love,sadness,anger这几个方面来进行分析.结果表明,情感对issues解决时间的确存在着显著的影响,积极情绪越多,issues的解决时间越短,消极情绪越多,issues解决时间越久,Ortu等[43]又在另一项研究中选取了14个开源软件项目进行分析,发现礼貌对于Issues的解决时间也存在着影响,有礼貌的Issue解决时间要低于不礼貌的Issue;礼貌与项目的吸引力、开发者粘性之间存在正相关,issue中表达更礼貌的项目,通常给开发者留下积极的情绪,表现出更大的吸引力.Graziotin等[44]调查了软件开发人员的情感状态、创造力和分析解决问题的技能之间的关系.研究者从VAD情感维度的理论的角度出发,采用了两份问卷SAM(自我情感评估问卷)和自我工作生产力评估问卷,对开发人员进行施测,从而得到开发人员在Valence、Arousal、Dominance上的得分以及生产力的得分.进行数据分析后发现软件开发人员的情感状态与他们自我评估的生产力呈正相关 .
从团队氛围的角度来看,Garcia等[45]采用GENTOO社区(一个Linux社区)的Bug报告和邮件列表中的数据,分析了情感在开发者的活跃度中所扮演的角色.作者首先调查了与一个核心开发者Alice离开有关的情感因素,发现她与开发者之间的邮件内容比其他人的更加消极,而且在Alice离开之后,对社区产生了很多负面的影响.然后进一步推广到所有的开发者中,分析开发者的情绪表达与其个体不活动的时间间隔之间的关系,发现了在产生某种情感表达之后,开发人员会有动机减退的情况出现,从而可以根据一个开发者在他最后的信息中表达的情绪来估计他什么时候变得不活跃.还有研究认为情感信任对分布式开发团队存在影响,信任是软件项目的基础,特别是在分布式的情况下,同时认为情感信任是分布式软件协作成功的预测因子,推测在分布式项目中,之前的pull-request注释中的情感性词汇量越大,当前的pull请求被接受的机会就越大,但其没有进行进一步的实验证实[46].
从工作表现方面,也可以说是质量方面,Khan等[47]对开发人员进行了两种不同的实验,通过让开发人员观看影片以此引发特定的情绪,接着进行debugging的测试,以及先进行一些体育锻炼,然后做算法演算任务,并测试他们的表现与情绪状态.结果表明情感的效价(Valence)不同状态对Debugging任务的影响确实存在的,在观看低唤起和高唤起的视频剪辑后,结果也有显著差异;在体育锻炼后,程序员的唤醒度和效价都有显著提高,与此同时,他们的任务表现也有所改善.而在软件开发过程中对质量的把控也是十分重要的,Francisco Jurado等[48]建议在软件开发过程中,引入情绪分析技术,以识别和监视开发人员在issues和tickets中编写的文本中的潜在情绪.因此作者分析了9个著名的项目的数据,发现在这些资料中确实存在在潜在的情绪表达.所以作者认为这些信息可以用来分析开发过程,监测开发过程中的情感特征.
5 分析与展望
综上所述,不难看出如今在软件开发领域的情感分析研究已经有了一定的成果,从很多角度来分析了软件开发中的情感现状,不过仍有一些可以探索的方向.目前,许多研究人员开发了针对软件工程领域定制的情感分析工具,也有一部分研究分析了情感对软件开发的影响.这些工具在某些数据集上有着良好的表现,但有研究指出在另一些数据集上进行测试时的表现是远低于预期,这表明了目前在软件工程领域的情感分析的工具或方法上还有很大的提高空间.因此,对于未来的研究方向,主要从以下几个方面来阐述.
5.1 软件工程领域情感分析面临的挑战
目前对于软件开发中情感状态的分析,大多数都是采用极性分类的办法.然而有研究认为[49],由于情感是非常复杂的,如果只是单一的情感极性是不足以挖掘出开发人员的情感的,仅仅是情感中的一个维度.除此之外,现有的一些软件开发领域情感分析工具,它们有着良好的内部效度,而在外部效度上会相对较差,也就是说虽然都是与软件开发相关的文本,但以StackOverflow数据所开发的工具,在Github数据中的表现不一定能达到它原本的水准[34].还有当采用机器学习方法训练情感分析的模型时,可能会遇到过拟合所导致的在训练集上表现良好而在测试集上表现糟糕的情况.这些就是软件开发领域情感分析所需要克服的困难.
5.2 软件开发中情感分析研究展望
5.2.1 对软件开发进行更精确的情感分析
目前而言,情感分析方法主要是基于词典和机器学习的方法,也有了许多针对软件工程领域的情感分析工具,但总体上的效果还有很大的提升空间.但在其他领域的情感分析使用深度学习技术有着不错的表现,而且也已经广泛得到应用.最近Achyudh Ram等[25]建立了一种CNN与LSTM相结合的深度网络对5个不同的关于软件开发的数据集进行情感分析,相对于传统的机器学习算法和一些基于词典的情感分析工具,深度网络的确有着一定的优势,不过作者也提出,使用深度学习技术也是有一定的前提条件的,例如数据集的大小,数据集的内容的分布情况等.因此在接下来的研究中,可以将基于深度学习的情感分析方法应用在软件工程的数据集上.
5.2.2 对软件开发进行更深入的情感分析
当拥有更精确的情感分析工具后,挖掘出更多的信息来源,才能更深入地进行情感分析.一些社交媒体文本情感分析研究认为emoji表情符号,文字表情等信息包含情感信息,并将它们与文本一起进行分析.而在软件开发领域,Clase等[50]提取了Apache和Mozilla的Issue comments中的表情符号,他们发现在Apache和Mozilla的开发人员大多时候使用表情符号来表达喜悦,部分表达悲伤或惊讶,这也说明了开发人员确实存在有沮丧的情绪,同时研究者也表示这仅仅是对于表情符号研究的第一步工作,未来可以与一些情感分析工具,或者其他的情感分析技术相结合.除了这种文本信息之外,多模态的情感分析目前也逐渐得到关注,这不同于传统的文本情感分析,它能够综合例如音频,视频,文本等许多信息来进行情感分析.在某些软件开发领域或者相关的社交媒体上可能可以获取得到相应的音频、视频、图片等资料,来进行多模态情感分析.
5.2.3 对软件开发进行更广泛的情感分析
最后,不仅仅要从各个开源项目的角度来分析情感,也可以从一个更宽广的范围的分析,例如整个项目社区的氛围,不仅仅是GitHub这种大型的社区,或者Jira这样的ITS系统,还有一些其他的社区也值得被关注,比如各种Ubuntu、Gentoo等等.进行这样的横向比较之外,我们将来也可以更多地做一些纵向分析,尝试了解项目中情感在一个时间跨度上的变化,Ferreira等[51]分析了Linux内核开发邮件列表中情感随着时间的流逝,是否产生了某种改变.或许能从中观察出一个项目,或者一个社区的发展与演变的过程,这一过程又是否与情感之间存在某种联系.
6 总 结
情感与软件开发之间的关系是十分紧密的,同时开源社区的兴起带来了海量的资料,因而,近年来研究者基于这些巨大的数据量,利用各种情感分析技术对软件开发过程中的情感状态进行了分析,尽管这一领域取得了很大进展,由于软件开发的特殊性,情感分析工具在软件工程中的使用效果依旧需要提高.另一方面,情感对软件开发过程具有广泛的影响,好的情感状态对提高软件开发的效率、质量、软件社区的氛围、管理、软件团队的交流、协作、开发者的积极性、粘性等方面都能起到帮助.因此,探索影响情感状态的因素以及如何利用情感的调控来提升软件开发过程具有重要的研究价值.目前的研究刚刚起步,亟待深化.