NLP——文本分类模型(二)

NLP——文本分类模型(二)

在之前的文章中NLP——文本分类模型(一)中,我们具体简述了TextCNN文本分类模型,下面,我们重点介绍关于CNN应用于文本分类的另外两个常见模型DCNN模型和RCNN模型。

1、DCNN(Dynamic CNN)模型

1.1 模型引入

在上一篇文章中,我们提到过,在TextCNN模型中,我们的具体处理方式是卷积+池化的过程,在卷积的过程中,我们定义了不同的卷积核来表示不同的n-gram的过程。在获得卷积的结果之后,我们采用最大池化来抽取特征,这里我们需要回顾一下N-gram,这种语言模型的特点是根据前面出现的词来推断当前词,如Bi-gram为 P ( x k ∣ x k − 1 ) P(x_k|x_{k-1}) P(xkxk1),在如tri-gram为 P ( x k ∣ x k − 1 x k − 2 ) P(x_k|x_{k-1}x_{k-2}) P(xkxk1xk2)。细心的读者可以发现,在这种预测机制中,是通过前面的连续的n-1个词来预测当前词,请注意,是通过起前面连续的词来进行推断。将这种机制应用到CNN中后,我们卷积的结果也是基于N-gram的,那么也就是说,我们的抽取到的特征也是连续的特征,在经过最大池化之后,我们能获得的是连续特征中的最大的那一个。那么问题来了,我们能不能抽取到N-gram之外的特征呢?举个例子,假设我们有一句话为“今天阳光明媚””,在将n-gram中的n设置为3之后,我们能够抽取的特征是连续的,比如“今天阳,天阳光,阳光明,光明媚”,那么我们单独的抽取到“今天”,“明媚”等等的特征呢?为了解决这个问题,我们在TextCNN的基础上引入Dynamic CNN模型。

1.2 DCNN介绍

首先,我们给出DCNN的整体结构:
在这里插入图片描述

这个过程包括Embedding层,卷积层,池化层,Folding层,卷积层,池化层,输出层。如果了解TextCNN模型,可以知道,这个过程和TextCNN的过程是很类似的,只不过增加了卷积和池化的过程。并且在池化层上做了一些改变。

在之前的文章中,我们已经介绍了Embedding过程和输出层,所以这里我们就不进行赘述了。这里我们主要介绍其他几个过程。

1.2.1 卷积层

传统的卷积方式会缩减原始矩阵的大小,例如原始矩阵的长度为L,卷积核的大小为S,则卷积之后的长度为(L-S+1),这样会损失掉一部分的信息。在DCNN模型中,使用的是一种称为“宽卷积”的形式,通过这种卷积的方式,我们可以扩展卷积之后的矩阵长度为(L-S+1),这样做的目的是不损失句子中的所有信息。我们举一个例子来看一下:

在这里插入图片描述
这是一个卷积核为5的卷积过程,以右侧的图为例,对于输入中的第一个元素s1和卷积之后的第一个元素c1而言,我们假设其前面的四个元素均为0填充的,那么也就是说,第一个元素C1使用4个填充和一个真实的s1计算而来,后面的过程类似,对于最后一个卷积的结构ck,其是由ss节点和后面的4个0填充节点计算得来的。这里,我们采用的也是和TextCNN中相同的一维卷积。

1.2.2 K-max池化

这个位置是对之前textCNN的一种改进,在textCNN中,我们选择是最大池化,而所谓的K-max池化,就是去前k个最大的值。进一步,我们通过网络结构和k的初始值,在后面不断增加卷积核池化的操作中,动态的调节K的大小,其计算公式为:

K c u r = m a x ( k t o p , L − l L S ) K_{cur}=max(k_{top},\frac{L-l}{L}S) Kcur=max(ktop,LLlS)
其中S表示句子的长度,L表示整个网络的深度,l表示当前深度, k t o p k_{top} ktop表示初始的值。

1.2.3 Folding层

这是一个折叠层,将上一层的输出按照不同维度进行相加合并。我个人理解是一种全局信息融合,降低维度的方式。但是对于模型整体而言,意义不是很大。

1.3 总结

相比于TextCNN,DCNN采用的是宽卷积+动态池化的过程,首先,宽卷积的意义在于获取到全部的特征信息,不发生遗漏,动态池化的目标是从卷积结果中获得更多的特征信息。通过宽卷积,我们也能解决上面所提出的问题,比如,对于“今天”这个词,我们将其前面的特征用0填充,就可以卷积到这个词的特征信息。

2、RCCN模型

2.1 模型引入

在之前介绍的TextCNN模型和DCNN模型中,我们具体介绍了基于CNN的文本特征抽取,实现分类的过程,在TextCNN和DCNN中,利用不同的卷积核进行卷积来实现N-gram的过程。但是,如果对于语言模型有一定的了解,那么就可以知道,在深度学习中,基于时间序列的深度模型,对于N-gram的过程具有更高的相似性,所以,在提出来RCNN模型来用于文本分类。这个模型的思路和简单,就是利用RNN+池化操作来完成文本分类的任务。

2.2、RCNN

首先,我们给出模型的整体结构:
在这里插入图片描述

2.2.1 RNN层

在该模型中,使用的是Bi-LSTM来模拟语言模型,为什么使用双向的LSTM呢?原理很简单,单纯的语言模型N-gram是通过前面的词来预测当前词,其局限性在于忽略后面的词汇的信息,为了结合当前词汇的上下文信息,这里我们选择了双向的LSTM来获得上下文的信息。对于LSTM每一个时刻的输出,就是当前词汇+上下文信息。然后将所有词汇的输出。下一步就是一个池化的过程。

2.2.2 池化层

在获得了Bi-LSTM的每一个词汇的输出之后,我们下一步就是对输出向量进行一个max-pooling的操作,对于每一个单词,抽取出其最大特征,然后将每一个词汇的最大特征进行拼接,从而形成一个表示文本的最大特征的特征向量。最后进入softmax的输出层,进行分类。

2.3 总结

一般来讲基于时间序列的模型往往能够更好的去描述语言模型,同时双向的序列模型能够同时考虑上下文的特征信息,从而能获得综合全局信息的向量表示。这种思想被很多模型所采用,比如著名的ELMO模型,这个我们后序会进行介绍。

3 参考

1、文本分类实战-RCNN模型
2、中文短文本分类实例六-DCNN

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值