我使用word2vec构建了两个单词嵌入( gensim模型),并将其保存为(word2vec1和word2vec2),方法是对两个不同的语料库使用model.save(model_name)命令(这两个语料库有些相似,它们的关系类似于书的第1部分和第2部分)。假设,两个身体的顶部单词(频率或出现频率)是同一个单词(让我们把它说成是a)。
对于这两个cosine-similarity or similarity模型,如何计算提取的顶部单词(如a)的相似度( word2vec )?在这种情况下,most_similar()能有效地工作吗?
我想知道,对于两个不同的生成模型,同一个词(a)是否有多大程度的相似性?
任何想法都是深为感激的。
发布于 2018-09-12 01:15:31
您似乎对word2vec有错误的看法。它不能为一个单词提供一个绝对向量。它设法为一个单词找到一个相对于其他单词的表示形式。因此,对于同一个语料库,如果你运行两次word2vec,你会得到两个不同的向量为同一个词。当你把它和其他的词向量进行比较的时候,它的意义就来了。
无论你训练多少次,king - man总是与queen - woman密切相关(余弦相似性)。但在每一列火车后,它们会有不同的载体。
在你的例子中,由于这两个模型的训练方式不同,比较同一个词的向量与比较两个随机向量是一样的。你应该比较一下相对关系。也许是这样:model1.most_similar('dog')对model2.most_similar('dog')
然而,要回答你的问题,如果你想比较这两个向量,你可以这样做如下。但结果将毫无意义。
只需从每个模型中提取向量,手工计算余弦相似度。
vec1 = model1.wv['computer']
vec2 = model2.wv['computer']
print(np.sum(vec1*vec2)/(np.linalg.norm(vec1)*np.linalg.norm(vec2)))https://stackoverflow.com/questions/52277384
复制相似问题