·摘要:
  本文作者将CNN和RNN(LSTM)结合使用,应用到了NLP的文本分类任务中。
·参考文献:
  [1] A C-LSTM Neural Network for Text Classification 论文链接:​https://arxiv.org/abs/1511.08630

[1] 摘要

  · 论文结合CNN和RNN(LSTM)模型提出了C-LSTM模型,应用于文本分类。

  · C-LSTM利用CNN提取抽象的高级特征,并将其送入长短期记忆递归神经网络(LSTM)中得到句子表示。最终通过全连接层来做分类任务。

  · C-LSTM既能捕捉短语的局部特征(CNN),也能捕捉句子的序列信息(LSTM)。

[2] 介绍

  2.1、NLP中CNN与RNN的优缺点:
  CNN能够从时间或空间数据中学习局部响应,但缺乏学习序列相关性的能力;另一方面,RNN专门用于序列建模,但不能并行提取特征。

  2.2、C-LSTM核心思想:

CNN

LSTM

C-LSTM

嵌入层

嵌入层

嵌入层

卷积层

LSTM层

卷积层

池化层

全连接层

LSTM层

全连接层

全连接层

  C-LSTM模型将CNN卷出来的​​窗口特征​​​,组织成​​序列化窗口特征​​作为LSTM的输入。通过这种方式,不是直接从输入的句子构建LSTM,而是首先将每个句子转换为连续的窗口(n-gram)特征。

在网络结构中的全连接层之前,所做的工作都是在寻找一种最好的文本向量化表示方法。

  2.3、C-LSTM模型图:

  官方图:

【文本分类】A C-LSTM Neural Network for Text Classification_c-rnn


  如上图,设有一个batch中的一个文本[“The”,“movie”,“is”,“awesome”,"!"]。卷积核边长为3 x 4,卷积通道为4。那么对于初始的文本向量,会产生出4通道的3 x 1维feature map。然后再把多通道的feature map中对应位置提取在一起,作为LSTM的输入。

  池化层会破坏卷积后的序列性,所以模型中没有池化。

【注一】这里卷积核宽度为embedding层维度,这样卷积后的一个通道的size为n行一列,转置一下就是个一维数组了。
【注二】 在torchtext中,如果想把卷积层的输出作为LSTM层的输入的话,需要设置LSTM层的input_size等于卷积层的filter_num(卷积通道数)。

[3] 疑问?

  1、CNN中卷积核的长宽设置问题,宽不等于embedding_dims时,时什么情况?
  2、如何比较不同模型之间的精度?同一模型每次运行的精度都不一样。

[4] 获取本项目的源代码

如果需要本项目的源代码,请关注我的公众号,回复“论文源码”。

【文本分类】A C-LSTM Neural Network for Text Classification_c-rnn_02