Ошибка UnicodeDecodeError при загрузке word2vec

Полное описание

Я начинаю работать с встраиванием слов и нашел о нем очень много информации. На данный момент я понимаю, что могу тренировать собственные векторы слов или использовать ранее обученные, такие как Google или Wikipedia, которые доступны для английского языка и бесполезны для меня, поскольку я работаю с текстами в Бразильский португальский. Поэтому я пошел на охоту за предварительно обученными векторами слов на португальском языке и в итоге нашел Список предварительно обученных встраиваний слов Хиросана, который привел меня к WordVectors из которого я узнал о Полиглоте Рами Аль-Рфу. После загрузки обоих я безуспешно пытался просто загрузить векторы слов.

Краткое описание

Я не могу загрузить предварительно обученные векторы слов; Я пытаюсь использовать WordVectors и Полиглот.

Загрузки

Попытки загрузки

WordVectors Кьюбьонга Первая попытка: использование Gensim в соответствии с предложением Хиросан;

from gensim.models import KeyedVectors
kyu_path = '.../pre-trained_word_vectors/kyubyong_pt/pt.bin'
word_vectors = KeyedVectors.load_word2vec_format(kyu_path, binary=True)

И ошибка вернулась:

[...]
File "/Users/luisflavio/anaconda3/lib/python3.6/site-packages/gensim/utils.py", line 359, in any2unicode
return unicode(text, encoding, errors=errors)

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

Загруженный zip-архив также содержит другие файлы, но все они возвращают похожие ошибки.

Polyglot Первая попытка: после инструкции Аль-Рфоуса;

import pickle
import numpy
pol_path = '.../pre-trained_word_vectors/polyglot/polyglot-pt.pkl'
words, embeddings = pickle.load(open(pol_path, 'rb'))

И ошибка вернулась:

File "/Users/luisflavio/Desktop/Python/w2v_loading_tries.py", line 14, in <module>
    words, embeddings = pickle.load(open(polyglot_path, "rb"))

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

Вторая попытка: использование функции загрузки встраивания слов в Polyglot;

Во-первых, нам нужно установить полиглот через pip:

pip install polyglot

Теперь мы можем импортировать его:

from polyglot.mapping import Embedding
pol_path = '.../pre-trained_word_vectors/polyglot/polyglot-pt.pkl'
embeddings = Embedding.load(polyglot_path)

И ошибка вернулась:

File "/Users/luisflavio/anaconda3/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)

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

Дополнительная информация

Я использую python 3 на MacOS High Sierra.

Решения

WordVectors Kyubyong, как указано Aneesh Joshi, правильный способ загрузить модель Кьюбьонга - вызвать встроенную функцию загрузки Word2Vec.

from gensim.models import Word2Vec
kyu_path = '.../pre-trained_word_vectors/kyubyong_pt/pt.bin'
model = Word2Vec.load(kyu_path)

Несмотря на то, что я более чем благодарен за решение Aneesh Joshi, полиглот кажется лучшей моделью для работы с португальским языком. Есть идеи по этому поводу?


person Luís Flávio    schedule 28.05.2018    source источник


Ответы (1)


Для предварительно обученного файла word2vector .bin Kyubyong: он мог быть сохранен с помощью функции сохранения gensim.

"загрузить модель с load(). Не load_word2vec_format (это для совместимости с C-инструментом)".

i.e., model = Word2Vec.load(fname)

Дай мне знать, если это работает.

Ссылка: список рассылки Gensim

person aneesh joshi    schedule 29.05.2018
comment
Привет, @aneeshjoshi, спасибо за ответ! Вы правы насчет того, как решить проблему с предварительно обученным word2vector от Kyubyong. Теперь я понимаю разницу между load_word2vec_format() и load(); Спасибо за это. Как я уже упоминал в сообщении, полиглот более надежен, вы случайно не знаете, что с ним происходит? - person Luís Flávio; 29.05.2018