卷积神经网络(CNN)应用于自然语言处理(NLP)



说到CNN,大家自然想到图像处理。
说到NLP,大家自然想到LSTM,RNN。
但是,去年的斯坦福论文表明,CNN照样可以应用于NLP,并且效果可能更好。

博主做了实验,爬取了各类新闻并对新闻进行分类。这样的分类问题,RNN和CNN都可以达到99%左右的效果,但是,CNN几乎比RNN快了5倍。于是,博主主要针对CNN对于NLP处理中的细节展开讨论。

1.CNN为什么可以处理NLP
随着词向量的发展,word2vec,Glove等现有的词向量库已经能较好的表达词语的含义。因此,我们用N维-词向量就可以度量词语之间的距离,想象N维空间,每个词语是其中的一点。

2.CNN做NLP,输入是什么?
作为卷积操作,类似于图像,输入也是一个二维矩阵,(图像可以说是三维的,因为还有一维是通道数吧)。然后每一行是一个词语的向量,每个输入的二维矩阵就是M个词语,N维度的词向量组成的M*N的矩阵。

3.CNN做NLP,怎么卷积?
选择好了输入,接下来就是卷积。不同于图像处理的卷积,CNN对NLP的卷积核大小有要求,一般来说,卷积核的长度和词向量的维度应该是一致的。比如一个词向量是N维的,那么卷积核就应该是X*N维的,我一般X取(1,2,3。借鉴斯坦福论文)。所以卷积就是提取1个词、2个词、3个词之间的特征。

4.CNN做NLP,还要注意啥?
比如双通道的输入。一般的embedding-layer是可训练的,我使用的模型是2-embedding-layer,一层设置:trainable = false , 一层设置:trainable = true。
这样可以避免在训练过程中的过度拟合。

5.博主能想到的优化?
我能想到的优化有:
试试改变卷积核的大小,看看效果?(带实验)
试着加入类似残差网络的效果,进行损失信息的叠加。(DenseNet)

6.各种模型对比

  1. 首先用的最简单的:双通道+多卷积(1*vector_length、2*vector_length、3*vector_length)+maxpooling+全连接(86%,快)
  2. 然后增加一层卷积:双通道+多卷积(1*30、2*20、3*10)+多卷积(1*10、2*20、3*30)+maxpooling+全连接(85%,慢)
  3. 调整卷积池化顺序:双通道+多卷积+maxpooling+多卷积+全连接(85%,慢)
  4. 然后采用densenet:(85%,慢)

7.总结
对于NLP的卷积,小卷积相比大卷积,性能虽没有提高,但是差别不算很大。



说到CNN,大家自然想到图像处理。
说到NLP,大家自然想到LSTM,RNN。
但是,去年的斯坦福论文表明,CNN照样可以应用于NLP,并且效果可能更好。

猜你喜欢

转载自blog.csdn.net/fuqiuai/article/details/80106374