大規模數據的相似度計算方法 Min Hashing 和 LSH

2020-12-13 NLP學習筆記

在數據挖掘任務中都涉及了海量數據的相似度計算,例如檢索文檔的相似度,用戶之間的相似度等。這些數據通常維度很高,用 one-hot 編碼的文檔數據維度等於字典的大小,在數據量大,數據維度高的情況下,計算對象兩兩之間的相似度需要耗費大量的時間。本文介紹兩種近似算法 Min Hashing (最小哈希) 和 Locality Sensitive Hashing (LSH,局部敏感哈希),近似算法可以在犧牲部分精度下大大提升運行效率。

1.Min Hashing

假設給定兩個文檔 D1 和 D2,其特徵向量採用 one-hot 編碼,即如果一個位置為 1 則說明文檔擁有對應的單詞。

文檔向量

我們可以用 Jaccard 係數計算兩個向量的相似度,公式如下,A 和 B 是兩個集合:

Jaccard 係數

Jaccard 係數是 A、B 交集的元素數量除以 A、B 併集的元素數量,因此上面的文檔 D1、D2 相似度為 2/5。用 x 表示 A、B 共有的元素數量,y 表示 A、B 單獨擁有的元素數量,則 Jaccard 係數可以改寫為下面的公式:

Jaccard 係數

Min Hashing 是一種近似計算 Jaccard 係數的方法,主要的步驟如下:

對向量D1、D2 的維度進行 m 次隨機排列找到重新排列後 D1、D2 第一個非 0 行的索引,用函數 h(D1)、h(D2) 表示執行 m 次隨機排列後,可以得到 D1、D2 的新特徵向量,如下:

Min Hashing 後的特徵向量

這一過程如下圖所示,下圖中 m=3:

Min Hashing 過程示例

得到新的特徵向量 Sig(D1) 和 Sig(D2) 後可以計算每一個位置上相同 (即第一個非 0 行索引相同) 的概率 P=1/3,這個概率就是 Jaccard 係數的近似值。這主要是根據下面的原理:

Min Hashing 原理

這個原理可以證明,重新排列後兩個向量 D1、D2 後,在每一個維度存在三種可能:

D1、D2 在這一個維度都是 1,對應了 Jaccard 公式中的 xD1、D2 只有一個向量在這一個維度是 1,對應了 Jaccard 公式中的 yD1、D2 在這一維度都是 0Min Hashing 得到的新向量 Sig(D1) 是 D1 第一個不為 0 的行索引。則 Sig(D1) 和 Sig(D2) 第一個非 0 行索引相同的概率為 x/(x+y) 即 Jaccard 係數公式。

如果採用全排列 (即考慮所有的排列情況) 則 Min Hashing 可以得到準確的 Jaccard 值,但是在實際使用時為了提升效率,通常採用 m 次排列,可以將原向量轉為長度為 m 的新向量。

2.LSH

Min Hashing 可以將原始的特徵向量轉為更低維度的 Sig 向量,減少計算兩個對象之間相似度的時間。但是如果對象的數量 N 很大,計算所有對象之間相似度需要執行的次數為 O(N^2),仍然需要耗費大量時間。

LSH 算法 (Locality Sensitive Hashing,局部敏感哈希) 的核心思想是先把數據粗略地進行分桶,使相似度高的數據儘可能出現在同一個桶內。分到同一個桶的數據互相視為 candidate 數據,後續計算相似度時只計算數據和其 candidate 數據的相似度 (即出現在同一個桶內的)。

LSH 先將 Min Hashing 得到的 Sig 向量劃分為 b 段 (Bands),每段的長度為 r。下面是將 Sig 向量分段的例子,其中每一列是一整個 Sig 向量,向量被劃分為 4 個 Band (b=4),每個 Band 長度為 3 (r=3)。

Sig 向量分段

然後利用哈希函數將每一個 Band 中的向量 (r 維向量) 分配到不同的桶裡面,哈希函數的取值 (桶數量) 應該儘可能地多,使兩個向量只在完全相同時才會有大概率被分到同一個桶裡面。分桶的示意圖如下:

