关于作者:张正,坐标巴黎,上班NLP,下班词嵌入。
从词嵌入到句嵌入
到底什么是 fastText ?
先说结论,fastText 在不同语境中至少有两个含义:
1. 在文章 Bag of Tricks for Efficient Text Classification [1] 中,fastText 是作者提出的文本分类器的名字。与 sub-word 无关!也不是新的词嵌入训练模型!是 word2vec 中 CBOW 模型的简单变种。
2. 作为 Facebook 开源包,fastText [6] 是用来训练词嵌入或句嵌入的,其不仅包括 1 中论文的代码实现,还包括 Enriching Word Vectors with Subword Information [2] 及 FastText.zip: Compressing text classification models [3] 两文的代码实现。
本来觉得这些含义区别不重要,直到连我自己都被弄迷糊了。在写这篇解读前,我心中的 fastText 一直是第三种含义:用 sub-word 信息加强词嵌入训练,解决 OOV(Out-Of-Vocabulary)表征的方法。结果带着这个预先的理解读 Bag of Tricks for Efficient Text Classification,越读越迷惑。
为理清思路,第一小节我们就先讲讲 Bag of Tricks for Efficient Text Classification 中的 fastText,第二小节则围绕 Enriching Word Vectors with Subword Information。
1.1 Abstract
“本文探索了一种简单有效的文本分类基准(方法)。我们的实验表明,我们的快速文本分类器 fastText 在准确性方面与深度学习分类器平分秋色,其训练和评估速度(相比深度学习模型更是)要快许多个数量级。
我们可以使用标准的多核 CPU 在不到 10 分钟的时间内用 fastText 训练超过 10 亿个单词,并在一分钟之内将 50 万个句子在 31 万 2 千个类中做分类。”
作者中又出现了托老师,不知道是不是受他影响,这篇文章在表述上也很有 word2vec 的味道,更不用说模型本身。fastText 和 word2vec 的卖点都是简单高效(快)。
1.2 一句话介绍fastText
word2vec 的 CBOW 模型中将中心词替换为类别标签就得到了 fastText。
具体到一些小区别:
CBOW 中词袋的大小由 window_size 决定,而 fastText 中就是整个要分类的文本。
CBOW 实际运行中用 Hierarchical softmax,fastText 用 softmax 或 Hierarchical softmax,具体试类的数量决定。
这就是一个标配版且可以实际应用的 fastText 了,我要再强调三点它和 CBOW 无区别的地方,因为在别的讲该论文的文章中看到了一些错误的理解:
CBOW 和 fastText 都是用平均值来预测的。(CBOW 不是求和,是求平均)
N-gram 对于 CBOW 和 fastText 都是锦上添花的元素,不是标配。
词向量初始化都是随机的,fastText 并没有在 word2vec 预训练词嵌入的基础上再训练。
1.3 对N-gram的理解
如果没有重新读这篇文章,我也会下意识地往 character 级别想,但是必须要在此强调:这篇文章和 character 没有任何关系!文章中的 n-gram 出自 Character-level Convolutional Networks for Text Classification [4],是 word 级别的。与我在