情感倾向分析(Sentiment Classification,简称Senta)针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度,能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有利的决策支持。(此其实就是一个二分类问题)
一、定义待预测数据
以”这家餐厅很不错“,”这部电影真的很差“为例,展示如何如何使用Senta进行情感分析。
安装paddkehub:
pip install paddlehub==1.6.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
建立预测要求形式:
test_text = ["这家餐厅很好", "这部电影真的很差"]
预览形式:
cat test.txt
若是文档,用此代码即可变成目标列表形式(将文件内容存成list,list中每个元素是待预测句子):
with open("test.txt", 'r') as f:
test_text = []
for line in f:
test_text.append(line.strip())
print(test_text)
二、加载预训练模型
Senta开源了一系列:
BOW模型
CNN模型
GRU模型
LSTM模型
Bi-LSTM模型
以Bi-LSTM为例:
import paddlehub as hub
senta = hub.Module(name="senta_bilstm")
如果想尝试其他模型,只需要更换Module中的name
参数即可.
模型名 | PaddleHub Module |
---|---|
BOW | hub.Module(name='senta_bow') |
CNN | hub.Module(name='senta_cnn') |
GRU | hub.Module(name='senta_gru') |
LSTM | hub.Module(name='senta_lstm') |
Bi-LSTM | hub.Module(name='senta_bistm') |
三、预测
input_dict = {"text": test_text}
results = senta.sentiment_classify(data=input_dict)
for result in results:
print(result)
输出结果示例:
{‘text’: ‘这家餐厅很好吃’, ‘sentiment_label’: 1, ‘sentiment_key’: ‘positive’, ‘positive_probs’: 0.9407, ‘negative_probs’: 0.0593}
{‘text’: ‘这部电影真的很差劲’, ‘sentiment_label’: 0, ‘sentiment_key’: ‘negative’, ‘positive_probs’: 0.02, ‘negative_probs’: 0.98}
{‘text’: ‘我真的很喜欢你’, ‘sentiment_label’: 1, ‘sentiment_key’: ‘positive’, ‘positive_probs’: 0.9831, ‘negative_probs’: 0.0169}
{‘text’: ‘你讨厌我吗’, ‘sentiment_label’: 0, ‘sentiment_key’: ‘negative’, ‘positive_probs’: 0.0242, ‘negative_probs’: 0.9758}
{‘text’: ‘哈哈哈’, ‘sentiment_label’: 1, ‘sentiment_key’: ‘positive’, ‘positive_probs’: 0.9536, ‘negative_probs’: 0.0464}
{‘text’: ‘嘿嘿嘿’, ‘sentiment_label’: 1, ‘sentiment_key’: ‘positive’, ‘positive_probs’: 0.9273, ‘negative_probs’: 0.0727}
{‘text’: ‘您好,为啥我这个衣服刚到,扣子就掉了’, ‘sentiment_label’: 0, ‘sentiment_key’: ‘negative’, ‘positive_probs’: 0.1121, ‘negative_probs’: 0.8879}
其中输出参数表示:
sentiment_label:情绪标签
sentiment_key:情绪键
positive_probs:积极概率
negative_probs:消极概率