文章目录

  • 一、简介
  • 二、先验知识:LSTM详解
    • 2.1 RNN
    • 2.2 长短期记忆网络(LSTM)
      • (1)细胞状态(Cell State)
      • (2)遗忘门
      • (3)输入门
      • (4)更新门
      • (5)输出门
    • 2.3 双向RNN
    • 2.4 双向LSTM【Bi-LSTM】
  • 三、textRNN模型结构
    • 3.1 结构1
    • 3.2 结构2
  • 四、总结
  • 五、参考

一、简介

TextCNN擅长捕获更短的序列信息,但是TextRNN擅长捕获更长的序列信息。具体到文本分类任务中,BiLSTM从某种意义上可以理解为可以捕获变长且双向的N-Gram信息

二、先验知识:LSTM详解

2.1 RNN

随着人慢慢成长,其认知能力也在不断的成熟。当看到一个事物的时候,人们并不是用一片空白的大脑在思考,而是基于自己已经拥有的认知去推断新鲜事物。可见人们的思想具有持久性。但是传统神经网络并不具有这个能力,这是一大弊端。但是RNN就可以完美的解决这个问题。RNN作为循环网络,允许消息的持久性。

将RNN模型展开后,如下图所示,神经网络的模块AAA,正在读取某个输入 xix_ixi,并输出一个值 hih_ihi。循环可以使得信息可以从当前步传递到下一步。

所有递归神经网络都具有神经网络重复模块链的形式。 在标准RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。

描述如何在每个时间步骤上计算输出的方程式,如下所示:

但是,循环神经网络的缺点是,随着时间步骤长度的增大,它无法从差得很远的时间步骤中获得上下文环境。

为了理解时间步骤t+1的上下文环境,我们有可能需要了解时间步骤0和1中的表示。但是,由于它们相差很远,因此它们所学的表示无法在时间步骤t+1上向前移动,进而对其起作用。“我在法国长大……我能说一口流利的法语”,要理解你说的法语,网络就必须远远地往后查找。但是,它不能这么做,这个问题可以归咎于梯度消失的原因。因此,循环神经网络只能记住短期存储序列。

为了解决这个问题,Hochreiter & Schmidhuber提出了一种称为长短期记忆网络。

2.2 长短期记忆网络(LSTM)

LSTM网络的结构与循环神经网络保持一致,而重复模块会进行更多的操作,有四个不同结构,而不是一个神经网络层,如下图所示。增强重复模块使LSTM网络能够记住长期依赖关系。让我们试着分解每个操作,来帮助网络更好地记忆。

在图中,我们所使用的符号的含义如下所示:

下面,详细来剖析一下LSTM的内部结构,分为细胞状态、遗忘门、输入门、输出门四个方面进行介绍。

(1)细胞状态(Cell State)

在序列中的每一个时刻ttt向前传播的信息,除了和朴素RNN一样的隐藏状态hth_tht之外,还有另外一个隐藏状态,如下图中的横线。这个隐藏状态即细胞状态,记为CtC_tCt。这个细胞状态可以保持信息在上面流动时不会发生改变。

另外,在LSTM中能够移除或添加信息到结点来改变信息流状态,由称为门(gate)的结构精心调节。
门是一种可选择通过信息的节点。 它们由σ\sigmaσ(Sigmoid)神经网络层和逐点乘法运算组成。

sigmoid层输出000111之间的数字,描述每个信息向量应该通过多少。 值为零意味着“不让任何东西通过”,而值为1则意味着“让一切都通过!”

LSTM具有三个这样的门,用于保护和控制信息流向量状态。

(2)遗忘门

在LSTM中第一步是:从细胞状态之中,决定是否丢弃信息、丢弃什么样的信息。做决定的结构即:遗忘门。该门控开关会读取上一个时刻的隐藏状态ht−1h_{t-1}ht1和当前的输入xtx_txt作为遗忘门的输入,然后通过一个诸如sigmoid的激活函数,输出ftf_tft。其中ft∈[0,1]f_t \in [0,1]ft[0,1],即代表了遗忘上一个时刻的细胞状态的概率,1代表“完全保留”,0代表“完全舍弃”。数学表达为
ft=σ(Wfht−1+Ufxt+bf){f_t} = \sigma ({W_f}{h_{^{t - 1}}} + {U_f}{x_t} + {b_f})ft=σ(Wfht1+Ufxt+bf)

