计算 2 个不同 Word2Vec 模型中单个单词的余弦相似度

Mis*_*a S 1 python-3.x gensim word2vec word-embedding

gensim使用model.save(model_name)两个不同语料库的命令构建了两个词嵌入(word2vec 模型)并将其保存为(word2vec1 和 word2vec2)(这两个语料库有些相似,相似意味着它们像一本书的第 1 部分和第 2 部分一样相关) . 假设,两个语料库的前几个词(就频率或出现次数而言)是同一个词(假设为a)。

cosine-similarity or similarity对于两个 word2vec 模型,如何计算提取的顶级词(例如“a”)的相似度 ( )?是否most_similar()会在这种情况下有效地工作?

我想知道同一个词 (a) 与两个不同的生成模型之间的相似度有多大?

任何想法都深表赞赏。

ane*_*shi 5

您似乎对 word2vec 有错误的想法。它不为一个词提供一个绝对向量。它设法找到一个词相对于其他词的表示。所以,对于同一个语料库,如果你运行 word2vec 两次,你会得到同一个词的 2 个不同的向量。当您将其与其他词向量进行比较时,含义就出来了。

king-man将始终接近(余弦相似度)queen-woman无论您训练多少次。但是每次训练后它们会有不同的向量。

在您的情况下,由于 2 个模型的训练方式不同,因此比较同一个词的向量与比较两个随机向量相同。你应该比较相对关系。也许是这样的:model1.most_similar('dog')vsmodel2.most_similar('dog')

但是,要回答您的问题,如果您想比较这两个向量,可以按如下方式进行。但结果将毫无意义。

只需从每个模型中获取向量并手动计算余弦相似度即可。

vec1 = model1.wv['computer']
vec2 = model2.wv['computer']
print(np.sum(vec1*vec2)/(np.linalg.norm(vec1)*np.linalg.norm(vec2)))
Run Code Online (Sandbox Code Playgroud)