基于GRU实现评论文本情感分析

news2025/6/23 3:27:58

一、问题建模  

在线评论的细粒度情感分析对于深刻理解商家和用户、挖掘用户情感等方面有至关重要的价值,并且在互联网行业有极其广泛的应用,主要用于个性化推荐、智能搜索、产品反馈、业务安全等。此博文,共包含6大类20个细粒度要素的情感倾向。根据标注的细粒度要素的情感倾向建立算法模型,对用户评论文本进行情感挖掘。

问题建模

 解决方向

二、数据集

数据下载:用户评论文本数据集,csv格式资源-CSDN文库

 2.1数据集说明

数据集分为训练、验证、测试三部分。

数据集中的评价对象按照粒度不同划分为两个层次,层次一为粗粒度的评价对象,例如评论文本中涉及的服务、位置等要素;层次二为细粒度的情感对象,例如“服务”属性中的“服务人员态度”、“排队等候时间”等细粒度要素。评价对象的具体划分如下表所示:

细粒度维度要素
层次一(The first layer)层次二(The second layer)情感倾向值(Sentimental labels)含义(Meaning)
位置(location)交通是否便利(traffic convenience)

四种状态:正向、中性、负向、未提及。使用[1,0,-1,-2]四个值对情感倾向进行描述:

正面情感(Positive)为1

中性情感(Neutral)为0

负面情感(Negative)为-1

情感倾向未提及(Not mentioned)为-2

距离商圈远近(distance from business district)
是否容易寻找(easy to find)
服务(service)排队等候时间(wait time)
服务人员态度(waiter’s attitude)
是否容易停车(parking convenience)
点菜/上菜速度(serving speed)
价格(price)价格水平(price level)
性价比(cost-effective)
折扣力度(discount)
环境(environment)装修情况(decoration)
嘈杂情况(noise)
就餐空间(space)
卫生情况(cleaness)
菜品(dish)分量(portion)
口感(taste)
外观(look)
推荐程度(recommendation)
其他(others)本次消费感受(overall experience)
再次消费的意愿(willing to consume again)

2.2举例分析

某条评论如下

“味道不错的面馆,性价比也相当之高,分量很足~女生吃小份,胃口小的,可能吃不完呢。环境在面馆来说算是好的,至少看上去堂子很亮,也比较干净,一般苍蝇馆子还是比不上这个卫生状况的。中午饭点的时候,人很多,人行道上也是要坐满的,隔壁的冒菜馆子,据说是一家,有时候也会开放出来坐吃面的人。“


对该条评论进行6大类20个的细粒度要素的情感倾向进行预测,预测结果使用[-2,-1,0,1]四个值进行描述,返回的结果如下:

分析结果
层次一(The first layer)层次二(The second layer)标注 (Label)
位置(location)交通是否便利(traffic convenience)-2
距离商圈远近(distance from business district)-2
是否容易寻找(easy to find)-2
服务(service)排队等候时间(wait time)-2
服务人员态度(waiter’s attitude)-2
是否容易停车(parking convenience)-2
点菜/上菜速度(serving speed)-2
价格(price)价格水平(price level)-2
性价比(cost-effective)1
折扣力度(discount)-2
环境(environment)装修情况(decoration)1
嘈杂情况(noise)-2
就餐空间(space)-2
卫生情况(cleaness)1
菜品(dish)分量(portion)1
口感(taste)1
外观(look)-2
推荐程度(recommendation)-2
其他(others)本次消费感受(overall experience)1
再次消费的意愿(willing to consume again)-2

三、算法选择

3.1问题

循环神经网络(RNN,Recurrent Neural Network)受到短期记忆的影响。如果一个序列足够长,就很难将早期产生的信息带到后续的步骤中来。因此,如果试图处理一段文字来做预测,RNN可能会从一开始就遗漏了重要信息。 在反向传播过程中,循环神经网络会受到梯度消失问题的影响。梯度是用于更新神经网络权重的数值。梯度消失问题是指当梯度通过时间反向传播时,梯度会缩小。如果一个梯度值变得非常小,它就不会有太多的学习贡献。因此,在循环神经网络中,获得小梯度更新的层会停止学习。这些通常是早期的层。因此,在较长序列中,RNN会忘记这些不学习的层,就像有一个短期记忆。

3.2解决办法

LSTM(Long Short-Term Memory)和GRU(Gated Recurrent Unit)的诞生是为了解决短期记忆问题。它们利用具有内部机制的门控来调节信息的流动。

3.3举例

假设你正在看网上的评论,决定是否想买一件衣服。你首先阅读评论,然后确定是否有人认为它是好还是坏。

当你阅读评论时,你的大脑下意识地只记住了重要的关键词。你会对像“惊人” 和“完美”这样的词印象深刻。你对“这个”、“给了”、“所有”、“应该”等词不太在意。如果第二天有朋友问你评论说了什么,你可能不会一字不落地记住。但你可能会记得主要内容,如“一定会再次购买”,其他的词则会从记忆中消失了。

