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的话,则对序列进行加权平均,计算公式为:
即先将每个状态进行映射,然后与进行点乘得到每个状态的权重,并且进行归一化,最后将状态的加权平均值作为输出。
接下来使用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