gensim加载印尼语Word2Vec模型报utf-8解码错误如何解决
异常触发原因
这个错误和文件编码本身没有关系,核心是加载方法和待加载文件完全不匹配:
KeyedVectors.load_word2vec_format()是专门适配谷歌原生Word2Vec工具导出的向量文件的加载方法:无论设置binary=True还是False,这个方法都会先按UTF-8编码读取文件开头的文本头,解析词表总量、向量维度两个核心参数,再往后读取词和对应向量。- 你传入的
idwiki_word2vec_100_new_lower.model.wv.vectors.npy是gensim调用save()方法存储模型时,拆分出来单独存储的numpy格式向量数值矩阵,本质是numpy序列化的二进制数组,既没有要求的文本格式文件头,也没有存储「词语-向量行号」的映射关系,根本不符合load_word2vec_format()的输入格式要求。方法启动后第一时间尝试按UTF-8读取文件头,碰到numpy二进制格式的首字节0x93,就直接抛出了解码错误。 - 从文件命名规则能看出来,这个npy只是完整模型的一个分片文件,同目录下一定配套有主模型文件、词表映射文件等其他组件,单独拿这一个npy文件无法加载出可用的词向量模型。
修复方案
根据手里的文件完整度选对应处理方式即可:
- 如果你保留了模型保存时生成的全套文件(即同路径下存在
idwiki_word2vec_100_new_lower.model主文件,以及所有和它关联的.wv.*后缀分片文件),放弃使用load_word2vec_format,改用gensim的通用模型加载方法读取主模型文件:
from gensim.models import Word2Vec, KeyedVectors # 加载完整Word2Vec模型(包含训练状态、词向量等全部信息) model = Word2Vec.load('/content/drive/MyDrive/Feature Extraction Lexicon Based/Word2Vec/idwiki_word2vec_100_new_lower.model') # 如果只需要用词向量做推理,不需要后续继续训练,也可以直接加载词向量对象,内存占用更低 # wv = KeyedVectors.load('/content/drive/MyDrive/Feature Extraction Lexicon Based/Word2Vec/idwiki_word2vec_100_new_lower.model.wv')
- 如果你手里只有这一个
.wv.vectors.npy文件,没有其他配套文件,是没法正常加载使用的:这个文件只存了所有向量的数值,没有词和向量的对应关系,必须重新下载完整的模型包,拿到所有配套分片文件后再按上面的方法加载。
补充:如果后续拿到的是别人从谷歌原生Word2Vec导出的.bin格式或者.txt格式向量文件,才需要用
load_word2vec_format()方法加载,不要把gensim自身save生成的分片文件传给这个方法。
内容的提问来源于stack exchange,提问作者Ronald Ferdinand
相关产品推荐
相关产品推荐

