我使用以下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
吗?
请帮助我!
答案 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)
它计算归一化字向量之间的点积,即两对之间的距离。