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

《昇思25天学习打卡营第23天|RNN实现情感分类》

使用RNN进行情感分类:基于IMDB数据集的LSTM应用

引言

情感分析是自然语言处理(NLP)中的一个重要应用,广泛用于电影评论、社交媒体等文本数据的情感分类任务。本文将介绍如何使用递归神经网络(RNN)实现情感分类,重点讲解LSTM(长短期记忆网络)如何解决梯度消失问题,并以IMDB电影评论数据集为例。
实现如下的效果:

输入: This film is terrible
正确标签: Negative
预测标签: Negative

输入: This film is great
正确标签: Positive
预测标签: Positive

RNN简介

递归神经网络(RNN)是一种用于处理序列数据的神经网络,它通过隐藏状态(hidden state)将前一个时间步的信息传递到下一个时间步,从而捕捉序列中的依赖关系。尽管RNN在理论上可以处理任意长度的序列,但在实践中往往会遇到梯度消失和梯度爆炸问题,特别是在处理长序列时。

RNN(循环神经网络)
循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的神经网络。下图为RNN的一般结构:
请添加图片描述

图示左侧为一个RNN Cell循环,右侧为RNN的链式连接平铺。实际上不管是单个RNN Cell还是一个RNN网络,都只有一个Cell的参数,在不断进行循环计算中更新。

由于RNN的循环特性,和自然语言文本的序列特性(句子是由单词组成的序列)十分匹配,因此被大量应用于自然语言处理研究中。下图为RNN的结构拆解:

请添加图片描述

RNN单个Cell的结构简单,因此也造成了梯度消失(Gradient Vanishing)问题,具体表现为RNN网络在序列较长时,在序列尾部已经基本丢失了序列首部的信息。为了克服这一问题,LSTM(Long short-term memory)被提出,通过门控机制(Gating Mechanism)来控制信息流在每个循环步中的留存和丢弃。下图为LSTM的结构拆解:

请添加图片描述

本节我们选择LSTM变种而不是经典的RNN做特征提取,来规避梯度消失问题,并获得更好的模型效果。下面来看MindSpore中nn.LSTM对应的公式:

ℎ0:𝑡,(ℎ𝑡,𝑐𝑡)=LSTM(𝑥0:𝑡,(ℎ0,𝑐0))

这里nn.LSTM隐藏了整个循环神经网络在序列时间步(Time step)上的循环,送入输入序列、初始状态,即可获得每个时间步的隐状态(hidden state)拼接而成的矩阵,以及最后一个时间步对应的隐状态。我们使用最后的一个时间步的隐状态作为输入句子的编码特征,送入下一层。

LSTM如何解决梯度消失问题

LSTM是一种特殊的RNN结构,通过引入门控机制(gating mechanism),有效地缓解了梯度消失问题。LSTM的核心是其单元状态(cell state),以及三个门(输入门、遗忘门和输出门),分别用于控制信息的写入、保留和输出:

  1. 输入门:决定当前输入信息有多少被写入单元状态。
  2. 遗忘门:决定当前单元状态有多少被保留。
  3. 输出门:决定单元状态的哪一部分输出到隐藏状态。

这些门控机制使LSTM能够在较长时间跨度上保留和利用重要信息,避免梯度在反向传播过程中过早消失。

IMDB数据集

IMDB数据集是一个广泛用于情感分析任务的标准数据集,包含来自IMDB的25,000条电影评论,每条评论都被标记为正面或负面情感。

RNN与LSTM的应用原理

在情感分类任务中,我们将每条电影评论作为一个序列输入到LSTM模型中,模型会学习每个单词在序列中的位置和作用,从而根据整条评论的内容预测其情感标签。

具体步骤

  1. 数据预处理:将文本数据转化为数值表示,例如使用词嵌入(word embedding)将单词转化为向量。
  2. 模型构建:使用LSTM构建模型,将评论的向量序列输入到LSTM层,然后通过全连接层和BCEWithLogitsLoss函数输出情感分类结果。
  3. 训练模型:使用带标签的评论数据训练模型,调整模型参数以最小化分类误差。
  4. 预测与评估:使用训练好的模型对新评论进行情感预测,并评估模型的性能。

在这里插入图片描述

http://www.lryc.cn/news/405708.html

相关文章:

  • 机械设计基础B(学习笔记)
  • MybatisPlusException: Error: Method queryTotal execution error of sql 的报错解决
  • 人工智能领域的顶尖影响力人物(部分代表)
  • Python:jsonl文件转json文件,并做字段处理
  • 安全产品在防御勒索病毒中的作用
  • NVIDIA 完全过渡到开源 GPU 内核模块
  • learning-cxx 学习cpp 环境配置 + bug解决
  • PHP 多线程和异步编程的常见陷阱
  • STL 哈希 学习总结
  • vue3页面编写-导入导出excel、展开查询项等
  • Java学习 - Spring Boot整合 Thymeleaf 实例
  • ubuntu20.04安装终端终结者并设置为默认终端
  • 以Zookeeper为例 浅谈脑裂与奇数节点问题
  • 最新版kubeadm搭建k8s(已成功搭建)
  • C++学习笔记-友元函数的定义与使用
  • 熵、交叉熵、KL散度
  • THS配置keepalive(yjm)
  • 新加坡裸机云多IP服务器特性
  • 深入理解ADB:Android调试桥详解与使用指南
  • PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能
  • 无人机搭载无人机反制设备可行性分析
  • MATLAB绘制方波、锯齿波、三角波、正弦波和余弦波、
  • 【通信协议-RTCM】MSM语句(2) - RINEXMSM7语句总结(重要!自动化开发计算卫星状态常用)
  • ios CCUIFont.m
  • 调度子系统在特定时间执行
  • 【QAC】Dashboard服务端如何配置
  • 深入理解Linux网络(四):TCP接收阻塞
  • 【iOS】内存五大分区
  • Jupyter Notebook: 是一个强大的交互式计算
  • 【C#学习笔记】变量、变量类型