【人人都是深度学习师】10行代码实现一个基于深度学习迁移学习的正负面情感分析功能
基础环境
基础环境安装见:PaddleHub安装教程
代码
senta_predict.py
import paddlehub as hub # 引入hub库
from typing import List
model_zoo_names = ["senta_lstm", "senta_gru", "senta_cnn", "senta_bow", "senta_bilstm", "ernie_skep_sentiment_Analysis", "emotion_detection_textcnn"] # 以指定模型名字的方式调用不同的情感分析模型 https://www.paddlepaddle.org.cn/hublist?filter=en_category&value=SentimentAnalysis
predict_ret_dict_list = []
def senta_predict(name : str = "senta_lstm", test_text : List[str] = ["这家餐厅很好吃", "这部电影真的很差劲"]) -> List[dict]:
senta = hub.Module(name=name)
if name == "ernie_skep_sentiment_Analysis":
return senta.predict_sentiment(texts=test_text, use_gpu=False)
elif name == "emotion_detection_textcnn":
return senta.emotion_classify(texts=test_text)
else:
return senta.sentiment_classify(texts=test_text) # 返回字典数组 [{'text': '这家餐厅很好吃', 'sentiment_label': 1, 'sentiment_key': 'positive', 'positive_probs': 0.9407, 'negative_probs': 0.0593}]
text = "这家餐厅很好吃" # 想进行情感识别的文本内容 "这家餐厅很好吃", "这部电影真的很差劲"
for name in model_zoo_names:
print(f"model name:{name} ", senta_predict(name, [text])[0])
运行结果:
综合7个模型的结果代码:
import numpy as np
positive_negative_probs_pair_list = [ (ret_dict["positive_probs"], ret_dict["negative_probs"]) for ret_dict in [(senta_predict(name, [text])[0]) for name in model_zoo_names]]
positive_probs_means = np.array([probs[0] for probs in positive_negative_probs_pair_list]).mean()
negative_probs_means = np.array([probs[1] for probs in positive_negative_probs_pair_list]).mean()
print(f"{text} 正面概率:{positive_probs_means} 负面概率:{negative_probs_means}")
执行结果:
这家餐厅很好吃 正面概率:0.8524851250239781 负面概率:0.06541486792457955
这里最终的结果有些问题,最后一个模型最终输出正负面的float值不是概率值,可能是没有做softmax,实际使用时需要相应处理下 。
分析
在调用这7个模型的地方 senta = hub.Module(name=name) 会自动下载相应的压缩包文件并解压,存放目录为:/root/.paddlehub/modules/ 大概一共有5GB多
执行过程截图
参考
https://www.paddlepaddle.org.cn/hublist?filter=en_category&value=SentimentAnalysis
————————————————
版权声明:本文为CSDN博主「机器爱智能」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jrckkyy/article/details/114597346