Python gensim 从向量创建 word2vec 模型(在 ndarray 中)

Python gensim create word2vec model from vectors (in ndarray)

我有一个包含单词及其对应向量的 ndarray(每个单词的大小为 100)。 例如:

Computer 0.11 0.41 ... 0.56
Ball     0.31 0.87 ... 0.32

以此类推

我想从中创建一个 word2vec 模型:

model = load_from_ndarray(arr)

怎么办?我看到了

KeyedVectors

但它只需要文件而不是数组

目前还没有将您自己的 array/word-list 变成 KeyedVectors 的便捷方法。所以你必须 hand-construct 在你自己的代码中。

但它是一个非常简单的对象,主要是一个原始数组和一个用于将单词映射到 index-locations 的字典,所有源都可用:

https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/models/keyedvectors.py

我特别建议执行以下一项或两项操作的策略:

  • 仔细查看 load_word2vec_format() 方法,包括兄弟 base_any2vec.py 文件中的 similarly-named 支持函数,并查看它们在其中使用的每个步骤读取文件并构建完整实例

  • 以一种受支持的方式训练虚拟 KeyedVectors – 例如通过训练 Word2Vec 在一些包含您需要的单词的合成语料库上 – 然后检查该对象以了解工作实例的必要部分,或对该实例进行变异 in-place 以获得您喜欢的 vector-mappings。

from gensim.models import KeyedVectors
words = myarray[:,0]
vectors = myarray[:,1:]
model = KeyedVectors(vectors.shape[1])
model.add(words, vectors)

如果需要可以保存

model.save('mymodel')

稍后只需加载它

model = KeyedVectors.load('mymodel')