AttributeError: 无法在 <module 'gensim.models.word2vec' 上获取属性 'Vocab'

问题描述

我的问题类似于 this 问题。我尝试了发布在该问题上的两种解决方案,但我仍然收到错误消息,即 gensim.models.word2vec 模块中的属性“Vocab”不可用。

我使用这个属性代码部分在这里

# if word in model.keys(): #use model.vocab for w2v model and model.keys() for glove dicts
        if word in self.w2v_model.wv.vocab:
            vector = self.w2v_model.wv[word]
        else:
            vector = [0] * 100  

解决方法

pip install gensim==3.8.1 有效 - 问题出在特定的 Gensim 软件包版本上。

,

Gensim 4.0.0 进行了许多修复和性能改进,还更改了一些属性/方法名称以实现简单性和长期一致性。一个项目 wiki 页面有一个指南来调整旧代码以匹配新 API:

https://github.com/RaRe-Technologies/gensim/wiki/Migrating-from-Gensim-3.x-to-4

但是,您的代码根本不需要使用 .vocab。词向量集 w2v_model.wv 可以回答一个键是否已经是 in 本身。因此,以下代码应该在 4.0 之前和 4.0 及以上版本中都可以使用:

    if word in self.w2v_model.wv:
        vector = self.w2v_model.wv[word]
    else:
        vector = [0] * 100  

(另外,如果您确实选择继续使用较旧的 Gensim 来推迟任何其他代码更改,最好使用 3.8.3,这是 3.x 系列中的最后一个,于 2020 年 5 月发布,而不是 2019 年 9 月发布的较旧/错误的 3.8.1。但是在 gensim-4.0.0 及更高版本中,一些与 word2vec 相关的关键字会更快并且使用更少的内存,因此应尽可能避免回滚.)