相似度分析計算,當前平台支持MinHashLSH方法,在預設條件下(包括:篩選數據、挑選相似度計算方法、相似閾值等)對文本內容做聚合建模,其聚合結果有助於發現相似文本,方便批量編碼操作,為後續深入的研究分析提供數據預先處理基礎。
一、MinHashLSH模型介绍
- Jaccard相似度
給定集合A、B,Jaccard係數定義為A和B交集元素個數與A和B聯集的元素個數的比值,即:J(A, B) = |A∩B| / |A∪B| = |A∩B| / (|A| + |B| – |A∩B|) ,用於比較有限樣本集之間的相似性與差異性,係數值越大相似度越高。比如A = {a,b,c,d},B = {c,d,e,f},那么Jaccard相似性係數為2/6=0.33。
2. MinHash
MinHash有別於傳統的hash算法,不再是將文本內容隨機映射為簽名值,而是能夠滿足相似文本的簽名也相近。其基本原理是A∪B的隨機域裡,選中的元素落在A∩B這個區域的機率等於Jaccard相似度,可以用於大規模聚類問題。具體操作是先對A、B的n個維度做隨機排列(即索引隨機打亂),分別取向量A、B的第一個非0索引值即为MinHash值,那麼機率P(minHash(A) = minHash(B)) = Jaccard(A,B)。
3. LSH(Locality Sensitive Hashing,區域敏感Hash函數)
Minhash解決了高維稀疏向量的運算,但是對集合兩兩比較的時間複雜度依然是O(n2)。假如集合數量極其龐大,我們希望僅僅比較那些相似度可能很高的集合,而直接忽略掉相似度很低的集合,LSH就是解決這個問題。其基本思想是原空間相近的點,經過LSH函數映射後,很大機率Hash值相同;而距離遠的兩個點,映射後Hash值相等的機率很小。
二、算法說明
文本相似度計算時,首先得到document-term矩陣,例如:
S1 | S2 | S3 | |
0 | 1 | 0 | 0 |
1 | 0 | 0 | 1 |
2 | 0 | 1 | 0 |
3 | 1 | 0 | 1 |
4 | 0 | 0 | 1 |
其中,S1、S2、S3表示文件,第一列序號0-5表示行序號,也就是單詞;其他部分中1表示文件S有這個單詞,0表示文件S沒有這個單詞。接下來,使用hash函數產生行號順序,比如(x+1)mod5,(3x+1)mod5,則兩個hash函數產生行號順序為:
Hash1 | Hash2 | |
0 | 1 | 1 |
1 | 2 | 4 |
2 | 3 | 2 |
3 | 4 | 0 |
4 | 0 | 3 |
通過遍歷矩陣中的值,對於0跳過,對於1,看hash函數產生的行號,找到行號最小的值
作為hash輸出的值,最後得到如下矩陣:
S1 | S2 | S3 | |
Hash1 | 1 | 3 | 0 |
Hash2 | 1 | 2 | 0 |
此時S1、S2的相似度,J(S1,S2)=0/3=0。Minhash計算的合理性在於,兩個集合的隨機行排列的minhash值相等的機率,等於兩個集合的Jaccard相似度。對於兩個集合A、B,每一行的狀態有三種:(1) A、B集合都有這個單詞;(2) A、B集合都沒有這個單詞;(3) A、B集合僅有一個一個集合有這個單詞。若分別屬於(1)、(2)、(3)狀態的行數依次有n1、n2、n3行,則Jaccard(A,B)=n1/(n1+n3);由於排列是隨機的,再遇到计算的合理性在于两个集合的随机行排列的minhash值相等的概率等于两个集合的(3)之前遇到(1)的機率是n1/(n1+n3),恰好等於Jaccard係數值。