情感分析和倾向分析

来自:http://hi.baidu.com/whusoft/item/aa6f8835d9664a0dcfb9fe2f

1微博客心情挖掘研究(英文已于2009年8月发表,中文草稿只贴,定稿版以英文为准,最新版的工具做了若干微调)

包含情感分析工具的软件下载入口介绍地址,点击此处
沈阳1 李舒晨2 郑玲3 任晓东 程小龙
(1武汉大学信息管理学院 430072 2武汉大学国际软件学院430072 3武汉大学测绘学院30072)
  摘 要: 为确定语料所表达的情绪,对微博客数据所表现的情感进行情感估计,本文对情感词进行分类,构建含有1342词的态度词权值词典,并引入自定义的否定词词典、程度词词典和感叹词词典,对2213条微博客进行分类统计分别得到首句和尾句表句子主要意思的条目占复句的比例为23.8%和51.3%。先算每个分句的权值,然后对首尾句的权值特殊处理再叠加得到某条微博客的心情指数。使用C#语言编写的微博客心情权值计算器情感识别测试的结果经交叉判定正确率达到80.6%。
  关键词:态度词 权值字典 心情指数 权值计算
Emotion Mining Research on Micro-blog
(1 School of Information Management, Wuhan University 430072;2 International School of Software, Wuhan University, Wuhan 430079;3 School of Geodesy and Geomatics, Wuhan University, 430072)
Abstract :In order to identify the emotion expressed in corpus and to estimate the feelings conveyed by micro-blog data, in this paper, we categorize emotional words, build attitudinal words weight dictionary(WD) which consists of 1342 words, and introduce self-defined negative words dictionary(NWD), degree words dictionary(DWD) and interjection words dictionary(IWD). We then process classified statistics on 2213 micro-blog items, finding that items whose first sentence express the main idea accounts for 23.8% of all the complex sentences, and items whose last sentence express the main idea 51.3%, respectively. We first calculate the weights of each clause in a micro-blog item, then take special treatment to the first and last sentence, finally we add up all the weights to get the emotional index(EI) of the item. Test results from the micro-blog emotion weight calculator(MBEWC) developed in C# are cross-checked and reach an accuracy rate of 80.6%.
Keywords: attitudinal words, weight dictionary, emotional index, weight calculating


1.心情挖掘研究背景
  在人机交互领域,情绪对反应的影响早已被人们所重视,尤其在工作和产出效率方面[1]。2006年,Chung-Hsien Wu使用了一种新颖的方式,包括构建情感规则、表示语义标记和属性、构建情感相关性规则和使用独立的混合模型,自动识别文本中的情感,并将情感简化为高兴、不高兴和中立三种[2]。同年,Jon oberlander开始使用个人博客语料库对博客作者的情感进行分类[3]。2007年,Kazuyuki?Matsumoto通过构建情感字典来确定文本对话中的情感,他们根据词出现在某一情感环境中的概率来确认权值,并获得80%左右的情感确定精确度[4]。2008年,Jon oberlander的同伴Alastair J. Gill对博客文本进行情感评定,发现当文本关键词倾向性很强时,对情感的评判随着文章长度增长越发准确,而对于文本关键词大多倾向中立的文章,评判结果误差较大[5]。本文的研究将Kazuyuki?Matsumoto与Chung-Hsien Wu的主要研究思想结合,通过构建权值字典来确定语料所表达的情绪。《普通心理学》一书将一般心情分类为快乐、愤怒、恐惧和悲哀四类[6],在此将后三种情绪合并,将情绪定义为积极情绪和消极情绪,并根据微博客信息量有限的特点加入中立情绪。
2挖掘方法
  心情挖掘主要借助微博客文本中的语义规律给每一条微博客数据赋值,通过值的大小来判断心情。定义该值为心情指数,即为每条微博客语句中情绪状态的判断指标。心情指数为正表示积极情绪,心情指数为负表示消极情绪,心情指数为0表示中立情绪。心情指数越高,表示心情越积极;心情指数越低,表示心情越消极。
