昇思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运行情况

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值