问题描述
我正在尝试执行一个简单的任务,该任务需要在将特定向量加载到 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