Python 加载word2vec时UnicodeDecodeError错误

Python 加载word2vec时UnicodeDecodeError错误,python,word2vec,gensim,python-unicode,polyglot,Python,Word2vec,Gensim,Python Unicode,Polyglot,完整描述 我开始研究单词嵌入,发现了大量关于它的信息。到目前为止,我知道我可以训练自己的词向量,或者使用以前训练过的词向量,比如谷歌或维基百科,这些词可以用英语表达,但对我来说没有用处,因为我使用的是巴西葡萄牙语文本。因此,我继续寻找预先训练过的葡萄牙语单词向量,最终找到了这一点,我找到了Kyubyong的单词向量,从中我了解了Rami Al-Rfou的单词向量。在下载了这两个之后,我一直试图简单地加载单词向量,但没有成功 简短描述 我无法加载预先训练过的单词向量;我正在努力工作 下载 ) )

完整描述

我开始研究单词嵌入,发现了大量关于它的信息。到目前为止,我知道我可以训练自己的词向量,或者使用以前训练过的词向量,比如谷歌或维基百科,这些词可以用英语表达,但对我来说没有用处,因为我使用的是巴西葡萄牙语文本。因此,我继续寻找预先训练过的葡萄牙语单词向量,最终找到了这一点,我找到了Kyubyong的单词向量,从中我了解了Rami Al-Rfou的单词向量。在下载了这两个之后,我一直试图简单地加载单词向量,但没有成功

简短描述

我无法加载预先训练过的单词向量;我正在努力工作

下载

  • )
  • )
加载尝试次数

京永氏 第一次尝试:按照建议使用Gensim

然后返回错误:

[...]
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
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)
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
下载的zip文件还包含其他文件,但所有文件都返回类似的错误

第一次尝试:跟随

然后返回错误:

[...]
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
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)
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
现在我们可以导入它:

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/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
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)
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
额外信息

我正在MacOS High Sierra上使用python 3

解决方案

京永氏 正如所指出的,加载Kyubyong模型的正确方法是调用Word2Vec的本机加载函数

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

尽管我非常感谢Aneesh Joshi的解决方案,但对于葡萄牙人来说,polyglot似乎是一个更好的模式。关于这个有什么想法吗?

对于Kyubyong预先训练好的word2vector.bin文件: 它可能是使用gensim的保存功能保存的

“使用
load()
加载模型。而不是
load\u word2vec\u格式
(这是为了与C工具兼容)。”

i、 例如,
model=Word2Vec.load(fname)

让我知道这是否有效


参考资料:

你好,@aneeshjoshi,谢谢你的回复!关于如何使用Kyubyong预先训练好的word2vector解决问题,您是对的。我现在明白了
load\u word2vec\u format()
load()
之间的区别;谢谢你。正如我在更新后提到的,polyglot更可靠,你知道这是怎么回事吗?