计算单个词在2个不同Word2Vec模型中的余弦相似度
Calculation of Cosine Similarity of a single word in 2 different Word2Vec Models
我使用gensim
构建了两个词嵌入(word2vec模型),并通过对两个不同的语料库使用model.save(model_name)
命令将其保存为(word2vec1和word2vec2)(这两个语料库有些相似,相似意味着它们像一本书的第 1 部分和第 2 部分一样相关)。假设,两个语料库中排名靠前的词(就频率或出现而言)是同一个词(假设为 a
)。
对于两个word2vec模型,如何计算提取的顶级词(比如'a')的相似度(cosine-similarity or similarity
)? most_similar()
在这种情况下是否有效?
我想知道同一个词 (a) 与两个不同的生成模型之间的相似度有多大?
非常感谢任何想法。
你好像对word2vec的理解有误。它不为一个词提供一个绝对向量。它设法找到一个词相对于其他词的表示。所以,对于同一个语料库,如果你 运行 word2vec 两次,你会得到同一个词的 2 个不同的向量。当您将它与其他词向量进行比较时,含义就会出现。
king
- man
将始终接近(余弦相似度) queen
- woman
无论你训练多少次。但是他们在每趟火车之后会有不同的向量。
在您的例子中,由于 2 个模型的训练方式不同,因此比较同一单词的向量与比较两个随机向量是一样的。您应该比较相对关系。也许是这样的:model1.most_similar('dog')
vs 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)))
我使用gensim
构建了两个词嵌入(word2vec模型),并通过对两个不同的语料库使用model.save(model_name)
命令将其保存为(word2vec1和word2vec2)(这两个语料库有些相似,相似意味着它们像一本书的第 1 部分和第 2 部分一样相关)。假设,两个语料库中排名靠前的词(就频率或出现而言)是同一个词(假设为 a
)。
对于两个word2vec模型,如何计算提取的顶级词(比如'a')的相似度(cosine-similarity or similarity
)? most_similar()
在这种情况下是否有效?
我想知道同一个词 (a) 与两个不同的生成模型之间的相似度有多大?
非常感谢任何想法。
你好像对word2vec的理解有误。它不为一个词提供一个绝对向量。它设法找到一个词相对于其他词的表示。所以,对于同一个语料库,如果你 运行 word2vec 两次,你会得到同一个词的 2 个不同的向量。当您将它与其他词向量进行比较时,含义就会出现。
king
- man
将始终接近(余弦相似度) queen
- woman
无论你训练多少次。但是他们在每趟火车之后会有不同的向量。
在您的例子中,由于 2 个模型的训练方式不同,因此比较同一单词的向量与比较两个随机向量是一样的。您应该比较相对关系。也许是这样的:model1.most_similar('dog')
vs 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)))