词向量系列(5):fastText快速轻量的有监督方法
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/