文章目录

  • 训练步骤
  • 实例自主训练
    • 训练过程
    • 测试过程
  • 模型准确率、召回率分析

训练步骤

在实际的项目中,需要根据实际的数据重新训练情感分析的模型,大致分为如下的几个步骤:

  • 准备正负样本,并分别保存,如正样本保存到pos.txt,负样本保存到neg.txt
  • 利用snownlp训练新的模型
  • 保存好新的模型
from snownlp import sentimentif __name__ == "__main__":# 重新训练模型sentiment.train('./neg.txt', './pos.txt')# 保存好新训练的模型sentiment.save('sentiment.marshal')
注意:若是想要利用新训练的模型进行情感分析,需要修改代码中的调用模型的位置。data_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),'sentiment.marshal')

实例自主训练

下载weibo数据集weibo_senti_100k.csv,该数据集已标注好每条评论的正负情感属性值,共119989条评论。

  • 示例
1,油。。。!!//@Amber_嫩小嫩: @小玖_想和阿?一起看雪 @我家有个李小编 @标准模子阿ken @seven_千千 心都酥了~~!!!!//@懂点心计学: 好萌[爱你]
1,[害羞][可爱][嘻嘻][爱你]//@JR晓伊伊:@love映霓 @G树嘉 哇哇哇!我姐太拉了!有木有有木有?[花心][花心][花心]
1,继续和我们走起哦[爱你]
1,好吃好看好开心[嘻嘻] 我在这里:http://t.cn/z8AGqeO
1,这是按照什么标准评选的? //@加拿大艾伯塔省旅游局:[哈哈]班夫露易丝湖滑雪场刚刚被评为全加拿大最佳滑雪场TOP1殊荣,雪要滑,饭还是要吃滴[手套]~~亲们,来加拿大滑雪,不来班夫,不来露易丝湖,你就OUT了!
1,必?承?,我的相?在hold大?面的能力著?不如中近景啊!昨?被拉去?任替?照相的心得。不??得??大家?是很??的:@赖声川 @李宇春 @史可 @谭卓 @?美?Vanessa ~我就??一?,今?我?不再?了![嘻嘻]
1,叫同学可能更好一点![嘻嘻][嘻嘻]//@梧桐小余:赐教不敢!分享可以:吃货分几个阶段第1阶段:爱吃(什么都行,没有什么特定目标,得什么吃什么!只要消费的起就去吃)第2阶段:会吃(知道那的好吃!特色是什么主题是什么!需一定的经济实力)
1,回复@清蒸小鱼圆:[哈哈][good][赞]//@清蒸小鱼圆:话说我曾把百老汇译成过宽街。。//@HOWsir:神译
0,哈哈 //@Carrie高洁: 哈哈哈哈,太罪恶了啊!以后叫外卖回家捞吧!不过...某人今天和你一样[泪]!@flame_张宏涛
0,今年赶上沙尘暴没?我离开的那天,不能呼吸,我能拍照,不敢说话,黑城在风沙中被淹没[衰] //@贝姨:醉美胡杨林,今年也去了,很美~  //@中国摄影师联盟:#参展作品#【第五届微摄影展赛 ? 金秋时节 】《胡杨林》摄影:北京-橙色咖啡(女)北京
0,这是带头要让人民币升值啊! //@互联网的那点事:充值面额目前支持 50元,100元,300元 和 500元 ! 关于定价 $0.99 的应用,中国区定价 ? 6 元。 $1.99 的应用,中国区定价 ? 12 元。 [泪]
0,[蜡烛] //@yangfan:[蜡烛] //@谭红梅1127: [蜡烛]//@发光的大金子: [蜡烛]//@qiaotengfei: [蜡烛]//@司徒南:[蜡烛]//@sina坊间八卦: 据最新线报,保安张师傅昨天下午去世了[泪][蜡烛]
0,邻居妈妈有两个孩子,男宝宝好像是四岁了,经常喜欢在他妈妈开门的时候学着样子来敲我家的门,好几次都被吓一跳,隔着门会听到他妈妈不厌其烦地说"宝宝这不是我们家的门你再敲就会有大灰狼出来吃你!",结果今天回家早在楼道碰到了男宝宝盯着我跟他妹小声说了句"大灰狼变的.."我瞬间石化[泪][泪]
0,不存在![哈哈]//@威笑1007:@锐子-_- @如果是你我便爱你 [衰][衰] //@史上第一最最搞:保护好乳头~
0,边间公司感X爱国啊!!!//@ray周: 爱国表演收工 //@大魔王萨莉莱:[怒][怒][怒] //@婆Paul: 边间公关公司组织到甘多人啊?//@xi_蚊_fat: [懒得理你]都话嘎啦。。。无钱鬼同你系街到行咩~~
0,竟然有这种动画片,太有创意了 你绝对没看过!!![晕]  http://sinaurl.cn/GwmIv
  • 简单将评论分解到pos.txtneg.txt两个文件中
