【问题标题】:AttributeError: 'Word2Vec' object has no attribute 'most_similar' (Word2Vec)AttributeError: 'Word2Vec' 对象没有属性 'most_similar' (Word2Vec)
【发布时间】:2021-10-11 01:20:57
【问题描述】:

我正在使用 Word2Vec 并使用经过 wiki 训练的模型,该模型会给出最相似的单词。我之前运行过它并且它工作但现在即使重新运行整个程序后它也会给我这个错误。我试图起飞return_path=True,但我仍然遇到同样的错误

print(api.load('glove-wiki-gigaword-50', return_path=True))
model.most_similar("glass")

#错误:

/Users/me/gensim-data/glove-wiki-gigaword-50/glove-wiki-gigaword-50.gz
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-153-3bf32168d154> in <module>
      1 print(api.load('glove-wiki-gigaword-50', return_path=True))
----> 2 model.most_similar("glass") 

AttributeError: 'Word2Vec' object has no attribute 'most_similar'

#模型 这是我用的模型

    print(
        '%s (%d records): %s' % (
            model_name,
            model_data.get('num_records', -1),
            model_data['description'][:40] + '...',
        )
    )

编辑:这是我的 gensim 下载和输出

!python -m pip install -U gensim

输出:

已满足要求:.​​/opt/anaconda3/lib/python3.8/site-packages (4.0.1) 中的 gensim

已满足要求:.​​/opt/anaconda3/lib/python3.8/site-packages(来自 gensim)中的 numpy>=1.11.3 (1.20.1)

要求已经满足:smart-open>=1.8.1 in ./opt/anaconda3/lib/python3.8/site-packages (from gensim) (5.1.0)

要求已经满足:scipy>=0.18.1 in ./opt/anaconda3/lib/python3.8/site-packages (from gensim) (1.6.2)

【问题讨论】:

  • 你不是说model.similar吗?
  • @ewong 它给了我这个:AttributeError: 'Word2Vec' object has no attribute 'similar'
  • 您的代码是否有更多行,或者仅此而已?模型在哪里定义?
  • @ewong 有这个for model_name, model_data in sorted(info['models'].items()): print( '%s (%d records): %s' % ( model_name, model_data.get('num_records', -1), model_data['description'][:40] + '...', ) )

标签: python nlp gensim word2vec doc2vec


【解决方案1】:

您可能正在寻找&lt;MODEL&gt;.wv.most_similar,所以请尝试:

model.wv.most_similar("glass") 

【讨论】:

  • 嗨!我试过这个,但它给了我AttributeError: 'Word2Vec' object has no attribute 'vw'。我用我使用的模型更新了我的帖子
  • 对。有趣的。能否请您发布您也在使用的gensim 库的版本(因为途中发生了变化)?
  • 我用过import gensim.models.word2vec as w2vimport gensim.downloader as api
  • 这不是我要求的。你能运行pip show gensim 并发布输出吗?
  • 您好,我刚刚将它们添加到我的帖子末尾@sophros
【解决方案2】:

您显示的代码...

print(api.load('glove-wiki-gigaword-50', return_path=True))
model.most_similar("glass")

...不会将任何内容分配给model。 (是之前分配的吗?)

而且,使用return_path=True 意味着api.load() 只会返回数据文件的字符串路径。如果您打算使用该字符串然后自己将数据加载到模型中,那只会很有趣。

没有return_path=Trueapi.load() 调用可能会返回KeyedVectors 的一个实例,它是一组向量。这与完整的Word2Vec 模型不同,但仍支持.most_similar() 方法。但是,如果您只是 print()ing 返回的路径或返回的模型,则它不会在您以后的 .most_similar() 操作的 model 变量中。

所以你可能想要:

kv_model = api.load('glove-wiki-gigaword-50')
similars = kv_model.most_similar('glass')
print(similars)

(就我个人而言,我不喜欢 api.load() 那样的不透明魔法和运行新下载的代码。我认为自己下载原始数据文件是一个更好的习惯,来自一个已知的来源,以便您知道哪些文件已经到达,哪些目录,在您自己的机器上。然后使用特定于数据集的加载方法来加载该数据,以便您了解哪些库方法有效有哪些类型的文件。)

如果您的 model 变量确实包含完整的 Word2Vec 模型,来自一些未显示的其他代码,那么它还将在其 .wv包含一组向量(对于 word-vectors) 属性:

similars = model.wv.most_similar('glass')
print(similars)

【讨论】:

  • 这会根据我的数据训练打印出相似的单词。但是,我想得到'glove-wiki-gigaword-50'训练的单词
  • 您是否尝试过将api.load() 调用的结果分配给变量而不是打印出来? (如果您想丢弃已经存在的Word2Vec 模型,可以将其分配给model。或者您可以将其分配给kv_model 之类的新变量,以反映它只是一个KeyedVectors。)跨度>
  • 我试过了,它给了我AttributeError: 'str' object has no attribute 'most_similar'
  • 您尝试了哪些代码导致了该错误? (听起来您将字符串分配给变量,而不是 api.load() 的结果。)
  • 这就是我所做的:kv_model= (api.load('glove-wiki-gigaword-50', return_path=True)) (kv_model.most_similar("glass"))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 2018-06-16
  • 2012-12-01
  • 2021-04-19
  • 1970-01-01
相关资源
最近更新 更多