情感分析主要是判别文本的情感倾向,即属于正面、负面、中性。利用机器提取人们对某人或事物的态度,从而发现潜在的问题用于改进或预测。
目前主要的情感分析方法是基于情感词典的,以及基于监督或半监督学习的。基于情感词典的方法都好说,本篇接下来会详细讲;基于监督或半监督学习的方法主要是基于神经网络、深度学习的一些方法将文档转换成向量后,利用SVM、贝叶斯分类器等分类器再去分类,从而判断文档的情感倾向。
基于情感词典的情感分析主要是利用事先准备好的情感词库,给每个词以相应的情感倾向度的权值,然后从文本中提取出所有的情感词并根据句子特点(反问句,疑问句等)计算最后的情感得分和,根据情感得分判断文本的情感极性。
这种方法的首要任务是如何去构建情感词典,如何判断一个词语是褒义词或贬义词,目前的研究有两种思路:
基于语义计算的情感词构建,核心是如何构建基础情感词,然后由目标词与这些基础情感词做语义相似度计算。
这类基础情感词必须要人工标记,我们一般选下列几种前人整理好的情感词典:
构建好上述的基础情感词典后,我们可以对语料库进行中文分词处理,然后扫描每个单词,与情感词典中的词进行HowNet语义相似度计算,当相似度达到一定阈值时即可判断该词的情感倾向和权值。
其中HowNet语义相似度的计算部分我们在前面的相似度计算一篇中有详细介绍,读者可以参考阅读。
基于统计分析的情感词典构造也是需要事先准备一套情感极性明显的基础情感词典,然后由目标词与该基础情感词典中的单词计算点间互信息,一般我们使用SO-PMI算法,然后由点间互信息值来判断该目标词的情感极性和情感倾向度。
基础情感词典的构造与上小节类似,我们下面直接讲SO-PMI算法。
首先对文本进行分词,然后通过查事先准备好的情感词典表,以提取所有的情感词,并读取情感词对应的情感极性和权值。
这种是比较明显的,但句子存在情感转移或情感极性反转等情况,比如“我不喜欢你”,“喜欢”是褒义词,但前面加个“不”否定一下,则整个句子就成了负面。
否定词是副词的一种,它是表示否定意义的词语,在文本中具有独特的语法意义和影响。根据中文成句习惯,单重否定往往会改变情感极性,而双重否定表示肯定。
常见的否定词有:不、没、无、非、莫、弗、毋、勿、未、否、别、無、休不曾、未必、没有、不要、难以、未曾。
程度副词也是副词的一种,副词一般用于修饰或限制动词与形容词,表示范围、程度等。“程度”是指某个量处于相应层次序列中的某个层级上,是量的层级表现。
比如句子“这个小姐姐非常好看”,其中“好看”是褒义词,“非常”在前面修饰,加强了这种褒义程度。由此可知,程度副词的加入使用户在的情感倾向强弱程度上发生了变化,仍需做相应处理。
又如“太好看”和“特别好看”,“太”和“特别”这两个程度词表现的程度是不一样的,所以有人提出把程度副词划分为四个等级,即极量、高量、中量和低量,分别对应不同的权重。
同否定词的处理方式一样,句子中检测情感词前面是否存在程度副词,如果存在,则将情感词的权值乘以程度副词的权重。
其中需要事先准备好程度副词表,一般从《知网》的“中文程度级别词语”整理。
感叹句是以抒发感情为主的句子,它所抒发的感情有赞美、愉悦、愤慨、叹息、惊讶、哀伤等,句末通常都用感叹号来标识。通常感叹句是依附于它所在情感句的情感极性,可以是对正面情感或者负面情感的程度加深。
我们可以将感叹句中的情感词的权值加倍,或者乘以某一权重来加深这种情感;感叹句通过感叹号(“!”)来识别。
反问句的目的往往是加强语气,把原本的思想表达更加强烈、鲜明。它通常比陈述句表达更为有力,感情色彩也更加明显。
比如“难道我对你不够好么?”,“好”是褒义,“不够好”就变成了贬义,而反问“难道...?”又将句子转换成了褒义,而且语气更强烈。
反问句的存在可以通过反问标志来判断,可从语料中挑选出大量反问句并对反问标记词进行抽取,获得部分反问句标记词。类似感叹号,反问句在句尾有疑问号“”的出现,这给反问句的判断提供了帮助。
常用的反问标记词有:为什么、凭什么、难道、何必、怎能、怎么能、怎么会怎会、哪能、能不、能没、不都、不也、不就、谁叫谁让、就算、这算、还算、就不、还不、莫非等等。
对于网络文本,比如微博或者论坛等,平台都提供了丰富多彩的表情符号供用户选择。由于有些表情符号暗含了感情色彩,人们常用合适的表情来直接表达某种心情。
比如“今天掉了100块钱[\大哭]”,其中整个句子汉字部分都是称述事实,不含情感色彩,但最后的表情符号“[\大哭]”就含有悲伤的情感。
同基准情感词的处理一样,我们事先人工挑选暗含情感色彩的表情符号构成正负面表情符号表,并根据表达的情感程度不同而为不同的表情符号设置不同的权重;对句子进行分析时,之间提取句子中的情感表情符号及其对应的权重即可。
如下是论文《基于情感词典的中文微博情感倾向分析》中给出的表情符号示例:
情感倾向度是为了计算文本表达正面情感的程度或者负面情感的程度,一般我们把每条句子的情感值进行累加,得到整个文本的情感值;而句子的情感值根据上面的分析逻辑来算。
笔者查阅过多种资料,基本上基于情感词典的情感分析方法都如上面所述,大同小异,所以其他的不做过多讲解
这种方法依赖于情感词典的完善程度,需要大量的情感词典做多模式匹配,所以高效的匹配算法对工程实现来说是有价值的,可参考笔者之前写的《双数组字典树》一篇。