Gensim访问Word2Vec词表时报AttributeError:模块无'Vocab'属性
Gensim 词向量
Vocab属性不存在报错的解决方案 报错本质是Gensim 4.0及后续版本对词向量模块的内部存储结构做了不兼容重构,旧版本中通过wv.vocab字典、wv.Vocab类暴露的接口已经被移除,不存在可直接调用的同名属性,即使参考旧教程的解决方案做适配,也会因为接口版本不匹配触发报错。
代码修改方案
原有代码逻辑是校验目标词是否在已加载的词表范围内,再提取对应词向量,不需要调用已废弃的vocab属性,直接替换判断逻辑即可:
- 替换原判断条件
if word in self.w2v_model.wv.vocab:为if word in self.w2v_model.wv: - 词向量提取语句
vector = self.w2v_model.wv[word]在新版本中完全兼容,无需调整
修正后的完整可运行代码片段:
# if word in model.keys(): #use model.vocab for w2v model and model.keys() for Glove dicts if word in self.w2v_model.wv: vector = self.w2v_model.wv[word] else: vector = [0] * 100
额外适配说明
- 如果业务逻辑需要遍历词表、获取旧版本
Vocab类存储的词频等元信息,可使用新版本提供的替代接口:通过self.w2v_model.wv.index_to_key获取全量词列表,通过self.w2v_model.wv.get_vecattr(word, "count")查询指定词的出现频次 - 如果不想调整现有代码逻辑,可选择降级Gensim到3.x兼容版本,执行安装命令:
pip install gensim==3.8.3
内容的提问来源于stack exchange,提问作者samatadutta
相关产品推荐
相关产品推荐