其中,Wf,Uf,bf{W_f},{U_f},{b_f}Wf,Uf,bf是线性关系系数与偏置,和RNN中类似。σ\sigmaσ是sigmoid激活函数。如图所示,为遗忘门的结构:

我们从当前时间步骤获取输入,并从前一时间步骤获取学习的表示,之后将它们连接起来。我们将连接后的值传递给一个sigmoid函数,该函数输出一个介于0和1之间的值(ftf_tft)。我们在ftf_tftct−1c_{t-1}ct1之间做元素的乘积。如果这个值为0,那么从ct−1c_{t-1}ct1中去掉,如果这个值为1,则完全通过。因此,这种操作也被称为“忘记门操作”。

(3)输入门

在LSTM中第二步是:决定在细胞状态中,应存储什么样的新信息。负责的是当前时刻序列的输入,结构如图:

输入门结构有两部分构成。第一个是使用sigmoid函数,输出iti_tit;第二个是使用tanhtanhtanh函数,输出为ata_tat。然后用iti_titata_tat相乘去更新细胞状态。数学表达为:

it=σ(Wiht−1+Uixt+bi){i_t} = \sigma ({W_i}{h_{t - 1}} + {U_i}{x_t} + {b_i})it=σ(Wiht1+Uixt+bi)

at=tanh⁡(Waht−1+Uaxt+ba){a_t} = \tanh ({W_a}{h_{t - 1}} + {U_a}{x_t} + {b_a})at=tanh(Waht1+Uaxt+ba)

其中,Wi,Ui,bi,Wa,Ua,ba{W_i},{U_i},{b_i},{W_a},{U_a},{b_a}Wi,Ui,bi,Wa,Ua,ba是线性关系系数与偏置,与RNN中的类似。σ\sigmaσ是sigmoid激活函数。

(4)更新门

先前介绍的遗忘门、输入门得到的结果都会直接或者间接地作用于细胞状态CtC_tCt。如何将Ct−1C_{t-1}Ct1更新为CtC_tCt呢?

如图所示,为细胞状态的更新示意图:

新的细胞状态有两部分构成。第一个是Ct−1C_{t-1}Ct1和遗忘门的输出ftf_tft的乘积,即可丢弃决定要丢弃的内容。第二个是输入门的iti_titata_tat的乘积,这是新候选值,根据模型决定更新状态的程度来变化。乘指的是是Hadamard积。

我们将来自当前时间步骤中的值和前一时间步骤中已学习的表示连接起来。将连接的值通过一个tanh函数进行传递,我们生成一些候选值,并通过一个sigmoid函数传递,从候选值中选择一些值,所选的候选值将会被更新到ct−1c_{t-1}ct1

(5)输出门

我们将当前时间步骤的值和前一时间步骤已学习的表示连接起来,并经由一个sigmoid函数传递来选择将要用作输出的值。我们获取单元状态并请求一个tanh函数,然后执行元素方式操作,其只允许选定的输出通过。

2.3 双向RNN

所有上述双向RNN网络的一个主要问题是,它们从之前的时间步骤中学习表示。有时,你有可能需要从未来的时间步骤中学习表示,以便更好地理解上下文环境并消除歧义。通过接下来的列子,“He said, Teddy bears are on sale” and “He said, Teddy Roosevelt was a great President。在上面的两句话中,当我们看到“Teddy”和前两个词“He said”的时候,我们有可能无法理解这个句子是指President还是Teddy bears。因此,为了解决这种歧义性,我们需要往前查找。这就是双向RNN所能实现的。

双向RNN中的重复模块可以是常规RNN、LSTM或是GRU。双向RNN的结构和连接如图10所示。有两种类型的连接,一种是向前的,这有助于我们从之前的表示中进行学习,另一种是向后的,这有助于我们从未来的表示中进行学习。

