左图是Fasttext,右图是CBOW,可以看出Fasttext模型与CBOW的模型结构有点像,都有输入层、隐藏层、输出层,但二者还是有挺大区别的,二者的区别如下:
输入层:
隐藏层:
输出层:
fastText引入了subword n-gram的概念,解决了词形变化(morphology)的问题、低频词、未登录词的问题。
fastText更适用于样本数量大、类别标签多的任务,一般能够得到很好的效果,大多数情况下强于传统的BOW + LR/SVM分类器。更重要的是,训练效率非常之高。
subword n-gram信息的加入,不但解决了低频词未登录词的表达的问题,而且对于最终任务精度一般会有几个百分点的提升。唯一的问题就是由于需要估计的参数多,模型可能会比较膨胀。不过,Facebook也提供了几点压缩模型的建议:
采用hash-trick。由于n-gram原始的空间太大,可以用某种hash函数将其映射到固定大小的buckets中去,从而实现内存可控;
采用quantize命令,对生成的模型进行参数量化和压缩;
减小最终向量的维度。
需要注意的是以上几种方法都会以一定的精度损失为代价,尤其是维度的压缩,具体可以实践中再权衡。
Bag of Tricks for Efficient Text Classification
原文:https://www.cnblogs.com/elisha/p/14033109.html