Fasttext模型总结

Fasttext模型结构

Fasttext模型结构CBOW模型结构

左图是Fasttext,右图是CBOW,可以看出Fasttext模型与CBOW的模型结构有点像,都有输入层、隐藏层、输出层,但二者还是有挺大区别的,二者的区别如下:

  1. 输入层:

    • CBOW:输入的是每个词的One-hot向量;
    • Fasttext:输入的是每个词的词嵌入向量。
  2. 隐藏层:

    • CBOW:先将输入层的每个One-hot向量乘以词嵌入矩阵,得到每个词的词嵌入向量,再求和取平均;
    • Fasttext:直接对输入层的词向量求和取平均。
  3. 输出层:

    • CBOW:原始的CBOW使用Softmax方法,输出的类别是词表中的每个词;
    • Fasttext:使用Hiererachical softmax方法简化softmax计算,提升训练速度;另外Fasttext的输出是文章的类别。

Fasttext的特点

  1. fastText引入了subword n-gram的概念,解决了词形变化(morphology)的问题、低频词、未登录词的问题。

  2. fastText更适用于样本数量大、类别标签多的任务,一般能够得到很好的效果,大多数情况下强于传统的BOW + LR/SVM分类器。更重要的是,训练效率非常之高。

Fasttext的缺点

subword n-gram信息的加入,不但解决了低频词未登录词的表达的问题,而且对于最终任务精度一般会有几个百分点的提升。唯一的问题就是由于需要估计的参数多,模型可能会比较膨胀。不过,Facebook也提供了几点压缩模型的建议:

  1. 采用hash-trick。由于n-gram原始的空间太大,可以用某种hash函数将其映射到固定大小的buckets中去,从而实现内存可控;

  2. 采用quantize命令,对生成的模型进行参数量化和压缩;

  3. 减小最终向量的维度。

需要注意的是以上几种方法都会以一定的精度损失为代价,尤其是维度的压缩,具体可以实践中再权衡。

参考资料

Bag of Tricks for Efficient Text Classification

fastText,智慧与美貌并重的文本分类及向量化工具

原文地址:https://www.cnblogs.com/elisha/p/14033109.html