ConvNets for NLP
一、From RNNs to Convolutional Neural Nets
RNN无法捕获没有前缀上下文的短语的信息。并且其最后一个向量通常过多的捕获最后一个单词的信息,而softmax通常仅计算最后一个向量的信息。
CNN的核心思想是计算句子中由每个可能的单词组成的子序列的向量表示。并且其通常不考虑短语的语法性。
CNN最常见于图像领域,它通常用于从图像中提取特征,这里不详细讲解。那么它是如何应用于NLP的呢?
CNN被用于NLP和被用于CV最大的不同在于CNN在NLP中使用时,一般使用的是1D卷积。而1D卷积就非常类似于NLP中语言模型所涉及的n-grams模型。
我们以下面这个图为例子,来简要介绍下NLP中CNN的参数:
1、滤波器(filter or kernel):也被称为卷积核,其目的在于局部捕获特征,而不是像全连接层那样,这样有利于减少参数的数目,减少计算量。
2、padding:在特征图四周补充0值(在NLP是在上下补充),其目的在于增加各个边的pixels的数目,保持特征图不要太小,
1.这样可以避免丢失原图信息,保持特征图与原图大小一致,
2.可以使更深层的layer的input依旧保持有足够大的信息量,
3.padding出来的pixel的值都是0,不存在噪音问题。
3、stride:步幅,即卷积核每次移动的长度。
4、pooling:即池化,主要分为下面几种:
1.max pooling:选取通过卷积操作得到的矩阵中每列的最大值
2.average pooling:选取通过卷积操作得到的矩阵中每列的平均值
3.k-max pooling:选取通过卷积操作得到的矩阵中每列的前k个最大值
4.local-max pooling:选取在通过卷积操作得到的矩阵上自定义区域内每列的最大值
5、dilation:也被称为:空洞卷积、膨胀卷积。
膨胀卷积的好处是不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。在自然语言处理中需要较长的sequence信息依赖的问题中,都能很好的应用。
二、Single Layer CNN for Sentence Classification
1、论文简介
相关论文及地址
1、Yoon Kim (2014): Convolutional Neural Networks for Sentence Classification. EMNLP 2014. https://arxiv.org/pdf/1408.5882.pdf
Code: https://arxiv.org/pdf/1408.5882.pdf [Theano!, etc.]
2、A variant of convolutional NNs of Collobert, Weston et al. (2011)
论文目标在于对句子进行分类,主要是情感分析,还有句子主客观分类,以及问题分类。
这篇论文中设计模型的结构如下:
其结构很简单,使用了一层卷积层以及一层池化层。每个句子向量由每句话中的词向量组成。
CNN中单个通道特征的计算公式如下:
且最后的结果是一个特征图:
此外模型使用的是max-pooling,它能捕获句子中最重要的信息,且使用了多个权重不同的卷积核,并且大小也不一致,这样模型可以捕获unigrams、bigrams、tri-grams、4-grams特征。最后,模型还是用了双通道,每个通道的初始值为由word2vec或glove预训练好的词向量,在训练过程中,冻结一个通道,另外一个随着训练不断地改变。
2、模型的改进
后来,Zhang and Wallace提出了上述网络地改进版,A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification
论文出处:https://arxiv.org/pdf/1510.03820.pdf
3、常见的tricks
在NLP中常见CNN架构一般都会采用一些tricks。比如:
1.dropout:它会使用概率p(超参数)为1,来创建伯努利随机变量的掩蔽向量r,在训练过程中随机删除部分特征,可以防止共适应问题,并且在测试阶段不会进行dropout。
2.L2正则化:同dropout一样,目的都在于防止过拟合
3.残差连接:Residual和Highway,当网络结构很深的时,效果很好。
4.Batch Normalization:通常在CNN中使用,其通过缩放激活来转换批处理的卷积输出,使其具有零均值和单位方差,这也是统计Z变换,因为它是批量更新,因此每次的波动不会对模型产生太大影响,使用BatchNorm会使模型对参数初始化不太敏感,因为输出会自动重新调整,而且使模型中学习率的调整更加方便。
4.1×1卷积核:1.实现跨通道的交互和信息整合,2.进行卷积核通道数的降维和升维
4、模型比较
Bag of Vectors:当后面跟着几个ReLU层地时候,是一个表现非常好的baseline。
Window Model:适用于不需要广泛上下文的问题的单词分类。例如,POS,NER。
CNNs:适用于分类,短语需要零填充,但其难以解释,易于在GPU上并行化,效率高且用途广泛。
RNN:认知合理(从左到右阅读),不是最好的分类(如果只使用最后状态),比CNN慢得多,有利于序列标记和分类,非常适合语言模型,引入注意力机制后表现十分出色。
CNN不仅可以用于分类任务,还可以用于机器翻译和Seq2Seq模型中。
5、Learning Character-level Representations for Part-of-Speech Tagging
模型结构图如下:
该模型主要是对字符进行卷积以生成单词嵌入并且使用固定窗口来处理PoS标记的字嵌入
6、Character-Aware Neural Language Models
结构图如下:
该模型主要利用了基于字符的单词嵌入以及利用卷积,HighwayNet和LSTM
7、Very Deep Convolutional Networks for Text Classification
虽然LSTM、CNN、Attention等模型在NLP中都得到了广泛的应用,但是这些模型的结构通常都不是特别深。而本次介绍的VDCNN就是一个结构非常深的网络。
该模型在设计上非常像一个视觉中常用到的VGGnet或ResNet。
其卷积块部分的结构如下所示:
每个卷积块是两个卷积层,每个卷后面是批量范数和ReLU非线性,采用大小为3的卷积并且采用填充以保留(或在本地池化时减半)维度
7、Quasi-Recurrent Neural Network
虽然RNN在NLP中的应用很广泛且效果也不错,但是它不能采取并行操作,因此它的速度非常慢。但CNN可以并行,因此有人结合CNN和RNN两个模型来构造一个新的模型,下面我们介绍下QRNN,它与LSTM以及CNN的结构简要对比如下:
跨时间并行的卷积计算公式如下:
并且跨通道的并行门控伪循环过程在池化层中完成:
QRNN的不足:
1.不适用于字符级LM和LSTM,难以建模更长的依赖关系。
2.通常需要更深的网络才能获得与LSTM一样好的性能,但深度很深仍然更快,并且使用深层的结构来代替循环