基于神经网络的文本分类器

1 引言

神经网络在图像领域大获成功之后,一些人尝试了使用神经网络进行自然语言处理,发现在很多自然语言处理任务中,神经网络也可以得到非常好的效果,文本分类就是其中一个任务。

代码在这里

2 模型

近几年,基于神经网络的文本分类器模型有很多,包括: Kim提出的基于CNN的网络[1],这个网络十分出名;其次是基于RNN的网络以及使用RNN+attention(注意机制)的网络[2];另外,还有一些网络直接使用字符作为处理单位[3,4]。不过,Facebook的人提出了fasttext模型[5],效果与这些模型不相上下,总结认为文本分类其实可以使用很简单的模型进行解决。

2.1 基于CNN的网络

网络结构[1]为:

首先是embedding层,将每个单词映射为embedding向量,文中使用的Word2Vec模型。总共有是两个embedding矩阵,一个直接使用预训练的embedding向量,另一个则在训练过程中进行优化。

然后是CNN层,窗口宽度为3,4,5三种,有人将其解释为自然语言处理中的3-gram、4-gram、5-gram。

接着是一个Pooling层。

最后使用一个softmax函数得到分类结果。

2.2 基于RNN+attention的模型

模型结构[2]为:

首先是embedding层,将每个单词映射为向量。

然后使用LSTM或者GRU等RNN模型,对序列进行映射,得到状态序列,每个状态可以看成单词及其语境信息在隐式空间中的向量表示。

如果是一般的RNN模型,则直接使用RNN的最后一个状态或者状态序列的均值作为下一层的输入;如果是attention的话,则对序列进行加权平均,计算公式为:

即先将每个状态h_{it}进行映射,然后与u_w进行点乘得到每个状态的权重\alpha_{it},并且进行归一化,最后将状态的加权平均值作为输出。

接下来使用softmax函数得到分类结果。

另外,为了可以使用层次化的结构,将文本分为n个句子。先对句子中的每个单词进行处理,得到句子向量,然后对句子向量构成的序列进行处理,得到分类结果。

2.3 以字符作为单位的模型

模型[3]将每个字符使用one-hot进行表示,然后与一个矩阵进行相乘,这个操作其实就是embedding,将每个字符转化为embedding向量。

然后使用多个CNN+max pooling的结构对tensor进行映射。

最后使用3个全连接进行映射和分类。训练过程中对前两个全连接层使用Dropout进行处理。

这个模型还有一个升级版本[4],使用ResNet的结构建立了深层的神经网络。

2.4 fasttext模型

模型[5]使用的y=BAx的模型,其中x文本的bag of one hot vectors,也就是使用one-hot进行表示的单词集合。而B是一个映射矩阵。整个训练集合的损失函数为:

模型使用了大量技巧来加快分类器的运行效率。

1)使用codebook来近似计算向量点乘。

2)根据embedding向量的模来进行特征选择,减少单词数量。

3)最后使用Bloom filter加快运算速度与减少内存占用。

3 效果对比

以AG news为例,对分类模型的效果进行对比。

结果为:

模型

每个epoch训练时间

准确率

kimNet

108s

0.914

LSTM

716s

0.920

SRU

235s

0.917

LSTM+att

839s

0.916

fasttext

<<1s

0.915

charconv

114s

0.872

这里以字符为单位的模型只实验了小模型,没有使用基于ResNet结构的大模型。

可以看出,这些模型的效果相差不大,但是fasttext模型的训练速度远超其他模型。而以字符为单位的模型效果较差,按照论文原文中的说法,该模型对于数据量的需求比较高,只有在大数据集才能超过其他模型。

参考文献

[1] Kim Y. Convolutional Neural Networks for Sentence Classification[J]. Eprint Arxiv, 2014.

[2] Yang Z, Yang D, Dyer C, et al. Hierarchical Attention Networks for Document Classification[C]// Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. 2017:1480-1489.

[3] Zhang X, Zhao J, Lecun Y. Character-level Convolutional Networks for Text Classification[J]. 2015:649-657.

[4] Conneau A, Schwenk H, Barrault L, et al. Very Deep Convolutional Networks for Natural Language Processing[J]. 2016.

[5] Joulin A, Grave E, Bojanowski P, et al. FastText.zip: Compressing text classification models[J]. 2016.

一些网址:

https://github.com/facebookresearch/fastText

https://github.com/ematvey/hierarchical-attention-networks

https://github.com/zhangxiangxiao/Crepe

数据集:http://goo.gl/JyCnZq