与word2vec图模型结构很像,都是采用embedding向量的形式,得到word的隐向量表达。
都采用很多相似的优化方法,比如使用Hierarchical softmax优化训练和预测中的打分速度。
不同处:
cbow用上下文去预测中心词,而此处用全部的n-gram去预测指定类别
模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用。
模型的输入层:word2vec的输出层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容。
两者本质的不同,体现在 h-softmax的使用:
Word2vec的目的是得到词向量,该词向量 最终是在输入层得到,输出层对应的 h-softmax
也会生成一系列的向量,但最终都被抛弃,不会使用。
fastText则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)
image.png
image.png
image.png
与word2vec 区别
· 输入层:CBOW的输入是目标单词的上下文并进行one-hot编码,fastText的输入是多个单词embedding向量,并将单词的字符级别的n-gram向量作为额外的特征;
· 从输入层到隐藏层,CBOW会将上下文单词向量叠加起来并经过一次矩阵乘法(线性变化)并应用激活函数,而fastText省略了这一过程,直接将embedding过的向量特征求和取平均;
· 输出层,一般的CBOW模型会采用Softmax作为输出,而fastText则采用了Hierarchical Softmax,大大降低了模型训练时间;
· CBOW的输出是目标词汇,fastText的输出是文档对应的分类
网友评论