对于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版本。
答案 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列表讨论,以了解其副作用和限制。