Gensim Word2Vec 模型:切割尺寸

Gensim Word2Vec model: Cut dimensions

我在 geinsim 中有一个训练有素的 word2vec 模型,有 300 个维度,我想将维度削减到 100 个(只需删除最后 200 个维度)。使用 python 最简单、最有效的方法是什么?

您可以将输出模型保存在 word2vec format 中。确保将其另存为文本文件 (.txt)。 word2vec格式如下

第一行是<vocabulary_size> <embedding_size>。在您的情况下,<embedding_size> 将是 300。 其余行将是 <word><TAB><300 floating point numbers space separated>。现在您可以轻松地在 python 中解析此文件并丢弃每行中的最后 200 个浮点数。确保更新第一行中的 <embedding_size>。将其另存为新文件(可选)。现在您可以使用 load_word2vec_format() 将这个新文件加载为新的 word2vec 模型。

您应该能够 trim KeyedVectors 实例中的维度,然后保存它 – 这样您就不必对磁盘上的格式做任何特殊的事情。例如:

kv = w2v_model.wv
kv.vectors = kv.vectors[:,0:100]  # keeps just 1st 100 dims
kv.vector_size = 100

现在 kv 可以保存(作为 gensim 的原生 .save() 或交换格式 .save_word2vec_format()),或者只是作为原始尺寸。

(虽然较大嵌入的任何 100 个维度可能与其他任何维度一样好,但您将以任意方式失去 300 个维度的一些表现力。用 100 个维度重新训练以begin with 可能会做得更好,或者使用某种降​​维算法,实际上,这可能一定会给你留下 "most expressive" 100 个维度。)