白色衬衫净少年 - NLP
type: channel
link: https://bscsjsn.com/tag/NLP/
items: 基于PaddleHub进行情感分析 / 预训练模型Senta完成情感分析预测

基于PaddleHub进行情感分析 / 预训练模型Senta完成情感分析预测
type: item
date: 2021-09-01T08:34:00+00:00
description: 基于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 + '文件')