Ошибка при загрузке модели Word2Vec в gensim

Я получаю AttributeError при загрузке модели gensim, доступной в репозитории word2vec:

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'

Это известная проблема?

Ответ 1

Исправлена ​​проблема с:

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

Ответ 2

Чтобы разделить код векторного запроса между различными обучающими algos (Word2Vec, Fastext, WordRank, VarEmbed), авторы разделили хранение и запрос векторов слов в отдельный класс KeyedVectors.

Два метода и несколько атрибутов в классе word2vec устарели.

Методы

  • load_word2vec_format
  • save_word2vec_format

Атрибуты

  • syn0norm
  • syn0
  • Vocab
  • index2word

Они были перенесены в класс KeyedVectors.

После обновления до этой версии вы можете получить исключения об устаревших методах или отсутствующих атрибутах.

Чтобы удалить исключения, вы должны использовать

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)

Ответ 3

В настоящее время, поскольку 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)

Ответ 4

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

когда я его использую, он выдаст ошибку:

/usr/local/lib/python3.6/dist-packages/smart_open/smart_open_lib.py:398: UserWarning: This function is deprecated, use smart_open.open instead. See the migration notes for details: https://github.com/RaRe-Technologies/smart_open/blob/master/README.rst#migrating-to-the-new-open-function
  'See the migration notes for details: %s' % _MIGRATION_NOTES_URL
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-22-894908fd0f6c> in <module>()
----> 1 model=gensim.models.KeyedVectors.load_word2vec_format('hi.bin',binary=True)

2 frames
/usr/local/lib/python3.6/dist-packages/gensim/utils.py in any2unicode(text, encoding, errors)
    357     if isinstance(text, unicode):
    358         return text
--> 359     return unicode(text, encoding, errors=errors)
    360 
    361 

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte