FastText使用n-grams作为特征的词向量求取和文本分类方法。

FastText出自论文Bag of Tricks for Efficient Text Classification,可以作为FastText作为文本分类任务的baseline,也可以作为获取词向量的快速低成本方案。

fastText

fastText的网络架构与word2vec中的CBOW做法非常相似,不过其是建立在常规的分类任务上,即通过有监督的方法获得词向量,具体差异有表现在:

  • fastText以文档作为粒度输入,CBOW则是滑动的窗口
  • fastText以文档分类作为模型输出,即输出各个类别的概率分布,因此去掉了word2vec中的分层softmax和负采样技巧
  • fastText提出子词嵌入(subword embedding)的方法,把n-grams特征叠加到原来的文档表征上

fastText的文档特征向量是词向量序列的平均,

这里$C$是动态的,表示当前文档的单词数,$h_i$是第$i$​个词的向量化表示,即Embedding的输出。fastText提出了子词嵌入(subword embedding)的方法,把n-grams特征也纳入考虑,于是用样本的n-grams切分的向量序列的平均来预测样本的标签,

以此作为文档的表征并输入到softmax中计算类别概率分布。说白了就是添加n-grams特征后,使用GlobalAveragePooling1D。

fastText本身是从监督任务出发训练Embedding,从而获得词向量,词向量的表现受制于监督数据;而word2vec则是无监督语料(自监督标注)训练而来,词向量的表现取决于整体语料特点。

对比word2vec

word2vec的影响下,一开始觉得分类问题训练获得的Embedding做词向量比较奇怪。对比分析一下,其实并不奇怪,在NLP中,任何任务获得的Embedding都能做词向量使用,比如匹配任务,只不过不同任务所表现出来的词与词的关系特点是不一样。下面来对比一下FastText和word2vec词向量的差异。

word2vec vs fastText,

比较/模型 word2vec fastText
训练方法 无监督,准确来说是自监督,基于CBOW和SkipGram 有监督,基于文本分类任务
相似性 基于语义的相似性,如“漂亮”和“美丽”。 基于分类信息,如情感分析任务中,“漂亮”和“性感”是相似,因为它们都是正向情感的词汇。由于ngrams的存在,fastText倾向于判别有相似背景或subword的词为相似,同时也更容易识别OOV。

总结

word2vec(skip-gram、cbow)、GloVe、FastText 的共同点是词的表示是固定的,无法处理上下文依赖问题,下篇介绍动态词向量ELMo。

参考

[1] FastText

[2] Bag of Tricks for Efficient Text Classification

转载请包括本文地址:https://allenwind.github.io/blog/9233
更多文章请参考:https://allenwind.github.io/blog/archives/