Загрузить 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.