当前位置: 首页 > news >正文

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

一、问题建模  

在线评论的细粒度情感分析对于深刻理解商家和用户、挖掘用户情感等方面有至关重要的价值,并且在互联网行业有极其广泛的应用,主要用于个性化推荐、智能搜索、产品反馈、业务安全等。此博文,共包含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 frequencyword_freq.update(list(seg_list))# Create word mapwords = [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>'] = 0word_map['<start>'] = 1word_map['<end>'] = 2word_map['<unk>'] = 3print('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文库

相关文章:

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

一、问题建模 在线评论的细粒度情感分析对于深刻理解商家和用户、挖掘用户情感等方面有至关重要的价值&#xff0c;并且在互联网行业有极其广泛的应用&#xff0c;主要用于个性化推荐、智能搜索、产品反馈、业务安全等。此博文&#xff0c;共包含6大类20个细粒度要素的情感倾…...

【C 数据结构】线性表

文章目录 【 1. 线性表 】【 2. 顺序存储结构、链式存储结构 】【 3. 前驱、后继 】 【 1. 线性表 】 线性表&#xff0c;全名为线性存储结构&#xff0c;线性表结构存储的数据往往是可以依次排列的&#xff08;不考虑数值大小顺序&#xff09;。 例如&#xff0c;存储类似 {1…...

C++初级----list(STL)

1、 list介绍 1.1、 list介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 1. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一…...

web安全学习笔记(9)

记一下第十三课的内容。 准备工作&#xff1a;在根目录下创建template目录&#xff0c;将login.html放入其中&#xff0c;在该目录下新建一个reg.html。在根目录下创建一个function.php 一、函数声明与传参 PHP中的函数定义和其他语言基本上是相同的。我们编辑function.php …...

【Python-基础】字符串合集

字符串格式化 f # 例如: # f{train_path}/{f}: 将train_path字符串和f字符串结合 # f{root}.csv:将root字符串和.csv字符串结合判断字符串是否以…结尾 root.endswith(".csv") # True未待完续…...

Scala之List

列表 不可变列表(List) 在Scala中&#xff0c;通过List来定义不可变列表&#xff0c;需要注意的是&#xff0c;List本身是一个抽象类&#xff0c;所以并不能直接使用List来构建对象&#xff0c;需要使用它的伴生对象来构建 package com.fesco.listimport scala.::object ListD…...

Springboot+Vue项目-基于Java+MySQL的在线视频教育平台系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…...

Java IO流-字节流

简介 IO流的输入与输出&#xff0c;都在站在内存的角度来看的&#xff0c;因为毕竟是和内促你打交道的嘛&#xff01; 分类 IO流是可以根据方向&#xff0c;或者最小单位进行划分的 上述两两结合一下&#xff0c;就得到四种大的分类 IO流的继承体系 字节输入流InputStream 创建…...

第十五届蓝桥杯复盘python大学A组——试题B 召唤数学精灵

按照正常思路解决&#xff0c;由于累乘消耗大量时间&#xff0c;因此这不是一个明智的解决方案。 这段代码执行速度非常慢的原因在于它试图计算非常大的数的阶乘&#xff08;累乘&#xff09;&#xff0c;并且对于每一个i的值都执行这个计算。阶乘的增长是极其迅速的&#xff…...

网络通信——常见结构及强联网游戏和弱联网游戏区别

声明&#xff1a;本文为个人笔记&#xff0c;用于学习研究使用非商用&#xff0c;内容为个人研究及综合整理所得&#xff0c;若有违规&#xff0c;请联系&#xff0c;违规必改。 网络通信——常见结构及强联网游戏和弱联网游戏区别 文章目录 网络通信——常见结构及强联网游戏和…...

如何安装PyFluent

0.什么是PyFluent? 官方介绍如下&#xff1a; PyFluent 是 PyAnsys 生态系统的一部分&#xff0c; 允许您在所选的 Python 环境中结合使用 Fluent 与其他 PyAnsys 库和外部 Python 库一起使用。 PyFluent 实现了客户端-服务器体系结构。它使用谷歌遥控器 过程调用或 gRPC 接…...

Qt 2 QMapQHashQVector类实例

1. QMap // 1:QMap的使用// 创建一个QMap 实例 key 为 QString value 为 intQMap<QString,int> Grade;// 插入方式有两种插入方式// 1.map[key] valueGrade["语文"] 90;Grade["数学"] 120;// 2.map.insert(key,value);Grade.insert("英语&qu…...

