情感分类(sentiment classification)推荐使用什么算法和软件包?

作文网 2023-03-30 05:06 编辑:admin 284阅读

题主的问题是情感分类的算法,正如几位答主提到的,情感分类问题的目标有较大差异,针对不同的问题,如提取情感词描述的对象等需要用到句法分析的问题,需要用CRFs算法,如果只是对文档进行情感分类,则SVM和MaxEnt都可以,且更关键的问题不在于选用哪种机器学习算法,而在于适用于不同问题的特征提取。


也借此机会对情感分类做一个总结吧,也帮助更多人了解机器是怎样识别文本的情感的~


下面将从这几个方面阐述:

1.NLP情感分类任务有哪些,实际生活中有什么用途

2.机器依靠什么完成NLP情感分类(核心问题是什么)

3.现有的针对不同情感分类任务的算法

4.为什么机器在NLP情感分类任务上还比不上人类


===============================分割线==========================


1.NLP情感分类任务有哪些,实际生活中有什么用途


最容易想到的,就是对于一句或一段话,判断说话者的情感,是正向(积极)的,还是负向(消极)的。即便是一段客观的评论,也是可以判断出该评论是在表扬一个事物,还是批评一个事物。这种情感分类任务可以看作一个二分类问题。


但情感其实并不仅限于好、坏两种类别。一种更细的划分是,好坏的程度如何?如果是一个1-5分的打分系统,判断一个评论是几分,则是一个五分类问题。另一种划分方法是情感的类别,现代心理学把基本情感分为快乐、愤怒、恐惧、悲哀四种。也有很多emotion classification的研究把情感分为喜、怒、哀、惊讶、厌恶、恐惧和中立七种,可谓五花八门。当然了,如果只限于sentiment classification的话,还是重点在于正负两种情感的分类的。


上述任务都只是分类问题,但很重要的一点是,我们的语言中所蕴含的信息,绝对不仅限于好坏情感的表达。拿一段评论来说,被评论的东西是什么?它的哪些特性使评论者感到满意或不满意?这样的特性使评论者感到满意的原因是什么?相比于仅仅将一段话分为正负两种类别,这样的语义信息往往更具有现实应用的价值,也更能体现人工智能中“智能”的一面呢~


至于情感分类在现实中的应用,Coursera上Stanford的一门自然语言处理公开课中有比较好的举例,在这里直接引用了

图1 商品评价统计


如网上的商品评论,每条评论评价的商品的哪个方面?是表扬还是批评?当然,购物网站一般会让用户自己打分,所以倒免去了对评论进行情感极性预测的麻烦。


图2 社交网络情感倾向


再比如研究社交网络上网民对某一事物的评价如何,一条微博是积极的还是消极的,可以了解社会舆论对事物的看法。


图3 Twitter情感与民意调查的关系


也有用社交网络网民发的twitter来与民意调查来进行对比的。

还有研究网民情绪随时间的变化,比如周五晚上比较开心,周日晚上比较烦躁等等(这是一定的吧…)。


之所以要对NLP情感分类的任务做区分,是因为针对不同的任务,所用到的算法是有很大差异的。退一步讲,即使要解决的任务是一样的(只区分一段话的正负向情感),训练数据和测试数据的差异,也会使应用的算法有所不同。


那下面就来说说,机器是怎么检测文本中的情感的。


2.机器依靠什么完成NLP情感分类(核心问题是什么)


情感分类问题可以用机器学习的方法来解决。题主所提到的CRFs、SVM、MaxEnt也都是传统的机器学习方法。但正如几位答主提到的,对于NLP情感分类问题而言,选择哪种传统机器学习方法并不是最关键的,有的论文中就用线性分类器或朴素贝叶斯分类器来进行分类。决定准确率的关键在于特征的选取语料的质量


自然语言与图像、语音的重要差异在于,自然语言有一套长时间积累形成的规则,且自然语言的表达具有很抽象的特征。这即可以看作自然语言的优势,也可以看作是劣势。


优势在于,因为自然语言是人为创造的,其特征是高度抽象的,用这种特征解决自然语言的问题,已经有很好的适用性和准确率,语法是确定而且有限的,有些词只可能作为动词出现,动词后面只可能有几种固定的成为搭配,等等。


劣势一方面在于,自然语言有歧义性,一些语句就算让人来理解,尚且会有差异,何况让机器来分辨?另一方面则像上一篇回答的同学所提到的,用什么样的特征来表示文本才足够原始呢?每个词看似已经是文本的足够底层的特征,但其实也是经过高度抽象的。这也会给深度学习在自然语言领域的应用带来一些困难。当然,深度学习在自然语言领域已经有了一些应用,但其成果尚不如在图像等领域那样显著。


那么机器如何识别一句话中的情感?


一是依靠词,二是依靠语法规则。