LSH 算法分桶的過程

在上面的分桶過程中,每一個 Band 都使用同一個哈希函數,但是採用不同的桶。Band 1 的桶在頂部,Band 4 的桶在底部。在 Band 1 中,第 1 個數據和第 9 個數據分到了同一個桶裡 (紅色),因此數據 1 和數據 9 互為 candidate 數據,即兩個數據只要有一個 Band 被分到同一個桶,就是 candidate。

因為 LSH 分桶是近似的算法,因此會存在一些誤差。我們希望可以減少 LSH 的 False Positive (相似度低的數據分到同一個桶) 和 False Negative (相似度高的數據沒有分到同一個桶)。為了減少誤差,首先需要計算出兩個數據被分到同一個桶的概率。

假設有兩個數據,他們真實的 Jaccard 係數為 s,LSH 算法把他們的 Sig 向量劃分為 b 段,每段長度為 r。在介紹 Min Hashing 算法時,我們知道 Sig 向量保存的是重排列後第一個非 0 行的索引,因此兩個數據的 Sig 向量在某一維度上取值相同的概率為 Jaccard 係數,即 s。則我們可以計算出這兩個數據至少在一個 Band 裡被分到同一個桶裡面的概率:

分桶概率計算

上面公式的最後一行即為兩個數據至少在一個 Band 裡被分到同一個桶裡的概率 P,給定 b 和 r,可以畫出概率 P 隨 Jaccard 係數 s 變化的圖像,稱為 S-curve,如下圖所示。

S-curve

可以看到當 Jaccard 係數變得足夠大的時候,兩個數據被分到同一個桶的概率會大大增加 (接近 1)。因此一般使用的時候要事先設置好一個 Jaccard 係數的閾值 s,然後調整 b 和 r,使得相似度大於閾值 s 時,兩個數據被分到同一個桶的概率最大。

3.參考文獻

Mining of Massive Datasets

