燃爆!17行Python代码做情感分析?你也可以的

栏目: Python · 发布时间: 6年前

内容简介:github:https://github.com/PaddlePaddle/PaddleHub/blob/release/v0.5.0/demo/senta/senta_demo.py总结,三个不同类别的测评如下所示:1.模型计算耗时较小,使用体验不错。

17行代码跑最新NLP模型?你也可以!

  • 本次作者评测所需(防吓退)
  1. 一台可以上网的电脑
  2. 基本的 python 代码阅读能力,用于修改几个模型参数
  3. 对百度中文NLP最新成果的浓烈兴趣
  • 训练模型:Senta情感分析模型基本简介
Senta是百度NLP开放的中文情感分析模型,可以用于进行中文句子的情感分析,输出结果为{正向/中性/负向}中的一个,关于模型的结构细节,请查看Senta----github.com/PaddlePaddle/Paddlehub/demo/senta 
  • 本示例代码选择的是Senta-BiLSTM模型。
  • 模型来源:Paddlehub简介
PaddleHub是基于PaddlePaddle开发的预训练模型管理工具,可以借助预训练模型更便捷地开展迁移学习工作。 
  • 本次评测中只使用了预训练模型,没有进行fine-tune
  • 代码运行环境:百度 AI studio
燃爆!17行Python代码做情感分析?你也可以的

实验代码

  • 来自paddlehub/senta_demo.py

github:https://github.com/PaddlePaddle/PaddleHub/blob/release/v0.5.0/demo/senta/senta_demo.py

from __future__ import print_function 
import json 
import os 
import six 
import paddlehub as hub 
if __name__ == "__main__": 
 # 加载senta模型 
 senta = hub.Module(name="senta_bilstm") 
 # 把要测试的短文本以str格式放到这个列表里 
 test_text = [ 
 "这家餐厅不是很好吃", 
 "这部电影差强人意", 
 ] 
 # 指定模型输入 
 input_dict = {"text": test_text} 
 # 把数据喂给senta模型的文本分类函数 
 results = senta.sentiment_classify(data=input_dict) 
 # 遍历分析每个短文本 
 for index, text in enumerate(test_text): 
 results[index]["text"] = text 
 for index, result in enumerate(results): 
 if six.PY2: 
 print( 
 json.dumps(results[index], encoding="utf8", ensure_ascii=False)) 
 else: 
 print('text: {},    predict: {}'.format(results[index]['text'],results[index]['sentiment_key'])) 

详细测评

成语情感分析

input

test_text = [ 
 '沧海桑田', # 中型,世事变化很大 
 '下里巴人', # 褒义,通俗的文学艺术 
 '有口皆碑', # 褒义,对突出的好人好事一致颂扬 
 '危言危行', # 褒义,说正直的话,做正直的事 
 '鬼斧神工', # 褒义,指大自然美景 
 '不赞一词', # 褒义,不能再添一句话,表示写的很好 
 '文不加点', # 褒义,指写作技巧高超 
 '差强人意', # 褒义,大体还能使人满意 
 '无微不至', # 褒义,指细心周到 
 '事倍功半', # 褒义,指不费力就有好的效果 
 '事半功倍', # 贬义,指浪费了力气却没有好效果 
 '蠢蠢欲动', # 贬义,指要干坏事 
 '面目全非', # 贬义,指大破坏 
 '江河日下', # 贬义,指事物日渐衰落 
 '评头论足', # 贬义,指小节过分挑剔 
 '生灵涂炭', # 贬义,指人民极端困苦 
 '始作俑者', # 贬义,第一个做坏事的人 
 '无所不为', # 贬义,什么坏事都干 
 '无所不至', # 贬义,什么坏事都干 
 '阳春白雪', # 贬义,高深不容易理解的艺术 
 ]

output

