归一化gensim模型中的向量

时间:2018-12-29 16:22:00

标签: nlp gensim word-embedding

我有一个预先训练好的词嵌入的不同规范向量,我想规范化模型中的所有向量。我使用for循环来执行此操作,该循环迭代每个单词并对其向量进行归一化,但是该模型非常庞大,并且需要太多时间。 gensim是否包括任何可以更快地完成此操作的方法?我找不到它。

谢谢!

1 个答案:

答案 0 :(得分:1)

KeyedVectors(单词向量集的公共接口)的Gensim实例包含方法init_sims(),该方法内部使用速度的本地向量运算在内部计算单位长度归一化向量。

第一次尝试通常对单位归一化向量进行的某些操作时,此init_sims()将被自动调用,并且模型会将归一化向量缓存在模型属性中({{1} })–将RAM消耗大致增加一倍。

一旦被调用,您就可以使用vectors_norm方法访问规范向量:

.word_vec()

如果您确定不需要原始的,未归一的向量,则还可以使用其可选的normed_wv = kv_model.word_vec(word, use_norm=True) 参数自己调用init_sim()。然后,规范化的向量将就地破坏原始向量,从而节省了额外的RAM。例如:

replace

请注意,尽管像在普通kv_model.init_sims(replace=True) 运算中那样查找单词的最邻近词之类的事情传统上都是使用单位归一化向量,但有时在下游应用中原始向量很有用。 (此外,在完整的most_similar()模型中,如果您要进行其他增量训练,则应在原始向量上进行,而不是在归一化向量上进行。)