文本情感分析根据文本大小可以划分为单词,句子级和篇章级,根据不同的分析目的,可以分为主客观分析(作者对客观事物的分析)和主观分析(作者自己的体验);根据处理方法的可以分为基于词典的情感分析和基于机器学习(SVM方法,神经网络和朴素贝叶斯方法)的情感分析;根据是否有人工参与,可以分为非监督和监督分类方法,区别在于是否需要人工情感标记。算法,主要的改进是通过依赖分析,围绕情感词,进行情感倾向性分析。
情感分析也被称为意见挖掘。情感分类涉及多个领域,如自然语音处理,人工智能,自动文本分类,文本挖掘,心理学等。它主要用来判别自然语言文字表达的观点,喜好以及感受和态度等相关的信息。
我在 《爬取百万页面 分析用户画像》 中分析了用户的书籍喜好,这里继续尝试通过影评文章的抓取、内容清洗、影评句子提取,建立机器学习情绪预测模型,挖掘分析用户对流行**的喜好。
涉及的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条)