文章目錄
最近想了解下推薦系統,閱讀了《推薦系統實踐》(項亮),本文簡單介紹推薦系統常用算法的原理,大部分內容來自項亮大牛的書籍。
1. 推薦系統簡介
1.1 推薦系統是什麼?
隨着信息技術的發展,互聯網上的信息量快速增長。爲了在衆多信息中找到想要的內容,常用的方式有——
- 分類目錄,如雅虎、hao123,將網站分門別類,但只能覆蓋熱門網站
- 搜索引擎,如谷歌、百度
與分類目錄和搜索引擎相同,推薦系統也是一種針對信息過載的解決方案,通過分析用戶的行爲、興趣等數據,主動給用戶推薦滿足其興趣和需求的信息,區別在於——
- 對用戶來說,用戶不需要主動提供明確的需求,推薦系統會根據其歷史行爲等數據建模,主動推薦信息
- 對信息來說,推薦系統可以更好地挖掘長尾信息,而不僅僅是熱門信息
推薦系統已經在很多互聯網產品中使用,常見的使用場景有——
- 電子商務,如淘寶的【猜你喜歡】和【類似商品推薦】
- 視頻網站,如愛奇藝的【猜你在追】和【精彩推薦】,短視頻、小說、漫畫等內容產品也類似
- 音樂應用,如豆瓣FM、QQ音樂的【個性電臺】,根據收聽歷史推薦歌曲
- 社交網絡,如QQ的【好友推薦】,或利用社交網絡推薦信息給用戶
- 基於位置的服務,如美團推薦附近的美食
- 個性化廣告,根據用戶的興趣,給不同用戶投放不同的廣告
1.2 推薦系統的類型
推薦系統根據優化目標的不同,常被分爲兩種類型——
- 評分預測問題,即給定物品,預測用戶對其的打分情況,如Netflix的電影推薦。在評分預測問題中,損失函數是均方根誤差RMSE,最終推薦給用戶的物品是用戶對其打分最高(最喜歡)的物品
- TopN問題,是指使用打分函數對物品進行排序,給出N個用戶最可能選擇的物品列表
由於早期推薦系統研究是基於電影評分數據的評分預測問題,因此絕大多數推薦系統研究都是基於用戶評分數據的評分預測。而在實際應用中,TopN問題更加常用,原因在於——
- 評分預測問題依賴用戶對物品的評分這類顯性數據,而大多數場景下我們只有用戶瀏覽行爲等隱性數據
- 推薦系統的目的是找到用戶感興趣的電影,預測用戶是否會觀看電影比預測用戶觀看電影后的評分更重要,可能存在電影用戶看過後會打出高分,但用戶看的可能性非常小
本文介紹的推薦系統算法是用於求解TopN問題的。
2. 推薦系統常用算法
實現推薦系統的算法有很多,但大致可分爲三類,下面會依次介紹其基本原理。
在介紹的過程中,使用的數據爲用戶的隱性數據,如瀏覽行爲。
2.1 協同過濾算法
協同過濾算法(也稱爲基於鄰域的算法)分爲兩大類,分別是基於用戶的協同過濾(UserCF)和基於物品的協同過濾(ItemCF),是推薦系統中最經典的算法。
2.1.1 UserCF基礎算法
UserCF的思想是根據用戶行爲數據,找到與目標用戶有相似興趣的其他用戶,給用戶推薦其他用戶喜歡的物品。
其算法流程分爲兩步:
- 找到與目標用戶興趣相似的K個用戶集合,計算用戶相似度可以使用餘弦相似度,如下:
- 在最相似的K個用戶中找到他們喜歡且目標用戶沒有產生過行爲的物品,用以下公式計算用戶 對物品 的感興趣程度,排序後推薦前N個物品給目標用戶:
這樣,就可以得到目標用戶最感興趣的TopN物品列表。
2.1.2 ItemCF基礎算法
ItemCF的思想是根據用戶行爲數據,計算物品間的相似度,基於用戶以往的喜好記錄,推薦給用戶相似的物品。
其算法流程分爲兩步:
- 計算物品之間的相似度,可使用餘弦相似度,如下:
- 用如下共識計算目標用戶 對物品 的感興趣程度,排序後推薦前N個物品給目標用戶。從公式可以看到,與用戶喜歡過的物品越相似,計算的值越高
這樣,就可以得到目標用戶最感興趣的TopN物品列表。
2.1.3 相似度修正
上述介紹的算法是比較簡單和原始的版本,使用的數據也只有用戶的行爲數據。
實際場景中,用戶的畫像信息、物品的屬性、時間空間信息都會加入考慮,算法也會相應地改進以適應實際需求。
以上述介紹的用戶相似度計算方式爲例,在實際場景中,我們認爲熱門物品對相似度的貢獻比冷門物品小,也就是兩個人對冷門物品都產生過行爲更能說明興趣相似,因此用戶相似度可以如下對熱門物品做懲罰:
類似地,在物品相似度中認爲活躍用戶的貢獻小於非活躍用戶,因此物品相似度可以如下對活躍用戶做懲罰:
2.1.4 UserCF與ItemCF對比
從上述UserCF與ItemCF的原理看,UserCF的推薦結果反映了與目標用戶興趣相似的小羣體的熱點,ItemCF的推薦結果是維護目標用戶的歷史興趣,從不同角度對比如下:
UserCF常在新聞網站中使用,因爲新聞數量很多,時效性很強,且從冷啓動角度看,新的新聞出現後可快速用於推薦;
ItemCF則在電商、視頻網站中使用,在這些網站中物品不容易過時,用戶的興趣也更持久。
2.2 隱語義模型
LFM(Latent Factor Model),隱語義模型是推薦系統中很熱門的研究話題。
隱語義模型最開始是在NLP領域中使用,用於找到文本的隱含語義,相關的主題模型有LSA、pLSA、LDA等,在這篇回答中解釋得很清楚,建議看一下:既然 LDA 是一種比 PLSA 更高級的模型,爲啥百度還在用 PLSA?
在NLP的主題模型中,通過在單詞與文檔之間引入 【主題】 這一隱含變量,來挖掘文本的語義,比如在上面回答中舉到的例子:
文本1:“馬雲、馬化騰和李彥宏”
文本2:“阿里巴巴、騰訊和百度掌門人”
如果通過單詞來計算兩個文本的距離,可能會得出兩個文本完全不相關的結論。
但若把兩個文本的 【主題】 抽離出來,會得到“企業家”、“互聯網”、“BAT”等等這些主題,這樣就發現兩句話主題上是完全相同的,由此可知這兩句話具有很高的相似性。
將LFM應用到推薦系統中,則是在用戶和物品之間引入【類別】這一隱含變量——對於某個用戶,首先得到他的興趣分類,再從屬於該分類的物品中挑選他可能喜歡的物品。
2.2.1 算法原理
假設用戶的興趣分類(或物品的分類)有 種,用如下公式表示用戶對物品的感興趣程度——
其中 表示用戶是否對物品 產生行爲, 是用戶-分類矩陣 的第 行,表示用戶 與各個興趣分類的關係, 是分類-物品矩陣 的第 列,表示物品 與各個興趣分類的關係。
因此,只要求解出兩個矩陣 和 ,根據感興趣程度的排序就可以推薦TopN列表給目標用戶。
求解過程如下:
- 由於我們的數據是隱性數據,即只有用戶對哪些物品產生過行爲,對應的 ,爲了求解矩陣,需要先按如下原則採集負樣本,對應的 ——
- 對每個用戶,保證正負樣本數平衡
- 對每個用戶採集負樣本時,要選取熱門但用戶沒有行爲的物品
- 得到正負樣本後,則需要最小化以下損失函數,其中後兩項爲防止過擬合的正則化項
- 對參數求偏導,有
- 使用梯度下降法,迭代求解參數值,遞推公式如下,其中 是學習速率
2.2.2 LFM與協同過濾對比
- 離線計算的空間複雜度:UserCF需要計算用戶相似度表,空間複雜度爲,ItemCF需要計算物品相似度表,空間複雜度爲 。而LFM存儲兩個矩陣,假設有 個隱類,則空間複雜度爲 ,在用戶數或物品數很高的情況下,LFM所需空間小得多
- 離線計算的時間複雜度:兩種算法時間複雜度沒有大的差別
- 在線實時推薦:UserCF和ItemCF將相似度表緩存在內存中,可以在線進行實時推薦,如用戶喜歡新的物品後,ItemCF可以實時推薦類似的物品給該用戶;而LFM需要計算用戶對所有物品的感興趣程度,複雜度太高,無法實時推薦
- 推薦結果解釋:ItemCF支持很好的推薦解釋,LFM這類神經網絡可解釋性則比較差
2.3 基於圖的模型
用戶行爲可以用二分圖表示,如下圖所示,很多圖的算法也可以應用到推薦系統上,此處介紹基於隨機遊走的PersonalRank算法。
PersonalRank算法跟用於網頁排序的PageRank算法原理基本相同,其思路是,假設給用戶 做推薦,可以從對應圖上的 節點出發進行隨機遊走,最終每個節點被訪問的概率(Rank值)會收斂,排序即可得到用戶的推薦列表。
隨機遊走的規則爲:
-
初始狀態下, 節點的Rank值爲1,其餘節點爲0,每次遊走,節點上的Rank值也會傳遞到下一個節點
-
在每個節點上,有 的概率繼續隨機遊走,即以相等的概率遊走到該節點指向的任意節點上
- 因此,傳遞到下一節點的Rank值期望爲 , 爲節點 指向的頂點集
- 因此,每個節點可以得到的Rank值期望爲 , 爲指向節點 的頂點集
-
在每個節點上,剩餘有 的概率回到 起點
- 因此,起點 還可以得到額外的Rank值
因此用迭代公式表達上述隨機遊走的過程如下:
基於圖的推薦算法(PersonalRank),這篇博客中有詳細的代碼實現和註釋,可以參考一下。
上述算法需要在全圖進行迭代,時間複雜度很高,可以通過轉化爲矩陣運算求解,此處不再說明。