当前位置: 代码迷 >> 综合 >> 深度学习(自然语言处理)RNN、LSTM、TextCNN
  详细解决方案

深度学习(自然语言处理)RNN、LSTM、TextCNN

热度:81   发布时间:2023-11-15 21:43:22.0

目录

0 前言:

1.从RNN到LSTM

1.1 RNN

1.2 LSTM模型

1.2.1遗忘门(forget gate)

1.2.2 输入门

1.2.3 输出门

1.3 使用循环神经网络模型

2 textCNN

2.1 需要解决的问题:

2.2 TEXT CNN模型

2.3 TextCNN实现:

参考文献


  • 文章来源:忆_恒心(CSDN)

0 前言:

自然语言处理中,RNN、LSTM和TextCNN的学习基本上是躲不开的,这些基本的模型需要有一个比较清晰的了解,这对后面做对比实验的时候会有很多的帮助。

本篇文章的目的就是帮助读者分析从RNN到LSTM在到textCNN的应用过程

1.从RNN到LSTM

RNN 与DNN.CNN不同,它能处理序列问题.

常见的序列问题:

  • 一段段连续的语音
  • 一段段连续的手写文字
  • 一条句子等等。

这些序列长短不一,又比较难拆分成一个个独立的样本来训练

RNN就是假设我们的样本是基于序列的

1.1 RNN

比如这么一个例子

”我” “吃” “苹果“  词性与前个词语有很大的关系,所以RNN可以解决

BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随着时间反向传播

激活函数: tanh 函数的收敛速度要快于 sigmoid 函数,而且梯度消失的速度要慢于 sigmoid 函数

利用BPTT算法训练网络时容易出现梯度消失的问题,当序列很长的时候问题尤其严重,因此上面的RNN模型一般不能直接应用。而较为广泛使用的是RNN的一个特例LSTM。

标准的RNN中,重复的模块只有一个非常简单的结构,例如一个tanh层

1.2 LSTM模型

LSTM 同样是这样的结构,但是重复的模块的结构更加复杂。不同于 单一神经网络层,整体上除了 h 在随时间流动,细胞状态 c 也在随时间流动。细胞状态(cell) c 就代表着长期记忆,而状态 h 代表了短期记忆。

从上图中可以看出,在每个序列索引位置 t 时刻向前传播的除了和RNN一样的隐藏状态 ht ,还多了另一个隐藏状态,如图中上面的长横线。这个隐藏状态我们一般称为细胞状态(Cell State),记为 Ct 。如下图所示:

LSTM 有通过精心设计的称作为“门”的结构去除或者增加信息到细胞状态的能力

1.2.1遗忘门(forget gate)

顾名思义,是控制是否遗忘的

输出一个在 0 到 1 之间的数值,这个数值决定要遗忘多少历史信息。1 表示“完全保留”,0 表示“完全舍弃”。

1.2.2 输入门

输入门(input gate)负责处理当前序列位置的输入,1.从RNN到LSTM被存放在细胞状态中。

1.2.3 输出门

当为0时,门完全关闭,当为1时,门完全打开。输入门控制这当前输入值有多少信息流入到当前的计算中,遗忘门控制着历史信息中有多少信息流入到当前计算中

1.3 使用循环神经网络模型

  • 在这个模型中,每个词先通过嵌?入层得到特征向量?
  • 然后,我们使?用双向循环神经?网络对特征序列进?步编码得到序列?信息。
  • 最后,我们将编码的序?信息通过全连接层变换为输出

具体来说,我们可以将双向长短期记忆(LSTM)在最初时间步最终时间步的隐藏状态连结,作为特征序?的表征传递给输出层分类。
在下?面实现的 BiRNN 类中,

  • Embedding 实?即嵌?入层
  • LSTM 实例?即为序列?编码的隐藏层
  • Linear实例?即?生成分类结果的输出层

2 textCNN

  • 简单的一个维度的时间序列 ---- 循环神经网络RNN

  • 一维图像,用一维卷积神经网络来捕捉临近词之间的关联-----TextCNN

2.1 需要解决的问题

  • 多输入通道的一维互关运算---单输?入通道的\二维互相关运算。

  • 时序最大池化(一维全局最大池化)

  • TextCNN的计算

2.1.1 多输入通道的一维互关运算
在这里插入图片描述
实现代码
在这里插入图片描述
注意:

torch.stack()

在自然语言处理和卷及神经网络中, 通常为了保留–[序列(先后)信息] 和 [张量的矩阵信息] 才会使用stack。

https://blog.csdn.net/xinjieyuan/article/details/105205326

2.1.2 时序最大池化

(max-over-pooling)假设输?入包含多个通道,各通道由不?同时间步上的数值组成,各通道的输出即,该通道所有时间步中最大的数值.通过普通的池化实现全局池化


2.2 TEXT CNN模型

计算主要分为以下几步:

  1. 定义多个一维卷积,并对输入分别做卷积运算----可以使用?维卷积来表征时序数据

  2. 对输出的所有通道分别做时序最大化,再将这些输出值连接为向量

  3. 通过全连接层将连接后的向量变换为有关各类别的输出。(同时采DROUPT层正则化,前向传播的时候)
    在这里插入图片描述

其实比较清晰的话,还是参考论文下面的图片

2.3 TextCNN实现:

训练并评价模型

注意:关于nn.CrossEntroyLoss交叉熵的理解

https://blog.csdn.net/geter_CS/article/details/84857220

小结:

  • 可以使?用?维卷积来表征时序数据
  • 多输入通道的?维互相关运算可以看作单输?入通道的?维互相关运算
  • 时序最?大池化层的输?入在各个通道上的时间步数可以?同。
  • textCNN主要使?用了?维卷积层时序最?大池化层

参考文献

  • Bi-LSTM网络:https://www.cnblogs.com/jiangxinyang/p/10208163.html

  • 动手学习深度学习

  • 深度学习之RNN到LSTM:https://www.cnblogs.com/jiangxinyang/p/9362922.html

  • TextCNN:https://www.cnblogs.com/callyblog/p/8535767.html

  • pytorch损失函数之nn.CrossEntropyLoss()、nn.NLLLoss():https://blog.csdn.net/geter_CS/article/details/84857220

  相关解决方案