2013-03-16 151 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