我使用Gensim训练了一个word2vec模型,使用的语料库是一些文档。一旦模型训练完成,我会编写以下代码来获取单词“view”的原始特征向量。
myModel["view"]
然而,我对这个单词出现了KeyError错误,可能是因为它在word2vec索引的键列表中不存在。在尝试获取原始特征向量之前,如何检查索引中是否存在该键?
if word in w2v_model.vocab:
# Do something
编辑 由于gensim 2.0发布后,Word2Vec的API已经更改。现在您应该使用以下内容访问词汇表:
if word in w2v_model.wv.vocab:
# Do something
编辑2:属性“wv”正在被废弃,将在gensim 4.0.0中完全删除。现在回到OP最初的答案:
if word in w2v_model.vocab:
# Do something
将模型转换为向量
word_vectors = model.wv
那么我们可以使用
if 'word' in word_vectors.vocab
在Gensim 4.0.0中,KeyedVector的vocab属性已被移除。可以尝试使用以下内容:
if 'word' in model.wv.key_to_index:
# do something
。
for doc in labeled_corpus:
words = filter(lambda x: x in model.vocab, doc.words)
在这里回答我的问题。
Word2Vec提供了一个名为contains('view')的方法,根据相应单词是否被索引返回True或False。
'Word2Vec'对象没有属性'contains'。
- CentAu正如@quemeful所提到的,你可以这样做:
if "view" in model.wv.key_to_index.keys():
# do something
要检查单词是否存在于您的模型中,您可以使用以下方法:
word2vec_pretrained_dict = dict(zip(w2v_model.key_to_index.keys(), w2v_model.vectors))
其中w2v_model.key_to_index
为每个单词和序列号提供字典
w2v_model.vectors
返回每个单词的向量化形式
嘿,我知道这篇文章有点晚了,但是这里有一段代码可以很好地解决这个问题。我自己在我的代码中使用它,它的效果非常好 :)
size = 300 #word vector size
word = 'food' #word token
try:
wordVector = model[word].reshape((1, size))
except KeyError:
print "not found! ", word
注意: 我正在使用Python的Gensim库进行word2vec模型
gensim.models.Word2Vec.wv.vocab
。 - Titou