file = open('weibo_senti_100k.csv','r',encoding='utf-8')
txt = file.readline()
print(txt)f1 = open('pos.txt','a+',encoding='utf-8')
f2 = open('neg.txt','a+',encoding='utf-8')
for txt in file:#print(txt)if txt[0] == '1':f1.write(txt[2:])elif txt[0] == '0':f2.write(txt[2:])f1.close()
f2.close()

效果如下


分别提取100条正负样本用于验证,首先用初始的SnowNLP进行情感分析。

#先用之前的snownlp测试情感分析的准确率
from snownlp import SnowNLP
import matplotlib.pyplot as pltfile = open('test.txt','r',encoding='utf-8')
txt = file.readline()
print(txt)lis = []
for txt in file:txt = txt.strip('\n')s = SnowNLP(txt)#输出情绪为积极的概率print(txt)print(s.sentiments)lis.append(s.sentiments)plt.hist(lis, histtype='bar', rwidth=0.8)
plt.title('primary sentiment distribution')
plt.savefig('primary_snow.png',dpi=600)
plt.show()
更博了,爆照了,帅的呀,就是越来越爱你!生快傻缺[爱你][爱你][爱你]
0.9939380842720742
@张晓鹏jonathan 土耳其的事要认真对待[哈哈],否则直接开除。@丁丁看世界 很是细心,酒店都全部OK啦。
0.9978628466026923
姑娘都羡慕你呢…还有招财猫高兴……//@爱在蔓延-JC:[哈哈]小学徒一枚,等着明天见您呢//@李欣芸SharonLee:大佬范儿[书呆子]
0.9975751779296371
美~~~~~[爱你]
0.9356898753158103
梦想有多大,舞台就有多大![鼓掌]
0.9735687381108085
[花心][鼓掌]//@小懒猫Melody2011: [春暖花开]
0.9402435926075672
某问答社区上收到一大学生发给我的私信:“偶喜欢阿姨!偶是阿姨控!”我回他:“阿姨稀饭小盆友!偶是小盆友控!” [哈哈]
0.4928113748031232
吃货们无不啧啧称奇,好不喜欢!PS:写错一个字![哈哈]@森林小天使-波琪 @SEVEN厦门摄影师 @日月星辰-心在路上 @每种型号生两胎 @志远天下行
@监控防盗安装XM @创意美食simon哥 @漫游者-强子 @陈小kitty猫@游子的歌@solo在厦门
0.9999999999077125
"#Sweet Morning#From now on,love yourself,enjoy living then smile.从现在开始,爱自己,享受生活并且微笑。[呵呵] [嘻嘻] [哈哈] [挤眼]
[太开心] 早安、甜心们"
0.9999127109152359
【霍思燕剖腹产下“小江江” 老公落泪】今晨9时霍思燕产下一名男婴,宝宝重8斤3两,母子平安。杜江的脸上洋溢着做爸爸的欣喜:宝宝小名叫“小江
江”,眼睛像他,鼻子和嘴巴则像霍思燕,看到宝贝就忍不住落泪!恭喜@杜江侦察记 @霍思燕 ,祝福“小江江”在爱里健康地成长[爱你]...http://t.cn/z8EwSPU
0.999999997188588
[鼓掌]//@慕春彦: 一流的经纪公司是超模的摇篮![鼓掌] //@姚戈:东方宾利强大的名模军团!
0.9997988636710101
真好//@宁波华侨豪生大酒店:[可爱] [害羞]
0.6828489422349031

对前几条正面评论分辨准确率相当高。

从直方图中可以看出原始模型对于负向评论的识别率很低,这需要我们新模型加以解决。

训练过程

下面使用新文本进行训练。

# 训练
from snownlp import sentiment
sentiment.train('neg.txt', 'pos.txt')
sentiment.save("sentiment.marshal1")

训练耗时19min,比较耗时。
snownlp中支持情感分析的模块在sentiment文件夹中,其核心代码为__init__.py,将sentiment情感分析的路径作为更改

