昇思25天学习打卡营第20天|应用实践之RNN实现情感分类

基本介绍

        今天的应用实践是RNN实现情感分类,情感分类是自然语言处理中的经典任务,是典型的分类问题。RNN是一种循环神经网络,接收序列数据作为输入。模型训练所采用的数据集是IMDB影评数据集,数据集包含Positive和Negative两类。由于该数据集是英文数据集,所以训练后的情感分类模型只能分类英文语句的情感。本文会先简单介绍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或者LSTM,从而规避梯度消失问题,并获得更好的模型效果。

RNN代码实践

        官方给的代码实践是先下载IMDB数据集,然后加载数据集,由于单词的输入并不是某种编码,而是词向量化后变为词向量后输入,这需要用到MindSpore的nn.Embedding层,使用Glove词向量模型,接着就是经典的深度学习流程。即数据集预处理,模型搭建,模型训练,模型评估,模型推理,详细的可直接参考官方的代码实践,这里给出我自己的运行结果和部分代码。

  • 模型训练超参数配置代码
hidden_size = 256
output_size = 1
num_layers = 2
bidirectional = True
lr = 0.001
pad_idx = vocab.tokens_to_ids('<pad>')model = RNN(embeddings, hidden_size, output_size, num_layers, bidirectional, pad_idx)
loss_fn = nn.BCEWithLogitsLoss(reduction='mean')
optimizer = nn.Adam(model.trainable_params(), learning_rate=lr)
  • 模型训练结果

模型训练两轮而已,效果一般,如果有时间,可以多训练一会儿,训练个10轮的,效果应该会好些

  • 模型评估结果

采用的是accuracy指标,不出意料,结果看上去很一般,因为这是二分类任务,随便猜的话,准确率应该也是有0.5的。

  • 模型自定义预测结果

我随便输入两句不一样情感类别的英文,进行预测,预测速度很慢,但是结果是准确的,很神奇

总结

        RNN和LSTM是自然语言处理的经典模型,RNN的原理不难理解,懂得它的思想就很容易上手了,而LSTM是RNN的优化版,针对RNN的一些缺陷进行改进优化。看上去LSTM比RNN好很多,但是这种东西还是要具体问题具体分析的,有的任务是适合RNN不适合LSTM的。由于以前接触过这两个模型,所以今天较为顺利就完成实践了。

Jupyter运行情况

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

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

相关文章

Weird LCM Operations

我们先观察&#xff0c;有 ⌊ n 6 ⌋ \lfloor \frac{n}{6} \rfloor ⌊6n​⌋&#xff0c;我们如果每次操作三个不同的数&#xff0c;也需要 n 3 \frac{n}{3} 3n​次操作&#xff0c;所以我们考虑只操作一半的序列 跟一半有关的东西大概有&#xff1a;奇偶&#xff0c;前一半后…

数据库基础-进阶

数据库管理&#xff1a; *sql语句 数据库用来增删改查的语句 *** 备份 数据库的数据进行备份 * 主从复制&#xff0c;读写分离&#xff0c;高可用 原理 数据库的概念和相关的语法和规范&#xff1a; 数据库&#xff1a;组织&#xff0c;存储&#xff0c;管理数据的仓库。 数据…

Flutter中的异步操作

在Flutter及其底层语言Dart中&#xff0c;异步操作主要通过以下几种方式实现&#xff1a; Future: Future是Dart的一个核心类&#xff0c;用于表示一个可能在未来某个时间点返回结果的计算。当一个函数执行可能耗时的操作时&#xff08;如网络请求、文件读写等&#xff09;&am…

cpp 强制转换

一、static_cast static_cast 是 C 中的一个类型转换操作符&#xff0c;用于在类的层次结构中进行安全的向上转换&#xff08;从派生类到基类&#xff09;或进行不需要运行时类型检查的转换。它主要用于基本数据类型之间的转换、对象指针或引用的向上转换&#xff08;即从派生…

在Linux上,你可以使用命令行工具来修改计算机的IP地址

在Linux上&#xff0c;你可以使用命令行工具来修改计算机的IP地址。以下是一些常见的方法&#xff1a; 使用ifconfig命令&#xff08;传统方法&#xff09; 查看当前网络接口配置&#xff1a; ifconfig找到你要修改的网络接口&#xff0c;例如eth0。 设置新的IP地址&#xff…

富格林:深思曝光纠正安全误区

富格林指出&#xff0c;在投资市场上&#xff0c;投资者进行任何交易都是以安全盈利为出发点的&#xff0c;伦敦金交易也不例外。投资者在进入市场做单之前可从曝光的骗局中深究亏损原因&#xff0c;总结应对策略预防在交易中遇到类似情况导致亏损。以下是富格林总结曝光的几点…

数据结构第32节 无锁编程

在Java中&#xff0c;无锁编程是一种在多线程环境下避免使用传统锁机制&#xff08;如synchronized关键字或ReentrantLock&#xff09;的技术。这种技术可以提高程序的并发性能&#xff0c;尤其是在高并发场景下&#xff0c;因为它减少了锁的竞争和上下文切换的开销。 数据结构…

【Java】读取超大文件的时候,如何避免出现OOM

读取超大文件的时候&#xff0c;如何避免出现OOM 需求背景如下&#xff1a; 从文件中读取数据并经过业务处理后存储到数据库中&#xff0c;同时避免出现OOM&#xff08;Out of Memory&#xff09; 1、使用分批处理文件数据 将文件数据分批读取&#xff0c;每次只处理一部分数…

深入理解 React 的 useSyncExternalStore Hook

深入理解 React 的 useSyncExternalStore Hook 大家好&#xff0c;今天我们来聊聊 React 18 引入的一个新 Hook&#xff1a;useSyncExternalStore。这个 Hook 主要用于与外部存储同步状态&#xff0c;特别是在需要确保状态一致性的场景下非常有用。本文将深入探讨这个 Hook 的…

GB和GiB的区别

GB&#xff08;Gigabyte&#xff0c;十亿字节&#xff09;和GiB&#xff08;Gibibyte&#xff0c;吉比字节&#xff09;都是数据存储单位&#xff0c;但它们有不同的定义和使用场景。 GB&#xff08;Gigabyte&#xff09; 定义&#xff1a; GB使用十进制系统&#xff0c;1 GB …

Linux系统中通过Wine运行软件实现关机功能

概述 在Linux系统中&#xff0c;我们开发的软件通过Wine进行适配。软件中包含一个需要执行关机操作的功能。然而&#xff0c;发现Windows的关机指令在Linux环境中无效&#xff0c;需要单独设置Linux的关机命令。 一、调用关机脚本文件执行关机 在Linux系统中&#xff0c;可以…

redis存入hash,key=>value和key=>(key=>value)使用Python举例

在 Redis 中&#xff0c;HASH 数据结构&#xff08;也称为 HMAP 或 Hash Map&#xff09;允许你存储键值对集合&#xff0c;其中每个键值对都是字段&#xff08;field&#xff09;和值&#xff08;value&#xff09;的映射。在 Python 中&#xff0c;你可以使用 redis-py 库来与…

Netty Bootstrap/ServerBootstrap

Netty中的Bootstrap和ServerBootstrap是Netty框架中的两个核心引导类&#xff0c;它们分别用于客户端和服务端的启动配置。以下是关于这两个类的详细解析&#xff1a; 一、基本概念 Bootstrap&#xff1a;客户端程序的启动引导类。主要用于配置Netty客户端的各种参数&#xf…

使用phpMyAdmin操作MYSQL(四)

一. 学会phpMyAdmin&#xff1f; phpMyAdminhttp://water.ve-techsz.cn/phpmyadmin/ 虽然我我们可以用命令行操作数据库&#xff0c;但这样难免没有那么直观&#xff0c;方便。所以接下来我们使用phpMyAdmin来操作MySQL&#xff0c;phpMyAdmin是众多MySQL图形化管理工具中使用…

编程从零基础到进阶(更新中)

题目描述 依旧是输入三个整数&#xff0c;要求按照占8个字符的宽度&#xff0c;并且靠左对齐输出 输入格式 一行三个整数&#xff0c;空格分开 输出格式 输出它们按格式输出的效果&#xff0c;占一行 样例输入 123456789 -1 10 样例输出 123456789-1 10 #include "stdio.…

2024年7月20日(星期六)骑行支里山

2024年7月20日 (星期六&#xff09;骑行支里山&#xff0c;早8:00到8:30&#xff0c;大观公园门口集合&#xff0c;9:00准时出发【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:大观公园门口集合 &#xff0c;家住东&#xff0c;南&#xff0c;北…

【数据结构】树和二叉树及堆的深入理解

【数据结构】树和二叉树及堆的深入理解 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;数据结构 文章目录 【数据结构】树和二叉树及堆的深入理解前言一.树1.1 树的概念1.2 树的相关概念1.3 树的表示1.4 树的应用 二.二叉树2.1 二叉树概念及…

38 IRF+链路聚合+ACL+NAT组网架构

38 IRF+链路聚合+ACL+NAT组网架构 参考文献 34 IRF的实例-CSDN博客 35 解决单条链路故障问题-华三链路聚合-CSDN博客 36 最经典的ACL控制-CSDN博客 37 公私网转换技术-NAT基础-CSDN博客 32 华三vlan案例+STP-CSDN博客 一 网络架构

智慧煤矿:AI视频智能监管解决方案引领行业新变革

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经渗透到各个行业&#xff0c;为传统产业的转型升级提供了强大的动力。在煤矿行业中&#xff0c;安全监管一直是一个重要的议题。为了提高煤矿的安全生产水平&#xff0c;降低事故发生率&#xff0c;智…

ubuntu 虚拟机扩容

在使用vmware创建的ubuntu虚拟机进行linux开发时&#xff0c;安装了docker容器&#xff0c;编译会占用很大的磁盘空间&#xff0c;不想创建新的更大空间的虚拟机linux系统&#xff0c;可以通过gparted图形化工具进行扩容&#xff0c;以下是操作方法 虚拟机设置&#xff0c;扩展…