TextCNN

论文来源:“Convolutional Neural Networks for Sentence Classification”

为了更好理解,以下图举例,实际参数值参考论文

图中第一层输入为7*5的词向量矩阵,其中词向量维度为5,句子长度为7,然后第二层使用了3组宽度分别为2、3、4的卷积核,图中每种宽度的卷积核使用了两个。

其中每个卷积核在整个句子长度上滑动,得到n个激活值,图中卷积核滑动的过程中没有使用padding,因此宽度为4的卷积核在长度为7的句子上滑动得到4个特征值。然后出场的就是卷积的好基友全局池化了,每一个卷积核输出的特征值列向量通过在整个句子长度上取最大值得到了6个特征值组成的feature map来供后级分类器作为分类的依据。

TextCNN_第1张图片

图2 TextCNN结构

我们知道图像处理中卷积的作用是在整幅图像中计算各个局部区域与卷积核的相似度,一般前几层的卷积核是可以很方便地做可视化的,可视化的结果是前几层的卷积核是在原始输入图像中寻找一些简单的线条。NLP中的卷积核没法做可视化,那么是不是就不能理解他在做什么了呢,其实可以通过模型的结构来来推断他的作用。因为TextCNN中卷积过后直接就是全局max pooling,那么它只能是在卷积的过程中计算与某些关键词的相似度,然后通过max pooling层来得出模型关注那些关键词是否在整个输入文本中出现,以及最相似的关键词与卷积核的相似度最大有多大。我们假设中文输出为字向量,理想情况下一个卷积核代表一个关键词,如下图所示:

TextCNN_第2张图片

图3 TextCNN卷积核的意义示意图

TextCNN模型最大的问题也是这个全局的max pooling丢失了结构信息(词汇的顺序、位置信息,比较难以捕获文本序列中的否定、反义等语义信息),因此很难去发现文本中的转折关系等复杂模式,TextCNN只能知道哪些关键词是否在文本中出现了,以及相似度强度分布,而不可能知道哪些关键词出现了几次以及出现这些关键词出现顺序。假想一下如果把这个中间结果给人来判断,人类也很难得到对于复杂文本的分类结果,所以机器显然也做不到。针对这个问题,可以尝试k-max pooling做一些优化,k-max pooling针对每个卷积核都不只保留最大的值,他保留前k个最大值,并且保留这些值出现的顺序,也即按照文本中的位置顺序来排列这k个最大值。在某些比较复杂的文本上相对于1-max pooling会有提升。

 

转载自:http://www.52nlp.cn/tag/%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB%E6%A8%A1%E5%9E%8B

你可能感兴趣的:(TextCNN)