正向传播分两步完成:

  • 我们从左向右移动,从初始时间步骤开始计算值,一直持续到到达最终时间步骤为止;

  • 我们从右向左移动,从最后一个时间步骤开始计算值,一直持续到到达最终时间步骤为止;

2.4 双向LSTM【Bi-LSTM】

前向的LSTM与后向的LSTM结合成BiLSTM。比如,我们对“我爱中国”这句话进行编码,模型如图所示。


前向的LSTMLLSTM_LLSTML依次输入“我”,“爱”,“中国”得到三个向量{hL0,hL1,hL2}\{h_{L0}, h_{L1}, h_{L2}\}{hL0,hL1,hL2}。后向的LSTMRLSTM_RLSTMR依次输入“中国”,“爱”,“我”得到三个向量{hR0,hR1,hR2}\{h_{R0}, h_{R1}, h_{R2}\}{hR0,hR1,hR2}。最后将前向和后向的隐向量进行拼接得到{[hL0,hR2],[hL1,hR1],[hL2,hR0]}\{[h_{L0}, h_{R2}], [h_{L1}, h_{R1}], [h_{L2}, h_{R0}]\}{[hL0,hR2],[hL1,hR1],[hL2,hR0]},即{h0,h1,h2}{\{h_0,h_1 ,h_2 \}}{h0,h1,h2}

三、textRNN模型结构

3.1 结构1

TextRNN的结构分为:1. embeddding layer, 2.Bi-LSTM layer, 3.concat output, 4.FC layer, 5.softmax

一般取前向/反向LSTM在最后一个时间步长上隐藏状态,然后进行拼接,在经过一个softmax层(输出层使用softmax激活函数)进行一个多分类;或者取前向/反向LSTM在每一个时间步长上的隐藏状态,对每一个时间步长上的两个隐藏状态进行拼接,然后对所有时间步长上拼接后的隐藏状态取均值,再经过一个softmax层(输出层使用softmax激活函数)进行一个多分类(2分类的话使用sigmoid激活函数)。

上述结构也可以添加dropout/L2正则化或BatchNormalization 来防止过拟合以及加速模型训练。

3.2 结构2


与之前结构不同的是,在双向LSTM(上图不太准确,底层应该是一个双向LSTM)的基础上又堆叠了一个单向的LSTM。把双向LSTM在每一个时间步长上的两个隐藏状态进行拼接,作为上层单向LSTM每一个时间步长上的一个输入,最后取上层单向LSTM最后一个时间步长上的隐藏状态,再经过一个softmax层(输出层使用softamx激活函数,2分类的话则使用sigmoid)进行一个多分类。

四、总结

  • 代码实现过程,参考:https://blog.csdn.net/yyy430/article/details/88591918#%E6%A8%A1%E5%9E%8B%E7%BB%93%E6%9E%84
  • TextRNN的结构非常灵活,可以任意改变。比如把LSTM单元替换为GRU单元,把双向改为单向,添加dropout或BatchNormalization以及再多堆叠一层等等。TextRNN在文本分类任务上的效果非常好,与TextCNN不相上下,但RNN的训练速度相对偏慢,一般2层就已经足够多了。

五、参考

  1. https://baijiahao.baidu.com/s?id=1623872630469357398&wfr=spider&for=pc
  2. https://blog.csdn.net/yu444/article/details/86764352
  3. https://www.jiqizhixin.com/articles/2018-10-24-13
  4. https://blog.csdn.net/sdu_hao/article/details/88080791

