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

开发 后端 数据分析
17行代码跑最新NLP模型?你也可以!一台可以上网的电脑,基本的python代码阅读能力,用于修改几个模型参数,对百度中文NLP最新成果的浓烈兴趣。

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

  • 本次作者评测所需(防吓退)
  1. 一台可以上网的电脑
  2. 基本的python代码阅读能力,用于修改几个模型参数
  3. 对百度中文NLP最新成果的浓烈兴趣
  • 训练模型:Senta情感分析模型基本简介
  1. Senta是百度NLP开放的中文情感分析模型,可以用于进行中文句子的情感分析,输出结果为{正向/中性/负向}中的一个,关于模型的结构细节,请查看Senta----github.com/PaddlePaddle/Paddlehub/demo/senta 
  • 本示例代码选择的是Senta-BiLSTM模型。
  • 模型来源:Paddlehub简介
  1. 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

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

详细测评

成语情感分析

input

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

output

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

正确率:10/20 = 50%

转折复句情绪分析

input

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

output

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

正确率:13/20 = 65%

具体场景情绪分析

input

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

output

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

正确率:17/20 = 85%

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

 

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

总结

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

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

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

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

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

责任编辑:未丽燕 来源: 今日头条
相关推荐

2017-05-15 14:00:28

大数据Python情感极性分析

2010-08-11 10:58:06

AndroidAndroid NDK

2020-08-05 11:53:41

数据代码自动化

2019-01-15 14:41:06

数据分析新闻联播统计分析

2017-12-20 09:52:50

2018-06-19 08:35:51

情感分析数据集代码

2019-02-14 13:37:35

CPU故障芯片

2019-06-26 08:37:23

Python数据处理编程语言

2020-05-15 15:28:51

爬虫Python学习

2012-08-14 09:20:00

Python

2022-02-23 14:37:48

代码Pythonbug

2020-03-20 15:10:09

Python错误分析代码

2021-04-29 22:38:04

Python数据库SQL

2021-04-30 15:34:23

Python 开发编程语言

2014-12-18 09:49:31

代码

2015-12-25 15:16:28

开源github开源项目

2016-09-30 01:04:45

数据分析数据

2015-03-20 14:51:09

Testin云测

2021-01-24 16:00:22

Ansible系统运维

2016-03-28 10:19:54

代码智慧人类
点赞
收藏

51CTO技术栈公众号