当前位置:   article > 正文

Python分词,情感分析工具 SnowNLP_snownlp情感分析正确率

snownlp情感分析正确率

现在训练数据主要是针对电商服务类的评价,所以对其他的一些可能效果不是很好

安装

pip install snownlp

官方实例

  1. from snownlp import SnowNLP
  2. from snownlp import sentiment
  3. s=SnowNLP(u'这个东西真的很赞')
  4. print(s.words)
  5. print(s.sentiments)
  6. text = u'''
  7. 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
  8. 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
  9. 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
  10. 因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,
  11. 所以它与语言学的研究有着密切的联系,但又有重要的区别。
  12. 自然语言处理并不是一般地研究自然语言,
  13. 而在于研制能有效地实现自然语言通信的计算机系统,
  14. 特别是其中的软件系统。因而它是计算机科学的一部分。
  15. '''
  16. s=SnowNLP(text) #不只是情感分析,训练出的snownlp模型还有提取关键字,摘要等功能
  17. print(s.sentiments)
  18. print(s.keywords(3))
  19. print(s.summary(3))

积极和消极分类

  1. from snownlp import SnowNLP
  2. l=["卧槽","牛逼","他妈的","打死你","优秀","哈哈哈哈哈啊哈","好评","信不信我弄死你啊","强强强强强强强强"]
  3. #保存情感极性值小于等于0.3的结果为负面情感结果
  4. f1=open('neg.txt','w',encoding='utf-8')
  5. #保存情感极性值大于0.3的结果为正面情感结果
  6. f2=open('pos.txt','w',encoding='utf-8')
  7. for j in l:
  8. s=SnowNLP(j)
  9. if s.sentiments <=0.4:
  10. f1.write(j+'\t'+str(s.sentiments)+'\n')
  11. else:
  12. f2.write(j + '\t' + str(s.sentiments) + '\n')
  13. f1.close()
  14. f2.close()

将全部词语分为 积极和消极 分别加入到 txt 文件中,小于 0.4 的为消极,否则为积极

结果以及所得分数:

  1. # neg.txt
  2. 他妈的 0.3124999999999998
  3. 打死你 0.3150105708245242
  4. 信不信我弄死你啊 0.07091943747997087
  5. # pos.txt
  6. 卧槽 0.5
  7. 牛逼 0.6923786120385603
  8. 优秀 0.8703703703703702
  9. 哈哈哈哈哈啊哈 0.8684210526315791
  10. 好评 0.44578313253012036
  11. 强强强强强强强强 0.421874597530976

主要功能

中文分词(Character-Based Generative Model)

词性标注(TnT 3-gram 隐马)

情感挽回分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)

文本分类(Naive Bayes)

转换成拼音(Trie树实现的最大匹配)

繁体转简体(Trie树实现的最大匹配)

提取文本关键词(TextRank算法)

提取文本摘要(TextRank算法)

tf,idf

Tokenization(分割成句子)

文本相似(BM25)

训练

包括分词,词性标注,情感分析

这里有一份待训练服务类评论的带有标签的文本文件(1为好评 0为差评) 

开始分类训练

  1. from snownlp import sentiment
  2. import pandas as pd
  3. def train_model():
  4. data=pd.read_csv(r"./DataSet.csv",header=0)
  5. train=data.iloc[:40000,[1,2]]
  6. test=data.iloc[40000:,[1,2]]
  7. train_neg=train.iloc[:,1][train.label==0]
  8. train_pos=train.iloc[:,1][train.label==1]
  9. train_neg.to_csv(r"./neg.csv",index=0,header=0)
  10. train_pos.to_csv(r"./pos.csv",index=0,header=0)
  11. test.to_csv(r"./test.csv",index=0,columns=['label','review'])
  12. sentiment.train(r'./neg.csv',r'./pos.csv')
  13. sentiment.save(r'C:/ProgramData/Miniconda3/Lib/site-packages/snownlp/sentiment/sentiment.marshal')
  14. if __name__ == '__main__':
  15. train_model()

结果分别加入到 csv 文件中,然后进行模型训练,保存的路径是默认分词模块的路径,它会覆盖掉原来的 .marshal 模型文件

测试所得分数

  1. import pandas as pd
  2. from snownlp import SnowNLP
  3. from snownlp import sentiment
  4. import Train
  5. if __name__ == '__main__':
  6. test=pd.read_csv(r"./test.csv")
  7. review_list=[review for review in test['review']]
  8. label_list=[label for label in test['label']]
  9. list_test=[(label,review) for label,review in list(zip(label_list,review_list)) if type(review)!=float]
  10. for j in list_test:
  11. print(j[1],j[0],SnowNLP(j[1]).sentiments)
  12. senti=[SnowNLP(review).sentiments for label,review in list_test]
  13. newsenti=[]
  14. for i in senti: #预测结果为pos的概率,大于0.6我们认定为积极评价
  15. if(i>=0.6):
  16. newsenti.append(1)
  17. else:
  18. newsenti.append(0)
  19. counts=0
  20. for i in range(len(list_test)):
  21. if(newsenti[i]==list_test[i][0]):
  22. counts+=1
  23. accuracy=float(counts)/float(len(list_test))
  24. print("准确率为:%.2f" %accuracy)

测试得到的准确率分数是 0.9

现在就可以用新的模型来进行预测分类了

代码已上传至 Github 仓库

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/683530
推荐阅读
相关标签
  

闽ICP备14008679号