2.1 权值字典的构建
  语料选择的方法关系到语料库的覆盖率,所谓覆盖是指语料在各个不同领域的分布或散布,这些不同领域通常是指由时间轴(反映时代特征) 、空间轴(反映地域特征) 、学科轴(反映知识特征) 、风格轴(反映语体特征) 构成的四维模型[7]。然而,由于微博客140个字符的限制和目前多数用户主要关心天气、生活、电影、感情、情绪等日常话题,且存在大量没有与人交流的隔离用户[8],使得微博客不可能有完备的时间轴,空间轴,学科轴和风格轴。所以本文直接筛选微博客中的关键词进行计算,从而得出整个微博客的心情指数。而且,微博客中存在大量的垃圾信息,在计算微博客心情指数之前,要去除微博客中与情绪无关的广告类和推介类微博客。2008年,徐琳宏对情感语料库的构建和分析进行了研究[9],并从教科书、文学类书籍中采集了大量的语料。此研究以篇为研究对象,标注句;而微博客以句为单位,标注词。同时,此研究经构建的大语料库证明,无感情类语句最多[25],这也从侧面证明了定义中立情绪的可行性。此研究的局限性是对否定词和程度副词的划分与判断没有给出相应的解决方法。事实上,信息中否定词对句子情感色彩影响也较大,特别是对语句的褒贬倾向性影响较大[10]。鉴于此,又构建了否定词库。中文存在多重否定现象,当否定词出现奇数次时,表示否定意思;当否定词出现偶数次时,表示肯定意思。
  首先,定义词的权值,引入态度词的概念,并打破传统的动词、名词、形容词的分类。态度词指表示人态度的词语,如欢喜、悲伤等,大部分态度词由动词、形容词和副词组成,并含有少量名词。同时,并不是所有的动词、形容词和副词都能表示态度。每个态度词对应一个表示心情程度的权值,将权值的范围定义为[-20, 20],例如,狂喜的权值是20,绝望的权值为-20。正值表示积极的心情,负值表示消极的心情。某个词的正值越大,表示越能表达积极的情绪;反之,表示越能表达消极的情绪。之后,使用微博客抽取工具抽取微博客“饭否”中的数据,在这些数据中随机选取2000条数据,过滤掉广告、推介、火星文等类型的微博客条目,余下1403条数据。按照态度词的定义,通过3个人人工标注,加权平均后,在1403条微博客数据中初步标注出524个态度词,并按权值排序组成权值字典;并且初步组成了含有13个常见否定词的否定词词典。在进一步的试验中,借助同义词词典对权值字典词汇量进行了人工扩充,通过7个人交叉进行权值标注,经加权平均后,得到了现有的1342个态度词的权值字典。权值字典构建过程如图1所示:
 
  直接使用微博客而不使用已有教科书、文献作为语料来搜集权值词典有以下两个原因:(1)微博客表达内容有限。完整文章通常表达一个或多个完整的意思,而微博客140个字符通常只能比较一个完整或较完整,甚至不完整的意思。微博客用语属于非正式的书面语,与正式书面语有明显区别。(2)网络词汇丰富。由于微博客最初出现的载体是互联网,为此微博客中存在各种各样的网络用语,这些词语在正式书面语语料库中并不常见,但在微博客中比比皆是。在后续研究中,可以根据心情挖掘的对象来构建语料库的构建。并且,还可以另外通过传统文献,教科书等构建通用权值字典,从而对传统博客、文章、文献,甚至评论的心情、情绪进行挖掘,同样具有巨大的价值。
2.2心情计算器算法简述与算法改进
  构建好权值字典后,使用C#语言编写了微博客心情计算工具“ROST微博客心情权值计算器”。“ROST微博客心情权值计算器”在改进的过程中有以下3个版本:(1)beta1:不带否定词典;(2)beta2:带否定词典;(3)beta3:带否定词典,增加程度词和感叹词词典,改进算法。
  在最初版本的“ROST微博客心情权值计算器beta1”中,只考虑标记关键词的方法,并没有加入否定词,并且使用的权值词典为手工构建的524个词的权值词典。随后,对权值字典进行了人工扩充,增加到1342个词,并构建了小型的否定词典。“ROST微博客心情权值计算器beta2”对算法进行改进,考虑了否定词,并使用扩充词典。在进一步的研究过程中,由于许多态度词中本身还有否定词,原来算法会重复计算态度词中的否定词,从而使计算结果产生错误。
改进后算法基本思路:
(1) 读入一条微博客文本a,将微博客按标点进行分句a1, a2, …, an;
(2) 搜索a1所有包含在权值字典中的态度词,将a1中所有态度词的权值进行叠加,得到v1;
(3) 搜索a1所有包含在否定字典中的否定词数量。当否定词为奇数个时,将a1所在分句态度权值v1转化为-v1;
(4) a1计算完毕,搜索a的下一分句a2重复(2)(3)计算v2;
(5) 直到计算出vn后,将v1, v2, …, vn相加得到v,即一条微博客a的心情指数;
(6) 读入下一条微博客b重复(1)。
  改进后微博客权值F计算公式如下:
                                  
 其中a为微博客,w为权值字典中的权值。i表示一条为博客中的第i个分句,j表示一个分句内第j个带有权值的词(即该词包含在权值字典中)。改进后关键代码如下:
 token[n] = microblog[m].spliter; //将一条微博客进行分句
 getWeight(Dic, token[n]); //计算一分句微博客态度词的叠加值
 if countNumber(NegtiveWord)%2 == 1
  getWeight = -getWeight; //如果否定词数为奇数,将此分句心情值取相反数
 Weight = Weight + getWeight; //叠加各分句的心情值
