【发布时间】:2015-07-29 21:10:10
【问题描述】:
我已经使用 Gensim 的文档语料库训练了一个 word2vec 模型。模型训练完成后,我正在编写以下代码来获取单词“view”的原始特征向量。
myModel["view"]
但是,我得到一个单词的 KeyError,这可能是因为它在 word2vec 索引的键列表中不作为键存在。在尝试获取原始特征向量之前,如何检查索引中是否存在键?
【问题讨论】:
我已经使用 Gensim 的文档语料库训练了一个 word2vec 模型。模型训练完成后,我正在编写以下代码来获取单词“view”的原始特征向量。
myModel["view"]
但是,我得到一个单词的 KeyError,这可能是因为它在 word2vec 索引的键列表中不作为键存在。在尝试获取原始特征向量之前,如何检查索引中是否存在键?
【问题讨论】:
在这里回答我自己的问题。
Word2Vec 提供了一个名为 contains('view') 的方法,该方法根据相应单词是否已被索引返回 True 或 False。
【讨论】:
'Word2Vec' object has no attribute 'contains'
Word2Vec 还提供了一个“vocab”成员,您可以直接访问它。
使用pythonistic方法:
if word in w2v_model.vocab:
# Do something
编辑 自 gensim 2.0 版以来,Word2Vec 的 API 发生了变化。要访问词汇,您现在应该使用以下命令:
if word in w2v_model.wv.vocab:
# Do something
EDIT 2 属性“wv”已被弃用,将在 gensim 4.0.0 中完全删除。现在回到OP的原始答案:
if word in w2v_model.vocab:
# Do something
【讨论】:
gensim.models.Word2Vec.wv.vocab,如下面的 rakaT 所示
嘿,我知道这篇文章迟到了,但这里有一段代码可以很好地处理这个问题。我自己在我的代码中使用它,它就像一个魅力:)
size = 300 #word vector size
word = 'food' #word token
try:
wordVector = model[word].reshape((1, size))
except KeyError:
print "not found! ", word
注意: 我正在为 word2vec 模型使用 python Gensim 库
【讨论】:
用
将模型转化为向量word_vectors = model.wv
那么我们可以使用
if 'word' in word_vectors.vocab
【讨论】:
我一般使用过滤器:
for doc in labeled_corpus:
words = filter(lambda x: x in model.vocab, doc.words)
这是在未见过的单词上通过 KeyError 的一种简单方法。
【讨论】:
在 Gensim 4.0.0 中从 KeyedVector 中删除了 vocab 属性
if 'word' in model.wv.key_to_index:
# do something
【讨论】: