找回密码
 会员注册
查看: 41|回复: 0

Python-SnowNLP情感分析与自定义训练

[复制链接]

5

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-9-4 16:15:28 | 显示全部楼层 |阅读模式
目录一.引言二.SnowNLP情感分析1.安装SnowNLP2.测试SnowNLP三.SnowNLP自定义训练1.数据集准备2.训练与保存3.模型替换4.模型测试5.SnowNLP原理◆Bayes公式◆先验概率◆后验概率◆情感模型四.总结 一.引言SnowNLP是一个基于Python的简洁的自然语言处理工具包,它提供了文本情感分析、关键词提取、文本分类等功能。该工具包具有简单易用的接口,可帮助用户快速实现文本处理和情感分析任务。SnowNLP的设计理念是简洁高效,它采用了一些先进的自然语言处理算法,同时也尽量减少了不必要的复杂性,使得用户可以轻松地应用它来处理文本数据。本文主要包括两部分:◆ SnowNLP情感分析◆ SnowNLP自定义训练 二.SnowNLP情感分析1.安装SnowNLPpipinstallsnownlp-ihttps://pypi.tuna.tsinghua.edu.cn/simple出现Successfully即为安装成功,博主这里Py==3.8、snownlp==0.12.3。 2.测试SnowNLPfromsnownlpimportSnowNLPdefsentiment_analysis(text):#使用SnowNLP对中文文本进行情感分析s=SnowNLP(text)#SnowNLP的sentiments方法返回情感倾向分数,越接近1表明情感越积极,越接近0表明情感越消极sentiment_score=s.sentimentsreturnsentiment_score直接调用SnowNLP方法获取中文文本情感,这里返回sentiment_score,以0.5为界限,越接近于1越积极,反之越消极。text="角色塑造太单调,毫无震撼力!"score=sentiment_analysis(text)print(f"情感分数:{score}")ifscore>0.5:print("该语句是积极的。")else:print("该语句是消极的。") 三.SnowNLP自定义训练1.数据集准备自定义训练数据集主要在原生SnowNLP无法满足自己场景的情况下,可以自定义积极、消极的文本,按行放置到txt文件中,供 sentiment进行调整。下面以影视评价为例,pos和neg各添加100条影评信息。◆pos.txt◆neg.txt 2.训练与保存fromsnownlpimportsentimentdeftrain_self_model():pos="./pos.txt"neg="./neg.txt"sentiment.train(neg,pos)sentiment.save("sentiment.marshal")训练结束后会在输出目录得到一个.marshal.3的文件:   3.模型替换要使用自己生成的marshal模型需要到pythonsite-package库里把SnowNLPsentiment原始的mershal.3模型文件替换掉。◆获取Site-Packages路径在当前python环境目录下执行下述脚本获取Site-Packages文件路径:defget_site_pkg_path():importsite#Addsnownlp/sentimentreturnsite.getsitepackages()[0]'运行运行执行后获取对应Site-Packages路径地址:cd/Users/XXX/miniforge3/PythonTest/lib/python3.8/site-packages ◆修改mershal模型cdsnownlp/sentiment备份sentiment库文件夹下的sentiment.marshal.3文件,将我们output的模型文件cp到这里。Tips:最好备份下原始的模型,要不然将来需要还得再pipinstall。  4.模型测试继续调用第二节情感分析一节的 sentiment_analysis函数测试。◆完整的训练负样本使用训练过的负样本会得到非常逼近区间[0,1]的分数,正样本大家也可以测试下。text="角色塑造太单调,毫无震撼力!"score=sentiment_analysis(text)-----------------------------情感分数:3.992483776915634e-07该语句是消极的。 ◆删减的训练负样本使用删减过的负样本同样可以得到可靠的情感分析分数。text="毫无震撼力!"score=sentiment_analysis(text)-------------------------------情感分数:0.004951768064722417该语句是消极的。 ◆BadCase分析自定义训练模型后原始判定为消极的句子可能判定为积极,我们去掉消极词后可以看到是由于其他词的Positive Ratio太高,从而把Negative的词的Ratio带高了,从而造成误判。所以如果大家使用自定义模型,需要注意其可能在你的专业领域得到靠谱的情感分析,但是之前的泛化能力受到影响。text="这个产品真的很垃圾!"情感分数:0.9208253155767703该语句是积极的。-------------------------text="这个产品真的很!"情感分数:0.9480748399538199该语句是积极的。 5.SnowNLP原理上面是sentiment的__init__初始化代码,可以看到其使用的模型类型为Bayes概率统计模型,这个模型我们之前在机器学习部分讲过,其通过计算条件概率进行情感分析,核心思想是通过训练样本的分词结果构建先验概率分布,再基于先验概率分布计算出现某个情况后的后验概率。◆Bayes公式 ◆先验概率假设男生女生各50人,其通过B/G代表,则P(B)=P(G)=50/(50 +50)=0.5。其次规定事件T为是否穿长裤,其中男生75%的概率穿长裤,即P(T|B)=0.75,女生50%的概率穿长裤,即P(T|G)=0.5,这里P(T|B/G)即为先验概率,是我们通过概率统计计算而得。 ◆后验概率由条件概率公式可得,可以理解为穿长裤的男生的数量与男生穿长裤的数量一致:P(BT)=P(B)*P(T|B)=P(T)*P(B|T)由全概率公式可得,可以理解为穿长裤的概率等于男生、女生穿长裤的概率之和:P(T)=P(B)*P(T|B)+P(G)*P(T|G)所以可以推导出(B|T)=P(B)·P(T|B)/P(T)这里P(B)男生的概率、P(T)穿长裤的概率、P(T|B)男生穿长裤的概率都有,计算可得穿长裤的是男生的概率P(B|T)。 ◆情感模型而对于上面情感分析的场景,我们P(Sentiment)即为积极P、消极N两种选择,我们获取text进行分词得到w1、w2且可以得到P(S|Wi)即当前词的情感,从而最后推导出情感分析的概率计算:其中Wi为TextW中文本分词的结果,Si对应P、N两种情感,我们计算P(Si|W)即文本对应的情感S,P(Wi)为对应词语出现的频次,P(Wi|Si)为积极或消极场景中该词出现的概率,以此类推即可计算Score。  四.总结SnowNLP采用Bayes模型,支持自定义训练,开箱即用也很轻便,有需要情感分析的同学可以使用,当然语言模型Bert甚至大模型LLM现在也具备该场景功能,有兴趣的同学也可以微调模型获得更专业的情感分析模型。完整的Bayes实战代码可以参考: 朴素贝叶斯-分类及Sklearn库实现机器学习实战。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-12 20:07 , Processed in 1.002868 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表