三、RNN
递归神经网络(Recurrent Neural Network,RNN)被广泛用于通过递归计算捕捉长距离的依赖性。RNN 语言模型学习历史信息,考虑到适合文本分类任务的所有单词之间的位置信息。首先,每个输入词都用一个特定的向量表示,使用词嵌入技术。然后,嵌入的单词向量被逐一送入RNN 单元。RNN 单元的输出与输入向量的维度相同,并被送入下一个隐藏层。RNN 在模型的不同部分共享参数,每个输入词的权重相同。最后,输入文本的标签可以由隐藏层的最后一个输出来预测。
图6. RNN架构
3.1 TextRCNN
TextRCNN 相关论文首次发表在 AAAI 2015 中。在 TextCNN 网络中,网络结构采用“卷积层+池化层”的形式,卷积层用于提取 n-gram 类型的特征,在 RCNN(循环卷积神经网络)中,卷积层的特征提取的功能被 RNN 替代,即通过 RNN 取代 TextCNN的特征提取。RNN 的优点是能够更好地捕捉上下文信息,有利于捕获长文本的语义。因此整体结构变为了 RNN+池化层,所以叫 RCNN。
TextRCNN 在词嵌入的基础上加上了上下文环境作为新的词嵌入表示。左侧和右侧的context 是通过前向和后向两层 RNN 的中间层输出得到的。这些中间层的输出和原始的词嵌入拼接形成新的词嵌入 y,然后送入池化层。下图是 TextRCNN 模型框架,输入是一个文本 D,可以看成是由一系列单词(W_1, W_2,...)组成的。输出是一个概率分布,最大的位置对应文章属于的类别 K。
图7. 递归卷积神经网络的结构。该图是 "A sunset stroll along the South Bank affords an array of stunning vantage points "这句话的部分例子,下标表示原句中相应的词的位置
RCNN 整体的模型构建流程如下:1)利用前向和后向 RNN 得到每个词的前向和后向上下文的表示,词的表示就变成词向量和前向后向上下文向量 concat 起来的形式了。2)将拼接后的向量非线性映射到低维。3)向量中的每个位置的值都取所有时序上的最大值,得到最终的特征向量。4)softmax 分类得到最终的评分向量。使用随机梯度下降来对参数进行更新。
当前 SOTA!平台收录 TextRCNN 共 1 个模型实现资源,支持框架:TensorFlow。
模型 | SOTA!平台模型详情页 |
TextRCNN | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/a5a82cbe-98b7-4f3d-87ae-f9fd59caa55e |
3.2 Multi-task
Multi-task 的文章发表与 IJCAI 2016。在本文中,作者使用多任务学习框架来共同学习多个相关任务(相对于多个任务的训练数据可以共享),以应对数据不足的问题。本文提出了三种不同的基于递归神经网络的信息共享机制,以针对特定任务和共享层对文本进行建模。整个网络在这些任务上进行联合训练。
图8. Multi-task 三种模型
对于模型 I,每个任务共享一个 LSTM 层和 Eembedding 层,同时每个任务都拥有自己的 Eembedding 层,也就是说,对于任务 m,输入x定义为以下形式:
其中,(x_t)^(m)、(x_t)^(s) 分别表示特定任务和共享词嵌入,⊕表示连接操作。
模型 II 中,每个任务都拥有自己的 LSTM 层,但是下一时刻的输入中包含了下一时刻的char 及所有任务在当前时刻的隐层输出 h。
作者修改了 cell 的计算公式以决定保存多少信息:
模型 III 中,每个任务都拥有一个共享的 BI-LSTM 层,同时各自有一个 LSTM 层,LSTM 的输入包括 char 及 BI-LSTM 在该时刻的隐层输出,与模型 II 一样,作者也修改了 cell 的计算公式
当前 SOTA!平台收录 Multi-task 共 1 个模型实现资源,支持框架:PyTorch。
模型 | SOTA!平台模型详情页 |
Multi-task | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/351b1aba-c543-437a-8cf8-9b027c5c42b7 |
3.3 DeepMoji
DeepMoji 发表在 EMNLP 2017 中,是 Bjarke Felbo 等提出的一种联合 Bi-LSTM 和Attention 的混合神经网络,对表情符号的情绪识效果最优,在文本分类任务中表现也不错。
DeepMoji 的结构如图 9 所示,第一层是一个让每个 Word 能够嵌入向量空间的嵌入层,然后用 tanh 激活函数把嵌入维度压缩到[-1,1];第二层和第三层用一个 BiLSTM,每一个方向用 512 个隐层单元;第四层是一个 attention 层,通过 skip-connections 将前面三层的输出拼接,输入到 attention 中;第五层就是一个 softmax 层。简言之,DeepMoji 就是在 Embedding 后接两层 Bi-LSTM,然后再将这三层的输出拼接,到Attention,再接一个 softmax。
图9. DeepMoji模型,S为文本长度,C为类别数量
当前 SOTA!平台收录 DeepMoji 共 8 个模型实现资源,支持框架:TensorFlow、PyTorch、Keras。
模型 | SOTA!平台模型详情页 |
DeepMoji | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/9f50abc9-d67e-483a-bb44-e10c3baeb327 |
3.4 RNN-Capsule
RNN-Capsule 是胶囊方法在文本分类中的应用,相关论文发表在 EMNLP 2018 中。胶囊网络(Capsule Network)用神经元向量代替传统神经网络的单个神经元节点,以 Dynamic Routing 的方式去训练这种全新的神经网络,从而提升模型效率及文本表达能力。
该模型首先利用标准的卷积网络,通过多个卷积滤波器提取句子的局部语义表征。然后将 CNN 的标量输出替换为向量输出胶囊,从而构建 Primary Capsule 层。接着输入到作者提出的改进的动态路由(共享机制的动态路由和非共享机制的动态路由),得到卷积胶囊层。最后将卷积胶囊层的胶囊压平,送入到全连接胶囊层,每个胶囊表示属于每个类别的概率。
图10. 用于文本分类的胶囊网络的结构。动态路由的过程显示在底部
在路由过程中,许多胶囊属于背景胶囊,即这些胶囊与最终的类别胶囊无关,比如文本里的停用词、类别无关词等等。作者提出了三种策略以减少背景或者噪音胶囊对网络的影响:
- Orphan 类别:在胶囊网络的最后一层引入 Orphan 类别,它可以捕捉一些背景知识,比如停用词。在文本任务中停用词比较一致,比如谓词和代词等,所以引入Orphan 类别的效果较好。
- Leaky-Softmax:在中间的连续卷积层引入去噪机制。对比 Orphan 类别,Leaky-Softmax 是一种轻量的去噪方法,它不需要额外的参数和计算量。
- 路由参数修正:传统的路由参数,通常用均与分布进行初始化,忽略了下层胶囊的概率。相反,作者把下层胶囊的概率当成路由参数的先验,改进路由过程。
为了提升文本性能,作者引入了两种网络结构,具体如下:
图11. 两种胶囊网络架构
Capsule-A 从嵌入层开始,将语料库中的每个词转化为 300 维(V = 300)的词向量,然后是一个具有 32 个滤波器(B = 32)、步长为 1 的 ReLU 非线性的 3-gram(K1 = 3)卷积层。所有其他层都是胶囊层,从具有 32 个滤波器(C=32)的 B×d 初级胶囊层开始,然后是具有 16 个滤波器(D=16)的 3×C×d×d(K2=3)卷积胶囊层和一个全连接的胶囊层,依次进行。每个胶囊都有 16 维(d=16)的实例化参数,其长度(规范)可以描述胶囊存在的概率。胶囊层由转换矩阵连接,每个连接也要乘以路由系数,该系数由路由协议机制动态计算得出。
Capsule-B 的基本结构与 Capsule-A 相似,只是在 N-gram 卷积层中采用了三个平行网络,过滤窗口(N)为 3、4、5(见图 11)。全连接的胶囊层的最终输出被送入平均池以产生最终结果。通过这种方式,Capsule-B 可以学习到更有意义和更全面的文本表述。
当前 SOTA!平台收录 RNN-Capsule 共 1 个模型实现资源,支持框架:TensorFlow。
模型 | SOTA!平台模型详情页 |
RNN-Capsule | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/f8cd1ed1-5ebe-42bf-8672-a1d2d9c1c97f |
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。
网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。
移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。