python - 加载 word2vec 时出现 UnicodeDecodeError 错误
问题描述
详细描述
我开始使用词嵌入,并找到了大量关于它的信息。到目前为止,我了解我可以训练自己的词向量或使用以前训练过的词向量,例如 Google 或 Wikipedia 的,它们可用于英语,但对我没有用,因为我正在处理巴西葡萄牙语的文本. 因此,我开始寻找葡萄牙语中预训练的词向量,最终找到了Hirosan 的预训练词嵌入列表,这使我找到了 Kyubyong 的WordVectors,从中我了解了 Rami Al-Rfou 的Polyglot。下载两者后,我一直试图简单地加载单词向量,但没有成功。
简短的介绍
我无法加载预训练的词向量;我正在尝试WordVectors和Polyglot。
下载
加载尝试
Kyubyong 的WordVectors 第一次尝试:按照 Hirosan 的建议使用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 第一次尝试:遵循Al-Rfous 的指示;
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 安装 polyglot:
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
额外的信息
我在 MacOS High Sierra 上使用 python 3。
解决方案
Kyubyong 的WordVectors正如Aneesh Joshi 所指出的,加载 Kyubyong 模型的正确方法是调用 Word2Vec 的原生加载函数。
from gensim.models import Word2Vec
kyu_path = '.../pre-trained_word_vectors/kyubyong_pt/pt.bin'
model = Word2Vec.load(kyu_path)
尽管我非常感谢 Aneesh Joshi 的解决方案,但多语言似乎是使用葡萄牙语的更好模式。关于那个有什么想法吗?
解决方案
对于 Kyubyong 的预训练 word2vector .bin 文件:它可能已使用 gensim 的保存功能保存。
“用 . 加载模型load()
。不是load_word2vec_format
(这是为了 C 工具的兼容性)。”
IE,model = Word2Vec.load(fname)
让我知道这是否有效。
参考:Gensim 邮件列表
推荐阅读
- tabs - Xcode 11 Beta 4 TabbedView 绑定问题
- javascript - 在 Ajax 中加载页面的一部分,而不是整个页面
- python - 根据条件在 Pandas 数据框中迭代和赋值
- python - 什么是正确的实施方法
Django中的URL路由? - php - PHPDoc 的参数必须是实现接口的特定类
- javascript - 在创建不和谐机器人时遇到 .disconnect() 问题
- flutter - Flutter 的谷歌地图小部件没有被 Card 或 ClipRRect 裁剪
- html - WebStorm 无法链接其他目录中的图像
- python-3.x - Python在打开时停止工作并给出异常处理错误
- python-3.x - 如何在python中读取批处理文件并检索特定数据