admin 发布的文章

一、算法背景

1论文

Yoon Kim在论文(2014 EMNLP) Convolutional Neural Networks for Sentence Classification提出TextCNN。

将卷积神经网络CNN应用到文本分类任务,利用多个不同size的kernel来提取句子中的关键信息(类似于多窗口大小的ngram),从而能够更好地捕捉局部相关性。

二、算法过程

TextCNN主要过程分为四部,也可以说是四个层。

  • Embedding(文本向量化):将文本中的每个词语转换成相同维度的词向量。
  • Convolution(卷积层):通过不同卷积核的大小kernel_size = (1,2,3,4,5)做卷积运算。
  • MaxPooling(池化层):
  • FullConnection and Softmax(全连接层):全连接的 softmax 层,输出每个类别的概率。

整个算法过程论文中所画流程图如下:
在这里插入图片描述

三、算法详解

1.Embedding层
2.Convolution(卷积层)

2.1卷积核的定义
卷积核为一个向量,所以有宽度,和高度。另外卷积核还有一个数量。
2.2:卷积核的宽度
大家在图像处理中经常看到的卷积核都是正方形的,比如44,然后在整张image上沿宽和高逐步移动进行卷积操作。但是nlp中输入的“image”是一个词矩阵,比如n个words,每个word用200维的vector表示的话,这个”image”就是n200的矩阵,卷积核只在高度上已经滑动,在宽度上和word vector的维度一致(=200),也就是说每次窗口滑动过的位置都是完整的单词,不会将几个单词的一部分“vector”进行卷积,这也保证了word作为语言中最小粒度的合理性。参见上图中第二列方格,卷积核的宽度和词向量的宽度同为d=5
2.3卷积核的高度
可以成为卷积核的大小。通常取值为2,3,4,5等。可以认为是滑动窗口的大小,每次移动窗口可以卡2个字或者3个字,4个字,类似n-gram模型。参见上图中第二列方格,卷积核的高度为2,3,4
2.4卷积核的数量
比如卷积核大小为2的可以有100个数量。参见上图中第二列方格,卷积核的数量都是2个
2.5卷积的计算
例如:
1 1 0
0 0 1
1 1 1
1 0 1
0 0 0
与卷积核
1 1 1
0 1 1
计算 结果为
3
3
4
2
计算结果shape=(sentence_len - filter_size + 1, 1)
参见上图第三列,如果卷积核数量为2,则会计算出来两个shape=(sentence_len - filter_size + 1, 1)的向量。
如果是图像的卷积计算参考图片:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2DBLArZv-1600566815219)(https://raw.githubusercontent.com/listwebit/ImgDate/master/cnn-2.gif)]

3.MaxPooling(池化层)

池化层的作用:保留显著特征、降低特征维度

池化/采样的方式通常有以下两种:
1、Max-Pooling: 选择Pooling窗口中的最大值作为采样值;
2、Mean-Pooling: 将Pooling窗口中的所有值相加取平均,以平均值作为采样值

3.1最大池化
(1)如果卷积核的数量都是2,则会在两个向量中每个向量里面找个最大值,组成一个新向量。
(2)将所有向量拼接
例如上图

4.FullConnection and Softmax(全连接层)