Min Hash和推薦系統

2021-09-06 06:12:22 字數 1577 閱讀 4240

min-hash和推薦系統 | it癮

標籤:

未分類

分享到:

出處:前幾年看google news recommendation的那篇*****,對裡面提到的minhash的演算法基本沒有注意,因為之前的習慣都是只注意**的模型那塊,至於怎麼優化模型一般都只是掃一眼。不過最近看了大量的google *****,發現google在實現乙個演算法方面確實有很多獨到之處。

其實,min-hash是lsh(locality sensitive hash)的一種,我之前對lsh的了解僅僅限於知道它能把兩個相似的東西hash成兩個漢明距離接近的2進製數。比如google用來進行去重的simhash演算法。不過在深入了解了lsh之後,我發現這個演算法對於降低時空複雜度,處理大資料集有很大的優勢。

在推薦系統裡經常要算相似度。比如假設購買過物品a的使用者集合是 n(a),購買過物品b的使用者集合是n(b),那麼a和b的相似度就定義為他們的jaccard index。但是,直接對兩兩物品算jaccard index複雜度是很高的。於是我在《推薦系統實踐》中提出了一種方法,就是掃瞄所有的使用者,然後將使用者看過的物品兩兩加1,這樣我們就可以算出任意兩個物品的共現次數。而jaccard index最大的計算量就來自於算共現次數。這個演算法可以避免計算大量的相似度為0的物品對,所以時間複雜度大大降低了。不過這個演算法有個缺點,就是有比較高的空間複雜度。因為她要將所有相似度不為0的物品對都存在記憶體裡,這在物品數很多的時候往往會帶來記憶體的問題。

那麼現在的問題就是,還有沒有更好的方法來計算jaccard index?答案是有,如果我們不需要特別準確的jaccard index,那麼min-hash就是一種方法。

min-hash的基本思想是,它將乙個集合hash成1個數,而這兩個集合hash出來的數相等的概率是這兩個集合的jaccard index。那麼,我們如果hash多次,看有多少次兩個集合的hash數相同,就可以估計出集合的jaccard index。

因此,問題的重點就是怎麼hash出這個數了。方法很簡單,假設x是所有集合中所能出現的所有元素的集合。我們可以給每個元素賦予乙個隨機數作為權重,然後對於乙個集合,找出他所有的元素中權重最低的那個元素,就是這個集合的hash值。

這個演算法看上去很簡單,但卻可以發揚光大。

比如在推薦系統中,我們可以根據minhash生成乙個使用者的一串hash數,其實每個hash代表了一種很小的topic。這裡的topic和lda的topic不太一樣,他的粒度很細。比如我在delicious的資料集上用minhash的方法就計算出了下面這些topic

英國的地方 teignmouth bideford newton-abbot cullompton paignton budleigh-salterton

人體器官 pancreas mouth orchitis gonorrhoea homeopathic croup dysentery

裝修房子 screed spraying plastering utiform shotcrete

上面這些topic裡的詞都是詞頻不大的詞,這些詞在lda中基本上看不到,因為lda的topic大多由熱門詞組成。

minhash演算法詳解和LSH

俄亥俄州立 演算法講義 非常詳細 minhash性質 任意k個元素中有乙個是排列pi下的minhash的概率為k x 在 c1交c2 中選乙個才有可能是相同的minhash b表示一共用20個band r表示乙個band由r個數組成 如果兩個band的這r個數都相同,他們就會被對映到同乙個桶中 每一...

推薦系統架構 推薦系統(1) 業界推薦系統架構

1.1業界主流推薦系統架構 業界推薦系統通用架構 1.2使用者本身資料 1.3物品本身資料 1.4使用者行為資料 2.1基於離線訓練的推薦系統架構設計 常用演算法 邏輯回歸 logistics regression 梯度提公升決策樹 gbdt 和因式分解 fm 架構設計 2.2面向深度學習的推薦系統...

推薦系統(1) 推薦系統概述

推薦系統是主動從大量資訊中找到使用者可能感興趣的資訊的工具。推薦系統的核心問題是如何實現推薦個性化 如何向使用者推薦匹配度高的產品 商品 或專案,本質是通過一定的方式將使用者和專案聯絡起來。自從xerox palo alto研究中心於1992年研發出了基於協同過濾的實驗系統tapestry以來 主要...