如何在TensorBoard Projector中可视化Gensim训练的Word2vec词向量
报错原因
你触发UnicodeDecodeError的核心原因是model.save()导出的是gensim自定义的pickle序列化格式,而gensim.scripts.word2vec2tensor脚本仅支持标准word2vec格式(文本或二进制导出的词向量文件),两种格式不兼容导致解析失败。
新版本适配解决方案
这里提供两种适配gensim 4.0+版本的方案,优先推荐第二种手动生成的方式,兼容性更强。
方案一:导出标准word2vec格式后用脚本转换
训练模型后先导出标准word2vec词向量格式,再执行转换命令:
from gensim.test.utils import common_texts from gensim.models import Word2Vec # 注意:gensim 4.0+版本中向量维度参数已从size改为vector_size,旧参数会触发警告 model = Word2Vec(sentences=common_texts, vector_size=100, window=5, min_count=1, workers=4) # 导出标准word2vec文本格式,而非完整模型的pickle格式 model.wv.save_word2vec_format("/content/word2vec.kv", binary=False)
再执行原转换命令即可正常运行:
!python3 -m gensim.scripts.word2vec2tensor -i /content/word2vec.kv -o /content/my_model
方案二:手动生成Embedding Projector所需文件(推荐)
Embedding Projector仅需要两个TSV文件即可完成可视化:vectors.tsv存储所有词的向量、metadata.tsv存储对应词的文本内容。无需依赖官方转换脚本,直接通过代码生成即可,适配所有版本:
import io from gensim.models import Word2Vec # 加载之前通过model.save()保存的完整模型 model = Word2Vec.load("/content/word2vec.model") # 初始化两个输出文件 vec_file = io.open('/content/my_model_vecs.tsv', 'w', encoding='utf-8') meta_file = io.open('/content/my_model_meta.tsv', 'w', encoding='utf-8') # 遍历所有词,写入向量和元数据 # 注意:gensim 4.0+版本中词表索引属性已从index2word改为index_to_key for word in model.wv.index_to_key: word_vec = model.wv[word] meta_file.write(word + "\n") vec_file.write("\t".join([str(x) for x in word_vec]) + "\n") vec_file.close() meta_file.close()
生成后直接将两个TSV文件上传到Embedding Projector平台即可完成可视化。
内容的提问来源于stack exchange,提问作者G. Macia
相关产品推荐
相关产品推荐

