2016-07-20 9 views
3

Я подготовил модель doc2vec с Python2, и я бы хотел использовать ее в Python3.Doc2Vec модель Python 3 совместимость

При попытке загрузить его в Python 3, я получаю:

Doc2Vec.load('my_doc2vec.pkl') 

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

Это, кажется, связано с вопросом о совместимости рассол, который я пытался решить, выполнив:

with open('my_doc2vec.pkl', 'rb') as inf: 
    data = pickle.load(inf) 
data.save('my_doc2vec_python3.pkl') 

Gensim сохранил другие файлы, которые я переименовал, чтобы их можно было найти при вызове

de = Doc2Vec.load('my_doc2vec_python3.pkl') 

Нагрузка() do es не сбой с UnicodeDecodeError, но после вывода выводят бессмысленные результаты.

Я не могу легко переустановить его с помощью Gensim в Python 3, поскольку я использовал эту модель для создания полученных данных из нее, поэтому мне пришлось бы повторно запустить длинный и сложный конвейер.

Как я могу сделать модель doc2vec совместимой с Python 3?

ответ

2

Отвечая на мой вопрос, этот answer работал для меня.

Вот шаги, немного больше деталей:

  1. загрузить gensim исходный код, например, клон от репо
  2. в gensim/utils.py, редактировать метод unpickle добавить параметр кодирования:

    return _pickle.loads(f.read(), encoding='latin1') 
    
  3. с помощью Python 3 и модифицированный gensim, загрузить модель:

    de = Doc2Vec.load('my_doc2vec.pkl') 
    
  4. сохранить его:

    de.save('my_doc2vec_python3.pkl') 
    

Эта модель должна быть в настоящее время загружаемый в Python 3 с неизмененной gensim.