You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载葡萄牙语预训练词向量时遇UnicodeDecodeError问题求助

解决Polyglot葡萄牙语词向量加载的UnicodeDecodeError问题

我之前处理过类似的Python3加载Polyglot预训练向量的问题,核心原因其实是Polyglot的预训练文件大多是用Python2序列化保存的,而Python3的pickle默认编码和Python2不兼容,才会抛出UnicodeDecodeError。结合你的MacOS+Python3环境,给你几个可行的解决方案:

方案1:给pickle加载显式指定编码参数

你提到用pickle加载时报错,只需要在pickle.load()里加上encoding='latin1'参数就能解决,这个编码是Python2 pickle文件的常用编码,能正确把旧格式的字符串解码为Python3的str类型。

示例代码:

import pickle

# 替换成你的Polyglot向量文件路径
with open("/path/to/polyglot_pt.pkl", "rb") as f:
    embedding_data = pickle.load(f, encoding="latin1")

# 如果需要转成Polyglot的Embedding对象
from polyglot.mapping import Embedding
embeddings = Embedding(embedding_data["words"], embedding_data["vectors"])

方案2:修复官方Embedding.load的编码逻辑

如果用Polyglot官方的Embedding.load()方法还是报错,那可以直接手动控制pickle的反序列化过程,绕过官方方法的默认编码限制:

from polyglot.mapping import Embedding
import pickle

def load_polyglot_with_fix(file_path):
    with open(file_path, "rb") as f:
        unpickler = pickle._Unpickler(f)
        # 设置编码为latin1适配Python2的pickle文件
        unpickler.encoding = "latin1"
        data = unpickler.load()
    return Embedding(data["words"], data["vectors"])

# 调用自定义加载函数
embeddings = load_polyglot_with_fix("/path/to/polyglot_pt.pkl")

方案3:改用文本格式的向量文件加载

如果上述方法都不奏效,你可以找找Polyglot葡萄牙语向量的纯文本版本(每行格式为「单词 + 空格分隔的向量值」),然后用Gensim来加载,这样更直观也不容易出编码问题:

from gensim.models import KeyedVectors

# 加载文本格式的向量,根据实际编码调整encoding参数
vectors = KeyedVectors.load_word2vec_format(
    "/path/to/polyglot_pt.txt",
    binary=False,
    encoding="utf-8"  # 或者latin1,看文件实际编码
)

额外注意事项

  • 先确认你的向量文件没有损坏,建议重新下载一次Polyglot的葡萄牙语向量包,避免因下载中断导致文件残缺;
  • MacOS下如果文件路径包含特殊字符或中文,尽量用绝对路径,避免路径解析错误;
  • 可以尝试安装Polyglot的兼容版本,比如pip install polyglot==16.7.4,这个版本对Python3的兼容性比新版更好。

内容的提问来源于stack exchange,提问作者Luís Flávio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:42:24