Bag of Tricks for Efficient Text Classification

文章摘要

这篇文章为文本分类提供了一个简单又高效的模型,fasttext。这个模型在效果上能比肩复杂的深度学习模型的同时,在速度上又快了几个量级。fasttext的结构非常简单,仅仅是word2vec中CBOW模型的一个变形,CBOW是上下文单词的词向量平均去预测中心词,fasttext是整个文档的单词的词向量平均去预测标签。


文章亮点

这篇个论文的模型非常简单。熟悉word2vec的同学可能一下子就知道这个模型是怎么工作的了。最难能可贵的是,这么简单的模型效果却非常的好,能比肩复杂的深度学习模型。同时效率惊人,用CPU很短的时间内就能得到分类结果。此外作者还尝试做了tag prediction。一般来说tag的数量都很大,相当于类别数量巨大的分类问题。这种情况下,普通的softmax就很慢了。这里作者还是用的word2vec中的内容。在word2vec中是预测词,词的数量巨大。这里是label数量巨大,就用了一样的hierarchical softmax

最让人欣喜的是这篇论文配套提供了fasttext工具包。这个工具包代码质量非常高,论文结果一键还原。目前已经包装的非常专业了,这是官网[1]和github地址[2],以及提供了python接口,可以直接pip安装。这样准确率高又快的模型绝对是实战利器。在很多情况下相对于RNN,CNN或是更加复杂的深度学习模型来说应该是更好的选择。

模型总结

Bag of Tricks for Efficient Text Classification_第1张图片

模型真的很简单。比如输入是一句话,x1到xN是这句话的单词或是ngram。每一个都对应一个向量,对这些向量取平均就得到了文本向量。然后用文本向量去预测标签。当类别不多的时候,就是最最简单的softmax。当标签数量巨大的时候,就是要用到hierarchical softmax了。

由于这个文章除了词向量还引入了ngram向量,ngram的数量非常大,会导致参数很多。所以这里使用了哈希桶,会可能把几个ngram映射到同一个向量。这样会大大的节省内存。如果大家对fasttext的源码感兴趣可以看看这个fastText 之其源码分析。


这里详细的列出word2vec和fasttext的对比:

1、word2vec对局部上下文中的单词的词向量取平均,预测中心词;fasttext对整个句子(或是文档)的单词的词向量取平均,预测标签。

2、word2vec中不使用正常的softmax,因为要预测的单词实在是太多了。word2vec中可以使用hierarchical softmax或是negative sampling。fasttext中当标签数量不多的时候使用正常的softmax,在标签数量很多的时候用hierarchical softmax。fasttext中不会使用negative sampling是因为negative sampling得到的不是严格的概率。


Bag of Tricks for Efficient Text Classification_第2张图片  实现结果

Bag of Tricks for Efficient Text Classification_第3张图片

首先看一下fasttext的实验结果。如此简单的模型竟然得到了这么好的结果,而且只用了仅仅十维特征!并且所有的数据集使用一样的超参。同时这张表还包括了一些传统的方法。这些方法其实和深度学习的方法差得也没有太远。

另一个重要的发现是bigram 特征真的好有效。能提升1-4%。这个数字看似不大,但是已经非常夸张了,比深度学习在传统方法上面的提升还多挺多。并且作者说如果再加trigram还能在有的数据集上面继续提升。其实15年就有ngram embedding的工作,也是用在sentiment analysis上面,把ngram用在了Paragraph Vector模型上面,发现ngram embedding真的是好用。这个文章最后发表在了16年ICLR的workshop上面了。


Bag of Tricks for Efficient Text Classification_第4张图片

在运行时间方面,fasttext更是快了几个数量级。fastext是以秒记,char-CNN模型是以小时甚至天记。


总 结

从这篇文章在模型方面新意不大。首先网络结构照搬word2vec,只是把单词换成了label。事实上把单词换成label的工作在15年ACL上也被做过了。然后ngram embedding也在刚才说的16年ICLR的workshop以及一些其它论文中讨论过。但是这个工作却产生了巨大的影响力。依靠facebook以及mikolov的名气,当然最主要的是非常良心,高质量的代码,这个工作在github上面取得了超高的人气。这种简单有效的ngram embedding模型确实在很多方面都比深度学习模型更有竞争力。相信fasttext会在很多场合代替深度学习模型,成为文本表示,分类的最佳选择。


文章中的链接

[1]Fasttext官网  https://fasttext.cc/

[2]github https://github.com/facebookresearch/fastText


 近期热文

Tomas Mikolov论文简评:从Word2Vec到FastText

推荐 | 中文文本标注工具Chinese-Annotator

资源 | 2017年GitHub中Top 30开源机器学习项目

自然语言对话引擎(技术类)

AdaBoost元算法如何提高分类性能——机器学习实战

奇异值分解(SVD)原理

分享 | 由0到1走入Kaggle-入门指导 (长文、干货)

常见文本相似度量方法总结

干货|免费文本语料训练数据集

You can do today until tomorrow.


Bag of Tricks for Efficient Text Classification_第5张图片

更多干货内容请关注微信公众号“AI 深入浅出”

长按二维码关注

你可能感兴趣的:(Bag of Tricks for Efficient Text Classification)