如何检查 word2vec 训练模型中是不是存在密钥

Posted

技术标签:

【中文标题】如何检查 word2vec 训练模型中是不是存在密钥【英文标题】:How to check if a key exists in a word2vec trained model or not如何检查 word2vec 训练模型中是否存在密钥 【发布时间】:2015-07-29 21:10:10 【问题描述】:

我已经使用 Gensim 的文档语料库训练了一个 word2vec 模型。模型训练完成后,我正在编写以下代码来获取单词“view”的原始特征向量。

myModel["view"]

但是,我得到一个单词的 KeyError,这可能是因为它在 word2vec 索引的键列表中不作为键存在。在尝试获取原始特征向量之前,如何检查索引中是否存在键?

【问题讨论】:

【参考方案1】:

在这里回答我自己的问题。

Word2Vec 提供了一个名为 contains('view') 的方法,该方法根据相应单词是否已被索引返回 True 或 False。

【讨论】:

为了将来参考,这不再起作用了。 'Word2Vec' object has no attribute 'contains'【参考方案2】:

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

【讨论】:

@MohitJain 那怎么不能回答他的问题呢?我认为我的回答非常有道理,考虑到这正是我自己用来解决这个问题的代码。 不加解释的内胆更适合cmets。如果您可以为像我这样的读者添加简短的解释,您可以获得更多的赞成票。 感谢您的解释,注意! 如果使用 gensim,请使用gensim.models.Word2Vec.wv.vocab,如下面的 rakaT 所示 @Titou 是的,gensim Word2Vec 的接口发生了变化。感谢您指出!【参考方案3】:

嘿,我知道这篇文章迟到了,但这里有一段代码可以很好地处理这个问题。我自己在我的代码中使用它,它就像一个魅力:)

   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 库

【讨论】:

【参考方案4】:

将模型转化为向量
word_vectors = model.wv

那么我们可以使用

if 'word' in word_vectors.vocab

【讨论】:

【参考方案5】:

我一般使用过滤器:

for doc in labeled_corpus:
    words = filter(lambda x: x in model.vocab, doc.words)

这是在未见过的单词上通过 KeyError 的一种简单方法。

【讨论】:

【参考方案6】:

在 Gensim 4.0.0 中从 KeyedVector 中删除了 vocab 属性

if 'word' in model.wv.key_to_index:
    # do something

https://github.com/RaRe-Technologies/gensim/wiki/Migrating-from-Gensim-3.x-to-4#4-vocab-dict-became-key_to_index-for-looking-up-a-keys-integer-index-or-get_vecattr-and-set_vecattr-for-other-per-key-attributes

【讨论】:

以上是关于如何检查 word2vec 训练模型中是不是存在密钥的主要内容,如果未能解决你的问题,请参考以下文章

word2vec模型之Skip-Gram Model

预训练模型综述--Albert,xlnet,bert,word2vec

更新 gensim word2vec 模型

使用带有 LSTM 的预训练 word2vec 进行单词生成

Gensim Word2Vec 从预训练模型中选择少量词向量

Word2vec