TextCNN 是利用卷积神经网络(CNN)对文本进行分类的算法,由韩国人 Yoon Kim 于2014年在 “Convolutional Neural Networks for Sentence Classification” 一文中提出的算法。
模型结构及详解
网络结构图
先直接上图:
结构详解
- 第一层是输入层,也是 embbeding layer,如上图根据词表找到对应的词向量(至于词向量,有4种,具体下面介绍),词向量的维度是固定的,相对于原来的One-Hot编码要小,同时在新的词向量空间语义上相近或者语法相近的单词会更加接近。上图示例是 5。
- 第二层是卷积层(convolutional layer),示例中共有6个卷积核,尺寸为 2×5、3*5、4×5,每个尺寸各2个,输入层分别与6个卷积核进行卷积操作,再使用激活函数激活,每个卷积核都得到了对应的 feature maps。
- 第三层是池化层(pooling layer),使用 1-max pooling 提取出每个 feature map 的最大值,然后进行级联,如上图中是得到6维的特征表示。
- 第四层是输出层,输出层使用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元语法的概念。
- 卷积核个数:卷积核大小对应的卷积核个数。