训练保存GloVe模型后加载触发UnicodeDecodeError错误求助
GloVe模型加载报错:'utf-8' codec can't decode byte 0x80 in position 0
错误原因
你用glove.save()保存的是glove-python库的二进制序列化模型,而KeyedVectors.load_word2vec_format()是Gensim中用于加载Word2Vec标准格式(文本或二进制)的方法,两者格式不兼容,导致解码失败。
解决方法
方法1:用glove-python库原生方法加载
直接使用Glove类的load方法读取保存的模型,这是最直接的方式:
from glove import Glove # 加载模型 glove_model = Glove.load("gloves.model") # 使用示例:获取词向量 word = "example_word" if word in glove_model.dictionary: vec_idx = glove_model.dictionary[word] word_vector = glove_model.word_vectors[vec_idx]
方法2:转换为Word2Vec格式后加载
如果必须用KeyedVectors加载,先将GloVe模型导出为Word2Vec兼容的文本格式,再读取:
# 先加载原模型 from glove import Glove glove_model = Glove.load("gloves.model") # 导出为Word2Vec文本格式 with open("glove_word2vec.txt", "w", encoding="utf-8") as f: # 第一行写入词汇总数和向量维度 f.write(f"{len(glove_model.dictionary)} {glove_model.no_components}\n") # 遍历所有词汇,写入词和对应的向量 for word, idx in glove_model.dictionary.items(): vector_str = " ".join(map(str, glove_model.word_vectors[idx])) f.write(f"{word} {vector_str}\n") # 用KeyedVectors加载转换后的文件 from gensim.models import KeyedVectors glove_model = KeyedVectors.load_word2vec_format("glove_word2vec.txt", binary=False, unicode_errors='ignore')
注意事项
- 处理罗马乌尔都语文本时,全程统一使用
utf-8编码,避免编码混乱 - 确认你使用的是
glove-python库而非Gensim的GloVe实现,两者的保存/加载逻辑不同
内容的提问来源于stack exchange,提问作者Nadeem Qamar
相关产品推荐
相关产品推荐

