Gensim加载Word2Vec模型报UnicodeDecodeError错误及向量降维求助
报错修复方案
报错原因
你保存的myWord2Vec.model是gensim训练完成后用默认save()方法导出的私有二进制序列化文件,不是load_word2vec_format适配的标准Word2Vec交换格式(明文/谷歌二进制格式),所以会出现编码解析错误。
修复代码
import gensim # 用适配gensim原生保存格式的加载方法 model = gensim.models.Word2Vec.load('myWord2Vec.model') # 提取训练好的词向量矩阵 word_vectors = model.wv
词向量降维方法
- 方法1:训练时直接指定低维度(可重新训练的最优方案)
训练Word2Vec时直接调整vector_size参数为你需要的维度,比如匹配数据集维度设为100,训练完成后直接使用即可,避免后续降维带来的信息损耗:
# 训练时指定维度示例 model = gensim.models.Word2Vec(corpus, vector_size=100, window=5, min_count=1) model.save('myWord2Vec_low_dim.model')
- 方法2:用PCA做线性降维(已完成训练无法重训的首选方案)
PCA是无监督线性降维方法,最大程度保留原始向量方差信息,适配后续逻辑回归训练场景:
from sklearn.decomposition import PCA import numpy as np from gensim.models import KeyedVectors # 提取所有词的原始向量 all_words = word_vectors.index_to_key original_vectors = np.array([word_vectors[word] for word in all_words]) # 设定目标维度,比如要降到100维 target_dim = 100 pca = PCA(n_components=target_dim) low_dim_vectors = pca.fit_transform(original_vectors) # 把降维后的向量封装成新的KeyedVectors对象,方便后续调用 new_kv = KeyedVectors(vector_size=target_dim) new_kv.add_vectors(all_words, low_dim_vectors) # 可选:保存降维后的词向量 new_kv.save('low_dim_word2vec.kv')
- 方法3:用T-SNE降维(仅适用可视化场景,不建议后续模型训练使用)
T-SNE非线性降维对局部特征保留更好,但计算速度慢、不适合大词汇量,且输出向量仅用于可视化,不要输入逻辑回归训练。
内容的提问来源于stack exchange,提问作者Rana
相关产品推荐
相关产品推荐