运行耗时: 4秒480毫秒 
text: 沧海桑田, positive_prob: 0.3838, predict: negative # 错误 
text: 下里巴人, positive_prob: 0.7957, predict: positive  
text: 有口皆碑, positive_prob: 0.906, predict: positive 
text: 危言危行, positive_prob: 0.588, predict: positive 
text: 鬼斧神工, positive_prob: 0.657, predict: positive 
text: 不赞一词, positive_prob: 0.9698, predict: positive 
text: 文不加点, positive_prob: 0.1284, predict: negative # 错误 
text: 差强人意, positive_prob: 0.0429, predict: negative # 错误 
text: 无微不至, positive_prob: 0.8997, predict: positive 
text: 事倍功半, positive_prob: 0.6181, predict: positive 
text: 事半功倍, positive_prob: 0.8558, predict: positive # 错误 
text: 蠢蠢欲动, positive_prob: 0.7353, predict: positive # 错误 
text: 面目全非, positive_prob: 0.2186, predict: negative 
text: 江河日下, positive_prob: 0.2753, predict: negative 
text: 评头论足, positive_prob: 0.6737, predict: positive # 错误 
text: 生灵涂炭, positive_prob: 0.4661, predict: neutral # 错误 
text: 始作俑者, positive_prob: 0.247, predict: negative 
text: 无所不为, positive_prob: 0.5948, predict: positive # 错误 
text: 无所不至, positive_prob: 0.553, predict: positive # 错误 
text: 阳春白雪, positive_prob: 0.7552, predict: positive # 错误 

正确率:10/20 = 50%

转折复句情绪分析

input

test_text = [ 
 '小明虽然考了第一,但是他一点也不骄傲', # 积极  
 '你不是不聪明,而是不认真', # 消极 
 '虽然小明很努力,但是他还是没有考100分', # 消极  
 '虽然小明有时很顽皮,但是他很懂事', # 积极  
 '虽然这座桥已经建了很多年,但是她依然很坚固', # 积极  
 '他虽然很顽皮,但是学习很好', # 积极 
 '学习不是枯燥无味,而是趣味横生', # 积极  
 '虽然很困难,但是我还是不会退缩', # 积极  
 '虽然小妹妹只有5岁,但是她能把乘法口诀倒背如流', # 积极  
 '虽然我很过分,但是都是为了你好', # 积极  
 '小明成绩不好,不是因为不聪明,而是因为不努力', # 消极  
 '虽然这样做不妥当,但已经是最好的选择', # 积极  
 '这次虽然失败,但却是成功的开始', # 积极 
 '虽然这道题很难,但是我相信我会把它做出来', # 积极  
 '虽然爷爷已经很老了,但是他还是坚持每天做运动', # 积极  
 '不是没有美,而是我们缺少发现美的眼光', # 消极  
 '虽然他们有良好的生活条件,但是浪费资源迟早会带来恶果', # 消极  
 '他不是我们的敌人,而是我们的朋友', # 积极  
 '他不是不会做,而是不想做', # 消极 
 '虽然那个梦想看起来离我遥不可及,但是我相信经过我的努力它一定会实现', # 积极 
 ] 

output

运行耗时: 2秒667毫秒 
text: 小明虽然考了第一,但是他一点也不骄傲, positive_prob: 0.9598, 
 predict: positive  
text: 你不是不聪明,而是不认真, positive_prob: 0.0275, 
 predict: negative 
text: 虽然小明很努力,但是他还是没有考100分, positive_prob: 0.7188, 
 predict: positive # 错误 
text: 虽然小明有时很顽皮,但是他很懂事, positive_prob: 0.8776, 
 predict: positive 
text: 虽然这座桥已经建了很多年,但是她依然很坚固, positive_prob: 0.9782, 
 predict: positive 
text: 他虽然很顽皮,但是学习很好, positive_prob: 0.9181, 
 predict: positive 
text: 学习不是枯燥无味,而是趣味横生, positive_prob: 0.3279, 
 predict: negative # 错误 
text: 虽然很困难,但是我还是不会退缩, positive_prob: 0.3974, 
 predict: negative # 错误 
text: 虽然小妹妹只有5岁,但是她能把乘法口诀倒背如流, positive_prob: 0.5124, 
 predict: neutral 
text: 虽然我很过分,但是都是为了你好, positive_prob: 0.399, 
 predict: negative # 错误 
text: 小明成绩不好,不是因为不聪明,而是因为不努力, positive_prob: 0.1881, 
 predict: negative 
text: 虽然这样做不妥当,但已经是最好的选择, positive_prob: 0.806, 
 predict: positive 
text: 这次虽然失败,但却是成功的开始, positive_prob: 0.4862, 
 predict: neutral # 错误 
text: 虽然这道题很难,但是我相信我会把它做出来, positive_prob: 0.3959, 
 predict: negative # 错误 
text: 虽然爷爷已经很老了,但是他还是坚持每天做运动, positive_prob: 0.9178, 
 predict: positive 
text: 不是没有美,而是我们缺少发现美的眼光, positive_prob: 0.5614, 
 predict: positive 
text: 虽然他们有良好的生活条件,但是浪费资源迟早带来恶果, positive_prob: 0.1086, 
 predict: negative 
