【发布时间】:2019-10-15 13:53:44
【问题描述】:
我训练过的 Gensim Word2Vec 缺少某些单词的向量。也就是说,虽然我有一个词“yuval”作为输入,但模型缺少它的向量。是什么原因?
【问题讨论】:
我训练过的 Gensim Word2Vec 缺少某些单词的向量。也就是说,虽然我有一个词“yuval”作为输入,但模型缺少它的向量。是什么原因?
【问题讨论】:
您要么没有提供'yuval' 作为具有正确格式语料库的标记,要么出现次数低于模型的min_count。 (对于Word2Vec 模型来说,丢弃低频词通常有帮助 - 如果只有几个词的例子,更多的数据并不会自动变得更好。)
仔细检查'yuval' 是否出现在语料库中,出现了多少次,以及这是否足以让单词在min_count 修剪中存活下来。
【讨论】:
为了扩展 @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)
...
【讨论】: