论文原文 | Bag of Tricks for Efficient Text Classification |
---|---|
论文信息 | EACL2017 |
论文解读 | Hytn Chen |
更新时间 | 2020-02-23 |
文本分类相关方法
用作文本分类的卷积神经网络,有多个使用流程示意图如下
1维卷积
堆卷积(Goldberg Book)
延迟CNN(Kalchbrenner et al. 2016)
动态CNN
详见这篇文章解读
总结一下,CNN在文本分类中担任的主要角色就是encoding文本,之后可以用分类器解决分类的问题。CNN主要问题就是训练相对较慢,从而就限制了CNN不能在非常大的数据集上使用。
论文提出的模型
模型结构图如下
简单来讲就是文本表征+线性模型,这里的文本表征由n-gram,词查找表以及CBOW组成,线性模型由多层softmax和rank constraint组成(实现参数共享的效果)。
输入层:先看n-gram表征,很简单理解,假设一句话有N个词,1-gram就是单个词为一组,一共可以有N组;2-gram就是两个词为一组的排列组合,一共可以有 N ( N − 1 ) 2 \frac{N(N-1)}{2} 2N(N−1)组,如果再多那字典(要索引到具体组别,一个组别一个序号)的维度就呈指数增长了,因此文中使用了哈希字典的方式来避免这样的情况发生(把所有的n-gram都哈希到buckets个桶中,哈希到同一个桶的所有n-gram共享一个embedding vector)。之所以使用n-gram就是为了保留一定的词序信息,或者抓取局部的信息。
隐层:图中的每个输入x都表示一个文本中的n-gram向量,隐层是输入词向量的平均值再乘以权重矩阵A所得,所以也就相当于将各个输入的向量加权求和作为句向量。
输出层:由隐层的输出结果再乘以权重矩阵B(线性变换)得到输出。
分类器:多层softmax分类器加cross entropy交叉熵损失函数。
整个模型的结构描述就是:词向量经过隐藏层再经过多层softmax得到预测值。最后的损失函数就是最小化负对数似然函数(交叉熵损失函数):
− 1 ∣ D ∣ ∑ i = 1 ∣ D ∣ y i log ( softmax ( W ∗ x i ) ) -\frac{1}{|D|} \sum_{i=1}^{|D|} y_{i} \log \left(\operatorname{softmax}\left(W * x_{i}\right)\right) −∣D∣1i=1∑∣D∣yilog(softmax(W∗xi))
原文的损失函数如下
− 1 N ∑ n = 1 N y n log ( f ( B A x n ) ) -\frac{1}{N} \sum_{n=1}^{N} y_{n} \log \left(f\left(B A x_{n}\right)\right) −