对于英语等语言来说,每个词之间有空格分开,所以可以直接把空格分开的词语作为一段评论/文档的特征,进行后续的分类。而对于中文这种没有空格分词的语言,则需要由分词工具先对文本进行分词,再进行后续的分类。


而对于语法,则在自然语言处理领域已经有很成熟的词性标注、命名实体识别、句法分析的算法与工具,这里就不再进行赘述,仅将其归为“语法规则”,说说这些算法是怎样服务于情感分类任务的。


这其实跟我们学语言是很像的,在我们学一门新语言时,也无外乎背单词、学语法这两项主要任务。人类想让机器实现人的工作、像人一样思考,第一反应肯定是从自身出发,希望能够用这种方式“教”会机器人类的语言。


3.现有的针对不同情感分类任务的算法


这里我们只简单概述一下不同情感分类任务算法的基本思想,不做过于详细的理论证明,因为不同的优化、约束方式有很多,但最本质的思想是比较相近的。


总的来说,可以将各种情感分类的方法分为基于统计基于规则两类。


首先,对于正负倾向情感分类问题,一个适用于本问题的语料库已经能够解决大部分问题,关键在于如何获得高质量语料库与词语的情感极性。用词袋模型(将每篇文档表示为一个向量,每一维度代表一个词语,其数值代表词语在该文档中的出现次数)可以表示每段文本。


在这种方法中,如果一段文本中出现了诸如great、excellent这样的词,那这段文本表达正向情感的可能性就很大,同样的,如果出现了bad、awful这样的词,那这段文本就很可能表达负向情感。如果正、负向情感的词都有呢?这就是让机器学习词语情感极性的作用了~给每个词语赋一个情感得分,正向为正数,负向为负数,极性更强的词语有更强的绝对值,比如great就会比good的绝对值更大。这样就可以给每篇文本算得一个情感得分,也就是其为正向、负向情感的概率了。如下面这个例子:


图4 正、负情感极性词


蓝色的都是正向的情感词,红色的是负向的情感词,这些事用来判断一段文本情感的重要依据,不论对于人还是机器来说。


但其实这里有个trick,正向的情感词很多,负向的只有一个,但我们很容易读出这段评论的负向情感,机器怎么做呢?可以依据假设词”should be”,可以依据转折词”however”,这就加入了其他的信息。事实上,这也确实是难点之一。


如何去确定每个词的情感极性(构建情感词典)呢?以及对于一些并不能表达情感的词语,比如“I”,“the”,“tree”,怎么把它们筛选掉,留下那些更有利于做情感分类的词语呢?这其实是情感分类中更值得研究的问题。


不同的构建情感词典的方法太多,但基本可以按上面所说的,分为基于统计基于规则两种。


如果我们有大量已经标注好正负情感的文档,那么统计不同的词在这些文档中的出现频率,就可以对情感词的情感极性(正、负以及强度)有一个初步的预测。具体可参考[3]


这里举一个例子,这是根据IMDB的打分评价系统统计的不同的词在不同分数评价中的出现概率:

图5 不同情感词在IMDB打分评价系统中出现概率


词的情感极性就很明显了吧?这还是对评论按10个类别进行划分的结果,如果只有正负两种,则正负分布差异会更大。


基于规则的方法呢,就是通过已有的一些语法规则,让机器通过一些标注好的情感词(good,bad,excellent,awful)去学习更多的情感词。比如两个词被and连接,那么认为它们有相同的情感极性,被but连接,则有相反的极性,同时考虑否定词如not、none的影响。


刘兵教授实验室发过的一篇文章Expanding Domain Sentiment Lexicon through Double Propagation([4])中,提到这样一种假设:在一段评论中,描述同一对象的词具有同样的情感极性。比如一段评论里说一款手机的屏幕非常好(good),那么这段评论中如果还有形容手机屏幕的词,则很可能也是表达好的(如分辨率高、灵敏)。这就像我们在读英文文章时,如果有一个词不认识,那从其前后并列使用的词语中,可以大致猜到这个词的意思一样。当然这种方法首先要对文本进行结构分析,找到每个形容词描述的对象,这就需要基于规则的算法了。


基于不同的数据集和情感词分类方法,现在已经有很多情感词典(sentiment lexicon),比如LIWC、MPQA、BING LIU OPINION LEXICON、SentiWordNet等,基于这些词典,根据每段文本中出现的情感词,可以对文本的情感进行基本的预测。


对于挖掘情感词描述对象的任务,则需要在已知情感词极性的基础上,加入句法分析算法,提取情感词所描述的对象(属性)。句法分析则是自然语言处理的另一个研究方向了,在这里就不过多赘述了,简单来说就是基于已有的语法规则,对文本进行处理,找到每句话中的主语、谓语、宾语等成分。也正如我们在读一句话时,要看的不只是形容词,更要看被描述的主体是什么。


