众所周知,文本分类是NLP领域中十分基础的任务,大部分文本分类模型稍加修改就可以应用到其他任务中。下面介绍几个经典的文本分类模型。

图中被引数来源google学术(2019/5/16)

1. textCNN

作为一个经典的神经网路模型,CNN具有极强的特征提取能力,而且运行速度比RNNs要快的多。当CNN在计算机视觉领域取得巨大成功之后,人们自然想到如何将CNN应用到自然语言处理任务中。然而,其关键问题便是如何选择卷积核的尺寸、如何解释卷积核在NLP任务中的意义。

textCNN[1]采用的卷积核大小为 n	imes d ,其中 d 是词向量的维度, n 作为超参数由人工选择。作者认为这样可以捕捉句子中的n-grams,即如果选择的卷积核分别为 1	imes d2	imes d3	imes d 就表示捕捉了句子中的1-gram、2-gram、3-gram。接著通过一个max-pooling层,捕捉其中最重要的特征,同时还可以解决句子长度不一的问题。

textCNN的结构

作为一个14年提出的模型,textCNN简单有效,十分强大。

2. DCNN

DCNN[2](Dynamic Convolutional Neural Network)和textCNN有些相似,但是从另一个角度来考虑卷积这件事的。

作者认为在建模句子时,词的顺序是非常重要的,循环神经网路(Recurrent neural networks)可以利用词语间的顺序,但是生成的向量会偏向于句子中的最后一个词,所以它适合用在语言模型中,不适合文本分类任务。而递归神经网路[3](Recursive neural networks)通过句法解析树将句子合成一个向量,可以较好的利用词语间的顺序,但它依赖于句法解析树,不容易推广。

RNTN的结构

于是,作者提出可以使用卷积+k-max-pooling动态建模句子的句法结构。其中k-max-pooling指的是进行pooling时选择前k个最大的值。如下图所示,蓝色的线就是k-max-pooling所选择的句法结构。

通过DCNN捕捉句法结构

在DCNN中,卷积核的高度并没有设置为词向量的维度,而是为1。此外,DCNN中D体现在对k-max-pooling中k的动态选择上。在DCNN可以看出k表示了每一层节点的个数,所以k随著层数的增加而会逐渐减少,如下图由5到3。文章给出了k的计算方式,感兴趣的同学去看文章吧。

DCNN的网路结构

3. RCNN

与DCNN中相似,作者认为递归神经网路(Recursive neural networks)和循环神经网路(Recurrent neural networks)虽然利用词之间的顺序,但都存在一些问题。与之对比,CNN不依赖于句法解析树,也没有偏向的问题(bias problem)。但CNN中的问题在于难以决定卷积核的宽度:较小的卷积窗口会造成关键信息的损失,而较大的卷积窗口会使得参数空间过大。

于是,作者提出了RCNN[4](Recurrent Convolutional Neural Network),抛弃了CNN中的卷积核结构,而使用RNN来捕捉单词的上下文。只看上面一句话,你肯定和我当时一样云里雾里了。我们来看下面的图!

RCNN的结构

在上图中,一个单词 w_i 经过双向RNN得到 c_l(w_i),c_r(w_i) ,它们分别保存了单词 w_i 的上下文,接著将 c_l(w_i),c_r(w_i)w_i 对应的词向量拼接在一起得到 x_i ,即

x_i=[c_l(x_i);e(x_i);c_r(x_i)].

x_i 经过一个全连接网路得到 y_i 。这便是RCNN的卷积层,之后max-pooling层则和普通的CNN一样。

从下图中,我们可以看到CNN的性能随著卷积核窗口的大小先增加后下降,并且RCNN的性能优于CNN。由于textCNN是同时取多个卷积窗口,所以根据本文无法判断RCNN和textCNN性能谁好谁坏,但是RCNN为我们设计网路结构提供一个非常好的思路。

RCNN和CNN的性能对比

文章还列举出了由RCNN获得的关键词。文章将在max-pooling层被选择次数最多的词视为关键词。

情感分类中通过RCNN获得的类别关键词

4. HAN

前面的模型都是面向句子的,而现实中的许多分类任务是面向文档的。于是,有学者在2016年提出了HAN[5](Hierarchical Attention Networks),从名字我们就可以看出此模型的两个关键点分别是层次结构和Attention。

HAN的网路结构分两部分,首先通过attention机制将一句话合成为一个向量 s_i ,然后再次通过attention机制将一个文档中的所有句子合成为一个向量 v ,再接一个全连接层输出预测结果。

han的网路结构

合词成句的时候,(1) 首先使用一个双层的GRU获得第 i 个句子第 t 个单词的隐含表示 h_{it} ;(2) 接下来, h_{it} 首先经过全连接层生成 u_{it} ,然后计算 u_{it} 与向量 u_w 的相似度 alpha_{it} ,通过相似度 alpha_{it}h_{it} 得到句子的加权表示。其中,u_w是网路中可学习的参数,用以衡量单词对分类任务的重要程度,可以理解为判断单词是否为停用词的一个向量。

u_{it}=	anh(W_wh_{it}+b_w)\ alpha_{it}=frac{exp(u_{it}^	op u_w)}{sum_t exp(u_{it}^	op u_w)}\ s_i=sum_t alpha_{it}h_{it}.

合句成文与合词成句类似,对应的向量 u_s用来衡量句子的重要程度。

这种层次结构使得HAN在文档分类中的性能得到大幅提升。此外,文章展示了单词在合词成句时的权重分布,从下图(b)-(f)中可以看出,随著情感倾向由负变为正,good的平均权重逐渐增加。

情感分类任务中good的attention权重分布。

由于HAN使用了RNN,它的时间和空间开销均大大超过textCNN。后续有文章[6]保持HAN中的层次结构,但是去掉了其中的RNN结构以优化时间开销,但引起的关注不大。

参考

  1. ^Kim Y. Convolutional neural networks for sentence classification[J]. arXiv preprint arXiv:1408.5882, 2014.
  2. ^Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences[J]. arXiv preprint arXiv:1404.2188, 2014.
  3. ^Socher R, Perelygin A, Wu J, et al. Recursive deep models for semantic compositionality over a sentiment treebank[C]//Proceedings of the 2013 conference on empirical methods in natural language processing. 2013: 1631-1642.
  4. ^Lai S, Xu L, Liu K, et al. Recurrent convolutional neural networks for text classification[C]//Twenty-ninth AAAI conference on artificial intelligence. 2015.
  5. ^Yang Z, Yang D, Dyer C, et al. Hierarchical attention networks for document classification[C]//Proceedings of the 2016 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. 2016: 1480-1489.
  6. ^Gao S, Ramanathan A, Tourassi G. Hierarchical convolutional attention networks for text classification[R]. Oak Ridge National Lab.(ORNL), Oak Ridge, TN (United States), 2018.

推荐阅读:

相关文章