TextCNN介绍

TextCNN是用来做文本分类的卷积神经网络,由于其结构简单,效果好,在文本分类、推荐等NLP领域应用广泛。

TextCNN结构

TextCNN的结构比较简单,输入数据首先通过一个embedding layer,得到输入语句的embedding 的表示,然后通过一个convolution layer,提取语句的特征,最后通过一个fully connected layer得到最终的输出,整个模型的结构如下图:
TextCNN介绍_第1张图片
上图是论文中给出的视力图,下面分别介绍每一层。

  • embedding layer: 嵌入层,这一层的主要作用是将输入的自然语言编码成distributed representation,具体的实现方法可以参考word2vec相关论文,这里不再赘述。可以使用预训练好的词向量,也可以直接在训练textcnn的过程中训练出一套词向量,不过前者比或者快100倍不止。如果使用预训练好的词向量,又分为static方法和no-static方法,前者是指在训练textcnn过程中不再调节词向量的参数,后者在训练过程中调节词向量的参数,所以,后者的结果比前者要好。更为一般的做法是:不要在每一个batch中都调节embedding层,而是每100个batch调节一次,这样可以减少训练的时间,又可以微调词向量。
  • convolution layer:这一层主要是通过卷积,提取不同的n-gram特征。输入的语句或者文本,通过embedding layer 后,会转变成一个二维矩阵,假设文本的长度为|T|,词向量的大小为|d|,则该二维矩阵的大小为|T|X|d|,接下来的卷积工作就是对这一个|T|X|d|的二维矩阵进行的。卷积核的大小一般设定为
    n × ∣ d ∣ n \times |d| n×d
    n是卷积核的长度,|d|是卷积核的宽度,这个宽度和词向量的维度是相同的,也就是卷积只是沿着文本序列进行的,n可以有多种选择,比如2、3、4、5等。对于一个|T|X|d|的文本,如果选择卷积核kernel的大小为2X|d|,则卷积后得到的结果是|T-2+1|X1的一个向量。在TextCNN网络中,需要同时使用多个不同类型的kernel,同时每个size的kernel又可以有多个。如果我们使用的kernel size大小为2、3、4、5X|d|,每个种类的size又有128个kernel,则卷积网络一共有4X128个kernel,则卷积网络一共有4 X128个卷积核。
  • max-pooling layer:最大池化层,对卷积后得到的若干一维向量取最大值,然后拼接在一块,作为本层的输出值。如果卷积核的size=2,3,4,5,每个size有128个kernel,则经过卷积层后会得到4X128个一维的向量(注意这4X128个一维向量的大小不同,但是不妨碍取最大值),再经过max-pooling之后,会得到4X128个scalar值,拼接在一块,得到最终的结构512X1的向量。max-pooling层的意义在于对卷积提取的n-gram特征,提取激活程度最大的特征。
  • fully-connected layer:这一层没有特别的地方,将max-pooling layer后再拼接一层,作为输出结果。实际中为了提高网络的学习能力,可以拼接多个全连接层。

你可能感兴趣的:(TextCNN介绍)