基于PaddleHub进行情感分析
情感倾向分析(Sentiment Classification,简称Senta)针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度,能够帮助企业理解用户消费习惯、分析热点话题和危机舆情监控,为企业提供有利的决策支持。
Senta是百度NLP开放的中文情感分析模型,可以用于进行中文句子的情感分析,输出结果为{正向/中性/负向}中的一个
准备数据集
撰写本文时,站长采集了《云边有个小卖铺》豆瓣书评来进行测试
安装第三方工具包
pip install paddlepaddle(推荐安装 1.4.0版本以上)
pip install paddlehub
导入paddlehub并进行测试
# 导入模块
import paddlehub as hub
# 加载模型
senta = hub.Module(name='senta_lstm')
# 准备句子
result=[]
with open('H://douban.txt','r',encoding='utf-8') as f:
for line in f:
result.append(line.strip('\n'))
# 情绪识别
results = senta.sentiment_classify(data={"text":result})
# 输出识别结果
for result in results:
print(result)
模型的选择与释义
Senta开源了一系列模型,供用户选择:
- BOW(Bag Of Words)模型,是一个非序列模型,使用基本的全连接结构
- CNN(Convolutional Neural Networks),是一个基础的序列模型,能处理变长序列输入,提取局部区域之内的特征
- GRU(Gated Recurrent Unit),序列模型,能够较好地解决序列文本中长距离依赖的问题
- LSTM(Long Short Term Memory),序列模型,能够较好地解决序列文本中长距离依赖的问题
- Bi-LSTM(Bidirectional Long Short Term Memory),序列模型,采用双向LSTM结构,更好地捕获句子中的语义特征
模型名 | 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_bilstm') |
预训练模型Senta完成情感分析预测
安装第三方工具包
pip install xlsxwriter
代码编写测试
import os
import paddlehub as hub
import xlsxwriter
# 这个文件就是你的数据集文件,如果名字不一样只修改这里即可,数据集格式上方已经给出。
txtpath = "test.txt"
# 这里就是预测完输出的文件,就是把结果输出到哪里,文件名字自己随意修改。
outtxtpath = 'output.xlsx'
# 将数据集文件转换为list格式
with open(txtpath, 'r') as f:
test_text = []
for line in f:
test_text.append(line.strip())
print(test_text)
# 加载预训练模型
senta = hub.Module(name="senta_bilstm")
# 将得到的数据list进行预测
input_dict = {"text": test_text}
results = senta.sentiment_classify(data=input_dict)
# 将输出结果写入文件
workbook = xlsxwriter.Workbook(outtxtpath) # 建立文件
worksheet = workbook.add_worksheet()
id = 0
for result in results:
print(result['text'] + '\t' + result['sentiment_key'])
worksheet.write(id,0,result['text'])
worksheet.write(id,1,result['sentiment_key'])
id+=1
workbook.close()
print('结果已经输入到' + outtxtpath + '文件')
暂无评论