这基本上就是LSTM或GRU的作用。它可以学习只保留相关信息来进行预测,而忘记不相关的数据。在这种情况下,你记住的那些话让你判断它是好的。

四、模型建立

4.1流程

1. 数据预处理: 首先需要对原始数据进行预处理,包括文本清洗、分词、去除停用词等操作。预处理的目标是将文本转化为适合模型输入的形式。

2. 特征提取: 接下来,从经过预处理的文本中提取特征,用于表示文本内容。常用的特征提取方法包括词袋模型、TF-IDF、word2vec、BERT等。这些方法可以将文本转化为向量表示,能够保留词语的语义和上下文信息。然后,模型逐一处理向量序列。

3. 构建分类模型: 在特征提取完成后,需要选择合适的算法或模型来进行情感分类。常用的分类模型包括朴素贝叶斯、支持向量机(SVM)、逻辑回归、深度学习模型(如卷积神经网络、循环神经网络、Transformer等)。这些模型能够学习从特征到情感类别的映射关系。

4. 模型应用: 训练好的模型可以用于对新的未标注数据进行情感分类。对于未知的文本数据,可以使用训练好的模型预测其情感类别。

4.2代码实现

4.2.1版本

torch==1.11.0
torchaudio==0.11.0
torchinfo==1.8.0
torchvision==0.12.0

- jieba==0.42.1

4.2.2建立词典

def build_wordmap(contents):
    word_freq = Counter()

    for sentence in tqdm(contents):
        seg_list = jieba.cut(sentence.strip())
        # Update word frequency
        word_freq.update(list(seg_list))

    # Create word map
    words = [w for w in word_freq.keys() if word_freq[w] > min_word_freq]
    word_map = {k: v + 4 for v, k in enumerate(words)}
    word_map['<pad>'] = 0
    word_map['<start>'] = 1
    word_map['<end>'] = 2
    word_map['<unk>'] = 3
    print('len(word_map): ' + str(len(word_map)))
    print(words[:10])

    with open('data/WORDMAP.json', 'w') as file:
        json.dump(word_map, file, indent=4)

4.2.3建立模型

全部代码:基于GRU实现评论文本情感细粒度分析资源-CSDN文库


参考学习:

  • [Pytorch中文文档] 自动求导机制 - pytorch中文网
  • 情感分析:细粒度用户评论情感分析_细粒度情感分析资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM+Jsp+Mysql的弹幕视频网站

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

Edge扩展程序上架流程

代码基本同Chrome扩展&#xff0c;无需改动&#xff0c;具体可以参考文档说明 参考官方文档&#xff0c;注册开发者账号&#xff0c;遇到报错可以参考另一篇文章&#xff0c;Microsoft注册问题 注册完毕后&#xff0c;跳转到 developer dashboard&#xff0c;将左侧导航栏选项…

vue快速入门(十六)事件修饰符

注释很详细&#xff0c;直接上代码 上一篇 新增内容 事件修饰符之阻止冒泡事件修饰符之阻止默认行为 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdev…

数据结构速成--顺序表

由于是速成专题&#xff0c;因此内容不会十分全面&#xff0c;只会涵盖考试重点&#xff0c;各学校课程要求不同 &#xff0c;大家可以按照考纲复习&#xff0c;不全面的内容&#xff0c;可以看一下小编主页数据结构初阶的内容&#xff0c;找到对应专题详细学习一下。 目录 一…

蓝桥杯-单片机基础16——利用定时计数中断进行动态数码管的多窗口显示

综合查阅了网络上目前能找到的所有关于此技能的代码&#xff0c;最终找到了下述方式比较可靠&#xff0c;且可以自定义任意显示的数值。 传统采用延时函数的方式实现动态数码管扫描&#xff0c;在题目变复杂时效果总是会不佳&#xff0c;因此在省赛中有必要尝试采用定时计数器中…

ubuntu20挂载webdav

WebDAV 是个好东西&#xff0c;尤其是配个自己的 NAS 使用&#xff0c;熟悉以后就再也离不开它啦 sudo apt-get update sudo apt-get install davfs2 上下左右键可以切换到“是”选项 2.创建目录挂载点 sudo mkdir /mnt/webdav 3.配置 davfs2 编辑 davfs2.conf 文件以配置 da…

KKVIEW远程畅连远程控制对方手机

畅连远程控制对方手机&#xff1a;技术、安全与实用性探讨 随着科技的飞速发展&#xff0c;远程控制技术在多个领域得到了广泛应用。其中&#xff0c;手机远程控制作为一项新兴技术&#xff0c;受到了广泛关注。畅连远程控制作为其中的一种实现方式&#xff0c;为用户提供了便…

【IC前端虚拟项目】验证环境方案思路和文档组织

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 对于mvu的验证环境,从功能角度就可以分析出需要搭建哪些部分,再看一下mvu的周围环境哈: 很明显验证环境必然要包括几个部分: 1.模拟idu发送指令; 2.模拟ram/ddr读写数据; 3.rm模拟mvu的行为; …