4.文本分类——textRNN模型相关推荐

  1. 【NLP】深度学习文本分类|模型代码技巧

    文本分类是NLP的必备入门任务,在搜索.推荐.对话等场景中随处可见,并有情感分析.新闻分类.标签分类等成熟的研究分支和数据集. 本文主要介绍深度学习文本分类的常用模型原理.优缺点以及技巧,是「NLP入 ...

  2. 3.文本分类——textCNN模型

    文章目录 一. 简介 二. 模型结构 2.1 嵌入层 2.2 卷积层 2.3 池化层 2.4 全连接层 2.5 softmax层 三.textCNN总结 四.实现 五.参考 一. 简介 TEXTCNN ...

  3. [深度学习] 自然语言处理 --- 文本分类模型总结

    文本分类 包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMO,BERT等)的文本分类 fastText 模型 textCNN 模型 charCNN 模型 Bi-LSTM 模型 ...

  4. 文本分类模型_【文本分类】几个可作为Baseline的模型

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要9分钟 跟随小博主,每天进步一丢丢 来自:AINLP 作者:老宋的茶书会 知乎专栏:NLP与深度学习 研究方向:自然语言处理 前言 最近,从Te ...

  5. 【NLP】使用Transformer模型进行文本分类

    作者 | Eric Fillion 编译 | VK 来源 | Towards Data Science 文本分类是NLP最常见的应用.与大多数NLP应用一样,Transformer模型近年来在该领域占 ...

  6. 【NLP】相当全面:各种深度学习模型在文本分类任务上的应用

    论文标题:Deep Learning Based Text Classification:A Comprehensive Review 论文链接:https://arxiv.org/pdf/2004. ...

  7. 【多标签文本分类】MSML-BERT模型的层级多标签文本分类方法研究

    ·阅读摘要:   本文在BERT模型上,提出了利用多任务架构来解决层级多标签文本分类问题. ·参考文献:   [1] MSML-BERT模型的层级多标签文本分类方法研究 [0] 摘要   在摘要中,作 ...

  8. 文本分类——常见分类模型

    内容提要 基于规则的模型 基于概率的模型 基于几何的模型 基于统计的模型   文本分类方法模型主要分为两个大类,一类是基于规则的分类模型:另一类是基于概率统计的模型. 基于规则的模型   基于规则的分 ...

  9. 300万知乎多标签文本分类任务经验分享(附源码)

    来源:大数据挖掘DT数据分析 本文长度为4600字,建议阅读6分钟 本文为你分享知乎看山杯冠军团队参赛经验. 后台回复回复关键词"PT"即可获取源码(PyTorch实现)githu ...

最新文章

  1. Java 9 揭秘(16. 虚拟机栈遍历)
  2. iconv文件编码判断转换
  3. hdu4635(最多加多少边,使得有向图不是强连通图)
  4. voyage java_GitHub - yezilong9/voyage: 采用Java实现的基于netty轻量的高性能分布式RPC服务框架...
  5. 项目经理如何把工作简单化
  6. 电子游戏跟计算机有什么关联,电脑和电子游戏对小学生的影响
  7. 2017中国人工智能峰会即将开启,和30位AI大咖一起头脑风暴
  8. Spring Framework 官方文档学习(三)之Resource
  9. python职业发展规划-少走弯路,一个老程序猿谈PHP职业发展规划
  10. Win11用户好消息 影响win11性能运行的竟是它,关闭可提升性能
  11. 奶茶店一天盈利有多少?广州哪里有专业奶茶培训点
  12. 【NOIP冲刺题库题解】1973:【16NOIP普及组】买铅笔
  13. 2020-11-28画图上的最大值点,和零基准线
  14. oracle 结果集已耗尽_结果集已耗尽
  15. NT_iOS笔记—判断iPhone6
  16. 现在联盟哪个服务器有无限乱斗,LOL无限乱斗+2019
  17. 【转】Linux那些事儿之我是Hub(7)蝴蝶效应
  18. 实现一个联系客服对话框的前端部分
  19. Python爬虫之百度/360搜索关键字自动提交
  20. 感叹游戏行业的飞速发展

热门文章

  1. 电子物流中的EDI 应用
  2. 四旋翼无人机避障飞行
  3. Python的学习之旅第一站:基本语法
  4. [分享]高手是怎样炼成的:精妙SQL语句介绍
  5. 百度智能云AI接口的植物识别
  6. 瑞萨 RA MCU 基础知识
  7. 怎么把线稿提取出来_用ps如何提取线稿图?简单教程轻松搞定
  8. HDU - 胜利大逃亡(搜索)
  9. 人生就是游戏,你如何遵守游戏规则?
  10. Flask模板中可以直接访问的特殊变量和方法