data_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),'sentiment.marshal1.3')
测试过程
#更新训练集后snownlp测试情感分析的准确率
from snownlp import SnowNLP
import matplotlib.pyplot as pltfile = open('test.txt','r',encoding='utf-8')
txt = file.readline()
print(txt)lis = []
for txt in file:txt = txt.strip('\n')s = SnowNLP(txt)#输出情绪为积极的概率print(txt)print(s.sentiments)lis.append(s.sentiments)plt.hist(lis, histtype='bar', rwidth=0.8)
plt.title('updated sentiment distribution')
plt.savefig('updated_snow.png',dpi=600)
plt.show()
更博了,爆照了,帅的呀,就是越来越爱你!生快傻缺[爱你][爱你][爱你]
0.9894380062594977
@张晓鹏jonathan 土耳其的事要认真对待[哈哈],否则直接开除。@丁丁看世界 很是细心,酒店都全部OK啦。
0.9515755998624059
姑娘都羡慕你呢…还有招财猫高兴……//@爱在蔓延-JC:[哈哈]小学徒一枚,等着明天见您呢//@李欣芸SharonLee:大佬范儿[书呆子]
0.10219576682799902
美~~~~~[爱你]
0.9047245353368581
梦想有多大,舞台就有多大![鼓掌]
0.9874712210630343
[花心][鼓掌]//@小懒猫Melody2011: [春暖花开]
0.9897223349406922
某问答社区上收到一大学生发给我的私信:“偶喜欢阿姨!偶是阿姨控!”我回他:“阿姨稀饭小盆友!偶是小盆友控!” [哈哈]
0.9487683958478118
吃货们无不啧啧称奇,好不喜欢!PS:写错一个字![哈哈]@森林小天使-波琪 @SEVEN厦门摄影师 @日月星辰-心在路上 @每种型号生两胎 @志远天下行 @监控防盗安装XM @创意美食simon哥 @漫游者-强子 @陈小kitty猫@游子的歌@solo在厦门
0.9999999852556885
"#Sweet Morning#From now on,love yourself,enjoy living then smile.从现在开始,爱自己,享受生活并且微笑。[呵呵] [嘻嘻] [哈哈] [挤眼] [太开心] 早安、甜心们"
0.9999791037483539
【霍思燕剖腹产下“小江江” 老公落泪】今晨9时霍思燕产下一名男婴,宝宝重8斤3两,母子平安。杜江的脸上洋溢着做爸爸的欣喜:宝宝小名叫“小江江”,眼睛像他,鼻子和嘴巴则像霍思燕,看到宝贝就忍不住落泪!恭喜@杜江侦察记 @霍思燕 ,祝福“小江江”在爱里健康地成长[爱你]...http://t.cn/z8EwSPU
0.9919562463973951
[鼓掌]//@慕春彦: 一流的经纪公司是超模的摇篮![鼓掌] //@姚戈:东方宾利强大的名模军团!
0.9999860060841947
真好//@宁波华侨豪生大酒店:[可爱] [害羞]
0.9989905352556577
"第一次见到有花瓣的面膜,一片抵普通面膜好几片 [哈哈]!补水神器啊,一帖见效! 睡前一片,15分钟超神奇膜法,第二天起来你会发现你脸又白又嫩还有光泽,持续几天皮肤好像剥了壳的鸡蛋一样白白嫩嫩的[太开心]! 明星推荐,美妆老师私藏的神奇""膜""法!8片礼盒装抢购地址>>>(去评论中找链接哦)"

可以看到有些评论也出现分类错误的情况,e.g.

姑娘都羡慕你呢…还有招财猫高兴……//@爱在蔓延-JC:[哈哈]小学徒一枚,等着明天见您呢//@李欣芸SharonLee:大佬范儿[书呆子]
0.10219576682799902

新训练集分类结果图,对正面评论的分类效果较差。但是相比之前的数据强大很多。模型效果明显更优。

模型准确率、召回率分析

from snownlp import SnowNLP
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
sns.set()y_true = [0 for i in range(100)]
y_true.extend([1 for j in range(100)])y_pred = []file = open('test.txt','r',encoding='utf-8')
txt = file.readline()lis = []
for txt in file:txt = txt.strip('\n')s = SnowNLP(txt)#输出情绪为积极的概率if s.sentiments>=0.5:y_pred.append(1)else:y_pred.append(0)#print(txt)#print(s.sentiments)#lis.append(s.sentiments)plt.subplots()
C2= confusion_matrix(y_true, y_pred)
print(C2)
print(C2.ravel())TN,FP,FN,TP = C2.ravel()[0],C2.ravel()[1],C2.ravel()[2],C2.ravel()[3]
print("Accuracy: "+str(round((TP+TN)/(TP+TN+FP+FN), 2)))
print("Recall: "+str(round((TP)/(TP+FN), 2)))sns.heatmap(C2,annot=True)plt.title("sns_heatmap_confusion_matrix")
plt.xlabel("Pred")
plt.ylabel("True")
plt.savefig("sns_heatmap_confusion_matrix.png", bbox_inches="tight",dpi=600)
plt.show()
  • 原始模型
[[36 64][18 82]]
[36 64 18 82]
Accuracy: 0.59
Recall: 0.82

Accuracy准确率是所有分类正确的样本,达到0.59,Recall召回率是所有正类分类正确的样本,达到0.82。
整体准确率不高,但是对正类的分类准确度很高。

  • 更新模型
[[92  8][20 80]]
[92  8 20 80]
Accuracy: 0.86
Recall: 0.8


准确率0.86,提升相当大,召回率0.8基本持平。更新语料训练之后的snownlp模型的性能显著提升。对正类和负类的分类效果都比较好。

自然语言处理nlp:SnowNLP自主训练情感分析模型相关推荐

  1. 【自然语言处理】基于NLP的电影评论情感分析模型比较

    基于NLP的电影评论情感分析模型比较 一段时间以来,使用机器学习的 NLP 任务借助 BERT(Bidirectional Encoder Representations from Transform ...

  2. NLPCC20@基于图注意网络的句子成分感知细粒度情感分析模型SCAN

    论文信息 论文全名 Sentence Constituent-Aware Aspect-Category Sentiment Analysis with Graph Attention Network ...

  3. NLP推特情感分析模型

    本文主要介绍Sentiment analysis: build your NLP project的思路和补充一些相关知识. 介绍 给定Twitter数据集(包含140万条已标记的tweet,单条长度在 ...

  4. 自然语言处理nlp:文本处理库SnowNLP介绍及应用

    SnowNLP简介 SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中 ...

  5. 自然语言处理NLP——ERNIE-M:基于回译机制的“预训练-微调”多语言模型

    目录 系列文章目录 一.背景介绍 1.多语言任务 1.1 多语言任务定义 1.2 多语言任务难题 2.多语言模型 2.1 多语言模型定义与原理 2.2 多语言模型困难 3.论文简介 3.1 背景与开发 ...

  6. 机器学习和数据科学的最佳公共数据集机器学习、数据科学、情感分析、计算机视觉、自然语言处理 (NLP)、临床数据等的最佳公共数据集。

    数据集查找器 Google 数据集搜索   Google 数据集搜索Google 数据集搜索:与Google Scholar的工作方式类似,数据集搜索可让您在托管数据集的任何地方查找数据集,无论是出版 ...

  7. NLP自然语言常见问题及相关模型训练数据格式示例

    NLP自然语言常见问题及相关模型训练数据格式示例 目录 NLP自然语言常见问题及相关模型训练数据格式示例 NLP任务集 <

  8. 自然语言处理NLP之文本蕴涵、智能问答、语音识别、对话系统、文本分类、情感计算

    自然语言处理NLP之文本蕴涵.智能问答.语音识别.对话系统.文本分类.情感计算 目录

  9. 自然语言处理NLP中文分词,词性标注,关键词提取和文本摘要

    NLP相关工具包的介绍 1.1 jieba "结巴"中文分词,理念是做最好的 Python 中文分词组件. 支持三种分词模式: (1)精确模式,试图将句子最精确地切开,适合文本分析 ...

最新文章

  1. 我挖掘Kafka底层原理!发现了它火爆宇宙的3个真相!
  2. WinCE中,环境变量的添加,删除和查询
  3. 笔记:Microservices for Java Developers
  4. 用elastic stack来分析下你的redis slowlog
  5. Java帧率,android应用性能优化之帧率 - hellominefriend的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  6. 切图html 在线,网页制作/前端开发/网页切图/网站切图/PSD转html
  7. CorelDRAWX4的VBA插件开发(三)VBA的必用基础知识
  8. Qt之QSS使用与基本语法
  9. ​瑞幸员工如何作假22亿,怎样用技术防止财务造假?
  10. “爆炸图“ArcGIS中制作一张好看的爆炸分析图(附练习数据)
  11. 用Squid和DNSPod打造自己的CDN详细教程
  12. 数据科学 | 如何解释线性回归的R方
  13. 路由器常用功能有哪些 路由器功能介绍【详解】
  14. vs2017/2019无法登陆:我们无法刷新此账户的凭据,解决方法(亲测可用)
  15. redis入门到精通(一) - 编译与调试
  16. 最简单的基于FFMPEG的转码程序
  17. 【学习OpenCV】warpAffine函数实现图像旋转
  18. Docker的原理,详细
  19. 如何向纯洁的女朋友解释并发与并行的区别?
  20. rpmbuild打包rpm

热门文章

  1. 深圳腾讯计算机打鱼的游戏,腾讯欢乐捕鱼
  2. Android H265
  3. echarts 玫瑰图比例太小显示优化
  4. java课程设计纸牌游戏_java练习项目之纸牌游戏实例源码
  5. python爬虫爬取百度图片总结_爬虫篇| 爬取百度图片(一)
  6. oracle 审计设置,oracle审计简单设置
  7. 爬取QQ音乐——新手不知道的那些坑 之 中英文(全/半角)冒号坑
  8. VS2012序列号,激活码,【旗舰版】
  9. Google Earth Engine(GEE)下载全球土壤砂粒(Sand)含量数据
  10. php小偷cookie,ptcms小说小偷程序 最新EXP漏洞