·摘要:
本文作者将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模型图:
官方图:
如上图,设有一个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] 获取本项目的源代码
如果需要本项目的源代码,请关注我的公众号,回复“论文源码”。