Python SnowNLP情感分析实践与优化总结

Python029

Python SnowNLP情感分析实践与优化总结,第1张

由于语料缺乏,前期若使用到情感分析,建议暂时使用SnowNLP(此模块主要使用淘宝评论语料)做情感挖掘,但不仅仅为单纯调用,需要优化,下面是一些实践思考:

可在此基础上优化,比如文本需要特别处理,除了平常的去停用词外,还可以需要对输入的文本结合词性等进行处理。

下面是一些常识:

一)无情感的词语(如去停用词,去掉语气词,无词性标签的词语)

二)对于文本过长,则可以考虑提取关键词或抽取文本摘要后再提取关键词

对于后者实践结果差异明显

以"发布了头条文章: 《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显 "为例子, 显然该文本为“积极****”文本。

1)s = SnowNLP("发布了头条文章:《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显")

得分为0.5,明显不符合

2)s = SnowNLP(“ ”.join(jieba.analyse.textrank("发布了头条文章:《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显")))

而对于文本特别长的,则可以先抽取摘要,再对摘要提取关键词。

这主要由于此SnowNLP主要用贝叶斯机器学习方法进行训练文本,机器学习在语料覆盖上不够,特征上工程处理不当会减分,也没考虑语义等。

为何要考虑语义层面:

以“ 苏宁易购,是谁给你们下架OV的勇气****” 中的“ 下架”其实才是中心词(为表达愤怒的文本),但“ 勇气 ”为下架的宾语(其为积极的文本),此句应该结果小于0.5,但实际为0.88,去掉“苏宁易购”则为0.6>

情感分析(Sentiment analysis,SA),又称倾向性分析、意见抽取(Opinion extraction)、意见挖掘(Opinion mining)、情感挖掘(Sentiment mining)、主观分析(Subjectivity analysis)

情感分析是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程

情感分析的目的是为了找出说话者/作者在某些话题上或者针对一个文本两极观点的态度。这个态度或许是他或她的个人判断或是评估,也许是他当时的情感状态(就是说,作者在做出这个言论时的情绪状态),或是作者有意向的情感交流(就是作者想要读者所体验的情绪)

文本情感分析的应用非常广泛,如网络舆情风险分析,信息预测等。如通过Twitter用户情感预测股票走势,电影票房、选举结果等,均是将公众情绪与社会事件对比,发现一致性,并用于预测

首先安装SnowNLP中文情感分析库:

SnowNLP(Simplified Chinese Text Processing),是一个python语言编写的类库,可以方便的处理中文文本内容,其开发受到了TextBlob的启发

In [1]:

数据载入

In [2]:

Out[2]:

数据预处理

In [3]:

In [4]:

Out[4]:

In [7]:

Out[7]:

将所有数据打分

In [9]:

Out[9]:

将分数合并会原表格

In [11]:

Out[11]:

计算指标

In [12]:

Out[12]:

In [13]:

Out[13]:

In [14]:

Out[14]:

基础结论:中位数比平均值高很多,说明有少量异常低的评分拉低了均值

In [16]:

Out[16]:

看分数分布情况,直方图最合适

In [17]:

Out[17]:

少量数据,柱状图也可以

In [18]:

Out[18]:

In [19]:

Out[19]:

In [20]:

以分数排序,查看打分准确率

In [22]:

Out[22]:

好评

In [23]:

Out[23]:

In [24]:

Out[24]:

差评

In [25]:

Out[25]:

In [26]:

Out[26]:

In [27]:

Out[27]:

In [28]:

Out[28]:

In [29]:

Out[29]:

In [30]:

Out[30]:

结论

准确率比瞎猜高,但达不到人工打分准确率

SnowNLP库的训练基准数据是基于电商销售产品训练的,对饭店留言数据的打分准确率一般

做情感分析最好用户自行实现(网站增加打分功能,用户自行打分)