推薦系統實戰第一部分 協同過濾

1.協同過濾

1.1基於用戶的協同過濾算法

包含兩個步驟:
a. 計算用戶之間的相似度:找到和目標用戶興趣相似的用戶集合。
b. 根據用戶相似度及用戶對物品的評價爲物品打分:找到這個集合中的用戶喜歡的,且目標用戶沒有聽說過的物品推薦給目標用戶。

Step1: 計算用戶相似度
根據協同過濾算法的定義,這裏主要是利用用戶行爲的相似度來計算興趣的相似度。給定用戶u和用戶v,令N(u)和N(v)分別表示用戶u和用戶v曾經有過正反饋的物品集合,則有如下三種方式計算相似度:

Jaccard公式

餘弦相似度(UserCF算法)

改進的餘弦相似度(UserIIF算法)

 

在UserIIF算法中,N(i) N(i)N(i)是物品i的熱度,可見其對熱門物品進行了懲罰,因爲兩個用戶對冷門物品採取過同樣的行爲更能說明他們興趣的相似度。

這裏要強調一個工程實現上的Trick。在計算用戶行爲之間的相似度時,如果按照定義實現的話,需要對兩兩用戶的行爲集合進行統計,這樣的時間複雜度爲O(∣U∣∗∣U∣) ,但用戶行爲往往是十分稀疏的,很多用戶之間的行爲並沒有交集,導致時間浪費在這些不必要的計算上。這時就可以建立Item-User的倒排表,這樣在同一個Item下面的User兩兩之間一定是在這個Item上有交集的,所以只需要遍歷所有的Item,對其下所有的User兩兩進行統計即可,這樣可以極大降低時間複雜度。

Step2:爲物品打分

在統計完用戶之間的相似度之後,就可以利用這種用戶相似度以及用戶對物品的評價爲物品打分。其公式如下:

在實現的時候,往往會取一個較小的K值,先召回一批物品,然後爲這些物品中沒出現在目標用戶中的物品利用上述公式進行打分。

1.2 基於物品的協同過濾算法

與基於用戶的協同過濾算法一樣,基於物品的協同過濾算法也是基於鄰域的一種做法。它也可以分爲兩步:

a. 計算物品之間的相似度。
b. 根據物品的相似度和用戶的歷史行爲爲用戶生成推薦列表。

Step1: 計算物品相似度
計算物品相似度主要還是利用用戶的行爲數據,即比較對兩個物品有過正反饋的用戶集合的相似性。令N(i)爲喜歡物品i的用戶集合,則有如下幾種相似度計算方法:

購買了該商品的用戶也經常購買的其他商品
 

 餘弦相似度(ItemCF算法)

上面的公式在計算的時候會導致物品與熱門物品的相似度都很高,因此可以加上物品j的熱度懲罰項,變成了如下的餘弦相似度的形式:

 改進的餘弦相似度(ItemIUF算法) 

與UserIIF算法類似,這裏也對熱門用戶進行了懲罰,即活躍用戶對物品相似度的貢獻應該小於不活躍的用戶。

Step2:爲物品打分 

在統計完物品之間的相似度之後,就可以利用這種物品相似度以及用戶對歷史物品的評價爲物品打分。其公式如下:

 

1.3 基於圖的模型 

用戶的行爲(User, Item)是可以表示爲二分圖的,比如下圖:

那麼任務就變成了在二分圖上爲用戶進行個性化推薦,即給用戶u推薦物品的任務可以轉化爲度量用戶頂點vu和與vu沒有邊直接相連的物品節點在圖上的相關性,相關性越高的物品在推薦列表中的權重就越高。

正常來說,相關性高的一對節點之間一般具有如下特徵:

1.兩個頂點之間有很多路徑相連;
2.連接兩個頂點之間的路徑長度都比較短;
3.連接兩個頂點之間的路徑不會經過出度比較大的頂點。


基於上面這三個主要因素,可以用PersonalRank算法進行圖上的隨機遊走推薦,其原理爲:要給用戶u進行個性化推薦,可以從用戶u對應的節點vu開始在用戶物品二分圖上進行隨機遊走。遊走到任何一個節點時,首先按照概率α決定是繼續遊走,還是停止這次遊走並從vu 節點開始重新遊走。如果決定繼續遊走,那麼就從當前節點指向的節點中按照均勻分佈隨機選擇一個節點作爲遊走下次經過的節點。這樣,經過很多次隨機遊走後,每個物品節點被訪問到的概率會收斂到一個數。最終的推薦列表中物品的權重就是物品節點的訪問概率。

表述爲遞推公式如下:

1.4 UserCF和ItemCF的綜合比較 

1.UserCF比較古老,而ItemCF則相對較新。
2.UserCF給用戶推薦那些和他有共同興趣愛好的用戶喜歡的物品,而ItemCF給用戶推薦那些和他之前喜歡的物品類似的物品。從這個算法的原理可以看到,UserCF的推薦結果着重於反映和用戶興趣相似的小羣體的熱點,而ItemCF的推薦結果着重於維繫用戶的歷史興趣。換句話說,UserCF的推薦更社會化,反映了用戶所在的小型興趣羣體中物品的熱門程度,而ItemCF的推薦更加個性化,反映了用戶自己的興趣傳承。
3.UserCF比較適合用於新聞推薦等熱門程度和實時性較強的場景。比如一個人看新聞不可能每天只看和之前看的相關的那些,更多的是看今天有哪些新的熱門的。從原理上講,UserCF可以給用戶推薦和他有相似愛好的一羣其他用戶今天都在看的新聞,這樣在抓住熱點和時效性的同時,保證了一定程度的個性化。從技術角度講,UserCF主要是維護用戶相似度表,在這種場景下,物品的更新速度遠超用戶,所以維護物品相似度表難度和成本都較高。
4.ItemCF則適用於圖書、電商、電影等場景。首先這些場景中用戶的興趣是比較固定和長久的,而且一般物品更新的速度不會特別快。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章