目前情感分析在中文自然语言处理中比较火热,很多场景下,我们都需要用到情感分析。比如,做金融产品量化交易,需要根据爬取的舆论数据来分析政策和舆论对股市或者基金期货的态度;电商交易,根据买家的评论数据,来分析商品的预售率等等。
下面我们通过以下几点来介绍中文自然语言处理情感分析:
- 中文情感分析方法简介;
- SnowNLP 快速进行评论数据情感分析;
- 基于标注好的情感词典来计算情感值;
- pytreebank 绘制情感树;
- 股吧数据情感分类。
中文情感分析方法简介
情感倾向可认为是主体对某一客体主观存在的内心喜恶,内在评价的一种倾向。它由两个方面来衡量:一个情感倾向方向,一个是情感倾向度。
目前,情感倾向分析的方法主要分为两类:一种是基于情感词典的方法;一种是基于机器学习的方法,如基于大规模语料库的机器学习。前者需要用到标注好的情感词典;后者则需要大量的人工标注的语料作为训练集,通过提取文本特征,构建分类器来实现情感的分类。
文本情感分析的分析粒度可以是词语、句子、段落或篇章。
段落篇章级情感分析主要是针对某个主题或事件进行情感倾向判断,一般需要构建对应事件的情感词典,如电影评论的分析,需要构建电影行业自己的情感词典,这样效果会比通用情感词典更好;也可以通过人工标注大量电影评论来构建分类器。句子级的情感分析大多通过计算句子里包含的所有情感词的值来得到。
篇章级的情感分析,也可以通过聚合篇章中所有的句子的情感倾向来计算得出。因此,针对句子级的情感倾向分析,既能解决短文本的情感分析,同时也是篇章级文本情感分析的基础。
中文情感分析的一些难点,比如句子是由词语根据一定的语言规则构成的,应该把句子中词语的依存关系纳入到句子情感的计算过程中去,不同的依存关系,进行情感倾向计算是不一样的。文档的情感,根据句子对文档的重要程度赋予不同权重,调整其对文档情感的贡献程度等。
SnowNLP 快速进行评论数据情感分析
如果有人问,有没有比较快速简单的方法能判断一句话的情感倾向,那么 SnowNLP 库就是答案。
SnowNLP 主要可以进行中文分词、词性标注、情感分析、文本分类、转换拼音、繁体转简体、提取文本关键词、提取摘要、分割句子、文本相似等。
需要注意的是,用 SnowNLP 进行情感分析,官网指出进行电商评论的准确率较高,其实是因为它的语料库主要是电商评论数据,但是可以自己构建相关领域语料库,替换单一的电商评论语料,准确率也挺不错的。
1. SnowNLP 安装。
(1) 使用 pip 安装:
pip install snownlp==0.11.1
(2)使用 Github 源码安装。
首先,下载 SnowNLP 的 Github 源码并解压,在解压目录,通过下面命令安装:
python setup.py install
以上方式,二选一安装完成之后,就可以引入 SnowNLP 库使用了。
from snownlp import SnowNLP
(1) 测试一条京东的好评数据:
SnowNLP(u'本本已收到,体验还是很好,功能方面我不了解,只看外观还是很不错很薄,很轻,也有质感。').sentiments
得到的情感值很高,说明买家对商品比较认可,情感值为:
0.999950702449061 (2)测试一条京东的中评数据:
SnowNLP(u'屏幕分辨率一般,送了个极丑的鼠标。').sentiments 得到的情感值一般,说明买家对商品看法一般,甚至不喜欢,情感值为:
0.03251402883400323 (3)测试一条京东的差评数据:
SnowNLP(u'很差的一次购物体验,细节做得极差了,还有发热有点严重啊,散热不行,用起来就是烫得厉害,很垃圾!!!').sentiments 得到的情感值一般,说明买家对商品不认可,存在退货嫌疑,情感值为:
0.0036849517156107847 以上就完成了简单快速的情感值计算,对评论数据是不是很好用呀!!!
使用 SnowNLP 来计算情感值,官方推荐的是电商评论数据计算准确度比较高,难道非评论数据就不能使用 SnowNLP 来计算情感值了吗?当然不是,虽然 SnowNLP 默认提供的模型是用评论数据训练的,但是它还支持我们根据现有数据训练自己的模型。
首先我们来看看自定义训练模型的源码 Sentiment 类,代码定义如下:
class Sentiment(object):
def __init__(self):
self.classifier = Bayes()