NLP 教程

NLP 笔记

TextCNN 原理及文本分类任务等详解,通俗易懂附源码

NLP 意图识别详解 NLP 意图识别详解


TextCNN 是利用卷积神经网络(CNN)对文本进行分类的算法,由韩国人 Yoon Kim 于2014年在 “Convolutional Neural Networks for Sentence Classification” 一文中提出的算法。

模型结构及详解

网络结构图

先直接上图:

结构详解

  1. 第一层是输入层,也是 embbeding layer,如上图根据词表找到对应的词向量(至于词向量,有4种,具体下面介绍),词向量的维度是固定的,相对于原来的One-Hot编码要小,同时在新的词向量空间语义上相近或者语法相近的单词会更加接近。上图示例是 5。
  2. 第二层是卷积层(convolutional layer),示例中共有6个卷积核,尺寸为 2×5、3*5、4×5,每个尺寸各2个,输入层分别与6个卷积核进行卷积操作,再使用激活函数激活,每个卷积核都得到了对应的 feature maps。
  3. 第三层是池化层(pooling layer),使用 1-max pooling 提取出每个 feature map 的最大值,然后进行级联,如上图中是得到6维的特征表示。
  4. 第四层是输出层,输出层使用softmax激活函数进行分类,在这层可以进行正则化操作(l2-regulariation)。

细节介绍

  • feature

    这里的特征就是词向量,词向量有静态和非静态的,静态的可以使用预训练的(如 word2vector 或者 glove),非静态的则可以在训练过程中进行更新,一般推荐非静态的 fine-tunning 方式,即以 pre-train 的词向量进行初始化,然后在训练过程中进行调整,它能加速收敛。

  • channel

    图像中可以利用 (R, G, B) 作为不同channel,而文本的输入的channel通常是不同方式的embedding方式(比如 word2vec 或 glove),实践中也有利用静态词向量和fine-tunning词向量作为不同channel的做法。

  • conv-1d

    在TextCNN中用的是一维卷积(conv-1d),一维卷积带来的问题是需要设计通过不同size的filter获取不同宽度的视野。

  • 1-max pooling

    在TextCNN中用的是1-max pooling,当然也可以使用(dynamic) k-max pooling,在pooling阶段保留 k 个最大值,保留全局信息。

TextCNN 实现

TextCNN 我们通过上述的介绍了解了其底层的网络结构及相关细节,具体在业界实现中需要明确要训练哪些数据。

参数设置

  • 序列长度:一般设置为最大句子的长度。
  • 类别数量:预测的类别的数量,也就是分类的个数。
  • 字典大小:即词汇数量,有多少个词(中文的话就是字),其字典大小就是其数量。
  • 嵌入长度:即每个词表示的词向量长度,也叫向量的维度,训练词向量可以使用。
  • word2cec、fasttext、glove 等工具
  • 卷积核大小:对应n元语法的概念。
  • 卷积核个数:卷积核大小对应的卷积核个数。