使用Git将文件夹上传到Github以及使用Git LFS上传大文件

使用Git将文件夹上传到Github以及使用Git LFS上传大文件...

1.SCI各模块

1.学会“抄” 写论文&#xff0c;一定要学会“抄”&#xff01;这样才能事半功倍&#xff0c;尤其是对于初次写作的新手&#xff0c;否则写作过程一定会让你痛不欲生&#xff0c;而且写出来的东西就是一坨shi&#xff0c;不仅折磨自己&#xff0c;也折磨导师。 写论文与建大楼…...

记录shell编程中$1,$@等符号的含义

笔者最近老是遇到shell中的$相关的题目&#xff0c;于是打算写篇文章记录一下。考虑到并没有特别多需要解释的内容&#xff0c;所以并不会进行介绍&#xff0c;上图上表上代码&#xff0c;让机器说话&#xff0c;machine always right test.sh #/bin/bash echo $# $# echo …...

单链表的应用

文章目录 目录1. 单链表经典算法OJ题目1.1 [移除链表元素](https://leetcode.cn/problems/remove-linked-list-elements/description/)1.2 [链表的中间节点](https://leetcode.cn/problems/middle-of-the-linked-list/description/)1.3 [反转链表](https://leetcode.cn/problem…...

手机副业赚钱秘籍:让你的手机变成赚钱利器

当今社会&#xff0c;智能手机已然成为我们生活不可或缺的一部分。随着技术的飞速进步&#xff0c;手机不再仅仅是通讯工具&#xff0c;而是化身为生活伴侣与工作助手。在这个信息爆炸的时代&#xff0c;我们时常会被一种焦虑感所困扰&#xff1a;如何能让手机超越消磨时光的定…...

(二十七)Flask之数据库连接池DBUtils库

目录: 每篇前言:DBUtils库模式一(底层使用threading.local实现):模式二:Flask中使用方式一:直接将DBUtils初始化放到settings.py文件中方式二:从utils文件夹中导入脚本使用DBUtils代码demo:每篇前言: 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心…...

FewShotPromptTemplate和SemanticSimilarityExampleSelector的学习

FewShotPromptTemplate 和 SemanticSimilarityExampleSelector 是在少样本学习&#xff08;FewShot Learning&#xff09;场景中常用的两种技术&#xff0c;它们在提高模型泛化能力和减少对大量标注数据的依赖方面扮演着重要角色。 下面我会解释它们之间的关系&#xff1a; F…...

【保姆级】2024年OnlyFans订阅指南

OnlyFans是一个独特的社交媒体平台&#xff0c;它为创作者和粉丝提供了一个互动交流的空间。通过这个平台&#xff0c;创作者可以分享他们的独家内容&#xff0c;而粉丝则可以通过订阅来支持和享受这些内容。如果你对OnlyFans感兴趣&#xff0c;并希望成为其中的一员&#xff0…...

深入理解JVM中的G1垃圾收集器原理、过程和参数配置

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;垃圾收集&#xff08;GC&#xff09;是一个自动管理内存的过程&#xff…...

VUE3 + Elementui-Plus 之 树形组件el-tree 一键展开(收起);一键全选(不全选)

需求&#xff1a; 产品要求权限树形结构添加外部复选框进行全部展开或收起&#xff1b;全选或不全选。 实现步骤&#xff1a; tree组件部分&#xff1a; <div class"role-handle"><div>权限选择(可多选)</div><div><el-checkbox v-mode…...

【Godot4自学手册】第三十七节钥匙控制开门

有些日子没有更新了&#xff0c;实在是琐事缠身啊&#xff0c;今天继续开始自学Godot4&#xff0c;继续完善地宫相关功能&#xff0c;在地宫中安装第二道门&#xff0c;只有主人公拿到钥匙才能开启这扇门&#xff0c;所以我们在合适位置放置一个宝箱&#xff0c;主人公开启宝箱…...

GitHub repository - Pulse - Contributors - Network

GitHub repository - Pulse - Contributors - Network 1. Pulse2. Contributors3. NetworkReferences 1. Pulse 显示该仓库最近的活动信息。该仓库中的软件是无人问津&#xff0c;还是在火热地开发之中&#xff0c;从这里可以一目了然。 2. Contributors 显示对该仓库进行过…...

RocketMQ 10 面试题FAQ

RocketMQ 面试FAQ 说说你们公司线上生产环境用的是什么消息中间件? 为什么要使用MQ&#xff1f; 因为项目比较大&#xff0c;做了分布式系统&#xff0c;所有远程服务调用请求都是同步执行经常出问题&#xff0c;所以引入了mq 解耦 系统耦合度降低&#xff0c;没有强依赖…...

【Spring进阶系列丨第十篇】基于注解的面向切面编程(AOP)详解

文章目录 一、基于注解的AOP1、配置Spring环境2、在beans.xml文件中定义AOP约束3、定义记录日志的类【切面】4、定义Bean5、在主配置文件中配置扫描的包6、在主配置文件中去开启AOP的注解支持7、测试8、优化改进9、总结 一、基于注解的AOP 1、配置Spring环境 <dependencie…...

Leetcode 152. 乘积最大子数组和Leetcode 162. 寻找峰值

文章目录 Leetcode 152. 乘积最大子数组题目描述C语言题解和思路解题思路 Leetcode 162. 寻找峰值题目描述C语言题解和思路解题思路 Leetcode 152. 乘积最大子数组 题目描述 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续子数组&#xff08;该子数组中…...

项目实战之网络电话本之发送邮件名片和导出word版个人信息

1、项目介绍 1&#xff09;项目功能 用户管理&#xff1a;分为管理员、和普通用户&#xff0c;设置不同用户的权限 电话本信息管理&#xff1a;支持管理员和普通用户对电话本的信息进行增删改操作&#xff0c;模糊查询&#xff08;根据姓名、地址、单位&#xff09; 文件批…...

前端面试问题汇总 - HTTP篇

1. 登录拦截如何实现&#xff1f; 在前端&#xff0c;可以拦截所有需要登录的请求&#xff0c;如果用户未登录或者登录过期&#xff0c;则跳转到登录页面。 2. http 缓存有哪些&#xff1f; 强缓存&#xff1a; 强缓存是指在客户端请求资源时&#xff0c;先检查本地是否存在缓存…...

Java的IO流

Day35 Java的IO流 概念 Java的IO流是用来处理输入和输出操作的机制&#xff0c;用于在程序和外部数据源&#xff08;如文件、网络连接、内存等&#xff09;之间进行数据传输。Java的IO流主要分为字节流和字符流两种类型&#xff0c;每种类型又分为输入流和输出流。 理解&#…...

教育网站建站需求/宁波seo关键词优化报价

P15 JSplitPane 分隔面板1.概述2.代码实例3.效果演示系统&#xff1a;Win10 Java&#xff1a;1.8.0_333 IDEA&#xff1a;2020.3.4 Gitee&#xff1a;https://gitee.com/lijinjiang01/JavaSwing 1.概述 JSplitPane&#xff1a;分隔面板&#xff0c;用于分隔两个&#xff08;只…...

六灶网站建设/自己做seo网站推广

第一、打开&#xff23;&#xff2d;&#xff24;窗口右击 第二第三、重启电脑。...

用ps切片做网站/淘宝培训

Ubuntu Linux系统环境变量配置文件&#xff1a; /etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。 /etc /environment : 在登录时操作系统使用的第二个文件,系统在读取你自己的profile前…...

网站建设导向明确/seo模板建站

查看服务器的内存和交换区 内容精选换一换本章节适用于MRS 3.x之前版本。Loader支持以下多种连接&#xff0c;每种连接的配置介绍可根据本章节内容了解。obs-connectorgeneric-jdbc-connectorftp-connector或sftp-connectorhbase-connector、hdfs-connector或hive-connectorOBS…...

石家庄鹿泉网站建设/好用的网站推荐

我想做一个随机的出现的网页&#xff0c;可是用rand()就是不行&#xff0c;听说要初始化随机数&#xff0c;可是怎么初始化&#xff0c;请不吝赐教&#xff0c;谢谢&#xff01; //第一步:初始化种子 $seedarray microtime(); $seedstr split(" ",$seedarray,5); $se…...

网站后台分析图怎么做/客户管理系统

Linux磁盘管理学习 df&#xff08;列出文件系统整体的磁盘使用量) du&#xff08;检查磁盘空间使用量!) 挂载我们的一些本地磁盘或文件 挂载:mount 卸载 : umount -f [挂载位置] 强制卸载 除了这个之外&#xff0c;以后我们安装了JDK&#xff0c;其实可以使用java中的一些命令…...