在 gensim 中加载 Word2Vec 模型时出错

Error while loading Word2Vec model in gensim

我在加载 word2vec 存储库中可用的 gensim 模型时收到 AttributeError

from gensim import models
w = models.Word2Vec()
w.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
print w["queen"]

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-8219e36ba1f6> in <module>()
----> 1 w["queen"]

C:\Anaconda64\lib\site-packages\gensim\models\word2vec.pyc in __getitem__(self, word)
    761 
    762         """
--> 763         return self.syn0[self.vocab[word].index]
    764 
    765 

AttributeError: 'Word2Vec' object has no attribute 'syn0'

这是一个已知问题吗?

解决了以下问题:

from gensim import models
w = models.Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
print w["queen"]

为了在不同的训练算法(Word2Vec、Fastext、WordRank、VarEmbed)之间共享词向量查询代码,作者将词向量的存储和查询分离到一个单独的 class KeyedVectors。

word2vec class 中的两个方法和多个属性已被弃用。

方法

  • load_word2vec_format
  • save_word2vec_format

属性

  • syn0norm
  • syn0
  • 词汇
  • index2word

这些已移至 KeyedVectors class。

升级到此版本后,您可能会遇到有关已弃用方法或缺少属性的异常。

要删除异常,您应该使用

KeyedVectors.load_word2vec_format (instead ofWord2Vec.load_word2vec_format)
word2vec_model.wv.save_word2vec_format (instead of  word2vec_model.save_word2vec_format)
model.wv.syn0norm instead of  (model.syn0norm)
model.wv.syn0 instead of  (model.syn0)
model.wv.vocab instead of (model.vocab)
model.wv.index2word instead of (model.index2word)

目前,由于 models.Word2Vec 已被弃用,您需要使用 models.KeyedVectors.load_word2vec_format 而不是 models.Word2Vec.load_word2vec_format,如下所示。

from gensim import models
w = models.KeyedVectors.load_word2vec_format('model.bin', binary=True)