【问题标题】:Get a similarity matrix from word2vec in python (Gensim)从 python (Gensim) 中的 word2vec 获取相似度矩阵
【发布时间】:2019-04-29 22:10:11
【问题描述】:

我正在使用以下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)的顺序是什么?我可以从model.wv.index2word 获得这个order 吗?

请帮帮我!

【问题讨论】:

    标签: python word2vec gensim word-embedding


    【解决方案1】:

    尝试替换

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

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

    【讨论】:

      【解决方案2】:

      这个问题已经发布很久了,但也许我的回答会有所帮助。 下面的代码给出了与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)
      

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

      【讨论】:

        猜你喜欢
        • 2017-04-30
        • 2019-07-02
        • 2015-10-10
        • 1970-01-01
        • 2019-01-06
        • 2017-07-11
        • 2018-08-30
        • 2018-08-29
        • 2019-11-20
        相关资源
        最近更新 更多