用刘兵教授在THU的一次演讲中举的例子:

图6 情感词对象提取


蓝色的词可以帮助我们识别评论者对描述对象的情感,红色的词是情感词所描述的对象。


4.为什么机器在NLP情感识别任务上还比不上人类


上面所说的依据情感词和语法规则的方法进行情感分类看似合理,但为什么机器在很多时候还是不能像人一样准确地识别NLP中的情感呢?是因为人类在用语言进行交流时,还有一些更严苛的条件,或者说优势,是机器暂时难以达到的。


第一是人类的推理能力。我们读一句话、一段文本,不仅限于其字面意思,但对于机器而言,它们只能了解到字面意思。很多情感是隐晦(implicit)的。比如“如果这个手机销量好,其他手机都要脱销了”,这在我们看来一点也不难理解,但这里面的假设、对比,对于机器而言是很难理解的。本质上说,就是我们难以将其归结为某种特征,让机器去学习。这种对语言理解的推理能力,并不是依靠词和语法就能够完成的。


第二是人类理解语言时带有其已经了解的大量先验知识。比如“easy”这个词,用来形容电子产品容易上手,是个正向情感词,而说某本书思想很浅薄,则是个负向词,这就涉及到一个词在不同的领域的情感转变。哪怕只在手机这个领域,“long”这个词,用来说电池使用时间,就是正向词,用来说打开app的时间,就是负向词,这就涉及到不同的形容词与描述对象的搭配。机器更多的从统计的角度来计算正、负情感的概率,但不可能将所有的情况全都存下来,更不用说我们在交流的时候还涉及了大量生活中的常识,这也是机器针对不同的情感分类问题,总是要用适用于这种问题的方法、语料来进行预测的原因。


第三是人类具有对语言的自我学习与迁移的能力。我们对语言的学习,是有着很自然的自我学习机制的,看到一个新词、新搭配,即使不查字典,我们也会很自然地通过已有的知识推测这个词的意思、并学习这种用法。但对于机器来说,这种利用将已有知识迁移到未知的能力是较差的,这也是为什么从一个领域(比如书籍)学习到的情感词,如果用在其他领域(比如电子产品),效果并不好,更不用说社交网络上层出不穷的原创词汇了。事实上对于机器的这种迁移学习,已经有不少的研究,但不能否认的是,人类的这种自我学习与迁移的能力与意识,是机器还没有达到的。


当然,这些只是现存的问题,并不能说明它们是不能解决的。刘兵教授在一次在THU的讲座里提到Lifelong machine learning对解决情感分类问题的帮助,如对已有的领域(话题)进行学习,当出现一个新领域的情感分类问题时,如何判断新领域与已有领域中的哪些相关性强、哪些相关性弱,并将强相关领域已学到的特征传递到新领域中。


乍一听感觉让机器进行情感分析很厉害,但其实现在机器处理的情感分类任务还只是从数学统计角度,融合一些自然语言的语法规则,而完成的极性分类、语法分析的任务。而情感是一个很“玄幻”的东西,交给机器处理的也只是最能够用数字量化的基本任务。所以,除了去提升用机器解决情感分类问题的准确性,探寻如何让机器对人类情感的学习涉及到更广的范畴、有更广泛的应用,也是一件令人期待而兴奋的事情呢~


参考文献


[1]斯坦福大学自然语言处理公开课Coursera - Free Online Courses From Top Universities

[2]KDD China专题讲座第一讲{{S.China}}

[3]Yu H, Deng Z H, Li S. Identifying Sentiment Words Using an Optimization-based Model without Seed Words[C]//ACL (2). 2013: 855-859.

[4] Qiu G, Liu B, Bu J, et al. Expanding Domain Sentiment Lexicon through Double Propagation[C]//IJCAI. 2009, 9: 1199-1204.



【“科研君”公众号初衷始终是希望聚集各专业一线科研人员和工作者,在进行科学研究的同时也作为知识的传播者,利用自己的专业知识解释和普及生活中的 一些现象和原理,展现科学有趣生动的一面。该公众号由清华大学一群在校博士生发起,目前参与的作者人数有10人,但我们感觉这远远不能覆盖所以想科普的领域,并且由于空闲时间有限,导致我们只能每周发布一篇文章。我们期待更多的战友加入,认识更多志同道合的人,每个人都是科研君,每个人都是知识的传播者。我们期待大家的参与,想加入我们,进QQ群吧~:108141238】




【非常高兴看到大家喜欢并赞同我们的回答。应许多知友的建议,最近我们开通了同名公众号:PhDer,也会定期更新我们的文章,如果您不想错过我们的每篇回答,欢迎扫码关注~ 】


http://weixin.qq.com/r/5zsuNoHEZdwarcVV9271 (二维码自动识别)