2.3 进一步改进的算法基本思路和关键代码
  在进一步的研究当中,语句中的程度词和感叹词对句子情感的表现的作用非常突出,而心情工具在处理这类问题时往往容易出错,于是,在以前的基础上又添加了相关的含有10个词的程度词词典和含有16个词的感叹词词典。此外,根据中国人说话的习惯,通常首句和尾句的地位比较重要,改进的算法在计算微博客心情指数时对首句和尾句进行特殊处理。为了得到首尾句的相关关系,对2213条微博客条目做了相关的研究和统计。抽取饭否中的2213条微博客数据,经统计,单句为808条。在1405条复句中,首句表句子主要意思占复句23.8%,尾句表句子主要的意思为51.3%,其他为24.8%,如表1所示:
表1 单复句分类统计结果
2213条微博客条目
单句808条,占微博客总条目数36.5%

复句808条,占微博客总条目数63.5%
首句表句子的主要意思:335条,占复句条目比例23.8%


首句表句子的主要意思:721条,占复句条目比例51.3%


其他:349条,占复句条目比例24.8%
  改进后算法基本思路:
(1) 读入一条微博客文本a,将微博客按标点进行分句a1, a2, …, an;
(2) 搜索a1所有包含在权值字典中的态度词,将a1中所有态度词的权值进行叠加成,得到v1,删除a1中经过匹配的态度词得到a1?;
(3) 搜索a1?所有包含在否定字典中的否定词数量,每匹配一个否定词删除a1?中所包含的此否定词得到a1?。重复(3)直到a1?中不含有否定词。当否定词为奇数个时,将a1所在分句态度权值v1转化为-v1;
(4) 搜索a1?所有包含在程度字典中的程度词数量,每匹配一个程度词删除a1?中所包含的此程度词得到a1?。重复(4)直到a1?中不含有否定词。每增加一个程度词分句态度权值增加一倍。
(5) 搜索a1?所有包含在感叹字典中的感叹词数量,每匹配一个感叹词删除a1?中所包含的此感叹词得到a1?。重复(5)直到a1?中不含有否定词。因中文由于感叹词大多一般都分两种:积极感叹词和消极感叹词。例如:哈哈,呵呵,唉,哼等,一看就知道知道其心情怎样,所以在句子起一定的主导作用。所以分别给它们1和-1两种性质的权,来判断整个句子心情值的走向。如果整个句子含有消极感叹词,则将a1所在分句态度权值v1转化为-v1,
(6) a1计算完毕,搜索a的下一分句a2重复(2)(3)计算v2;
(7) 直到计算出vn后,将v1, v2, …, vn 按特定的权重比例相累加到V,进数;
(8) 读入下一条微博客b重复(1)。
  改进后微博客权值F计算公式如下:
       (如果存在感叹词)      
    F =
                         (否则)            (III)
                      (IV)   
                               (IV)    
  其中a为微博客,w为权值字典中的权值。i表示一条为博客中的第i个分句,j表示一个分句内第j个带有权值的词(即该词包含在权值字典中)。改进后关键代码如下:
if(token[n].hasDegreeWord)            // 判断分句是否含有程度词countDegreeNumber(DegreeWord)            //计算一分句微博客程度词的个数
     getWeight=getWeight*(countDegreeNumber+1) //每多一个程度词,其心情值翻一倍
 if(token[n].hasExclamationWord)         // 判断分句是否含有感叹词
   getWeight=exclamationWeight *︱getWeight︳//如含感叹词,将此分句心情值取绝对值,乘以感叹词的性质权
Total=24%FirWeight+25%∑(MidWeight)+51%LasWeight //将整个句子,按分句的位置进行权值分配,FirWeight代表第一个分句,MidWeight代表中间的分句,LasWeight代表最后一句分句
2.4 心情计算的基本过程
  微博客心情计算的基本过程如图2所示。首先,将一条微博客按标点进行分句。其次,在一条微博客分句中查找包含在权值字典中的词,将它们的权值叠加。再次,在该条微博客分句中查找包含在否定词典中的词,并统计数目,以确定肯定或否定语气。最后,将每一分句的计算值叠加,得出一条完整微博客的心情值。

