Jaccard(傑卡德)相似度
Jaccard相似度常用於計算兩個文本的字面相似度。將文本分爲詞的序列。兩個文本中一樣的詞彙集合的個數爲A,所有詞彙構成的集合爲B。最終用A除以B得到的結果就是Jaccard相似度。
用一個例子來說明:
今天天氣很好==>今天/天氣/很好
今天天氣不好==>今天/天氣/不好
所有詞彙的集合:
word_set = {今天,天氣,很好,不好}
兩個句子中相同的詞彙集合:
same_set = {今天,天氣}
Jaccard_similarity=len(word_set)len(same_set)=42=0.5
把這個問題抽象出來可以給出Jaccard相似度的定義:
給定兩個集合A,B,Jaccard係數(相似度)定義爲A與B交集大小與並集大小的比值,公式如下:
J(A,B)=∣A∪B∣∣A∩B∣=∣A∣+∣B∣−∣A∩B∣∣A∩B∣
Jaccard值越大說明相似度越高。
Jaccard距離用於描述不相似的程度:d(A,B)=1−J(A,B)
如何度量兩個向量之間的Jaccard相似度?
前提條件就是:這兩個向量的維度一定要相等,否則對於相似性的度量既沒有意義,也不好度量。
Jaccard針對二值向量可進行相似性度量。
假設擁有兩個向量vec1和vec2:
- 其中對應位置均爲0的個數記作M00
- 其中vec1中爲0vec2中爲1的個數記作M01
- 其中vec1中爲1vec2中爲0的個數記作M10
- 其中對應位置均爲1的個數記作M11
如果M00與M11相差不大,則兩個向量的Jaccard相似度爲:
J(vec1,vec2)=M00+M01+M10+M11M00+M11
如果M00>>M11或者爲0時代表的含義並無實際意義,則兩個向量的Jaccard相似度爲:
J(vec1,vec2)=M01+M10+M11M11
特點
Jaccard相似性與餘弦相似度的關鍵區別在於:Jaccard針對重複性的元素不敏感,也就是一個詞彙出現100次在Jaccard的相似性度量中與出現1次的結果一樣。而餘弦相似度有較大的區別。
海明距離
海明距離也是用於度量兩個向量之間的差異程度。同時也是SimHash的御用距離度量方法。
統計兩個向量中不一樣元素的個數的和,其實就是Jaccard中M01+M10的結果。
同時也可以計算兩個向量異或之後的元素1的個數之和。