【问题标题】:Comparing context vectors比较上下文向量
【发布时间】:2013-03-05 08:40:57
【问题描述】:

我使用向量来表示单词周围的上下文,我需要将上下文相互比较。以下是我的问题的简化版本:

假设我有一个向量a=[1,1,15,2,0]。然后我有一个向量b=[0,0,15,0,0]c=[1,1,11,0,1]。当通过余弦相似度比较两个向量时,b 最接近a。但是,由于向量代表上下文 c 在我的情况下更有意义,因为 b 只是一个上下文,恰好与原始单词有一个共同的单词并且具有相同的分数。

我怎样才能将c 作为最相似的返回?另一个相似性度量?还是我的推理在某个地方有缺陷?

正如我所说,这是对我的问题的简化。我已经在对向量进行规范化,并使用对数似然对上下文词进行评分。

谢谢!

【问题讨论】:

  • 这些向量中的数字代表什么?

标签: vector nlp cosine-similarity


【解决方案1】:

使用Jaccard similarity。在下面的 Python 演示中,请记住函数 cosinejaccard 返回距离,这是相似度的“倒数”,并阅读 cmets:

# Input all the data
In [19]: from scipy.spatial.distance import cosine, jaccard
In [24]: a
Out[24]: array([ 1,  1, 15,  2,  0])
In [25]: b
Out[25]: array([ 0,  0, 15,  0,  0])
In [26]: c
Out[26]: array([ 1,  1, 11,  0,  1])
# Calculate cosine similarity. I've scaled it by a factor of 100 for legibility
In [20]: 100*cosine(a,b)
Out[20]: 1.3072457560346473
In [21]: 100*cosine(c,a)
Out[21]: 1.3267032349480568
# Note c is slightly "further away" from a than b.
# Now let's see what Mr Jaccard has to say
In [28]: jaccard(a,b)
Out[28]: 0.75
In [29]: jaccard(a,c)
Out[29]: 0.59999999999999998
# Behold the desired effect- c is now considerably closer to a than b
# Sanity check- the distance between a and a is 0
In [30]: jaccard(a,a)
Out[30]: 0.0

PS 存在更多相似性度量,每种度量都适用于不同的情况。你有充分的理由相信c 应该更类似于a 而不是b?你的任务是什么?如果你想了解更多关于这个主题的信息,我强烈推荐this PhD thesis。警告:200 页长。

【讨论】:

  • 如果这些向量是我认为的那样(词汇表中单词的索引),那么这种计算余弦相似度的方式就没有意义了。此外,该链接已失效。
  • 我将它们解释为共现计数。如果不是,我将编辑或删除我的帖子。
  • 很公平。令人惊讶的是,这样一个模棱两可的问题会得到两个支持。
  • 我已经盯着计数向量这么久了,以至于我什至不认为它是模棱两可的:D
  • @2er0:我自己赞成这个答案,因为它在评论中陈述的假设下解决了问题,但这并没有使问题变得更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2020-03-25
相关资源
最近更新 更多