有没有办法遍历 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)
我正在尝试执行一个简单的任务,该任务需要在将特定向量加载到 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)