我已经使用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中使用预训练模型并返回字典?
发布于 2021-05-09 14:08:39
从Gensim 3.x迁移到4所引起的变化都出现在github链接中:
https://github.com/RaRe-Technologies/gensim/wiki/Migrating-from-Gensim-3.x-to-4
对于上述问题,适用于我的解决方案:
words = list(model.wv.index_to_key)发布于 2021-03-31 08:28:51
迁移说明解释了主要的更改以及如何调整代码:
https://github.com/RaRe-Technologies/gensim/wiki/Migrating-from-Gensim-3.x-to-4
根据这里的指导,由于您的model变量已经是KeyedVectors的一个实例,因此要获得单词列表,您可以使用:
model.index_to_key您的代码不需要字典,但在model.key_to_index中有一个稍有不同的词到索引位置字典。但是,您可以像以前一样使用model[key]来获取单个向量。
(另外:我无法想象您的%EMBEDDING_DIM会做任何有用的事情。为什么要使用维度的整数计数对通常是小浮点数的单个维度执行元素级%模运算?它通常是无害的,因为EMBEDDING_DIM通常会远远大于单个值,但它没有任何好的用途。)
发布于 2021-08-25 22:58:24
在gensim 4.0.0上,您将需要使用模型的KeyedVector中的key_to_index方法,该方法将返回一个包含模型上所有单词的dict_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}https://stackoverflow.com/questions/66868221
复制相似问题