有没有办法遍历 Gensim 的 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 这样的属性或允许我执行此任务的东西。

任何提示/帮助/建议将不胜感激!

解决方法

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

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

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

.vectors