有没有办法遍历 Gensim 的 Word2Vec 的向量?

Is there a way to iterate through the vectors of Gensim's Word2Vec?

我正在尝试执行一个简单的任务,该任务需要在将特定向量加载到 gensim 的 Word2Vec 后进行迭代和交互。

基本上,给定以下格式的 txt 文件:

t1 -0.11307 -0.63909 -0.35103 -0.17906 -0.12349
t2 0.54553 0.18002 -0.21666 -0.090257 -0.13754
t3 0.22159 -0.13781 -0.37934 0.39926 -0.25967 

其中 t1 是向量的名称,后面是向量本身。我使用函数 vecs = KeyedVectors.load_word2vec_format(datapath(f), binary=False).

加载它

现在,我想遍历我拥有的向量并进行计算,以求和所有向量为例。如果这是在使用 with open(f) 中读取的,我知道我可以在其上使用 .split(' '),但由于它现在是一个 KeyedVector 对象,我不确定该怎么做。

我查看了 word2vec 文档,并使用了 dir(KeyedVectors),但我仍然不确定是否有类似 KeyedVectors.vectors 的属性或允许我执行此任务的东西.

任何 tips/help/advice 将不胜感激!

在其 .index_to_key 属性 中有 KeyedVectors 对象中所有单词的列表。因此,对所有向量求和的一种方法是在列表理解中按名称检索每个向量:

np.sum([vecs[key] for key in vecs.index_to_key], axis=0)

但是,如果您真正想要做的只是对向量求和 – 并且键(单词标记)不是您计算的重要部分,那么所有原始单词向量的集合在 .vectors 属性,作为每行一个向量的 numpy 数组。所以你也可以这样做:

np.sum(vecs.vectors, axis=0)