IMBD影评数据的情感分析
来源:互联网 发布:js图片跨域上传 编辑:程序博客网 时间:2024/04/25 14:01
IMBD影评数据的情感分析
问题情况
SemEval往年的任务:情感分析(Sentiment Analysis,SA)。
采用的某博客推荐的一个数据集,IMBD影评数据,给出5W条标注数据,每条数据包括影评内容和影评作者对电影评分(1-10整数评分,其中1-5认为是neg,6-10认为是pos,这个数据集是一个均衡数据集,且得分分布关于5.5对称)。
我从5W条中取出一部分做训练集,取出另一部分做测试集,比例为1:1,对于测试集,我写了一个脚本从两方面评价结果,一是我的评分与实际评分的Pearson相关系数(Pearson),二是我的评分的倾向(neg/pos)与实际倾向的正确率(Correct)。
思路
认为得分和该影评对应电影得到pos倾向的概率存在正向关,这个假设显然是合理的。选取合适的转换函数,把得分转化为得到pos倾向标签(tag)的概率。同时认为文本由单词特征(feature)构成。这样本问题转化为一个feature-tag问题,计算出pos倾向的概率,再转化为得分,就是对评分的一个合理的估计。
解法
可以用rank[1, 10]→pro[0, 1]的线性函数来实现得分到概率的转化。
可以用一个朴素贝叶斯来实现feature-tag的基本功能,并做一些数学技巧上的优化。
具体数学原理为:
Naive Bayes Classifier
dim rate = p(pos|sen) / p(neg|sen)
dim log_word_rate[word] = log(p(word|pos) / p(word|neg))p(pos|sen) = p(sen|pos)p(pos) / (p(sen|pos)p(pos) + p(sen|neg)p(neg))
p(neg|sen) = p(sen|neg)p(neg) / (p(sen|pos)p(pos) + p(sen|neg)p(neg))rate = p(pos|sen) / p(neg|sen) = p(sen|pos)p(pos) / p(sen|neg)p(neg)
= (p(sen|pos) / p(sen|neg)) * (p(pos) / p(neg))log(rate) = log(p(sen|pos) / p(sen|neg)) + lg(p(pos) / p(neg))
sen = sentence = {word_1, word_2, word_3, …, word_n} (sentence is a set)
log(rate) = sum(log(p(word_i|pos) / p(word_i|neg))) (i = 1, 2, …, n) +
lg(p(pos) / p(neg))
log(rate) = sum(log_word_rate[word_i]) (i = 1, 2, …, n) +
lg(p(pos) / p(neg))
再额外考虑对词汇抽词干,考虑否定词,考虑句式结构等等小优化。
优化
0.原始版本的原理优化
朴素贝叶斯有模型有多个变形模型。
一是高斯模型,或者考虑分布内核的支持向量机模型,但是这个任务中的得分不是严格意义上的连续量,向量特征也不是连续量,也不会符合多元正太分布,所以效果不好。
二是伯努利模型或者扩展的多项式伯努利模型,但是词汇量很大,这样以来某一个词汇出现0次的概率非常大,所以不合适。
三是混合的多项模型,把出现在一个句子内多次的单词看作多个独立单词。事实证明,对测试采用多项模型可以获得提升,但是训练时候不需要多项模型,直接把句子看作单词集合即可。
1.考虑否定词
先找到英语里常见的否定词集合,另外注意如果缩写isn’t被切词切为isn t,那么可以认为t也是一个否定词,不然,干脆认为n’t部分是一个否定词。
再否定词对句子的影响,可以认为否定词是把后面一个单词否定了,比如no good,之类的结构。
有两种方法处理后面被否定的单词,一种是某情感分析课程推荐的方法:直接把”good”变成另一个单词”!good”,训练测试时候都当作另一个独立单词处理。但是我觉得这种方法的缺点是没考虑到”!good”和”good”之间的联系。另一种方法是认为“good”和否定形式“!good”互补,即P(good|A)+P(!good|A) = 1且P(A|good)+P(A|!good) = 1,这种方法利用了”!good”和”good”之间的联系,但是在A与good无关时候会产生失误。测试发现,第一种推荐方法效果更好。所以采用第一种方法处理否定词。
2.考虑句式结构
英语中存在一些词语,这些词语之后的内容往往具有总结全段的作用(例如conclude,so,therefore之类的),或者说,这些词语以后的内容的内容才是段落真0正想表达的内容(例如however,but之类的)。所以测试时候碰到这些词汇,可以给后面内容更高权重,我采用了4:5左右权重。
3.文本预处理抽词干
我一开始觉得文本预处理抽一下词干效果会好很多,结果很让我失望效果反而下降了,我不知道预处理去掉标点符号和抽词干为什么会带来负面效果?可能是这里动词的形式和标点符号也含有信息,或者是我的预处理不科学。所以最后干脆没有做预处理。
4.修正评分过分不均匀问题
可能是因为假设加的太强了,所以稍微有pos,neg倾向的影评最后评分都会很接近1或10,所以修改概率到评分的函数,另评分相对均匀一些。
测试结果
测试结果表明,这些优化里面,0.原始版本的原理优化和1.考虑否定词的效果比较明显。文本预处理和抽词干基本没有效果。其他优化效果很小。最后的测试结果为:
Pearson: 0.75838
Correct: 0.86472
- IMBD影评数据的情感分析
- 豆瓣影评数据抓取与简要分析
- 情感分析的新方法
- [情感分析的新方法]
- IMDB情感分析数据集
- 【影评】:卧虎藏龙中的人物性格的分析
- 【自然语言处理】预测电影影评情感的深度学习词袋模型
- 情感分析的词典资源
- 情感分析的学习资源
- 基于情感分析的mapreduce
- 情感分析——数据集
- IMDB依存树情感分析数据集
- 基于情感字典的文本情感极性分析
- 干货:完全基于情感词典的文本情感分析
- 情感分析
- 情感分析
- 情感分析
- 情感分析
- 关于Centos7的yum更新
- 【小云工作室】我的第一个开源项目
- 洛谷 1604——B进制星球(高精度算法)
- 小米Ubuntu使用独立显卡
- leecode 解题总结:15 3Sum
- IMBD影评数据的情感分析
- 【开源.NET】 分享一个前后端分离的轻量级内容管理框架
- 让所有app栈走jupyter-利用nginx和jupyter打造开发发布一体的多语言paas
- 改进市售的蓝牙小音箱
- Leetcode-442. Find All Duplicates in an Array
- 【算法整理】听说你写的算法很牛?-优质算法衡量标准探讨
- [BZOJ3158]千钧一发(最小割)
- 谷哥的小弟学后台(04)——MySQL(4)
- Windows 编程基础