我应该如何用AttributeError修改代码"X=model[model.wv.vocab]":



我在python中使用gensim word2vec包,代码如下:

model = Word2Vec(window = 10, sg = 1, hs = 0,
negative = 10, # for negative sampling
alpha=0.03, min_alpha=0.0007,
seed = 14)
model.build_vocab(purchases_train, progress_per=200)
model.train(purchases_train, total_examples = model.corpus_count,
epochs=10, report_delay=1)
model.init_sims(replace=True)
X = model[model.wv.vocab]

出现错误:AttributeError:已从Gensim 4.0.0中的KeyedVector中删除vocab属性。

我应该如何修改代码X = model[model.wv.vocab]以使其符合Gensim 4.0.0的要求。?

有一个项目帮助页面,用于转换旧代码以处理Gensim 4.0+中的Gensim更改,网址为:https://github.com/RaRe-Technologies/gensim/wiki/Migrating-from-Gensim-3.x-to-4

在Gensim 4.0之前,.vocab属性曾经是一个dict,具有已知的单词键和值,这些键和值是Vocab类型的专用对象,包含有关该单词的信息,例如出现次数以及所有向量数组中的哪个位置(槽(包含该单词。在Gensim 4.0及更高版本中;简单的CCD_ 5 dict只存储单词->时隙映射,没有专门的Vocab对象的开销,其他单词信息以不同的方式存储。

因为在这里,您只需要使用.vocab来获取键列表以进行多索引查找,所以最类似的更新是使用.key_to_index,而不是使用.vocab:它具有所需的所有相同键。

但是,这可能不是最好的方法,因为即使原始代码有效,它本身也不是一个好方法。

如果你真的只是想要一个可索引的对象,你可以从中读取向量,其中每个槽都有一个模型向量,它已经存在于模型内部的.vectors数组中。你可能应该直接使用它:

X = model.wv.vectors

只要您不修改X的行,这将立即得到您想要的内容,而无需对每个键进行任何复制/查找。

另外,你显示的训练参数显示了一些常见的错误,表明你可能正在从糟糕的在线教程中学习。具体来说,值alpha=0.03, min_alpha=0.0007没有什么意义——大多数用户不需要更改默认值,那些可能想要的用户应该通过一些优化过程来选择它们,而不是选择那些任意的值。如果你看到一个在线示例使用这些值,而没有解释为什么选择它们而不是默认值,那么该示例的作者可能几乎不明白它们在写什么。

最新更新