3.文本分类——textCNN模型


一、 简介

TEXTCNN是由Yoon Kim在论文(2014 EMNLP) Convolutional Neural Networks for Sentence Classification中提出的,其主要思想是将不同长度的短文作为矩阵输入,使用多个不同size的filter去提取句子中的关键信息(类似于多窗口大小的ngram),并用于最终的分类。

二、 模型结构

TextCNN的结构分为:嵌入层、卷积层、池化层。
在这里插入图片描述

2.1 嵌入层

该层使用词向量,由word2vec预训练好。由于每个词都可以表示成一个词向量的形式,所以对于实验数据集中的所有词条,可以得到一个嵌入矩阵 M M M,该矩阵 M M M的每一行都是一个词向量。这个嵌入矩阵 M M M可以使静态的,即固定不变。也可以是非静态的,即根据反向传播进行更新。

数据量较大:可以直接随机初始化embeddings,然后基于语料通过训练模型网络来对embeddings进行更新和学习。

数据量较小的时候使用静态的:可以利用外部语料来预训练(pre-train)词向量,然后输入到Embedding层,用预训练的词向量矩阵初始化embeddings。(通过设置weights=[embedding_matrix])。使用预训练的词向量,即利用word2vec、fastText或者Glove等词向量工具,在开放领域数据上进行无监督的学习,获得词汇的具体词向量表示方式,拿来直接作为输入层的输入,并且在TextCNN模型训练过程中不再调整词向量, 这属于迁移学习在NLP领域的一种具体的应用。

2.2 卷积层

输入一个句子,首先进行分词,假设得到 s s s个单词。然后根据已得到的嵌入矩阵 M M M,可以整合得到词向量。假设词向量有 d d d维。那么对于输入的句子,可以得到一个 s s s d d d列的矩阵 A ∈ R s × d A \in R^{s \times d} ARs×d

接下来,将矩阵 A A A视为一张图像,使用卷积神经网络去提取 A A A的特征。在这里,使用一维卷积的理由是:一个句子中相邻的单词的关联性总是比较高的。卷积核的宽度采用的是词向量的维度 d d d,高度是一个可以设置的超参数。

现在假设卷积核是一个宽为 d d d高为 h h h的矩阵 w w w,那么 w w w就有 d ∗ h d*h dh个参数需要被更新。对于一个句子有矩阵 A ∈ R s × d A \in R^{s \times d} ARs×d a [ i : j ] a[i:j] a[i:j]表示 A A A的第 i i i行第 j j j列。卷积操作可表示为:
o i = w ⋅ A [ i : i + h − 1 ] , i = 1 , 2 , . . . , s − h + 1 {o_i} = w \cdot A[i:i + h - 1],i = 1,2,...,s - h + 1 oi=wA[i:i+h1],i=1,2,...,sh+1

然后叠加上偏置 b b b,并使用激活函数 f f f激活,得到所需特征,公式为:
c i = f ( o i + b ) {c_i} = f({o_i} + b) ci=f(oi+b)

对于一个卷积核,可以得到特征 c ∈ R s − h + 1 c \in {R^{s - h + 1}} cRsh+1 ,合计 s − h + 1 s - h + 1 sh+1个特征。具体实验为了得到更加丰富的特征语义表达,可以使用多个不同高度的卷积核。

2.3 池化层

使用不同尺寸的卷积核,可得不一样大小的特征,称为Feature Map。为了最后特征提取,我们需要使它们的维度相同,做法是对每个特征图用池化函数。最常用的方法就是1-max pooling,提取出feature map中的最大值。这样做就可以令每一个卷积核得到的特征是一个值。

2.4 全连接层

对所有卷积核都使用:1-max pooling,再级联起来,可得最终的特征向量,此处可用 dropout 以防过拟合。并在全连接层上添加l2正则化参数。

2.5 softmax层

将全连接层的输出使用softmax函数,获取文本分到不同类别的概率。

如果是训练的话,此时便会根据预测label以及实际label来计算损失函数, 计算出softmax 函数,max-pooling 函数, 激活函数以及卷积核函数 四个函数当中参数需要更新的梯度, 来依次更新这四个函数中的参数,完成一轮训练 。

如果是预测的话,到这里整个textCNN的流程遍结束了。

为了便于理解,下面对上述模型结构做一个实例化阐述。如图示为TextCNN的模型结构。
在这里插入图片描述

在这里,word embedding的维度是5,对于这个句子“I am very good!”,可转换为如图中所示的矩阵 A ∈ R 5 × 5 A \in {R^{5 \times 5}} AR5×5。此处有6个卷积核,尺寸分别为: ( 2 × 5 ) , ( 3 × 5 ) , ( 4 × 5 ) (2 \times 5),(3 \times 5),(4 \times 5) (2×5),(3×5),(4×5),每一个尺寸各设有两个。

矩阵A分别和以上对应的卷积核执行卷积操作,再使用激活函数来激活。这样每一个卷积核都得到了特征向量(feature maps)。

使用1-max pooling,提取每个feature map的最大值,然后级联,得到最终的特征表达。然后将特征输入到softmax layer进行分类, 在这层可以用正则化操作( L2-regulariation)。

三、textCNN总结

  • textCNN的流程:先将文本分词做embeeding得到词向量, 将词向量经过一层卷积,一层max-pooling, 最后将输出外接softmax 来做n分类。

  • textCNN 的优势:模型简单, 训练速度快,效果不错。

  • textCNN的缺点:模型可解释型不强,在调优模型的时候,很难根据训练的结果去针对性的调整具体的特征,因为在textCNN中没有类似gbdt模型中特征重要度(feature importance)的概念, 所以很难去评估每个特征的重要度。

四、实现

详情参考博客:https://www.cnblogs.com/ModifyRong/p/11442595.html

五、参考

  1. https://www.cnblogs.com/ModifyRong/p/11319301.html
  2. http://www.aclweb.org/anthology/D14-1181
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值