2013-03-16 46 views
1

我使用向量来表示单词上下文,我需要将上下文彼此进行比较。以下是我的问题的简化版本:比较上下文向量

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

我怎样才能返回c最相似?另一种相似性测量或者,也许我的推理在某个地方存在缺陷?

正如我所说,这是我的问题的简化。我已经使矢量正常化,并且我正在使用对数可能性来评分上下文单词。

谢谢!

+0

这些向量中的数字代表什么? – 2013-03-16 23:04:44

回答

4

使用Jaccard similarity。在下面的Python的演示,请记住,功能cosinejaccard返回距离,这是类似的“逆”,并阅读注释:

# 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页长。

+0

如果这些向量是我认为它们(词汇表中的单词的索引),则这种计算余弦相似性的方式是没有意义的。此外,该链接已死亡。 – 2013-03-16 23:14:08

+2

我把它们解释为同现计数。如果他们不是,我会编辑或删除我的帖子。 – mbatchkarov 2013-03-16 23:16:38

+0

够公平的。令人惊讶的是,这样一个模棱两可的问题会得到两个upvotes。 – 2013-03-16 23:19:22