1.从RNN到CNN
RNN网络的典型缺点:
- 当没有前缀时,无法捕获词与信息(RNN是顺序型的,必须要通过顺序推导)
- RNN的编码通常把很多词编成一个向量(这里可以用attention解决)
在使用RNN进行文本的分类是就会遇到这两个问题,所以RNN进行文本分类的效果并不是很好。
应用CNN的一些想法:需要固定每个词序列的长度,而不考虑语法或者连贯的正确性。比如,把这样一句tentative deal reached to keep government open英文拆成tentative deal reached, deal reached to, reached to keep, to keep government, keep government open。
2.1D convolution for text
对于cnn在text上的应用,大致的过程如图所示:
首先有一个文版的词向表示:
然后有个卷积核(size=3),如图:
之后把卷积核在词向量上做一维卷积结果如图所示:
之后可以加多个卷积核,得到多维的数据,还可以加pading填充,使卷积的长度不变。
也可以加入池化层,比如maxpool/avergepool,如图所示:
或者也可以在CNN中设置stride,或者采用local max pool或者k-max-pool等等。
3.Single Layer CNN for Sentence Classification
CNN在语言方面多用于文本分类:
- 文本的主观倾向,积极的还是消极的
- 句子是主动的还是被动的,是关于什么问题的等
课程中介绍了早期CNN用于文本分类的一篇论文: Convolutional Neural Networks for Sentence Classification. EMNLP 2014.
主要思路如图:
(这里计算卷积ci的时候还加入了偏置)
论文中直接计算max-pool的结果:
或者可以加入多个卷积核W,然后去得到结果,如图所示:
最后把得到的特征总结起来,并做softmax处理,如图所示:
课程中又提到另外一篇文章:Zhang and Wallace
(2015) A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification。
里面的主要思路也是,采用多个卷积核对文本进行卷积处理,将的得到结果进行拼接,然后softmax。如图所示:
这篇文章还采用了常用的dropOut正则化和另外一种正则化的手段,如图所示:
4.Model comparison
课程举例几种常见的文本分类模型:
- bag of vector: 直接对文本的词向量进行相加求和等操作。
- window model:对词向输入简单的神经网络(前面课程学过)
- CNNs
- RNNs
Our growing toolkit
Gated units used vertically:将门单元应用于垂直结结构,如图:
左侧是残差网络(residual block),右侧在残差块的两个输出前面家里一个控制门,这两种结构都可以应用与非常深的网络的结构。
Batch Normalization (BatchNorm):通常用于CNN网络中,Batch Normalization把一层输出后的分布转换为均值为0方差为1的标准正态分布。原理是使它更多的分布在导数下降最快的阶段,这样通过反向传播学习,才会取得更好的效果。
1*1 Convolutions:就是卷积核是1为的卷积,它的实质上就是在各个chanal之间做全连接,但是它不同与普通的全连接层需要大量的参数。也可以用它来做chanal层数量的变换,如图所示:
此外CNN还可以用于语言模型的编码,产生词向量等等操作。
5. Very Deep Convolutional Networks for Text Classification
像CNN处理图像一样,在处理文本时也采用具有一定深度的CNN。在Conneau, Schwenk, Lecun, Barrault.EACL 2017.这篇文章中,提出了VD-CNN architecture,结构如下图所示:
其中每个conv块的具体结构如图所示:
6.CNN在NLP中的其他应用
利用CNN结构加速RNN网络的运行速度:Quasi Recurrent Neural Networks by James Bradbury,Stephen Merity, Caiming Xiong & Richard Socher. ICLR 2017