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

【机器学习300问】129、RNN如何在情感分析任务中起作用的?

        情感分析是自然语言处理(NLP)领域的一个重要分支,它的目标是自动检测和提取出非结构化文本数据中的主观信息(比如:情绪、意见、评价等)


一、情感分析任务案例

        分析电商产品评论的情感倾向(三分类),自动分析顾客提交的产品评论,以了解他们对某个商品的整体满意度(积极、消极、中性)。

举例:“我刚收到这款智能手表,外观设计真的很时尚,电池续航能力也超出我的预期,非常满意!但是,说明书有点难懂,花了我不少时间设置”。

情感分析目标:系统需要判断这条评论整体上是积极的、消极的还是中性的。根据内容,尽管有小部分消极反馈(关于说明书),但大部分评价是正面的,因此系统可能会将其分类为“积极”。

二、 简单情感分类模型

(1)简单情感分类模型

        简单情感分类模型(simple sentiment classification model)通常选择经典的机器学习算法,如逻辑回归(Logistic Regression)、朴素贝叶斯(Naive Bayes)或支持向量机(SVM)等。这些模型相对容易理解和实现,对于小型或中等规模数据集表现良好。

(2)模型结构

以s=“dessert is excellent”为例,得到一个范围是1到5分的打分结果。词嵌入矩阵中有10000个词,300个特征。

简单情感分类模型的结构

        模型使用词嵌入和softmax分类器将评论映射到星级评分。通过对单词特征向量求平均或求和,可以得到评论的表示形式,并输入到分类器中进行预测。然而,该算法忽略了词序,可能导致对含有多个相同词的句子进行不准确的评分。

(3)简单情感分类模型存在的不足 

        比如,一个句子是:"Completely lacking in good taste, good service, and good ambiance." 即使这个句子表达了负面情绪,其中包含了多个正面词 "good",但实际上是一个负面评价。如果模型忽略词序,可能会错误地将其分类为正面评价。


 三、 使用RNN进行情感分析

        正因为才情感分析中词序很重要,所以循环神经网络(RNN)因其能够处理序列数据的特性,在处理像这样的复杂情感分析任务时表现出色。

(1)模型结构

        对于RNN,首先对文本s="Completely lacking in good taste, good service, and good ambiance."进行清洗、分词,并将文本表示为一系列词嵌入的序列。这意味着每个评论将转换为一系列向量,每个向量对应评论中的一个词。序列的顺序反映了原文中的词序。 

用RNN进行情感分类的模型架构

        在每个时间步,RNN单元接收当前词的嵌入向量和前一时间步的隐藏状态作为输入,然后更新其隐藏状态。这一过程重复进行,直到序列的末尾。隐藏状态在时间轴上的传播能够捕获文本的上下文依赖和词序信息。

(2)提高模型性能的关键

使用BRNN

        标准RNN只考虑了从前到后的信息流,而双向RNN同时考虑了从前往后和从后往前的信息,这有助于模型更好地理解整个句子的语境,特别适用于情感分析中,因为情感往往依赖于句子的整体上下文。

引入注意力机制

        在RNN或其变种(如LSTM、GRU)的基础上添加注意力机制,可以让模型动态地聚焦于输入序列中对情感判断最为关键的部分,而非均匀对待每一个时间步的输出。这对于长文本或者重点信息分布不均的句子尤为重要。

相关文章:

  • 信息技术课如何禁止学生玩游戏
  • 【Gradio】Custom Components | Gradio组件关键概念 后端
  • 9.2JavaEE——JDBCTemplate的常用方法(一)excute()方法
  • GenICam标准(三)
  • 【全开源】沃德会务会议管理系统(FastAdmin+ThinkPHP+Uniapp)
  • 自然语言NLP的基础处理
  • VBA学习(13):获取多层文件夹内文件名并建立超链接
  • Rabbit MQ和Kafka的区别
  • docker入门配置
  • 绝望的C#:TreeView为什么双击自动展开、折叠?双击事件的参数根本不是双击位置
  • 深入理解Vue3.js响应式系统设计之调度执行
  • FlinkCDC介绍及使用
  • 【论文速读】|对BusyBox进行模糊测试:利用大语言模型和崩溃重用挖掘嵌入式系统中的漏洞
  • Ubuntu 22.04.1 安装ubuntu有道词典时错误发生
  • 2352.相等行列对
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Linux gpio口使用方法
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • python学习笔记 - ThreadLocal
  • python学习笔记-类对象的信息
  • 初识 beanstalkd
  • 对象管理器(defineProperty)学习笔记
  • 关于Java中分层中遇到的一些问题
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 如何解决微信端直接跳WAP端
  • 试着探索高并发下的系统架构面貌
  • 网页视频流m3u8/ts视频下载
  • 为视图添加丝滑的水波纹
  • 小而合理的前端理论:rscss和rsjs
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • raise 与 raise ... from 的区别
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • !!java web学习笔记(一到五)
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (done) 声音信号处理基础知识(4) (Understanding Audio Signals for ML)
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十)T检验-第一部分
  • (四)linux文件内容查看
  • (四)事件系统
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (一)Thymeleaf用法——Thymeleaf简介
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .CSS-hover 的解释
  • .NET Core 2.1路线图
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net的socket示例
  • .NET上SQLite的连接