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

时间:2017-11-07 11:51:50

标签: python word2vec gensim word-embedding

我使用以下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吗?

请帮助我!

2 个答案:

答案 0 :(得分:3)

尝试替换

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

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

答案 1 :(得分:1)

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

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

它计算归一化字向量之间的点积,即两对之间的距离。