Загрузить gensim Word2Vec, вычисленный в Python 2, в Python 3

У меня есть модель Word2Vec Gensim, вычисленная в Python 2, например:

from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

model = Word2Vec(LineSentence('enwiki.txt'), size=100, 
                 window=5, min_count=5, workers=15)
model.save('w2v.model')

Тем не менее, мне нужно использовать его в Python 3. Если я пытаюсь загрузить его,

import gensim
from gensim.models import Word2Vec
model = Word2Vec.load('w2v.model')

это приводит к ошибке:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xf9 in position 0: ordinal not in range(128)

Я полагаю, что проблема заключается в различиях в кодировании между Python2 и Python3. Также кажется, что Gensim использует Pickle для сохранения / загрузки моделей.

Есть ли способ установить параметры кодирования / выбора так, чтобы модель загружалась правильно? Или, может быть, использовать какой-то внешний инструмент для преобразования файла модели?

Повторное вычисление в Python 3 не вариант: это занимает слишком много времени.

1 ответ

Это действительно похоже на ошибку где-то, как заметил memoselyk, и может быть исправлено способом, описанным в комментарии к этому ответу.

Итак, вы должны добавить encoding='latin1' на звонок в _pickle.loads в gensim.utils.unpickleзагрузите модель в Python 3, затем сохраните ее, и теперь вы можете отменить это исправление и загрузить новую модель в неизмененном виде с Python 3.

Другие вопросы по тегам