失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 基于词典和朴素贝叶斯中文情感倾向分析算法

基于词典和朴素贝叶斯中文情感倾向分析算法

时间:2020-03-30 08:39:12

相关推荐

基于词典和朴素贝叶斯中文情感倾向分析算法

向AI转型的程序员都关注了这个号👇👇👇

大数据挖掘DT机器学习 公众号:datayx

情感分析方法

情感分析方法,大致上分为两种:

基于词典的

基于机器学习的

朴素贝叶斯

支持向量机

神经网络

本文相关代码和数据

关注微信公众号datayx 然后回复“情感分析”即可获取。

基于词典的金融情感分析

基于词典的中文情感倾向分析算法.png

宁馨的点评 国庆活动,用62开头的信用卡可以6.2元买一个印有银联卡标记的冰淇淋,有香草,巧克力和抹茶三种口味可选,我选的是香草口味,味道很浓郁。另外任意消费都可以10元买两个马卡龙,个头虽不是很大,但很好吃,不是很甜的那种,不会觉得腻。

分句

['宁馨的点评 国庆活动,用62开头的信用卡可以6.2元买一个印有银联卡标记的冰淇淋,有香草,巧克力和抹茶三种口味可选,我选的是香草口味,味道很浓郁', '另外任意消费都可以10元买两个马卡龙,个头虽不是很大,但很好吃,不是很甜的那种,不会觉得腻', '']

每个句子分词

[[[3, '点评', 'v'], [6, '活动', 'vn'], [8, '用', 'p'], [10, '开头', 'v'], [13, '可以', 'c'], [16, '买', 'v'], [18, '印有', 'v'], [24, '有', 'v'], [28, '和', 'c'], [29, '抹', 'v'], [33, '可', 'v'], [34, '选', 'zg'], [36, '我', 'r'], [37, '选', 'v'], [39, '是', 'v'], [44, '很', 'zg'], [45, '浓郁', 'a']],[[1, '另外', 'c'], [2, '任意', 'v'], [3, '消费', 'vn'], [4, '都', 'd'], [5, '可以', 'c'], [8, '买', 'v'], [13, '虽', 'zg'], [14, '不是', 'c'], [15, '很大', 'a'], [17, '但', 'c'], [18, '很', 'd'], [19, '好吃', 'v'], [21, '不是', 'c'], [22, '很甜', 'a'], [24, '那种', 'r'], [26, '不会', 'v'], [27, '觉得', 'v'], [28, '腻', 'v']],[]]

接下来就是根据多得到的分词来做情感分数的计算

我很不开心 | 我不很开心就表达的不是一个意思,所要要计算否定词与情感次的间距但是,其词间距如果超过3就作废

情感词典是人工标记好的,就只是针对这个句子的话,我是这样标记的{ "浓郁":0.6, "好吃":0.7, "甜":0, "腻":-0.3}否定词:不 不是 不会程度副词:程度词用的是hownet程度词,一共分6个等级“极其|extreme/最|most” 1“很|very” 0.84“较|more” 0.67“稍|-ish” 0.51“欠|insufficiently” 0.35“欠|insufficiently” 0.19连词:{"另外":0}

得到列表

