从python中的word2vec获取相似度矩阵(Gensim)

问题描述 投票:2回答:2

我使用以下python代码生成单词向量的相似性矩阵(我的词汇量大小是77)。

similarity_matrix = []
index = gensim.similarities.MatrixSimilarity(gensim.matutils.Dense2Corpus(model.wv.syn0))

for sims in index:
    similarity_matrix.append(sims)
similarity_array = np.array(similarity_matrix)

similarity_array的维度是300 X 300。但是据我所知,维度应该是77 x 77(因为我的词汇量是77)。

i.e.,
      word1, word2, ......, word77
word1 0.2,     0.8,    ...,  0.9
word2 0.1,     0.2,   ....,  1.0
...  ....,    ....., .....,   ....
word77 0.9,  0.8,    ...,    0.1

请告诉我我的代码有什么问题。

而且,我想知道(word1, word2, ..., word77)用于计算这个相似性矩阵的词汇量的顺序是什么?我可以从order获得这个model.wv.index2word吗?

请帮我!

python word2vec gensim word-embedding
2个回答
3
投票

尝试更换

index = gensim.similarities.MatrixSimilarity(gensim.matutils.Dense2Corpus(model.wv.syn0))  

index = gensim.similarities.MatrixSimilarity(gensim.matutils.Dense2Corpus(model.wv.syn0.T))

1
投票

这个问题已经发布很久了,但也许我的答案会有所帮助。下面的代码给出了与index = gensim.similarities.MatrixSimilarity(gensim.matutils.Dense2Corpus(model.wv.syn0.T))相同的结果,带有for循环,但更简洁。

import numpy as np    
similarity_matrix = np.dot(model.wv.syn0norm, model.wv.syn0norm.T)

它计算归一化单词矢量之间的点积,即对之间的距离。

© www.soinside.com 2019 - 2024. All rights reserved.