加载FastText预训练词向量时报FastTextKeyedVectors无vocab属性如何解决
报错根本原因
你遇到的是Gensim版本迭代导致的接口不兼容问题:
Gensim从4.0版本开始重构了KeyedVectors相关组件的底层属性:
- 3.x版本中存储词汇表映射的
.vocab属性被完全移除,替换为.key_to_index属性 - 旧版本的
word_vec()方法被标记为弃用,内部逻辑没有适配新的属性规则
你保存.kv文件用的是Gensim 3.x版本,而当前运行代码的环境安装的是Gensim 4.x版本,调用model[word]时内部会调用弃用的word_vec()方法访问不存在的.vocab属性,因此抛出AttributeError。
解决办法
- 方法1(推荐,适配新版本):改用新版本Gensim官方推荐的调用写法,兼容已加载的旧版本模型文件:
vec_list = [] for word in words: # 先用新属性判断词是否在词汇表 if word in model.key_to_index: vec_list.append(model.get_vector(word)) else: # 自定义OOV词的处理逻辑,比如补零或者跳过 vec_list.append(np.zeros(model.vector_size)) words_df = pd.DataFrame(vec_list)
- 方法2:降级Gensim到3.x最终稳定版本,不需要修改原有代码即可直接运行:
pip install gensim==3.8.3
- 方法3:在当前Gensim 4.x环境下重新训练FastText模型并保存
.kv文件,新生成的模型文件完全适配新版本属性规则,原有读取逻辑无需修改即可正常运行。
内容的提问来源于stack exchange,提问作者astampib
相关产品推荐
相关产品推荐

