本文是CNN应用在NLP领域的开山之作。TextCNN的成功并不是网络结构的成功,而是通过引入已经训练好的词向量在多个数据集上达到了超越benchmark的表现,证明了构造更好的embedding,是提升NLP各项任务的关键能力。
作者做了一系列实验,这些实验使用卷积神经网络(CNN)在预训练的词向量之上进行训练,用于句子级分类任务。作者发现,一个简单的CNN只需要很少的超参数调整和静态向量即可在多个基准测试上都能获得出色的结果。通过微调来学习特定于任务的向量可以进一步提高性能。此外,作者还建议对架构进行间的修改,以允许使用特定于任务的向量和静态向量。
论文所使用的模型结构图如下图,我们来看看作者说的一个简单的CNN,到底有多简单。
上图的最左边便是词嵌入矩阵,将输入的句子中的每个单词映射成一个向量表示,然后拼接起来成为一个7x5的矩阵,7就是输入句子的长度,5就是词向量的维度。然后使用尺寸为2x2,3x3,4x4的卷积核(每种尺寸的卷积核个数为2个)对词嵌入矩阵进行卷积操作,得到2x3(3是尺寸个数,2是每种尺寸的卷积核个数)个特征向量。再对得到的6个特征向量分别进行最大池化操作再拼接池化化的向量得到最终的特征向量。再将得到的特征向量经过一个全连接层将特征向量大小映射为类别个数大小并输出各个类别的概率大小。
没了,就是这么简单,再看下面的实验结果。CNN-rand是词嵌入矩阵随机初始化,然后通过反向传播更新输入层的各个单词对应的词向量。CNN-static是词嵌入矩阵使用与训练好的词向量矩阵,然后所有单词的词向量都保持静态(包括随机初始化的未知单词),仅学习模型的其他参数。CNN-non-static是使用预训练的词向量矩阵+通过反向传播的方式动态调整词向量嵌入矩阵的值。CNN-multichannel是具有两组词向量的模型,每组词向量都被视为一个“通道”,每个卷积核都应用于两个通道,但梯度仅通过其中一个通道反向传播,因此,该模型能够微调一组词向量,同时保持另一组词向量静态。
CNN-static的实验结果的数据说明了作者的发现:一个简单的CNN只需要很少的超参数调整和静态向量可以在多个基准测试上都能获得出色的结果。CNN-non-static 和CNN-static的对比说明了“通过微调来学习特定于任务的向量可以进一步提高性能”。