【开源社区】openEuler、openGauss、openHiTLS、MindSpore

【开源社区】openEuler、openGauss、openHiTLS、MindSpore 写在最前面开源社区参与和贡献的一般方式开源技术的需求和贡献方向 openEuler 社区&#xff1a;开源系统官方网站官方介绍贡献攻略开源技术需求 openGauss 社区&#xff1a;开源数据库官方网站官方介绍贡献攻略开源技术…

Java Set基础篇

目录 前言一、常用Set1.1 Set1.1.1 特点 1.2 HashSet1.2.1 特点1.2.2 使用 1.3 TreeSet1.3.1 特点1.3.2 使用 1.4 LinkedHashSet1.4.1 特点1.4.2 使用 二、对比总结 目录 前言 一、常用Set 1.1 Set Set是一个继承自Collection的接口&#xff1a; public interface Set<…

Linux 用管道实现一个简易版的进程池

概念 进程池其实就是我们提前创建好一批进程&#xff0c; 当有任务的时候再将进程指派过去完成那个任务。 中间的这框框就是管道&#xff0c; 当父进程没有给子进程发送任务的时候&#xff0c; 子进程就会一直阻塞着&#xff0c; 于是就形成了这样的结构。 代码 #include &q…

如何在 YouTube、Medium、Twitter 和 Linkedin 上使用 ChatGPT 赚钱

人工智能SEO&#xff1a;未来内容优化的革命 介绍 在当今的数字时代&#xff0c;利用 ChatGPT 等人工智能工具已经成为在线内容创建和货币化领域的游戏规则改变者。 本指南探讨了如何在 YouTube、Medium、Twitter 和 Linkedin 等各种平台上有效使用 ChatGPT&#xff0c;不仅可以…

c 解数独(通用方法,适用于9×9 数独)

折腾了一周时间&#xff0c;终于搞定99数独通用方法 思路&#xff1a;1.生成每行空位的值&#xff0c;也就是1-9中除去非0的数。 2.用行&#xff0c;列&#xff0c;宫判断每行中每个空位的最小取值范围后再重新生成每行。 3.随机提取生成的9行&#xff0c;判断每列之和是否等…

SolidWorks Electrical图层管理器

SolidWorks Electrical中的图层是用来管理和控制不同类型的图形对象的显示和隐藏的工具。图层可以帮助用户更好地组织和管理电气设计中的不同元素&#xff0c;提高设计效率和可视化效果。 在SolidWorks Electrical中&#xff0c;用户可以创建多个图层&#xff0c;并为每个图层…

【C 数据结构】顺序表

文章目录 【 1. 基本原理 】【 2. 顺序表的初始化 】【 3. 顺序表 插入元素 】【 4. 顺序表 删除元素 】【 5. 顺序表 查找元素 】【 6. 顺序表 更改元素值 】【 7. 实例 】 【 1. 基本原理 】 顺序表&#xff0c;全名顺序存储结构&#xff0c;是线性表的一种。顺序表对数据的…

openssl3.2 - exp - zlib

文章目录 openssl3.2 - exp - zlib概述笔记命令行实现程序实现备注 - 压缩时无法base64压缩时无法带口令压缩实现 - 对buffer进行压缩和解压缩测试效果工程实现main.cppCOsslZlibBuffer.hCOsslZlibBuffer.cpp总结END openssl3.2 - exp - zlib 概述 客户端和服务端进行数据交换…

无人机低空数字摄影测量系统

一、 系统概述 系统完全基于IDL设计实现&#xff0c;包括界面布局到人机交互再到底层核心函数功能。整体设计框架基于数字摄影测量的专业处理流程&#xff0c;实现了数据输入、数据预处理、影像信息检测、空间定向、地形三维建模、专题信息提取、成果输出与更新等功能。同时为…

Android 10.0 系统设置语言和输入法菜单Launage语言列表增加支持多种英语语言功能

1.前言 在10.0的系统ROM产品定制化开发中,在系统中的语言和输入法菜单中,在添加语言的默认列表中对于同一类型的语言就可以 会出现一中语言,比如多种英语类型 就显示的不全,所以要求显示所有的英语类型,这样就需要了解语言列表的加载流程 然后加载所有的英语类型,接下来…

【深度学习】多层感知机与卷积神经网络解析

引言&#xff1a; 在人工智能的宏伟画卷中&#xff0c;深度学习如同一笔瑰丽而深邃的色彩&#xff0c;为这幅画增添了无限的生命力和潜能。作为支撑这一领域核心技术的基石&#xff0c;多层感知机&#xff08;MLP&#xff09;和卷积神经网络&#xff08;CNN&#xff09;在模仿人…

安全风险攻击面管理如何提升企业网络弹性?

从研究人员近些年的调查结果来看&#xff0c;威胁攻击者目前非常善于识别和利用最具有成本效益的网络入侵方法&#xff0c;这就凸显出了企业实施资产识别并了解其资产与整个资产相关的安全态势的迫切需要。 目前来看&#xff0c;为了在如此复杂的网络环境中受到最小程度上的网络…