FastText

fastText的核心思想:将整篇文档的词及n-gram向量叠加平均得到文档向量,然后使用文档向量做softmax多分类。这中间涉及到两个技巧:字符级n-gram特征的引入以及分层Softmax分类。

模型结构

模型结构跟word2vec里的CBOW结构一样, 只不过输出结果由预测词变为了预测类别.

<center> </center>

模型的优化函数

<center> </center>

Hierarchical softmax

在具体实现上, 和word2vec类似, 为了加快速度在分类时使用hierarchical softmax.

N-gram features

这是与word2vec不同的地方, word2vec直接采用bag-of-word的思想, 而fasttext在训练时还利用字符级别的n-gram信息, 使得训练效果更好.

这带来两点好处:

  1. 对于低频词生成的词向量效果会更好。因为它们的n-gram可以和其它词共享。
  2. 对于训练词库之外的单词,仍然可以构建它们的词向量。我们可以叠加它们的字符级n-gram向量。

作者在论文中提到, 为了提高效率, 他们使用hashing trick.

实验

任务1 Sentiment analysis

参数设置:
epoch: 5
learning rate: {0.05, 0.1, 0.25, 0.5}
fasttext与其他网络相比, 不需要加载预训练模型, 而且在训练同时能生成词向量.

<center> </center>

可以看出在这几个数据量比较大的数据集上, fasttext实验结果非常不错. 同时, 和其他网络相比, 速度非常快.

任务2 Tag prediction

总结

FastText词向量优势

  1. 适合大量数据+高效的训练速度:训练速度非常快, 特别是与深度模型对比,fastText能将训练时间由数天缩短到几秒钟, 而且不需要GPU。
  2. 支持多语言表达:利用其语言形态结构,fastText能够被设计用来支持包括英语、德语、西班牙语、法语以及捷克语等多种语言。它还使用了一种简单高效的纳入子字信息的方式,在用于像捷克语这样词态丰富的语言时,这种方式表现得非常好,这也证明了精心设计的字符 n-gram 特征是丰富词汇表征的重要来源。FastText的性能要比时下流行的word2vec工具明显好上不少,也比其他目前最先进的词态词汇表征要好。

另外, facebook官方也开源了fasttext的代码, 可以直接使用, 非常方便.
项目地址
fasttext除了可以用来做有监督的分类任务, 也可以训练无监督的词向量.