我训练的Gensim Word2Vec缺少某些单词的向量。也就是说,尽管我输入了“ yuval”一词,但是该模型缺少向量。是什么原因?
答案 0 :(得分:1)
您要么没有提供'yuval'
作为具有正确格式的语料的令牌,要么出现的次数低于模型的min_count
。 (对于Word2Vec
模型来说,丢弃低频单词通常是有用的 -如果只有几个单词的例子,更多的数据不会自动变得更好。)
仔细检查'yuval'
是否出现在语料库中,检查次数,以及是否足以使单词幸存下来min_count
。
答案 1 :(得分:1)
为扩展@gojomo
的答案,训练期间的Word2Vec
模型被告知丢弃min_count
以下的令牌,因为它们被认为是无用的,这意味着无法推断有用的上下文
这意味着,这些标记将没有矢量。
要对此进行检查,请加载模型,并检查词汇表是否包含您感兴趣的令牌:
>>> import gensim
>>> model = gensim.models.KeyedVectors.load(...)
>>> 'car' in model
True
>>> 'yuval' in model
False
由于'yuval'不在词汇表中,因此无法使用in
运算符找到它,并且如果使用该键将抛出关键错误。
>>> model['car']
...
...
<numpy array>
>>> model['yuval']
...
...
KeyError: "word 'yuval' not in vocabulary"
如果您真的希望该单词出现在词汇表中,您也可以随时将它们打印出来:
>>> for token in model.wv.vocab.keys():
... print(token)
...