[转]fasttext 与 word2vec、doc2vec 的区别

总结得清晰简明,转之~

from https://blog.csdn.net/qfikh/article/details/105649650

相似:

图模型结构很像,都是采用embedding向量的形式,得到word的隐向量表达。
都采用很多相似的优化方法,比如使用Hierarchical softmax优化训练和预测中的打分速度。
不同点:

1.word2vec是一个无监督算法,而fasttext是一个有监督算法。
2.模型的输入层:word2vec的输入层是上下文单词;而fasttext 对应的整个句子/文本的单词及其n-gram特征。word2vec要求训练样本是基于上下文带有“序”的属性,而fasttext使用的是词袋模型的思想,使用的是n-gram的无序属性。
3.隐层:对于cbow,隐层采用简单的求和;对于fastText,隐层是由输入层求和并平均
4.模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用。
5.word2vec的学习目标是得到词向量,而fasttext的学习目标是得到文本的分类结果。Word2vec的目的是得到词向量,该词向量 最终是在输入层得到,输出层对应的 h-softmax也会生成一系列的向量,但最终都被抛弃,不会使用。fastText则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)
 

Fasttext模型有个致命的问题,就是丢失了词顺序的信息,因为隐层是通过简单的求和取平均得到的。为了弥补这个不足,Fasttext增加了N-gram的特征。

 

n-gram的怎么处理:

Fasttext采用了Hash桶的方式,把所有的n-gram都哈希到buckets个桶中,哈希到同一个桶的所有n-gram共享一个embedding vector。Ref:https://blog.csdn.net/kingzone_2008/article/details/81429501

3. 字符级n-gram带来两点好处: Ref:https://zhuanlan.zhihu.com/p/129756562

对于低频词生成的词向量效果会更好。因为它们的n-gram可以和其它词共享。
对于训练词库之外的单词,仍然可以构建它们的词向量。可以叠加它们的字符级n-gram向量。
4、为什么fastText甚至可以为语料库中未出现的单词产生词向量
fastText一个重要的特性便是有能力为任何单词产生词向量,即使是未出现的,组装的单词。主要是因为fastText是通过包含在单词中的子字符substring of character来构建单词的词向量,正文中也有论述,因此这种训练模型的方式使得fastText可以为拼写错误的单词或者连接组装的单词产生词向量

 

doc2vec相比于word2vec的c-bow模型,区别点有:

训练过程中新增了paragraph id,即训练语料中每个句子都有一个唯一的id。paragraph id和普通的word一样,也是先映射成一个向量,即paragraph vector。paragraph vector与word vector的维数虽一样,但是来自于两个不同的向量空间。在之后的计算里,paragraph vector和word vector累加或者连接起来,作为输出层softmax的输入。在一个句子或者文档的训练过程中,paragraph id保持不变,共享着同一个paragraph vector,相当于每次在预测单词的概率时,都利用了整个句子的语义。
在预测阶段,给待预测的句子新分配一个paragraph id,词向量和输出层softmax的参数保持训练阶段得到的参数不变,重新利用梯度下降训练待预测的句子。待收敛后,即得到待预测句子的paragraph vector。


  doc2vec相比于word2vec的skip-gram模型,区别点为:在sentence2vec里,输入都是paragraph vector,输出是该paragraph中随机抽样的词。

 

 


————————————————
版权声明:本文为CSDN博主「人鱼线」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qfikh/article/details/105649650

上一篇:C++多线程3


下一篇:存储过程的语法Oracle