[[[44, '很',0.84], [45, '浓郁',0.6]][[14, '不是',-1],[18, '很',0.84][19, '好吃',0.7],[21, '不是',-1],[26, '不会',-1],[28, '腻',-0.3]]连词列表[['另外',0]]

接下来就是句法判断了

第一句很简单,没有否定词[[44, '很',0.84], [45, '浓郁',0.6]]Score=0.84*0.6第二句有程度词、否定词、情感词定情感词,寻找情感词前的否定词定否定词,寻找否定词相减的绝对值是否小于三判断如果小于三,如果为正就类似「 很不开心 」score+=(-1)*(degree)*(开心)如果为负类似与「 不很开心 」score+=(degree)*(开心)如果大于三,滤过就拿如下列子[14, '不是',-1],[18, '很',0.84][19, '好吃',0.7]18-14>3 所以score+=0.84*0.7[21, '不是',-1],[26, '不会',-1],[28, '腻',-0.3]21-26>3,所以score+=(-1)*(-0.3)第二个句子的score:0.88由于连词「 并 」所以,整个段的score=1.4

反馈

基于词典的情感分析,依赖人工标记的词典,所以需要大量的人力。

基于朴素贝叶斯的情感分析

基于机器学习的情感分析.png

相对于「 基于词典的分析 」,「 基于机器学习 」的就不需要大量标注的词典,但是需要大量标记的数据,比如:

宁馨的点评 国庆活动,用62开头的信用卡可以6.2元买一个印有银联卡标记的冰淇淋,有香草,巧克力和抹茶三种口味可选,我选的是香草口味,味道很浓郁。另外任意消费都可以10元买两个马卡龙,个头虽不是很大,但很好吃,不是很甜的那种,不会觉得腻。标签:服务质量 - 中

朴素贝叶斯

1、贝叶斯定理

上式表示对于某个样本,特征F1出现时,该样本被分为C类的条件概率。那么如何用上式来对测试样本分类呢?

先验概率(Prior)。P(C)是C的先验概率,可以从已有的训练集中计算分为C类的样本占所有样本的比重得出。证据(Evidence)。即上式P(F1),表示对于某测试样本,特征F1出现的概率。同样可以从训练集中F1特征对应样本所占总样本的比例得出。似然(likelihood)。即上式P(F1|C),表示如果知道一个样本分为C类,那么他的特征为F1的概率是多少。

分子中存在一大串似然值。当特征很多的时候,这些似然值的计算是极其痛苦的。现在该怎么办?

朴素的认为各个特征相互独立”。这么一来,上式的分子就简化成了:

P(F1|C)P(F2|C)...P(Fn|C)。

省略分母计算,从而进一步简化计算过程。

加法平滑(additive smoothing,又叫拉普拉斯平滑(Laplace smothing))。而如果通过增加一个大于0的可调参数alpha进行平滑,就叫Lidstone平滑

Screenshot from -06-28 09-42-49.png

基于朴素贝叶斯的情感分类

原始数据集,只抽了10条

读数据

读取excel文件,用的pandas库的DataFrame的数据类型

分词

浙北大厦的点评 因为银联云闪付半价活动,天天跑浙北,家里该囤的都囤完了后,不知道买什么的时候看到浙北购物中心地下超市有卖寿司,材料看着蛮高档的,想着半价买来吃也划算的。挑了一盒55元的寿司,一共有12个寿司,三文鱼,大虾,螺肉,鳗鱼等各种口味都有,每种看着都不错,配着酱油和芥末吃味道都挺好的。

对每个评论分词,分词的同时去除停用词,得到如下词表

[[['半价', 'n'], ['半价', 'n'], ['划算', 'v'], ['不错', 'a'], ['挺好', 'a']], [['丰盛', 'a'], ['半价', 'n'], ['半价', 'n'], ['免费', 'vn'], ['半价', 'n'], ['推荐', 'v']], [['美好', 'a'], ['不错', 'a'], ['很大', 'a'], ['舒适', 'a'], ['靓丽', 'a'], ['舒心', 'a'], ['浓厚', 'a'], ['粗', 'a'], ['久', 'a'], ['粗', 'a'], ['平衡', 'a'], ['浓郁', 'a'], ['舒服', 'a']], [['大', 'a'], ['快', 'a'], ['值', 'n'], ['少', 'a'], ['明显', 'a'], ['少', 'a']], [['满', 'a'], ['划算', 'v'], ['短', 'a'], ['好', 'a'], ['好评', 'v']], [['丰富', 'a'], ['很大', 'a'], ['嘈杂', 'a'], ['免费', 'vn'], ['方便', 'a'], ['酸爽', 'a'], ['厚实', 'a'], ['不腻', 'a'], ['小', 'a'], ['高', 'a'], ['不要', 'df'], ['甜', 'a'], ['最多', 'a'], ['很大', 'a'], ['贵', 'a'], ['一般', 'a']], [['小', 'a'], ['最高', 'a'], ['新', 'a'], ['好', 'a'], ['早', 'a'], ['慢', 'a']], [['浓郁', 'a'], ['很大', 'a'], ['很甜', 'a']], [['差', 'a'], ['正好', 'a'], ['粗鲁', 'a'], ['很', 'a'], ['明显', 'a'], ['麻烦', 'an'], ['这位', 'rz'], ['愉快', 'a'], ['诚意', 'a'], ['激烈', 'a']], [['不满', 'a'], ['重要', 'a'], ['清楚', 'a'], ['具体', 'a']]]

统计

这里统计什么呢?统计两种数据

评论级别的次数

这里有三个级别分别对应c0 → 好 2c1 → 中 3c2 → 差 5

每个词在句子中出现的次数

得到一个字典数据evalation [2, 5, 3]半价 [0, 5, 0]划算 [1, 1, 0]不错 [0, 2, 0]·········不满 [0, 1, 0]重要 [0, 1, 0]清楚 [0, 1, 0]具体 [0, 1, 0]每个词(特征)后的 list坐标位:0,1,2分别对应好,中,差

以上工作完成之后,就是把模型训练好了,只不过数据越多越准确

测试

比如输入一个句子

世纪联华(百联西郊购物中心店)的点评 一个号称国际大都市,收银处的人服务态度差到极点。银联活动30-10,还不可以连单。

得到结果

c2-差

/p/9701cf5bbe33

不断更新资源

深度学习、机器学习、数据分析、python

搜索公众号添加:datayx

长按图片,识别二维码,点关注

如果觉得《基于词典和朴素贝叶斯中文情感倾向分析算法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。