【推薦系統那些事兒·二】常用推薦策略介紹
在上一篇文章中,我們簡單分析了雙十一天貓和京東的推薦策略,同時也介紹了計算相似度的餘弦公式。本期我們會介紹下常見的推薦策略,以及這些策略背後的邏輯。
1. 推薦的本質是什麼
推薦和搜索本質有相似的地方。搜索滿足用戶從海量數據中迅速找到自己感興趣內容的需求,屬於用戶主動獲取。推薦則是系統從海量數據中根據獲取到的用戶數據,猜測用戶感興趣的內容並推薦給用戶,屬於系統推薦給用戶。本質上都是為了在這個信息過載的時代,幫助用戶找到自己感興趣的東西。
推薦系統有很多種形式。運營或者編輯篩選出自己認為最好的內容放在首頁,廣義上講這也是一種推薦。不過這個不在我們本期文章的討論範圍,本期主要是討論系統級別的推薦。這裡主要介紹四類常見的推薦方法。
- 基於內容的推薦
- 基於內容的協同過濾
- 基於用戶的協同過濾
- 基於標籤的推薦
基於內容的推薦是基礎的推薦策略。如果你瀏覽或購買過某種類型的內容,則給你推薦這種類型下的其他內容。
以電影推薦為例。比如你之前看過《盜夢空間》,則系統會關聯資料庫中盜夢空間的信息。系統會推薦克里斯托弗·諾蘭導演的其他作品,比如《致命魔術》;系統會推薦主演里昂納多的其他作品,比如《第十一小時》。
如果這個電影系統的數據被很好地分類,那麼推薦系統也會給用戶推薦這個分類下的其他作品。盜夢空間如果被歸為科幻作品,那麼可能會推薦其他科幻作品,比如《星際迷航》。
基於內容的推薦好處在於易於理解,但是壞處是推薦方式比較依賴於完整的內容知識庫的建立。如果內容格式化比較差,那麼基於內容的推薦就無法實行。同時如果用戶留下的數據比較少,則推薦效果很差,因為無法擴展。
3. 基於內容的協同過濾
協同過濾(Collaborative Filtering)與傳統的基於內容過濾直接分析內容進行推薦不同,協同過濾會分析系統已有數據,並結合用戶表現的數據,對該指定用戶對此信息的喜好程度預測。
基於內容的協同過濾(item-based CF),通過用戶對不同內容的評分來評測內容之間的相似性,基於內容之間的相似性做出推薦;最典型的例子是著名的「啤酒加尿布」,就是通過分析知道啤酒和尿布經常被美國爸爸們一起購買,於是在尿布邊上推薦啤酒,增加了啤酒銷量。
需要計算用戶u對物品j的興趣,公式如下:
這裡表示用戶有關聯的商品的集合,表示物品j和i的相似度,表示用戶u對物品i的打分,示例如下:
這裡還有兩個問題沒有仔細描述,如何打分,如何計算相似度。
打分的話需要根據業務計算,如果有打分系統最好,沒有打分系統,則需要根據用戶對這個物品的行為得到一個分數。
計算相似度除了之前我們提到的餘弦公式,還可以根據其他的業務數據。比如對於網易雲音樂而言,兩首歌越多的被加入兩個歌單,可以認為兩首歌越相似。對於亞馬遜而言,兩個商品越多的被同時購買,則認為兩個商品相似。這裡其實是需要根據產品的具體情況進行調整。
4. 基於用戶的協同過濾
基於用戶的協同過濾(user-based CF),通過用戶對不同內容的行為,來評測用戶之間的相似性,基於用戶之間的相似性做出推薦。這部分推薦本質上是給相似的用戶推薦其他用戶喜歡的內容,一句話概括就是:和你類似的人還喜歡下列內容。
需要計算用戶u對物品i的興趣,公式如下(可以和基於物品的協同過濾仔細對比):
這裡表示對物品i有過行為的用戶集合,使用用戶u和用戶v的相似度,表示用戶v對物品i的打分,示例如下:
同樣的,這裡也沒有介紹如何計算相似度,但是在上一篇文章我們給出了一個例子【推薦系統那些事兒·一】從天貓雙11到餘弦公式,計算相似度如果用到餘弦公式,其實最主要的是選好維度。對於音樂而言,可能是每首歌都作為一個維度,對於電商而言,也可以是每個商品都是一個維度。當然,用一些可理解的用戶標籤作為維度也是可以的。
5. 基於標籤的推薦
標籤系統相對於之前的用戶維度和產品維度的推薦,從結構上講,其實更易於理解一些,也更容易直接干預結果一些。關於tag和分類,基本上是互聯網有信息架構以來就有的經典設計結構。內容有標籤,用戶也會因為用戶行為被打上標籤。通過標籤去關聯內容。
需要計算用戶u對物品i的興趣,公式如下(可以和基於物品的協同過濾仔細對比):
這裡表示用戶u和物品i共有的標籤,使用用戶u和標籤k的關聯度,表示標籤k和物品i的關聯性分數,示例如下:
標籤查找的方法這裡有很大可以發揮的空間,比如,通過知識庫進行處理,或者語義分析處理。而對於一些設計之初就有標籤概念的網站, 就比較容易,比如豆瓣和知乎。對於知乎而言,公共編輯的標籤是天然的標籤內容,對於知乎的用戶而言,瀏覽回答關注等行為則是天然的用戶標籤素材。
6.總結
對於推薦而言,這幾種基本的方法彼此之前都有些應用場景的差別:比如基於知識的推薦,這是比較老舊的推薦方法,但是對於系統和結構比較好的內容,則低成本且高效。比如基於內容的協同過濾,就適用於內容比較有限,但是用戶數特別多的情況,比如電商公司。比如基於用戶的協同過濾,則比較容易根據用戶的興趣點,發覺熱點內容,比如新聞門戶。對於基於標籤的推薦,有標籤系統的很佔便宜,它在靈活性和可控制性上都好一些,但是做好很難。
本期主要是介紹了常見推薦演算法的基本原理,那麼在推薦系統策略設計的時候,有哪些需要特別注意的地方呢?我們怎麼衡量一個推薦系統的優劣呢?推薦系統有哪些典型的應用場景呢?歡迎關注專欄,繼續閱讀下期。
------------------------------------
【推薦系統那些事兒·三】推薦策略設計的Notes
參考文獻和推薦閱讀:項亮《推薦系統實踐》
推薦閱讀:
※【博客存檔】Machine Learning With Spark Note 2:構建一個簡單的推薦系統
※【翻譯+批註】亞馬遜推薦二十年
※推薦系統從入門到接著入門
※開源代碼上新!6 份最新「Paper + Code」 | PaperDaily #17