Полное описание
Я начинаю работать с встраиванием слов и нашел о нем очень много информации. На данный момент я понимаю, что могу тренировать собственные векторы слов или использовать ранее обученные, такие как Google или Wikipedia, которые доступны для английского языка и бесполезны для меня, поскольку я работаю с текстами в Бразильский португальский. Поэтому я пошел на охоту за предварительно обученными векторами слов на португальском языке и в итоге нашел Список предварительно обученных встраиваний слов Хиросана, который привел меня к WordVectors из которого я узнал о Полиглоте Рами Аль-Рфу. После загрузки обоих я безуспешно пытался просто загрузить векторы слов.
Краткое описание
Я не могу загрузить предварительно обученные векторы слов; Я пытаюсь использовать WordVectors и Полиглот.
Загрузки
- предварительно обученные векторы слов в формате word2vector от Kyubyong для португальского языка;
- предварительно полиглот в -тренированные словесные векторы для португальского языка;
Попытки загрузки
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, полиглот кажется лучшей моделью для работы с португальским языком. Есть идеи по этому поводу?