情感分析(Sentiment Analysis),又称观点挖掘,是对带有情感色彩的主观性文本进行分析、处理和提取,系统地识别、量化和研究情感状态和主观信息的过程。情感分析作为自然语言处理(Natural Language Processing,NLP)领域中的一个子领域,是文本分类的一个分支,而自然语言处理又是人工智能的一个重要子领域。情感分析也与我们的生活息息相关,在我们身边有着很多情感分析的应用,例如在2020年突如其来的疫情持续期间,舆情管理就与应用大数据和人工智能进行情感分析密不可分。
同时今天3月15日,正值每年的国际消费者权益日(World Consumer Rights Day),目的在于扩大消费者权益保护的宣传,在国际范围内更好地保护消费者权益。广大消费者都会对购买过的商品进行评论来表达对商品品质的看法,那么对这些商品评论进行情感分析就可以很直接地了解到人们对商品的判断。
情感分析主要有两种研究方法:基于情感词典以及基于机器学习的研究方法,本文则利用Scratch逐步实现了基于词典的情感分析。学习本课程除了需要掌握基本的Scratch基础外,还需要对Scratch的语句结构有更加深入的理解,且需要更高的逻辑思维能力。
一、一般处理流程
语料获取 -> 文本预处理 -> 特征工程 -> 特征选择
1、语料获取
即需要处理的数据及用于模型训练的语料。
数据源可能来自网上爬取、资料积累、语料转换、OCR转换等,格式可能比较混乱。需要将url、时间、符号等无意义内容去除,留下质量相对较高的非结构化数据。
2、文本预处理
将含杂质、无序、不标准的自然语言文本转化为规则、易处理、标准的结构化文本。
①处理标点符号
可通过正则判定、现有工具(zhon包)等方式筛选清理标点符号。
②分词
将连续的自然语言文本,切分成具有语义合理性和完整性的词汇序列的过程。
一般看来英文较容易可通过空格符号分词,中文相对复杂,参考结巴分词、盘古分词、Ansj等工具。
常见的分词算法有:基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法和基于规则的分词方法,每种方法下面对应许多具体的算法。
③词性标注
为自然语言文本中的每个词汇赋予一个词性的过程,如名词、动词、副词等。可以把每个单词(和它周围的一些额外的单词用于上下文)输入预先训练的词性分类模型。
常用隐马尔科夫模型、N 元模型、决策树
④stop word
英文中含大量 a、the、and,中文含大量 的、是、了、啊,这些语气词、助词没有明显的实际意义,反而容易造成识别偏差,可适当进行过滤。
⑤词形还原
偏向于英文中,单数/复数,主动/被动,现在进行时/过去时/将来时等,还原为原型。
⑥统计词频
因为一些频率过高/过低的词是无效的,对模型帮助很小,还会被当做噪声,做个词频统计用于停用词表。
⑦给单词赋予id
给每一个单词一个id,用于构建词典,并将原来的句子替换成id的表现形式
⑧依存句法分析
通过分析句子中词与词之间的依存关系,从而捕捉到词语的句法结构信息(如主谓、动宾、定中等结构关系),并使用树状结构来表示句子的句法结构信息(如主谓宾、定状补等)。
3、特征工程
做完语料预处理之后,接下来需要考虑如何把分词之后的字和词语表示成计算机能够计算的类型。
如果要计算我们至少需要把中文分词的字符串转换成数字,确切的说应该是数学中的向量。有两种常用的表示模型分别是词袋模型和词向量。
①词向量
词向量是将字、词语转换成向量矩阵的计算模型。目前为止最常用的词表示方法是 One-hot,这种方法把每个词表示为一个很长的向量。
②词袋模型
即不考虑词语原本在句子中的顺序,直接将每一个词语或者符号统一放置在一个集合(如 list),然后按照计数的方式对出现的次数进行统计。统计词频这只是最基本的方式,TF-IDF 是词袋模型的一个经典用法。
常用的表示模型有:词袋模型(Bag of Word, BOW),比如:TF-IDF 算法;词向量,比如 one-hot 算法、word2vec 算法等。
4、特征选择
在文本挖掘相关问题中,特征工程也是必不可少的。在一个实际问题中,构造好的特征向量,是要选择合适的、表达能力强的特征。
举个自然语言处理中的例子来说,我们想衡量like这个词的极性(正向情感还是负向情感)。我们可以预先挑选一些正向情感的词,比如good。然后我们算like跟good的PMI,用到点互信息PMI这个指标来衡量两个事物之间的相关性。
特征选择是一个很有挑战的过程,更多的依赖于经验和专业知识,并且有很多现成的算法来进行特征的选择。目前,常见的特征选择方法主要有 DF、 MI、 IG、 CHI、WLLR、WFO 六种。
5、模型训练
在特征向量选择好了以后,接下来要做的事情是根据应用需求来训练模型,我们使用不同的模型,传统的有监督和无监督等机器学习模型,如 KNN、SVM、Naive Bayes、决策树、GBDT、K-means 等模型;深度学习模型比如 CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN 等。这些模型在分类、聚类、神经序列、情感分析等应用中都会用到。
当选择好模型后,则进行模型训练,其中包括了模型微调等。在模型训练的过程中要注意由于在训练集上表现很好,但在测试集上表现很差的过拟合问题以及模型不能很好地拟合数据的欠拟合问题。同时,也要防止出现梯度消失和梯度爆炸问题。
6、模型评估
在机器学习、数据挖掘、推荐系统完成建模之后,需要对模型的效果做评价。模型的评价指标主要有:错误率、精准度、准确率、召回率、F1 值、ROC 曲线、AUC 曲线等。
7、投产上线
模型的投产上线方式主要有两种:一种是线下训练模型,然后将模型进行线上部署提供服务;另一种是在线训练模型,在线训练完成后将模型 pickle 持久化,提供对外服务。
三、NLP应用方向
1、命名实体识别
指识别自然语言文本中具有特定意义的实体,主要包括人名、地名、机构名、时间日期等。
传统机器学习算法主要有HMM和CRF,深度学习常用QRNN、LSTM,当前主流的是基于bert的NER。
2、情感分析
文本情感分析和观点挖掘(Sentiment Analysis),又称意见挖掘(Opinion Mining)是自然语言处理领域的一个重要研究方向。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。
情感分析技术可以分为两类,一类是基于机器学习的方法,通过大量有标注、无标注的主观语料,使用统计机器学习算法,通过提取特征,进行文本情感分析。另一类是基于情感词典的方法,根据情感词典所提供的词的情感极性(正向、负向),从而进行不同粒度的(词语、短语、属性、句子、篇章)下的文本情感分析。
3、文章标签
文章标签是利用机器学习算法,对文章进行文字和语义的分析后,提取出若干个重要的词或者短语(关键短语)。关键短语是NLP基础的算法模块,有了关键短语,能为后续的搜索、推荐等更高级的应用提供有力的抓手。
适用场景:1、个性化推荐:通过对文章的标签计算,结合用户画像,精准的对用户进行个性化推荐;2、话题聚合:根据文章计算的标签,聚合相同标签的文章,便于用户对同一话题的文章进行全方位的信息阅读;3、搜索:使用中心词可以对query进行相似度计算、聚类、改写等,可以用于搜索相关性计算。
4、案件串并
①信息抽取
运用实体抽取、关系抽取,从案情中抽取关键信息,如从警情中可以抽取报警人项目、报警人电话、案发地址等信息
②实体对齐
相同的实体在不同的案情中会有不同的表述,会给串并带来困难。可针对地址、人名、组织名进行对齐处理。
③文本聚类
对于关键片段类信息,无法像实体那样对齐,需要借助文本聚类技术进行关联。
④构建图谱
将信息抽取结果存入图谱。每个警情id对应一个节点,实体、属性、关键片段作为节点,对齐的实体、同一类的文本存为同一个节点。
除了来自于从警情中抽取的信息,还可以将其他警务系统中存在的结构化数据导入(如来自户籍信息的人物关系),从而丰富图谱。
⑤图谱检索
完成以上工作,即完成了案件串并的必要基础建设,接下来通过图谱的查询功能自动完成案件的串并。首先需要设定串并的条件,案件串并的条件在警务实战中已有很多的积累,如“具有相似的作案手段”,又如“相似作案手段,嫌疑人有共同联系人”,只需要将这些条件用图谱查询语言表达出来。
与其他的人工智能技术相比,情感分析(Sentiment Analysis)显得有些特殊,因为其他的领域都是根据客观的数据来进行分析和预测,但情感分析则带有强烈的个人主观因素。情感分析的目标是从文本中分析出人们对于实体及其属性所表达的情感倾向以及观点,这项技术最早的研究始于2003年Nasukawa和Yi两位学者的关于商品评论的论文。
随着推特等社交媒体以及电商平台的发展而产生大量带有观点的内容,给情感分析提供了所需的数据基础。时至今日,情感识别已经在多个领域被广泛的应用。例如在商品零售领域,用户的评价对于零售商和生产商都是非常重要的反馈信息,通过对海量用户的评价进行情感分析,可以量化用户对产品及其竞品的褒贬程度,从而了解用户对于产品的诉求以及自己产品与竞品的对比优劣。在社会舆情领域,通过分析大众对于社会热点事件的点评可以有效的掌握舆论的走向。在企业舆情方面,利用情感分析可以快速了解社会对企业的评价,为企业的战略规划提供决策依据,提升企业在市场中的竞争力。在金融交易领域,分析交易者对于股票及其他金融衍生品的态度,为行情交易提供辅助依据。
目前,绝大多数的人工智能开放平台都具备情感分析的能力,如图所示是玻森中文语义开放平台的情感分析功能演示,可以看出除了通用领域的情感分析外,还有汽车、厨具、餐饮、新闻和微博几个特定领域的分析。
那么到底什么是情感分析呢?从自然语言处理技术的角度来看,情感分析的任务是从评论的文本中提取出评论的实体,以及评论者对该实体所表达的情感倾向,自然语言所有的核心技术问题,例如:词汇语义,指代消解,此役小气,信息抽取,语义分析等都会在情感分析中用到。因此,情感分析被认为是一个自然语言处理的子任务,我们可以将人们对于某个实体目标的情感统一用一个五元组的格式来表示:(e,a,s,h,t)
以图为例,e是指某餐厅,a为该餐厅的性价比属性,s是对该餐厅的性价比表示了褒义的评价,h为发表评论者本人,t是19年7月27日。所以这条评论的情感分析可以表示为五元组(某餐厅,性价比,正向褒义,评论者,19年7月27日)。
情感分析根据处理文本颗粒度的不同,大致可以分为三个级别的任务,分别是篇章级、句子级和属性级。我们分别来看一下。
1 篇章级情感分析
篇章级情感分析的目标是判断整篇文档表达的是褒义还是贬义的情感,例如一篇书评,或者对某一个热点时事新闻发表的评论,只要待分析的文本超过了一句话的范畴,即可视为是篇章级的情感分析。
对于篇章级的情感分析而言有一个前提假设,那就是全篇章所表达的观点仅针对一个单独的实体e,且只包含一个观点持有者h的观点。这种做法将整个文档视为一个整体,不对篇章中包含的具体实体和实体属性进行研究,使得篇章级的情感分析在实际应用中比较局限,无法对一段文本中的多个实体进行单独分析,对于文本中多个观点持有者的观点也无法辨别。
例如评价的文本是:“我觉得这款手机很棒。”评价者表达的是对手机整体的褒义评价,但如果是:“我觉得这款手机拍照功能很不错,但信号不是很好”这样的句子,在同一个评论中出现了褒义词又出现了贬义词,篇章级的分析是无法分辨出来的,只能将其作为一个整体进行分析。
不过好在有很多的场景是不需要区分观点评价的实体和观点持有者,例如在商品评论的情感分析中,可以默认评论的对象是被评论的商品,评论的观点持有者也是评论者本人。当然,这个也需要看被评论的商品具体是什么东西,如果是亲子旅游这样的旅游服务,那么评论中就很有可能包含一个以上的观点持有者。
在实际工作中,篇章级的情感分析无法满足我们对于评价更细致,如果需要对评论进行更精确,更细致的分析,我们需要拆分篇章中的每一句话,这就是句子级的情感分析研究的问题。
2 句子级情感分析
与篇章级的情感分析类似,句子级的情感分析任务是判断一个句子表达的是褒义还是贬义的情感,虽然颗粒度到了句子层级,但是句子级分析与篇章级存在同样的前提假设是,那就是一个句子只表达了一个观点和一种情感,并且只有一个观点持有人。如果一个句子中包含了两种以上的评价或多个观点持有人的观点,句子级的分析是无法分辨的。好在现实生活中,绝大多数的句子都只表达了一种情感。
既然句子级的情感分析在局限性上与篇章级是一样的,那么进行句子级的情感分析意义何在呢?关于这个问题,需要先解释一下语言学上主观句与客观句的分别。在我们日常用语当中,根据语句中是否带有说话人的主观情感可以将句子分为主观句和客观句,例如:“我喜欢这款新手机。”就是一个主观句,表达了说话人内心的情感或观点,而:“这个APP昨天更新了新功能。”则是一个客观句,陈述的是一个客观事实性信息,并不包含说话人内心的主观情感。通过分辨一个句子是否是主观句,可以帮助我们过滤掉一部分不含情感的句子,让数据处理更有效率。
但是在实操过程中,我们会发现这样的分类方法似乎并不是特别准确,因为一个主观句也可能没有表达任何的情感信息,知识表达了期望或者猜测,例如:“我觉得他现在已经在回家的路上了。”这句话是一个主观句,表达了说话人的猜测,但是并没有表达出任何的情感。而客观句也有可能包含情感信息,表明说话者并不希望这个事实发生,例如:“昨天刚买的新车就被人刮花了。”这句话是一个客观句,但结合常识我们会发现,这句话中其实是包含了说话人的负面情感。
所以,仅仅对句子进行主客观的分类还不足以达到对数据进行过滤的要求,我们需要的是对句子是否含有情感信息进行分类,如果一个句子直接表达或隐含了情感信息,则认为这个句子是含有情感观点的,对于不含情感观点的句子则可以进行过滤。目前对于句子是否含有情感信息的分类技术大多都是采用有监督的学习算法,这种方法需要大量的人工标注数据,基于句子特征来对句子进行分类。
总之,我们可以将句子级的情感分析分成两步,第一步是判断待分析的句子是否含有观点信息,第二步则是针对这些含有观点信息的句子进行情感分析,发现其中情感的倾向性,判断是褒义还是贬义。关于分析情感倾向性的方法与篇章级类似,依然是可以采用监督学习或根据情感词词典的方法来处理,我们会在后续的小节详细讲解。
句子级的情感分析相较于篇章级而言,颗粒度更加细分,但同样只能判断整体的情感,忽略了对于被评价实体的属性。同时它也无法判断比较型的情感观点,例如:“A产品的用户体验比B产品好多了。”对于这样一句话中表达了多个情感的句子,我们不能将其简单的归类为褒义或贬义的情感,而是需要更进一步的细化颗粒度,对评价实体的属性进行抽取,并将属性与相关实体之间进行关联,这就是属性级情感分析。
3 属性级情感分析
上文介绍的篇章级和句子级的情感分析,都无法确切的知道评价者喜欢和不喜欢的具体是什么东西,同时也无法区分对某一个被评价实体的A属性持褒义倾向,对B属性却持贬义倾向的情况。但在实际的语言表达中,一个句子中可能包含了多个不同情感倾向的观点,例如:“我喜欢这家餐厅的装修风格,但菜的味道却很一般。”类似于这样的句子,很难通过篇章级和句子级的情感分析了解到对象的属性层面。
为了在句子级分析的基础上更加细化,我们需要从文本中发现或抽取评价的对象主体信息,并根据文本的上下文判断评价者针对每一个属性所表达的是褒义还是贬义的情感,这种就称之为属性级的情感分析。属性级的情感分析关注的是被评价实体及其属性,包括评价者以及评价时间,目标是挖掘与发现评论在实体及其属性上的观点信息,使之能够生成有关目标实体及其属性完整的五元组观点摘要。具体到技术层面来看,属性级的情感分析可以分为以下6个步骤:
关于文本中的实体抽取和指代消解问题,我们已经在知识图谱的相关章节中做了介绍,这里就不再赘述。针对篇章级、句子级、属性级这三种类型的情感分析任务,人们做了大量的研究并提出了很多分类的方法,这些方法大致可以分为基于词典和基于机器学习两种,下面我们进行详细的讲解。
做情感分析离不开情感词,情感词是承载情感信息最基本的单元,除了基本的词之外,一些包含了情感含义的短语和成语我们也将其统称为情感词。基于情感词典的情感分析方法,主要是基于一个包含了已标注的情感词和短语的词典,在这个词典中包括了情感词的情感倾向以及情感强度,一般将褒义的情感标注为正数,贬义的情感标注为负数。
具体的步骤如图所示,首先将待分析的文本先进行分词,并对分词后的结果做去除停用词和无用词等文本数据的预处理。然后将分词的结果与情感词典中的词进行匹配,并根据词典标注的情感分对文本进行加法计算,最终的计算结果如果为正则是褒义情感,如果为负则是贬义情感,如果为0或情感倾向不明显的得分则为中性情感或无情感。
情感词典是整个分析流程的核心,情感词标注数据的好坏直接决定了情感分类的结果,在这方面可以直接采用已有的开源情感词典,例如BosonNLP基于微博、新闻、论坛等数据来源构建的情感词典,知网(Hownet)情感词典,台湾大学简体中文情感极性词典(NTSUSD),snownlp框架的词典等,同时还可以使用哈工大整理的同义词词林拓展词典作为辅助,通过这个词典可以找到情感词的同义词,拓展情感词典的范围。
当然,我们也可以根据业务的需要来自己训练情感词典,目前主流的情感词词典有三种构建方法:人工方法、基于字典的方法和基于语料库的方法。对于情感词的情感赋值,最简单的方法是将所有的褒义情感词赋值为+1,贬义的情感词赋值为-1,最后进行相加得出情感分析的结果。
但是这种赋值方式显然不符合实际的需求,在实际的语言表达中,存在着非常多的表达方式可以改变情感的强度,最典型的就是程度副词。程度副词分为两种,一种是可以加强情感词原本的情感,这种称之为情感加强词,例如“很好”相较于“好”的情感程度会更强烈,“非常好”又比“很好”更强。另外一种是情感减弱词,例如“没那么好”虽然也是褒义倾向,但情感强度相较于“好”会弱很多。如果出现了增强词,则需要在原来的赋值基础上增加情感得分,如果出现了减弱词则需要减少相应的情感得分。
另一种需要注意的情况是否定词,否定词的出现一般会改变情感词原本的情感倾向,变为相反的情感,例如“不好”就是在“好”前面加上了否定词“不”,使之变成了贬义词。早期的研究会将否定词搭配的情感词直接取相反数,即如果“好”的情感倾向是+1,那么“不好”的情感倾向就是-1。但是这种简单粗暴的规则无法对应上真实的表达情感,例如“太好”是一个比“好”褒义倾向更强的词,如果“好”的值为+1,那么“太好”可以赋值为+3,加上否定词的“不太好”变成-3则显然有点过于贬义了,将其赋值为-1或者-05可能更合适。
基于这种情况,我们可以对否定词也添加上程度的赋值而不是简单的取相反数,对于表达强烈否定的词例如“不那么”赋值为±4,当遇到与褒义词的组合时褒义词则取负数,与贬义词的组合则取正数,例如贬义词“难听”的赋值是-3,加上否定词变成“不那么难听”的情感得分就会是(-3+4=1)。
第三种需要注意的情况是条件词,如果一个条件词出现在句子中,则这个句子很可能不适合用来做情感分析,例如“如果我明天可以去旅行,那么我一定会非常开心。”,在这句话中有明显的褒义情感词,但是因为存在条件词“如果”,使得这个句子的并没有表达观点持有者的真实情感,而是一种假设。
除了条件句之外,还有一种语言表达也是需要在数据预处理阶段进行排除的,那就是疑问句。例如“这个餐厅真的有你说的那么好吗?”,虽然句子中出现了很强烈的褒义情感词“那么好”,但依然不能将它分类为褒义句。疑问句通常会有固定的结尾词,例如“……吗?”或者“……么?”,但是也有的疑问句会省略掉结尾词,直接使用标点符号“?”,例如“你今天是不是不开心?”,这个句子中含有否定词和褒义词组成的“不开心”,但不能将其分类为贬义情感。
最后一种需要注意的情况是转折词,典型词是“但是”,出现在转折词之前的情感倾向通常与转折词之后的情感倾向相反,例如:“我上次在这家酒店的住宿体验非常好,但是这次却让我很失望。”在这个转折句中,转折词之前的“非常好”是一个很强的褒义词,但真实的情感表达却是转折词之后的“很失望”,最终应该将其分类为贬义情感。当然,也存在出现了转折词,但语句本身的情感并没有发生改变的情况,例如“你这次考试比上次有了很大的进步,但是我觉得你可以做得更好”,这里的转折词没有转折含义,而是一种递进含义。在实际操作中,我们所以需要先判断转折句真实的情感表达到底是哪个,才能进行正确的分析计算。
构建情感词典是一件比较耗费人工的事情,除了上述需要注意的问题外,还存在精准度不高,新词和网络用语难以快速收录进词典等问题。同时基于词典的分析方法也存在很多的局限性,例如一个句子可能出现了情感词,但并没有表达情感。或者一个句子不含任何情感词,但却蕴含了说话人的情感。以及部分情感词的含义会随着上下文语境的变化而变化的问题,例如“精明”这个词可以作为褒义词夸奖他人,也可以作为贬义词批评他人。
尽管目前存在诸多问题,但基于字典的情感分析方法也有着不可取代的优势,那就是这种分析方法通用性较强,大多数情况下无需特别的领域数据标注就可以分析文本所表达的情感,对于通用领域的情感分析可以将其作为首选的方案。
我们在机器学习算法的章节介绍过很多分类算法,例如逻辑回归、朴素贝叶斯、KNN等,这些算法都可以用于情感识别。具体的做法与机器学习一样需要分为两个步骤,第一步是根据训练数据构建算法模型,第二步是将测试数据输入到算法模型中输出对应的结果,接下来做具体的讲解。
首先,我们需要准备一些训练用的文本数据,并人工给这些数据做好情感分类的标注,通常的做法下,如果是褒义和贬义的两分类,则褒义标注为1,贬义标注为0,如果是褒义、贬义和中性三分类,则褒义标注为1,中性标注为0,贬义标注为-1
在这一环节中如果用纯人工方法来进行标注,可能会因为个人主观因素对标注的结果造成一定影响,为了避免人的因素带来的影响,也为了提高标注的效率,有一些其他取巧的方法来对数据进行自动标注。比如在电商领域中,商品的评论除了文本数据之外通常还会带有一个5星的等级评分,我们可以根据用户的5星评分作为标注依据,如果是1-2星则标注为贬义,如果是3星标注为中性,4-5星标注为褒义。又比如在社区领域中,很多社区会对帖子有赞和踩的功能,这一数据也可以作为情感标注的参考依据。
第二步是将标注好情感倾向的文本进行分词,并进行数据的预处理,前文已经对分词有了很多的介绍,这里就不再过多的赘述。第三步是从分词的结果中标注出具备情感特征的词,这里特别说一下,如果是对情感进行分类,可以参考情感词典进行标注,也可以采用TF-IDF算法自动抽取出文档的特征词进行标注。如果分析的是某个特定领域的,还需要标注出特定领域的词,例如做商品评价的情感分析,需要标注出商品名称,品类名称,属性名称等。第四步根据分词统计词频构建词袋模型,形成特征词矩阵,如表所示。在这一步可以根据业务需要给每个特征词赋予权重,并通过词频乘以权重得到特征词分数。最后一步就是根据分类算法,将特征词矩阵作为输入数据,得到最终的分类模型。
当训练好分类模型之后,就可以对测试集进行分类了,具体的流程与建模流程类似,先对测试的文本数据进行分词并做数据预处理,然后根据特征词矩阵抽取测试文本的特征词构建词袋矩阵,并将词袋矩阵的词频数据作为输入数据代入之前训练好的模型进行分类,得到分类的结果。
采用基于机器学习的方法进行情感分析有以下几个不足之处,第一是每一个应用领域之间的语言描述差异导致了训练得到的分类模型不能应用与其他的领域,需要单独构建。第二是最终的分类效果取决于训练文本的选择以及正确的情感标注,而人对于情感的理解带有主观性,如果标注出现偏差就会对最终的结果产生影响。
除了基于词典和基于机器学习的方法,也有一些学者将两者结合起来使用,弥补两种方法的缺点,比单独采用一种方法的分类效果要更好,另外,也有学者尝试使用基于LSTM等深度学习的方法对情感进行分析,相信在未来,情感分析会应用在更多的产品中,帮助我们更好的理解用户需求,提升用户使用智能产品的体验。
随着深度神经网络等算法的应用,情感分析的研究方向已经有了非常大的进展,但依然存在着一些难题是目前尚未解决的,在实操过程中需特别注意以下几种类型数据:
情绪轮在用户体验设计上被广泛的应用,很多情感化设计都是基于情绪轮进行的。但是在人工智能领域,将情绪进行多分类比情感分析的三分类任务要难得多,目前大多数分类方法的结果准确性都不到50%。这是因为情绪本身包含了太多的类别,而且不同的类别之间又可能具有相似性,一个情绪词在不同的语境下有可能表达的是不同的情绪类别,算法很难对其进行分类。即使是人工对文本进行情绪类别标注也往往效果不佳,因为情绪是非常主观性的,不同的人对不同的文本可能产生不同的理解,这使得人工标注情绪类比的过程异常困难。如何让机器可以理解真实的情绪目前还是一个未能攻克的难题。
我在 《爬取百万页面 分析用户画像》 中分析了用户的书籍喜好,这里继续尝试通过影评文章的抓取、内容清洗、影评句子提取,建立机器学习情绪预测模型,挖掘分析用户对流行**的喜好。
涉及的NLP(自然语言处理)知识点:
涉及的ML(机器学习)知识点:
**的拍摄成本高、票价也不低,消费者投入的关注度和观看成本高(最终的投入成本是包括注意力投入、金钱投入、时间投入和感情投入)。
简单算下观看一部**的成本(步骤):先看下预告内容,做下同期上映**的比较,觉得导演、演员阵容都不错,下定决心要看了,跟男/女友/老婆 /老公/基友/闺密做推荐,推荐成功后去选座买票,观影当天说不定还得先吃个饭,饭后乖乖的在影院呆上90分钟(关键时刻还得憋尿),观影结束后指不定还得来个夜宵、开个房间探讨下人生什么的。。。
读一本书的成本(步骤):1打开书/电子阅读器/手机;2 读!
这样对比看一部**比读一本书的投入成本高多了!
因此观众给出的反馈自然也比书籍会强烈一些,特别是满怀期待看完却发现是一部烂片,有种上当受骗的感觉。
因此对**光是通过词频作为喜好度是不够的,用户可能反复的在骂呢。
所以需要引入多一个分析的因子:情绪。用户提及某个**时的情绪是怎么样的,是积极愉悦、还是负面愤怒,加上这个才能有效判定用户对**或者某个事物的喜好。
在豆瓣上,用户的评分就是最直接的情绪数值:5力荐,4推荐,3还行,2较差,1很差。
但在这类写作平台上,发布文章时是没有一个选项来填写分数,也没提供选择心情的选项。
“所言即其所思”,这是普遍人性。每个用户写下的文字表达想法,在字里行间都会不经意的使用一些情绪用词来表达,这些便是我可以获取的“原始数据”。
精准推荐!用户谈论得多的东西未必是TA所喜爱的,也许是TA痛恨的(比如说前任)。如果用户在自己大力差评某部**的文章底部看到另一部相似烂片的推荐,推荐文案还写着“亲,我猜你还喜欢看这些”,估计这用户会有种吃了苍蝇刚吐出来发现迎面又飞来几只的感觉。
通过用户在讨论某事物时上下文的情绪分析,来判断对该事物的喜恶,将预测结果加入对事物的打分计算中,最后得出一个可量化、可计算的分数值,便是一个精准推荐系统的需要解决的问题。
理论上只需要一句话:要识别出文章中提及的**,以及作者对该**的评论,是好评还是差评,作为文章作者对该**的喜恶,并根据评论的情绪强烈程度转化为喜恶程度即可。
那实际上,就要解决以下问题:
下面逐一细说。
我采集了上几个比较受欢迎的**专题以及一个大V帐号文章(数据截止至采集数据时):
但由于对专题页面加了访问限制,每个专题只能访问到最新的200个列表页面,因而每个专题可获取2~3000篇文章,以此作为抽样数据样本。
要分析对**的评价,首先就要获取到文章中提到**名称有哪些,最简单的匹配规则便是提取书名号 《》 内的内容。
而实际获取到的**名称真可谓“脏乱差”,有**名、书籍名、文章名等,有些**名称会用缩写引用(如《变1》、《复联》、《生化危机4/5/6》),或者中英文混合在一起(如《机器人总动员(wall-e)》),甚至还有错漏别字(如《那些年,我们一起追过的女孩》,多了个“过”字),以及包含中英文特殊标点空白符号等,例如:
因此需要进行一轮“数据大清洗”,我使用如下清洗策略:
其中“**专用词典”,是通过采集了 「猫眼 影片总票房排行榜」 2000~2017年间上榜的所有**,约有3000+部,如图:
再根据文章中所收集到的**名称的候选文本,抓取「豆瓣网」的官方**名字(遭遇了豆瓣业内闻名的反爬策略就不多说了),合并去重后约有8400多部。看一眼才发现好多**连听都没听过,有些**名称还挺有趣,以后有时间还可以做下**名称的分析。
为了解决错别字,我通过文本相似性算法,在**专用词典里找出与之最相似名称。
知名的相似算法有不少,如:
经过简单比较,我选择了其中表现最好的 jaro_winkler_distance
运用到文章内容上,可得到相似**名称,感觉效果还可以:
构建一个Pipeline用于提取页面中**名称,对单个页面测试效果如下:
运用到所有页面上:
至此完成了**名称的提取、清洗,得出每篇文章提及的**名称,如图:
判断一篇文章的情绪,最简单的做法是通过提取所有情绪词来统计下词频及其权重可得到一个粗糙的结果,但这样的结果对“影评”类文章不是很准确。
根据观察,一篇**评论文章中,往往会有大段的**情节描述,然后夹杂一两句评论。而有些**本身剧情就是比较负面、阴暗的(如灾难片类的),但影片本身质量很高(如《釜山行》,豆瓣评分82),如果文章内容包含大量的剧情描述,那么得到关键词会偏向于负面情绪,并不能用于表达出作者对**的喜好情绪。
因此我使用了这样的提取策略:
评论句子提取的结果示例如下:
这样的策略对有些内容不是很适用,例如这样的标题:《同样是豆瓣92分,它或许比《摔跤吧!爸爸》更深》,这是典型的“借势营销”型文案,文章内容中推介的是另外一部韩国**《熔炉》,而时下《摔跤吧!爸爸》正热,标题中带上这个会更吸引用户点击。
另外一个思路是对文章进行摘要提取,然后对摘要进行情绪识别。而对于文章的主题提取,可以使用在ML算法中的用于解决 主题模型 问题的算法(如LDA),但不确定是否适合影评这种混合了大量剧情描述的文章内容。
得到相关评论文本后,便可对文本进行分词及情绪识别,这里有两种做法,一是使用带有情绪情感度的专业词典,配合专有算法;另外一种是使用机器学习算法。
一开始我使用了大连理工大学的《大连理工情感词汇本体库》,是目前最权威的中文情绪词典,共含有情感词共计27466个,包含了词语的词性种类、情感类别、情感强度及极性等信息,例如:
中文情感词汇本体的情感分类体系是在国外比较有影响的Ekman的6大类情感分类体系的基础上构建的。在Ekman的基础上,词汇本体加入情感类别“好”对褒义情感进行了更细致的划分。最终词汇本体中的情感共分为7大类21小类,如图:
把情感词典加入分词词典,对候选每个句子进行分词,得出情感词组,并累加每个情感词的强度值作为句子的情感值。
但经过测试后,发现预测效果并不理想,究其原因发现是情感词典中命中的词语太少,在句子中得不到相关词语,也就无法判断情感极性和强度。
使用情感词典的测试结果:
而专业词典的扩展需要专业领域知识,扩展起来很困难,我目前没找到更新的专业词典,国内这块的资料相当匮乏,而国外有个知名的SentiWordNet库,中文NLP研究的难度系数可想而知。
鉴于情感词典的资源限制,决定尝试使用机器学习来对文本做正、负面情绪预测。
1) 构建分词词典:
分词需要构建专用领域的词典,这样得到的分词结果才会更精确。
因为只需要有正负情感类别、不需要有情感强度及极性等信息,我使用了网络上公开的一些情感词典,:
合并、清洗和去重后,最终构建出了 14000+ 个词的积极情绪词典, 18000+ 个词的消极情绪词典。
积极词典:
消极词典:
2) 准备训练语料
从网上搜集到几个带有积极、消极的标注的评论语料数据集,分别包含了书籍、DVD、音乐、购物领域的各有4000条评论,如下图:
可惜没找到中文影评相关的语料,但找到 国外英文的影评语料 ,对,英文资料很丰富。。。
3) 训练模型
由于是文本型特征,分类算法上选择了 朴素贝叶斯 ,把数据分为2份,一半训练,另一半做测试。
使用 jieba 分词工具,对文本进行分词得到候选词组,把得到的词组作为特征输入来训练情绪预测模型。
训练后的模型测试结果如下:
训练后的模型在书籍、音乐、影碟及购物评论的语料上都有不错的效果。
在提取出的影评短句上测试:
又是“无聊”、“又俗又傻”而一个“但”字就反转了情绪,真是难为分类器了:
经过反复对比实验,发现语料的质量决定了模型的精度,而语料的扩展对比扩展专业词典却容易多了。例如几年前都没有“ 因吹斯汀 ”这些网络流行词,更不知道它代表是正面情绪,以后只要不断更新相关领域的语料库来重新训练则可得到更精确的模型。
俗话说“是骡子是马拉出来遛遛”。
得到一个预测情绪的模型后,便可对影评文章进行预测,但预测的结果是否准确?准确率又有多高?这又是个问题。
每当事情陷入停滞,我就会想起日本漫画大师安达充说过“当故事情节发展不下去的时候,加入一个新角色,是最简单的做法”。
这时需要祭出一个“旁证”了。这所谓的“旁证”,也就是目前大家比较认可的**评分网站——豆瓣网。
大家都知道豆瓣网上的**用户通过打星(5力荐,4推荐,3还行,2较差,1很差),转换得出的10分制的评分,我们可简单把1 49分视作负面评价、5 10分视作正面评价,没有分数的视作中性评价。再把豆瓣的评价结果视作大部分人认同的结果,当然这样肯定是有偏差的。
大胆假设,小心求证,先试试看吧。
根据**名词典再次去抓取豆瓣网上的**信息,这次包含了**分数::
使用获取到的**专题『**院』文章内容测试,结果如下:
1048篇中,豆瓣评分结果与模型预测符合的有974篇,准确率是929%,WOW!真的这么准吗?
看下详细结果,豆瓣评分是正面的有1022条,预测对了973篇,例如:
而豆瓣评分是负面的有28条记录,而模型只预测出1篇是负面的:
真的是模型预测错了吗?
从负面例子中抽样看看模型分解的结果:
评论《麻烦家族》(豆瓣评分48)的:
从自动摘要出来的句子来看,实际上文章作者表现出正面情绪,模型预测为正面,预测正确
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)