前段时间找到了Cemotion这个NLP第三方库,发现它准确率高的惊人,Cemotion算法的优点在于准确率高、调用方便,缺点是运行较慢(相比其他NPL算法)、环境配置(自动安装TensorFlow环境,对python版本有要求)

目录

前言

一、Cemotion库的安装

1.Pycharm安装法

 2.pip安装方法

二、验证Cemotion情感分析准确率

1.加载库并实例化

2.读取评论文本数据

3.进行Cemotion情感值预测

4.验证准确率

三、Cemotion实际情感分析

1.加载库&设置开始计时器&读取数据

2.定义函数&批量处理所有的评论信息

3.输出excel&计时输出

总结




前言

介绍一下,Cemotion同Snownlp等NLP算法一样可以在Python中实现,主要拿来用于中文情感倾向分析,可以说是很专注了。Cemotion的模型原理是基于循环神经网络训练,会为中文文本返回 0~1之间的情感倾向置信度,当我们调用Cemotion库的时候会自动安装TensorFlow环境,是Google的开源深度学习框架,里边有大量的中文训练集-big_Chinese_Words_Map.dict。

在本文中,将重点介绍Cemotion中的情感分析,python版本:3.68,Cemotion版本:0.3.3,供大家参考。


一、Cemotion库的安装

1.Pycharm安装法

文件菜单栏中点击设置,然后选择项目中的解释器,点击“+”号按钮输入Cemotion即可查询下载,现在最新版本应该是0.3.3。

评论区情感词汇提取用什么java 在线评论情感分析_python

 2.pip安装方法

也可在终端pip下载:


pip install snownlp


二、验证Cemotion情感分析准确率

首先还是准备一下测试数据,这次我从京东采集了130条赣南脐橙的在线评论文本,然后人工标注每条评论的情感正负性,情感正负性就是指该条评论代表了评论者的何种态度,其中-1表示贬义,1表示褒义。以下是样例:

 

评论区情感词汇提取用什么java 在线评论情感分析_数据挖掘_02

 

1.加载库并实例化

第一步先设置软件的默认编码为utf-8;然后将Cemotion实例化;代码如下:

# -*- codeing = utf-8 -*-
import pandas as pd
from cemotion import Cemotion
c = Cemotion()

2.读取评论文本数据

通过pd(pandas)读取训练集excel表,第一列也就是comments列,是我们需要的评论数据

text = pd.read_excel(r'C:\Users\Desktop\Cemotion训练集.xlsx')
#text0读取text数据框的第一列的所有数据
text0=text.iloc[:,0]

3.进行Cemotion情感值预测

由于Cemotion本身的配置环境带有大量的中文训练集,因此一般不需要训练语料库,本文也就不准备训练集了;

对每条评论进行情感分析,并存入senti列表,以备后续准确率检验

senti = [] #遍历每条评论进行预测,依次存入senti列表
for i in text0:
    senti.append(c.predict(i))

4.验证准确率

预测结果为positive的概率,positive的概率大于等于0.6,我认为可以判断为积极情感,小于0.6的判断为消极情感。所以以下将概率大于等于0.6的评论标签赋为1,小于0.6的评论标签赋为-1,方便后面与实际标签进行比较:

newsenti=[]
for i in senti:
    if (i>=0.6):
        newsenti.append(1)
    else:
        newsenti.append(-1)
text['predict']=newsenti #将新的预测标签增加为text的某一列,所以现在text的第0列为评论文本,第1列为实际标签,第2列为预测标签
counts=0
for j in range(len(text.iloc[:,0])): #遍历所有标签,将预测标签和实际标签进行比较,相同则判断正确。
    if text.iloc[j,2]==text.iloc[j,1]:
        counts+=1
print(u"准确率为:%f"%(float(counts)/float(len(text))))#输出本次预测的准确率

运行结果为:

评论区情感词汇提取用什么java 在线评论情感分析_评论区情感词汇提取用什么java_03

可以看到上述语料的情感分析准确率达到了96%,可以说是NLP算法中的第一梯队了,当然也与购物评论好评居多有关,而且比我之前检验的SnowNLP算法准确率(88%)要高出一截,大家也可以拿来检验自己的语料!

 

三、Cemotion实际情感分析

这部分是对在线评论数据(语料)进行实际情感分析,然后将情感分析后的结果输出excel结果,因为Cemotion算法基于循环神经网络方法,运行较慢,所以在代码中加了简单的计时脚本。

语料还是那个语料,不过删了人工标注的情感正负性

评论区情感词汇提取用什么java 在线评论情感分析_自然语言处理_04

1.加载库&设置开始计时器&读取数据

import pandas as pd
from cemotion import Cemotion
c = Cemotion()
import time
start = time.clock()#程序运行前的当前时刻

df = pd.read_excel(r'C:\Users\Desktop\Cemotion训练集.xlsx')

2.定义函数&批量处理所有的评论信息

#定义函数,批量处理所有的评论信息
def get_sentiment_cn(text):
    return c.predict(text)
#根据df里的“comments”列,将读取文本后的情感分析结果添加到新的一列,命名为“sentiment”
df["sentiment"] = df['comments'].apply(get_sentiment_cn)
print(df)

3.输出excel&计时输出

#储存为表格。
data1=df.to_excel(r'C:/Users/Desktop/CemotionSentiments.xlsx')
#输出程序运行时间
elapsed = (time.clock() - start)#结束后计时-开始前计时
print("Time used:%s 秒"%elapsed)

运行结果为:

评论区情感词汇提取用什么java 在线评论情感分析_数据挖掘_05

如图,sentiment列即为Cemotion情感分析后的值,基本上带好评的评论的情感值趋近于1,130条语料的程序运行了10秒,时间花费较多,不过准确率很高!


总结

Cemotion情感分析准确率验证这方面内容不多,因此是按照SnowNLP模板来写的,有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。