概述
CNN文本分类,是将CNN处理图像的思路移植到文本问题上。具体的理论可以阅读‘Convolutional Neural Network for Sentence Classification ’。
结构
text-CNN 文本分类器一共有4层。 分别是 input layer, convolutional layer, pooling layer 和 soft-max layer。
输入层
input layer实际上是一个embedding layer,有4种嵌入方法。
1.CNN-rand, 完全的随机初始化词向量矩阵,通过BP不断更新。
2.CNN-static,迁移学习,直接那别人训练好的模型来用。
3.non-static,拿别的模型来初始化最初的向量矩阵,在随后的训练中fine-tuning。
4.multiple channel,这个类似图像处理中的RGB通道,设置不同的通道,每个通道使用一种嵌入方法。
卷积层
整体的流程如上图所示(图片来源于开头所提的论文)。当前的句子为‘wait for the video and don't rent it’. 把一句话当成一张图片,那么每一个字占据一行。整个句子的大小为nd。假设n为句子长度,d为 词嵌入的维度。
对于每一个卷积核而言,其大小为td。 t可以根据具体的需求设定不同的值,但是对于d的值必须要和词嵌入的维度保持相同。与图片的卷积核的行为相比,文本CNN的卷积核只有上下的移动,没有左右的移动。
与图片相比,文本信息的一个不同是大小不一样。连续10句话可能长度各不相同。这里对于句子有一个长度的处理,将所有的句子做定长处理。太长的截断,太短的补0。这里补0并不影响后续,因为在max-pooling层的时候,这些0都会被忽略掉。
以上图为例,对于一个单一的卷积核,在经过卷积后,得到一个列向量,经过max-pooling后会得到一个标量。针对这个情况,有两个解决方案。
1.使用多个filter_size。设置不同大小的卷积核,可以看成和n-gram类似的情况,n取多个不同值。
2.对于同一个filter_size,设置多个filter。
这两步的个人感性理解是对于一个句子看不同的长度,相同长度的句子又从不同的角度考量。
以上全部的卷积核,每一个经过max-pooling层之后都是一个标量,这些标量全部组合成一个列向量,作为输入进入最后的softmax层。
网友评论