2010-04-27 69 views
3

我學習的推薦引擎,我通過定義谷歌新聞如何爲這可能是他們感興趣的新聞,基於協同過濾生成用戶建議paper去了。他們提到用於在Google新聞中生成推薦的算法?

一個有趣的技術是Minhashing。我經歷了它的所作所爲,但我很確定我所擁有的是一個模糊的想法,而且我很可能錯了。下面是什麼我可以做出來的: -

  1. 收集一套所有新聞項目。
  2. 定義用戶的散列函數。該散列函數返回該用戶查看的新聞項目中的第一項的索引,在列表中全部爲新聞項目。
  3. 收集,說這樣的值「n」的數量,並代表一個含此值列表的用戶。
  4. 基於這些列表之間的相似計數,我們可以計算用戶之間的相似性爲普通物品的數量。這減少了大量的比較。
  5. 基於這些相似性度量,用戶劃分爲不同的簇。

這正是我想可能是。在步驟2中,不是定義一個常量散列函數,而是以一種方式改變散列函數,使其返回不同元素的索引。因此,一個散列函數可以返回用戶列表中第一個元素的索引,另一個散列函數可以返回用戶列表中第二個元素的索引,依此類推。所以哈希函數的性質滿足minwise independent permutations條件,這聽起來像是一種可能的方法。

誰能請確認是否是什麼,我認爲是正確的?或者Google新聞推薦的最小化部分以其他方式發揮作用?我不熟悉推薦的內部實現。任何幫助非常感謝。

謝謝!

回答

2

我覺得你很接近。

首先,散列函數首先隨機的置換所有的新聞項目,然後對於任何給定的人看的第一個項目。由於每個人都有相同的排列,所以兩個人有相同的第一個項目的機會。

之後,得到一個新的哈希函數,而不是選擇第二個元素(這將有第一個元素上一些容易混淆的依賴關係),他們選擇了一個全新的置換,並再次採取的第一個元素。

人誰碰巧具有相同的哈希值的2-4倍(即在2-4排列相同的第一個元素)在羣集放在一起。這個算法重複10-20次,這樣每個人都被放入10-20個簇中。最後,根據10-20個集羣中的其他人(少數)給出建議。由於所有這些工作都是通過哈希完成的,所以人們直接放入桶中進行簇處理,並且不需要大量的比較。

+0

非常感謝應答。這說得通。考慮到我們多次重複該算法,我們可以通過比較兩個用戶的哈希值列表來計算兩個用戶的相似度,這將使我們能夠衡量兩個用戶在某個位置上達成一致的次數。 我還有一個問題是,如何定義桶?爲了把一個特定的人放入桶中,我們需要將這個人與其他人關聯起來?他們只是將用戶與桶中的* 1 *用戶進行比較,因爲該桶中的所有其他用戶大多都是相似的? 再次感謝。 – Siddhant 2010-04-29 14:25:14

+1

一個桶被定義爲「在隨機排列下的前2-4個項目具有相同散列值的人羣」。 因此,不需要將人員間的比較放入桶中。喜歡和散列表,每個人被直接送到一個桶。 我還沒有閱讀整篇論文,但我假設他們然後使用共享存儲區中的每個用戶來幫助確定建議。桶的整個目標是使「每個用戶」足夠小。 – mathmike 2010-04-29 15:51:40