text: 他不是我们的敌人,而是我们的朋友, positive_prob: 0.3749, 
 predict: negative # 错误 
text: 他不是不会做,而是不想做, positive_prob: 0.1247, 
 predict: negative  
text: 虽然那个梦想看起来离我遥不可及,但是我相信经过我的努力它一定会实现, positive_prob: 0.957, 
 predict: positive 

正确率:13/20 = 65%

具体场景情绪分析

input

test_text = [ 
 '这车耗油很快',  
 '这车开的很快', 
 '这房间有一股死老鼠味道', 
 '这房间有烟味', 
 '他的发型像杀马特', 
 '这衣服机洗掉色', 
 '这衣服穿多了起球', 
 '这软件容易闪退', 
 '他打球的样子像蔡徐坤', 
 '这把20了', 
 '这把可以打', 
 '他射球的样子像科比', 
 '这房间的布置很有情调', 
 '这酒让人回味', 
 '这衣服很酷', 
 '他的侧脸好像林峰', 
 '五星好评', 
 '以后会回购的', 
 '性价比很高', 
 '物美价廉', 
 '这女生让我心动' 
 ] 

output

运行耗时: 2秒676毫秒 
text: 这车耗油很快, positive_prob: 0.2926, predict: negative 
text: 这车开的很快, positive_prob: 0.8478, predict: positive 
text: 这房间有一股死老鼠味道, positive_prob: 0.0071, predict: negative 
text: 这房间有烟味, positive_prob: 0.2071, predict: negative 
text: 他的发型像杀马特, positive_prob: 0.3445, predict: negative 
text: 这衣服机洗掉色, positive_prob: 0.3912, predict: negative 
text: 这衣服穿多了起球, positive_prob: 0.679, predict: positive # 错误 
text: 这软件容易闪退, positive_prob: 0.0051, predict: negative 
text: 他打球的样子像蔡徐坤, positive_prob: 0.8684, predict: positive # 错误 
text: 这把20了, positive_prob: 0.1695, predict: negative 
text: 这把可以打, positive_prob: 0.3503, predict: negative # 错误 
text: 他射球的样子像科比, positive_prob: 0.7263, predict: positive 
text: 这房间的布置很有情调, positive_prob: 0.9519, predict: positive 
text: 这酒让人回味, positive_prob: 0.7431, predict: positive 
text: 这衣服很酷, positive_prob: 0.9817, predict: positive 
text: 他的侧脸好像林峰, positive_prob: 0.5621, predict: positive 
text: 五星好评, positive_prob: 0.9971, predict: positive 
text: 以后会回购的, positive_prob: 0.6903, predict: positive 
text: 性价比很高, positive_prob: 0.9799, predict: positive 
text: 物美价廉, positive_prob: 0.9542, predict: positive 
text: 这女生让我心动, positive_prob: 0.956, predict: positive 

正确率:17/20 = 85%

总结,三个不同类别的测评如下所示:

燃爆!17行Python代码做情感分析?你也可以的

总结

1.模型计算耗时较小,使用体验不错。

2.成语情感分析方面,我专门挑选的是一些比较难从字面理解的,容易混淆情感的成语(比如差强人意被判定为消极),这些也是高考常考的内容。虽然最后模型正确率只有一般,但是我认为是可以接受的,适当增加成语语句作为训练语料会使模型"更懂"中文。

大家有兴趣的可以试一试一些比较容易从字面理解情感的成语,我觉得得分会比本次评测的结果要好。

3.转折语句情感分析本身也是对模型的一种挑战,实测效果为65分,个人觉得模型对于像“但是”,“虽然”这样的词语没有足够的attention,因为这些转折词背后的语义往往才是最影响整个句子的情感的,最终评分65分,个人认为模型在这方面表现一般。

4.评分最好看的是具体场景情感分析,大概预训练语料中有大量的淘宝评价?像杀马特 20 科比 这些小字眼是判定情感的关键,而模型也确实捕捉到并判断出来了,这点比较让我惊喜。


以上所述就是小编给大家介绍的《燃爆!17行Python代码做情感分析?你也可以的》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning ASP.NET 4 in C# and Vb

Beginning ASP.NET 4 in C# and Vb

Imar Spaanjaars / Wrox / 2010-3-19 / GBP 29.99

This book is for anyone who wants to learn how to build rich and interactive web sites that run on the Microsoft platform. With the knowledge you gain from this book, you create a great foundation to ......一起来看看 《Beginning ASP.NET 4 in C# and Vb》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具