Bag of Tricks for Efficient Text Classification
fastText是一种Facebook AI Research在16年开源的一个文本分类器。 其特点就是fast。相对于其它文本分类模型,如SVM,Logistic Regression和neural network等模型,fastText在保持分类效果的同时,大大缩短了训练时间。
fastText 方法包含三部分:模型架构、层次 Softmax 和 N-gram 特征。
1、fastText 模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率。
2、序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。
3、fastText 在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。
4、fastText 模型架构和 Word2Vec 中的 CBOW 模型很类似。不同之处在于fastText 预测标签,而 CBOW 模型预测中间词。
第一部分:
fastText的模型架构类似于CBOW,两种模型都是基于Hierarchical Softmax,都是三层架构:输入层、 隐藏层、输出层
。

第二部分:将输入层中的词和词组构成特征向量,再将特征向量通过线性变换映射到隐藏层,隐藏层通过求解最大似然函数,然后根据每个类别的权重和模型参数构建Huffman树,将Huffman树作为输出。
对于有大量类别的数据集,fastText使用了一个分层分类器(而非扁平式架构)。不同的类别被整合进树形结构中(想象下二叉树而非 list)。在某些文本分类任务中类别很多,计算线性分类器的复杂度高。为了改善运行时间,fastText 模型使用了层次 Softmax 技巧。层次 Softmax 技巧建立在哈弗曼编码的基础上,对标签进行编码,能够极大地缩小模型预测目标的数量。
第三部分:常用的特征是词袋模型(将输入数据转化为对应的Bow形式)。但词袋模型不能考虑词之间的顺序,因此 fastText 还加入了 N-gram 特征。
“我 爱 她” 这句话中的词袋模型特征是 “我”,“爱”, “她”。这些特征和句子 “她 爱 我” 的特征是一样的。如果加入 2-Ngram,第一句话的特征还有 “我-爱” 和 “爱-她”,这两句话 “我 爱 她” 和 “她 爱 我” 就能区别开来了。当然,为了提高效率,我们需要过滤掉低频的 N-gram。
FastText= word2vec中 cbow + h-softmax的灵活使用
灵活体现在两个方面: