gensim(1.0.1)Doc2Vec与google预训练矢量

时间:2017-07-11 14:46:45

标签: gensim

对于gensim(1.0.1)doc2vec,我正在尝试加载谷歌预训练的单词向量,而不是使用Doc2Vec.build_vocab

wordVec_google = gensim.models.KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)    
model0 = Doc2Vec(size=300, alpha=0.05, min_alpha=0.05, window=8, min_count=5, workers=4, dm=0, hs=1)    
model0.wv = wordVec_google    
##some other code 
model0.build_vocab(sentences=allEmails, max_vocab_size = 20000)

但是此对象model0无法使用“标记文档”进一步训练,并且无法推断文档的向量。

任何人都知道如何将doc2vec与谷歌预训练的单词向量一起使用? 我试过这篇文章:http://mccormickml.com/2016/04/12/googles-pretrained-word2vec-model-in-python/ 但它无法加载到gensim.models.Word2Vec对象中,也许它是一个不同的gensim版本。

1 个答案:

答案 0 :(得分:4)

GoogleNews向量只是原始向量 - 而不是完整的Word2Vec模型。

此外,gensim Doc2Vec类对加载预训练的单词向量没有一般支持。 Doc2Vec算法不需要经过预先训练的单词向量 - 只有一些模式甚至使用这样的向量,当它们这样做时,它们会根据需要与doc向量同时进行训练。

具体来说,您的代码使用的模式dm=0是“段落向量”PV-DBOW模式,根本不使用单词向量。因此,即使有一个加载它们的功能,它们也会被加载 - 然后在训练和推理期间被忽略。 (您需要使用PV-DM,'dm = 1',或者向PV-DBOW dm=0, dbow_words=1添加skip-gram单词训练,以便此类重用矢量与您的训练有任何关联。)

为什么您认为您需要/需要使用预先训练过的载体? (特别是,一组300万个单词向量,来自另一种数据,当后一步表明你只关心20,000个单词的词汇量时?)

如果由于某种原因您确定要使用来自其他地方的wrod-vectors初始化Doc2Vec,并使用可能会产生一些影响的训练模式,您可以查看intersect_word2vec_format()方法gensim Doc2Vec继承自Word2Vec

build_vocab()已经学习了特定于语料库的词汇表之后,该方法特别需要被称为,并且它只从外部源中引入与本地相关的词。它充其量只是一个先进的实验性功能 - 请参阅其源代码,文档注释和gensim列表讨论,以了解其副作用和限制。