Gensim 3.8.0 至 Gensim 4.0.0

问题描述 投票:0回答:4

我使用 Gensim 3.8.0 训练了 Word2Vec 模型。后来我尝试在GCP上使用Gensim 4.0.o来使用预训练模型。我使用了以下代码:

model = KeyedVectors.load_word2vec_format(wv_path, binary= False)
words = model.wv.vocab.keys()
self.word2vec = {word:model.wv[word]%EMBEDDING_DIM for word in words}

我收到错误消息“model.mv”已从 Gensim 4.0.0 中删除。 然后我使用了以下代码:

model = KeyedVectors.load_word2vec_format(wv_path, binary= False)
words = model.vocab.keys()
word2vec = {word:model[word]%EMBEDDING_DIM for word in words}

并出现以下错误:

AttributeError: The vocab attribute was removed from KeyedVector in Gensim 4.0.0.
Use KeyedVector's .key_to_index dict, .index_to_key list, and methods .get_vecattr(key, attr) and .set_vecattr(key, attr, new_val) instead.
See https://github.com/RaRe-Technologies/gensim/wiki/Migrating-from-Gensim-3.x-to-4

任何人都可以建议我如何使用预训练模型并在 Gensim 4.0.0 中返回字典吗?

python nlp gensim word2vec word-embedding
4个回答
31
投票

从 Gensim 3.x 迁移到 4 所引起的变化都存在于 github 链接中:

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

对于上述问题,对我有用的解决方案:

    words = list(model.wv.index_to_key)

9
投票

迁移说明解释了主要更改以及如何调整代码:

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

根据那里的指导,要获取单词列表,因为您的

model
变量已经是
KeyedVectors
的实例,您可以使用:

model.index_to_key

您的代码并不需要字典,但

model.key_to_index
中有一个略有不同的单词到索引位置字典。但是,您可以像以前一样使用
model[key]
来获取单独的向量。

(另外:我无法想象您的

%EMBEDDING_DIM
正在做任何有用的事情。为什么您要使用维度的整数计数来执行元素级
%
模数运算,针对通常是小浮点数的各个维度? 它通常是无害的,因为
EMBEDDING_DIM
通常会远远大于个人值,但它没有任何好的目的。)


3
投票

在 gensim 4.0.0 上,您需要使用模型

key_to_index
中的
KeyedVector
方法,这将返回一个
dict_keys
对象,其中包含模型上的所有单词 -keys-,以便您仍然可以迭代你所有的词汇:)。

你的代码现在应该是这样的:

model = KeyedVectors.load_word2vec_format(wv_path, binary= False)
words = list(model.wv.key_to_index.keys())
self.word2vec = {word:model.wv[word]%EMBEDDING_DIM for word in words}

0
投票

#查找单词中使用的词汇 word_vocab=模型。 wv.vocab() 我尝试了这个,但由于 gensim 的更新,它提供了这样的错误 Gensim 4.0.0 中的 vocab 属性已从 KeyedVector 中删除。 请使用 KeyedVector 的 .key_to_index 字典、.index_to_key 列表以及方法 .get_vecattr(key, attr) 和 .set_vecattr(key, attr, new_val) 代替。

因此,我尝试使用 kew_to_index.keys() 和列表 word_vocab=列表(model.wv.key_to_index.keys())

© www.soinside.com 2019 - 2024. All rights reserved.