图2 微博客心情计算的基本过程
3 心情计算成功率
  为检测ROST心情权值计算器的准确性,设计了以下3组共6个试验进行准确率对比:(1)beta1(不带否定词典),与1342词权值字典和524词权值字典;(2)beta2(带否定词典),与1342词权值字典和524词权值字典;(3)beta3,(带否定词、程度词和感叹词词典,改进算法),与1342词权值字典和524词权值字典。
  由于算法精确度限制和心情界定模糊的影响,本文认为若句子表达积极心情且计算结果为正,句子表达消极心情且计算结果为负,计算成功。由于句子无法表达心情情况的特殊性,在判断上可能产生不同的偏差,当计算结果在[-3,3]时,计算成功。其他情况则计算失败。
3.1 试验数据集的选取和试验步骤
  首先,在饭否的已抽取数据集中选择一天的数据,选择2008年10月12日的数据2582条。之后,按照上文中提到的微博客垃圾信息种类,用ROST Content Mining先分词,然后对数据集按照时间段切割成若干文档,将某个时间段的文本看做一个文档,利用传统的TFIDF变形公式计算出一些无效常用词词频并构建为过滤词表,依次去除了链接、天气预报、满140字推介信息,余下2213条微博客作为试验对象。
       (VI)
  表示文档d的长度,avg_len表示所有文档的平均长度,N表示全部训练文档的总数,n(t)表示包含词t的文档数。
  由于目前软件不能支持英文检测和软件的局限性,全英文条目人工和软件都判其心情指数为0。首先,3个人交叉判断2125条微博客并标注积极、消极情绪和中性,。得到表积极情绪条目605条,984条表消极情绪的条目,624条无明显感情的中性条目。然后,将这三个经初步统一的条目分别由另外5个大学生判断其表现出来的情感倾向,得到如下表2所示结果,去掉相应的最大和最小值,取平均得到平均值。
表2 2215条微博客分类判断结果

积极
中性
消极
总条目
605
984
624
No.1
576
940
589
No.2
588
884
559
No.3
517
946
561
No.4
575
950
534
No.5
567
924
544
平均值
573
945
555

  最后,将此2125条微博客信息分别载入各版本的心情计算器进行计算。将计算结果与人工判断结果进行对比检查计算正确性。
3.2 心情权值计算器4组试验结果比较
表3 ROST 微博客心情权值计算器正确率
版本号
版本说明
积极
中性
消极

词典大小
算法特征
正确计算条目
正确计算比例
正确计算条目
正确计算比例
正确计算条目
正确计算比例
人工判断
----
--------
573
----
945
----
555
----
BATE 1

1342
不考虑否定词
480
83.7%
630
66.6%
284
51.1%

524
不考虑否定词
450
78.5%
629
66.6%
417
75.1%
BATE 2

1342
考虑否定词
460
80.2%
627
66.3%
318
55.9%

524
考虑否定词
429
74.8%
633
66.9%
308
55.5%
BATE 3
1342
考虑否定词,改进算法
462
80.6%
714
75.6%
322
58.0%

524
考虑否定词,改进算法
446
77.8%
743
78.6%
325
58.6%
  将用524词权值词典测试出来的结果与用1324词权值词典测试出来的结果相比较,用1324词权值词典并不能明显大幅提升正确率。中性词条目测试结果,500词典的测试结果均比1324词词典测试正确率高,说明新增加态度词,有一部分本来表示无态度,或者表示态度但是存在正面和反面两种态度,却片面赋了某一方面的值,导致判断有误。
  纵向比较每个版本,对结果进行分析,版本2增加否定词词典以后,消极的条目正确率增加了,中性条目正确率基本没有变,但是积极条目的正确率却大大减少了,这是因为判断之前没有对句子进行分词,使得表积极情绪的句子判为负。
  在计算的结果中,加入首尾句的特殊处理后,测试的结果其值与前几个版本不加特殊处理相比较更符合实际情况,计算结果的精确度有较大幅度的提高。
3.3 心情权值计算仍存在的问题
  在正确性统计阶段,ROST心情权值计算器在计算一般陈述句时或字面意思方面,准确率较高,但对以下五种情况存在较大的计算误差:反问句和疑问句;反语,如自嘲,即字面意思和实际意思相反;一部分古诗文;一句话中辩证地从正反两方面阐述同一事实,或同时对同一事物表达程度相当的积极和消极情感;以及,某些方言中的特定词汇。对这些误差较大的情况还有待于做进一步研究。
4. 结论
  本文定义了态度词,构建了含有1342词的权值字典、含有13词的否定词典、含有10个词的程度词词典和含有16个词的感叹词词典,并提出一种计算微博客心情值的方法。此方法考虑了中文否定词、多重否定等语言现象对心情表达的影响。编写了ROST微博客心情计算器,批量计算微博客心情,达到80.6%的正确率。本文比较了词典容量大小、考虑否定词,和具体识别否定词的算法对准确率的影响。今后,我们将在此领域进一步进行研究,改进计算工具,提高准确率。同时,考虑将微博客挖掘移植到评论挖掘。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值