【问题标题】:why do i get different result of cosine similarity when compare to library result与库结果相比,为什么我会得到不同的余弦相似度结果
【发布时间】:2020-05-15 08:16:00
【问题描述】:

我尝试使用余弦距离 (source) 计算两个单词的相似度。 这是代码:

def word2vec(word):
    from collections import Counter
    from math import sqrt

    # count the characters in word
    cw = Counter(word)
    # precomputes a set of the different characters
    sw = set(cw)
    # precomputes the "length" of the word vector
    lw = sqrt(sum(c*c for c in cw.values()))

    # return a tuple
    return cw, sw, lw

def cosdis(v1, v2):
    # which characters are common to the two words?
    common = v1[1].intersection(v2[1])
    # by definition of cosine distance we have
    return sum(v1[0][ch]*v2[0][ch] for ch in common)/v1[2]/v2[2]

当我调用时相似度为 0.1889822365046136:

cosdis(word2vec('tahu') , word2vec('tempe'))

当尝试使用库(gensim word2vec)与相似性结果进行比较时,结果是不同的(例如差异为 0.2)。这是为什么? 这就是我使用库获得相似性的方式:

from gensim.models import Word2Vec
modelword2vec = Word2Vec.load("/idwiki_word2vec_300.model")
modelword2vec.similarity('tahu' , 'tempe')

相似度为0.21785985

【问题讨论】:

  • 这种基于字符的表示,虽然它是从“单词”派生的“向量”,但它并不是真正的“word2vec”算法。但是,您能否在代码中更清楚地说明(1)您正在应用哪些库计算函数,以及它们的测试输入结果; (2) 你的代码为这些相同的测试输入返回什么?此外,不确定您的 cosdis() 是否与“余弦距离”的通常定义相匹配,并且请记住,“余弦距离”和“余弦相似度”是相关但不同的:“最接近”的词接近 1.0 余弦相似度,但是0.0余弦距离。
  • 我已经在问题中编辑了我如何调用库来计算相似度。

标签: python nlp cosine-similarity edit-distance


【解决方案1】:

没有理由期望这些是相同的。他们的内部没有什么是相似的。

您展示的word2vec() 函数是从其他一些混乱的 SO 答案中复制而来的,这不是人们通常所说的“word2vec”的意思。它计算一个单词中的一些字符数——这对我来说似乎没有用,但无论如何。

cosdis() 可能也有类似的困惑;也许它正在影响一个单词的真实余弦距离计算,其中每个维度都是字符数。 (请注意,任何这样的“向量”最多有 26 个维度,每个字母一个。)但更好的方法是将 cw 计数转换为实际的 array 类型,如流行的 @987654325 @ library,然后使用 cosine-distance 的明确且可靠的库实现。

另一方面,您的 gensim 代码显示加载了一个真实的 Word2Vec 模型,该模型可能已在真实文本上进行过训练。因此,每个单词都会有密集的、学习过的语义向量——通常每个维度都有 100 或更多,这与每个单词中的字符数完全无关。

当您向该模型询问 similarity() 时,它将对这些完整向量执行余弦相似度计算。请注意,余弦相似度和余弦距离不是一回事。

您的基于字符的“向量”在构造/形状/内部值方面与其他模型中的单词向量不同:因此,即使 cosdis() 实际上是余弦相似度的准确实现,您仍然不会得到匹配的值。

【讨论】:

    猜你喜欢
    • 2013-05-29
    • 2011-02-08
    • 1970-01-01
    • 2019-09-07
    • 2011-06-29
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多