项目链接

无意中测试了一下paddlehub的情感分析的(唯一的三分类模型)预训练模型emotion_detection_textcnn,发现英文的准确度好像没有中文高?

同一句话的中英文测试:

import paddlehub as hubmodule = hub.Module(name = "emotion_detection_textcnn")#模型加载
test_text = ["你真丑", "You're so ugly"]
input_dict = {"text": test_text} #文字输入
results = module.emotion_classify(data = input_dict) #预测结果for result in results:print(result['text'])print(result['emotion_label'])print(result['emotion_key'])probs_name = result['emotion_key'] + "_probs"#print(result['negative_probs'])#print(probs_name)print(result[probs_name])
#你真丑
#0
#negative
#0.9627
#You're so ugly
#1
#neutral
#0.9766

本来是贬义的句子被误判为中性~

Kaggle的Google Play数据集含有APP的评论信息(包含:“APP”:APP的名称,“Translated_Review”:用户评论(已预处理并翻译成英文),“Sentiment”:情感分为:积极/消极/中性,“Sentiment_Polarity”:情绪极性得分,“Sentiment_Subjectivity”:情绪主观性得分

这里通过该数据集测试一下预训练模型并对APP的评论信息加以分析。大致思路:筛选数据;将评论信息翻译为中文;通过预训练模型预测;与真实类别比较计算准确度(预测正确的个数 / 总的个数,测试了小部分~)

尝试了三种方法将英文翻译为中文(项目中都有,这里只说最终用的方法):通过道翻译,post请求要翻译的英文,获取对应的中文内容。

import requestsdef translate(word):# 有道词典 apiurl = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null'# 传输的参数,其中 i 为需要翻译的内容key = {'type': "AUTO",'i': word,"doctype": "json","version": "2.1","keyfrom": "fanyi.web","ue": "UTF-8","action": "FY_BY_CLICKBUTTON","typoResult": "true"}# key 这个字典为发送给有道词典服务器的内容response = requests.post(url, data=key)# 判断服务器是否相应成功if response.status_code == 200:# 然后相应的结果return response.textelse:print("有道词典调用失败")# 相应失败就返回空return Nonedef get_cn(repsonse):result = json.loads(repsonse)#print ("输入的词为:%s" % result['translateResult'][0][0]['src'])#print ("翻译结果为:%s" % result['translateResult'][0][0]['tgt'])return result['translateResult'][0][0]['tgt']

可先大致看一下评论情感极性分布(图在项目中有):发现最多的是“Positive”,然后是“Negative”,最后为Neutral。

大部分情绪极性评分大于零,意味总体的APP评论情绪偏向于积极!

3分类测试小部分:预处理去除评论和情感极性类别为空的行

#英文转中文
import timeen_to_cn = []
#translator = Translator(to_lang = "chinese")
for i in range(len(comments)):#translation = translator.translate(comments[i])word = comments[i] list_trans = translate(word)t = get_cn(list_trans)en_to_cn.append(t)if((i+1) % 20 == 0):print(i+1,t)time.sleep(0.5)

结果:

#20 神健康
#40 良好的健康食品。
#60 伟大的
#80 predibetic食物列表简单,我害怕。
#100 伟大作品尤其是杂货店
#120 我发现很多财富形式健康…
#140 十佳食品健康促进健康必不可少的长期健康的生活方式使习惯吃的食物促进身体健康。
#160 减肥不坏
#180 废话不工作
#200 良好的搜索工作实习

感觉翻译效果不太好,有强烈的预感结果不会很好~

module = hub.Module(name = "emotion_detection_textcnn")#模型加载
#comments,en_to_cn
test_text = en_to_cn
input_dict = {"text": test_text} #文字输入
results = module.emotion_classify(data = input_dict) #预测结果emotion_key = []
probs = []
for j in range(len(results)):probs_name = results[j]['emotion_key'] + "_probs"emotion_key.append(results[j]['emotion_key'])probs.append(results[j][probs_name])if( (j+1) % 20 == 0):print("第%d条有效评论"%(j+1))print(results[j]['text'])print(results[j]['emotion_label'])print(results[j]['emotion_key'])print(results[j][probs_name])

正确率:

right = 0
for i in range(len(f)):if(f[i] == emotion_key[i]):right += 1
print("正确率为{:.2f}%".format(right/len(f)*100))

果然很低:

#正确率为40.00%

正确率不是很高原因有多种:

  • 原有的翻译为en的评论信息不够完整(具体为单词不完整)
  • 评论信息 带有主观性(原始数据集的情感极性类别真的正确么?)
  • 英文翻译为汉语时不够准确(某道翻译准确?)

我还不太甘心,想继续测试一下二分类(积极消极),去除中性的情感类别:

!hub install senta_lstm==1.1.0
#此模型只能做二分类binary = app_comments_df[(app_comments_df['Sentiment'] == 'Positive') | (app_comments_df['Sentiment'] == 'Negative') ]
K1 = 500
b_comments = list(binary['Translated_Review'][:K1].values)
senta = hub.Module(name = "senta_lstm")
#test_text = ["这家餐厅很好吃", "这部电影真的很差劲"]
test_text = b_comments
input_dict = {"text": test_text}
results = senta.sentiment_classify(data = input_dict)
b_pred = []
for j in range(len(results)):probs_name = results[j]['sentiment_key'] + "_probs"b_pred.append(results[j]['sentiment_key'])#probs.append(results[j][probs_name])if( (j+1) % 20 == 0):print("第%d条有效评论"%(j+1))print(results[j]['text'])print(results[j]['sentiment_label'])print(results[j]['sentiment_key'])print(results[j][probs_name])

首先测试了未翻译前的正确率:

right1 = 0
for i in range(len(f1)):if (b_pred[i] == f1[i]):right1 += 1
print("未翻译前 二分类正确率为:{:.2f}%".format(right1 / len(f1) * 100))

结果显示:

#未翻译前 二分类正确率为:86.20%

然后实验翻译后模型的正确率:

right2 = 0
for i in range(len(f1)):if (preds1[i] == f1[i]):right2 += 1
print("翻译后 二分类正确率为:{:.2f}%".format(right2 / len(f1) * 100))
##
##
#翻译后 二分类正确率为:83.40%

正确率变低了,XSWL!!!

最后,如果你想知道某个APP的大致评价:

import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
a_name = '10 Best Foods for You'
#a_name = app_name[2]
pinjia = app_comments_df[app_comments_df['App'] == a_name]['Sentiment'].value_counts()#.plot(kind = 'pie')
plt.pie(pinjia.values, labels = pinjia.index, labeldistance = 1.1, autopct = '%3.1f%%', shadow = True,startangle = 90, pctdistance = 0.6)
plt.title('Sentiment of APP: ' + a_name)
plt.show()

图像:

此APP评价比较好~

【PaddleHub创意赛】APP评论情感分析相关推荐

  1. (记录)PaddleHub创意赛:AI人像抠图及图像合成

    文章目录 PaddleHub创意赛:AI人像抠图及图像合成 一.安装环境(这里面有几个坑) 二.接下来就``开始P图 1. 引入包 2. 加载预训练模型(挺厉害的不得不说) 3. 图像合成 Paddl ...

  2. AI Challenger 2018:细粒度用户评论情感分析冠军思路总结

    2018年8月-12月,由美团点评.创新工场.搜狗.美图联合主办的"AI Challenger 2018全球AI挑战赛"历经三个多月的激烈角逐,冠军团队从来自全球81个国家.100 ...

  3. 基于用户评论情感分析详细设计与技术实现

    基于用户评论情感分析详细设计与技术实现 文章目录 基于用户评论情感分析详细设计与技术实现 前言 一.技术架构 二.分析服务器构建 1.1 创建flask项目 1.2 编写数据库连接脚本,获取用户评论数 ...

  4. Pytorch+Text-CNN+Word2vec+电影评论情感分析实战

    文章目录 0.前言 1.电影评论数据集 2.数据读取 3.数据预处理 4.准备训练和测试集 5.加载词向量模型Word2vec 6.定义网络 7.训练网络 8.测试网络和可视化 9.总结 0.前言 很 ...

  5. 自然语言处理NLP-100例 | 第二篇:在线课程评论情感分析-本科毕设实战案例

    大家好,我是K同学啊~ 春去秋来,时间就这样嘀嗒嘀嗒的过去,不知道大家的毕设做得怎么样了呢 K同学就今天和大家分享一篇关于在线课程评论情感分析的实战案例,帮助大家找找灵感. 数据用的是一份公开的在线课 ...

  6. 【自然语言处理(NLP)】基于FNN网络的电影评论情感分析

    [自然语言处理(NLP)]基于FNN网络的电影评论情感分析 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建 ...

  7. 商品评论情感分析——基于商品评论建立的产品综合评价模型(1)

    商品评论情感分析--基于用户评论建立的产品综合评价模型(1) 1.背景 1.1问题分析 2.数据预处理 2.1删除无关数据 2.2文本去重 3.情感分析 4.LDA主题模型 4.1评论文本分词 4.2 ...

  8. python 获取csv的列数_《极限挑战》弹幕及评论情感分析(Python)

    一.数据说明 本次实验用到的数据是前三季<极限挑战>第一期视频的评论数据和弹幕数据. 二.数据来源 本次实验所有数据均从bilibili爬取和处理得到. (1)视频来源 评论和弹幕数据来源 ...

  9. 朴素贝叶斯应用案例 —— 商品评论情感分析

    商品评论情感分析 1 案例介绍 2 流程实现 2.1 获取数据集 2.2 数据基本处理 2.3 模型训练 2.4 模型评估 1 案例介绍 本案例提供了一个13条商品评价的小型数据集,通过对商品评价内容 ...

最新文章

  1. java线程学习-Thread.currentTread().getName()和this.getName()的区别
  2. 闭眼入!采集 Nginx 日志的几种方式!
  3. Chrome的一点小问题
  4. 字符串操作 c语言,C语言字符串操作(示例代码)
  5. Android 开源框架Universal-Image-Loader学习
  6. Windows Server 2016之RDS配置证书
  7. 前端学习(477):前端简介1
  8. mysql查询各类课程的总学分_基于jsp+mysql的JSP学生选课信息管理系统
  9. C/C++—— #include“stdafx.h”详解
  10. Codeforces.1129E.Legendary Tree(交互 二分)
  11. pomelo的session
  12. Linux strace命令 一
  13. html中设置锚点定位的几种常见方法
  14. matlab菲涅尔全息图再现,离轴菲涅尔全息图的数字再现
  15. 4.4 输入法图片 android,支持安卓4.4!搜狗输入法5.1新版发布
  16. js 截取长图(html2canvas),并下载
  17. java 实现pdf 转图片_java实现pdf转图片pdf
  18. java jks 转pfx_JKS、BKS、PFX证书格式之间转换
  19. Jpress部署教程
  20. mysql 5.6 免安装版_mysql 5.6.15的免安装版 安装

热门文章

  1. 人脸识别系统代码C语言,利用摄像头动态人脸识别的系统,VC6.0编写,源代码齐全...
  2. 理解SOA的松散耦合与紧密耦合
  3. 同步(单时钟)、异步(双时钟)FIFO的Verilog HDL实现(含Testbench仿真代码)
  4. MariaDB-点滴
  5. OSChina 愚人节乱弹 ——愚人节新技能!快来点满整蛊技能树!
  6. pkg-config: exec: “pkg-config“: executable file not found in $PATH
  7. 解构VR:虚拟现实技术如何在情感与道德上影响社会?
  8. 作者写书自己出版的一个讨论
  9. 最大似然估计法(MLE)
  10. 阿里员工网络炫富:工作七年买了三套房