相關焦點

  • 自然語言處理之文本相似度計算
    文 | 光大科技大數據部 盧格潤在金融科技的業務場景下,我們不可避免地應用到自然語言處理(NLP)的技術去解決問題,比如智能問答系統、資訊輿情的分析等……在自然語言處理中,很多實際應用具有共性問題,本文就以文本相似度的計算為例介紹自然語言處理解決問題的思路。
  • 思必馳在中文文本相似度計算任務上的探索與進展
    文本相似度計算旨在識別兩段文本在語義上是否相似,是自然語言處理領域的一個重要研究方向,其在智能問答、信息檢索等領域都發揮重要作用,具有很高的商業價值。  該會議是國內知識圖譜、語義技術、連結數據等領域的核心學術會議,聚集了知識表示、自然語言理解、知識獲取、智能問答、連結數據、圖資料庫、圖計算、自動推理等相關技術領域的和研究人員的學者和研究人員。  2)在「千言數據集:文本相似度」評測[2]中取得階段性進展。
  • 無基準輪廓度的測量與計算方法
    2、無基準輪廓度的擬合與計算2. 1無基準輪廓度的擬合方法首先,給定理論型面的初始平移值(Δx、Δy)和旋轉 角度Δθ默認初始值為零,如果掃描數據點與理論型面偏差較大,也可手工給定初始值。然後,對理論型面進行平移和旋轉,並逐個計算掃描數據點距移動後理論型面的最小距di並剔除粗大誤差點。其次,利用改進後的Levenberg-Marquardt算法迭代求解理論型面對掃描數據點的最小二乘擬合值。最後,評價掃描數據並輸出評價結果。
  • 推出 Pr-VIPE:識別圖像和視頻中的姿態相似度
    通過使用 2D 信息識別 3D 姿態相似度,將有助於視覺系統更好地理解世界。Pr-VIPE 可以直接應用於從不同角度對齊視頻Pr-VIPE 的輸入是一組 2D 關鍵點,來自任何產生至少 13 個身體關鍵點的 2D 姿態估計器,輸出是姿態嵌入向量的均值和方差。2D 姿態的嵌入向量之間的距離與其在絕對 3D 姿態空間中的相似度相關。
  • 廣告行業中那些趣事系列26:基於PoseNet算法的人體姿勢相似度識別
    首先介紹了項目背景,因為部門搞活動需要大家去模仿誇張搞笑的表情和姿勢來提升活動的可玩性,所以需要利用CV算法對圖片進行相似度打分;然後詳細講解了人體姿勢相似度識別算法,主要包括基於PoseNet算法來識別姿勢和計算姿勢相似度兩個流程;最後基於已有的開源項目進行二次開發實現了人體姿勢相似度識別項目。對於以前從未接觸過CV項目的我來說既是挑戰也是契機。
  • 數據中心加溼系統計算及方法探討【新規範加溼方式對比及計算分析】
    需要對數據中心環境進行加溼,目前數據中心加溼計算及加溼控制方法還存在著一些不合理現象,從而導致了數據中心加溼系統的過度耗能,因此分析加溼系統的計算方法並選擇合理的加溼氣流組織方式顯的尤為重要。,且新版規範在條文解釋中也明確指出:影響數據中心靜電累計效應和空氣中各種鹽分潮解度的是空氣含溼量d,而不是空氣的相對溼度,新規範基本上也定義了數據中心的含溼量範圍,如表2: 表2 新規範對溫度及含溼量的要求
  • 為什麼要可視化圖 大規模圖可視化攻略方案
    我的工作常常需要可視化大規模圖(上億的節點),嘗試了非常多的工具和方法。但是,我卻沒有發現有人提供實用的攻略,於是,我決定根據自己的經驗寫一篇攻略。   為什麼要可視化圖   發現尋找的目標   通常,我們會將節點和邊的集合作為輸入,然後基於數據可以計算出一些統計信息,但是這不足以從結構中獲得想法。
  • 數據太多而無法使用?快試試這個Kaggle大數據集高效訪問教程
    本文探討的問題就是對超大規模數據集的處理。在數據過多的情況下,最常見的解決方案是根據RAM採樣適量數據,但這卻浪費了未使用的數據,甚至可能導致信息缺失問題。針對這些問題,研究人員提出多種不同的非子採樣方法。需要注意的時,某一方法是無法解決所有問題的,因此在不同情況下要根據具體需求選擇恰當的解決方案。本文將對一些相關技術進行描述和總結。由於Riiid!
  • 周濤:淺析計算社會經濟學的理念和方法論
    03 計算社會經濟學定義 我們認為計算社會經濟學是基於大規模的真實數據,用定量化的手段研究社會經濟發展中的各種現象,特別關注與社會過程有關的經濟發展問題和與經濟發展有關的社會問題。
  • Excel計算數據排名很簡單,那如何計算與其他數據的差距呢?
    Excel計算數據的排名的方法想必很對人都會,只需一個RANK就能夠輕鬆實現數據排名。那怎麼通過函數計算出與上一名之間的差距呢?其實解決這個問題的方法非常簡單,並不需要複雜的函數就能夠輕鬆計算出結果。接下來介紹計算與上一名之間差距的二種方法,請根據需要進行選擇。第一種方法:數據排名+減法以素材文件為例,通過RANK函數得到數據的排名後,對排名列(C列)的數據進行升序排列。
  • 設備綜合效率(OEE)的計算方法是如何計算的?
    計算:A:實際作業時間 =480+30=510minB:計劃停止時間 50minC:負荷時間 510-50=460minD:停機損失時間 70minE:稼動時間 C-D=390minG:生產量418件H:良品率 98%I:理論節拍
  • 關於曝氣池容積的計算!
    曝氣池容積的計算有兩種算法,如下:1、有機負荷計算法計算曝氣區容積,常用的是有機負荷計算法。負荷有兩種表示方法,即汙泥負荷和容積負荷。按照每日的處理量來確定池體的個數,同時,由於工藝的不同,曝氣池的式樣和個數各不相同,因此在實際的設計中需要我們有現場的實際地形圖和整體效果圖來做依據,這樣設計出來的池體才可以滿足工藝處理需要,並且與周圍的環境和諧一致。2、動力學方法也可用動力學方法計算曝氣池的容積。
  • 建築小區雨水調蓄池的計算過程與解析
    計算過程(1)指標統計(見表1)表1中各項指標數據由建築專業提供,其中硬化面積計算方法:居住區項目,硬化面積指屋頂硬化面積,按屋頂(不包括實現綠化的屋面)的投影面積計;非居住區項目,硬化面積包括建設用地範圍內的屋頂、道路、廣場、庭院等部分的硬化面積,具體計算辦法為
  • 利用EXCEL多個函數的組合,計算學生成績的區分度
    計算方法為:D=(X高-X低)/FX高和X低分別表示高分組的平均分和低分組的平均分,其比例一般是各佔總人數的27%,F是表示該題目的滿分值。一般來說,如果題目的區分度低於0.2,必須修改或淘汰,而高於0.4,則處於優良級別。
  • 公路邊坡率的計算方法和邊坡監測方法
    公路邊坡率的計算方法和邊坡監測方法來源:網絡 隨著國家發展,基礎建設越來越多,我們在施工的過程中為了防止塌方,保證施工安全,在修建公路的時候要在其邊沿做成具有一定坡度的邊坡,那麼公路邊坡坡率怎麼檢測呢?
  • 貨幣時間價值增值與複利計算過程在數學上相似,複利計算基礎知識
    貨幣時間價值的增值過程與複利計算方法在數學上相似,故在貨幣時間價值計算採用複利計算方法。一、單利計算方法和複利計算方法首先,要了解這兩種計算方式基本原理並將其應用。⒈單利計算方法是指在一個計息期內本金乘以利率得到貨幣增值價值。本金是即貸款、存款或投資在計算利息之前的原始金額。
  • 身份證提取出生日期的三個方法以及如何計算年齡和星座
    一、固定寬度分列第一個我想到的方法就比較簡單粗暴了,不用任何函數,利用固定寬度來分列就能得到出生年月日的數字串。1、選擇身份證號碼所在列,選擇數據菜單下的分列。選擇數據分列2、在彈出的對話框選擇固定寬度。
  • 潔淨室空調負荷、風量、潔淨度的設計和計算
    有人認為計算方法與一般空調負荷的計算方法相同。其實,潔淨室的負荷計算與一般空調的負荷計算有許多區別。對於許多材料中推薦的負荷估算指標,不知道這些估算指標的詳細來源,在工程實踐中發現這些估算指標比實際負荷大很多。對於一些沒有經驗的設計人員,也許會受到估算指標的影響而不相信自己的計算數據,進而加大安全裕量,或者乾脆套用估算指標,這是非常有害的。
  • 社區發現的深度學習方法:進展、挑戰...
    Ng 等人用特徵向量(例如鄰接矩陣和 Laplacian 矩陣)實現了將節點劃分到社區中的譜聚類方法,然而這種方法在稀疏網絡上的性能較差。同時,對於預設的社區數目的要求也特別限制了依賴統計推斷的模型的研發。在網絡分析領域中,傳統的方法並沒有考慮到節點的屬性,而這些屬性描述了特徵的豐富信息。此外,由於過高的計算複雜度,動態方法也很難被應用於大規模網絡。
  • 石膏相組成分析儀如何準確計算石膏品位
    因此,以水值、硫值和鈣值三者中的最小值作為石膏的品位是比較合理的,將其稱為「水、硫、鈣最小值品位計算法」。將不同的二水石膏進行試驗,所得的H20、S03和CaO換算成水值、硫值和鈣值。由計算可以得知,絕大部分二水石膏的水值為最小值,只有少數的水值稍大於硫值(如確定在180°C下測定結晶水,則其水值仍為最小值)。