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