推薦策略產品經理必讀系列—第四講推薦系統的召回(二)
編輯導語:相信大家都聽說過協同過濾算法,那到底什么是協同過濾,有何用處。本文將為大家介紹推薦系統召回策略中基于協同過濾算法的召回,希望你能對此有更深的理解,一起來看看。
前言:上一篇為大家介紹了推薦系統召回策略里面基于規則的召回,本篇將為大家介紹推薦系統召回策略中基于協同過濾算法的召回。
一、協同過濾算法綜述
大家應該在很多場合或者文章中都聽到過協同過濾算法,首先到底什么是協同過濾(Collaborative Filtering),它的核心思想是什么。
何為協同:
協同字面意思就是大家在一起互相配合來做成某一件事情。在協同過濾算法里指的就是利用群體的數據去尋找規律,去尋找物料與物料,用戶與用戶之間的相似性。
何為過濾:
過濾字面意思就是把不符合條件的東西給過濾掉。在協同過濾算法里指的就是當我們基于物料相似度或者用戶相似度進行推薦時,需要把那些相似性很低的物料和用戶過濾掉。
那“協同+過濾”:其實就是利用群體的數據去尋找規律,去尋找物料與物料,用戶與用戶之間的相似性,然后再把相似性很低物料和用戶過濾掉,挑選出相似度最高的物料和用戶。
協同過濾算法的產生是推薦算法1.0時代“基于內容的標簽召回”算法后,人們開始利用數據本身探討用戶與用戶,物料與物料之間的關聯性,從而演化出來了協同過濾(Collaborative Filtering)算法。
標志性的算法就是基于用戶的協同過濾算法,該算法在1992年被提出。協同過濾算法可以說是推薦領域最經典的算法了。甚至可以說協同過濾算法的出現,代表了推薦系統的出現。協同過濾算法一共分為兩個大的方式:基于鄰域的方法和基于模型的方式。
下面我們將詳細展開介紹:
二、基于領域的方法
2.1 基于用戶的協同過濾(User-Based)
AB用戶擁有相同的背景和興趣,基于用戶之間的相似性,為A推薦用戶B感興趣且用戶A沒有接觸過的內容。比如大學時候,我們都會問同專業的學長學姐應該選什么課。這個就是學長學姐和我們有一樣的專業背景,基于他們過去經驗上過的課,一定可以推薦出哪些考試簡單給分又高的課,如果這個課很難給分又低,學長學姐們一定不會去上這個課。整個算法分為兩個大的步驟:
第一步:挖掘和目標用戶相似的用戶集合;
如何計算用戶之間的相似性,一般我們使用Jaccard系數或者余弦相似度。具體公式如下:
上圖左側為歷史用戶瀏覽商品數據,右側為計算用戶相似度的公式。用戶數很龐大,所以一般我們會設置一個K值,找出與用戶A最相似的Top K個用戶。例子中我們設置K為2,根據公式我們可以計算出與用戶A相似度最高的兩個用戶是用戶B和用戶E。
第二步:挖掘該集合中受歡迎的Item,同時目標用戶沒有接觸過的,將其推薦給目標用戶;
用戶B和E歷史瀏覽過的商品中,商品d和e用戶A沒有瀏覽過,需要計算用戶A對于商品d和e的興趣度。計算公式如上圖所示,我們以用戶A對商品d的興趣度舉例:( 用戶A與用戶B的相似度 * 用戶B對于商品d的興趣度 ) + ( 用戶A與用戶E的相似度 * 用戶E對于商品d的興趣度 ),這里用戶之間的相似度第一步里面已經計算過了,用戶B & E對于商品d的興趣度,我們統一設定:如果瀏覽過興趣度就為1,沒有瀏覽過興趣度就為0。
實際業務中,我們可以更加細化,比如同一時間段瀏覽的次數等將興趣度計算方式更加細化。最終計算出用戶A對商品e的興趣度為1.15,對商品d的興趣度為0.4,所以優先推薦商品e。
User-CF算法1992年就已經在某電子郵件的個性化推薦系統上得到了應用,關于User-CF算法的優缺點我們在介紹完Item-CF算法以后進行統一對比介紹。
2.2 基于物料的協同過濾(Item-Based)
基于物料之間的相似性,通過用戶歷史喜歡的物料,為其推薦相似的物料。這里面的物料相似性并不是基于物料之間標簽重合度來計算相似度,Item CF是基于用戶對于物料的歷史行為數據來計算物料之間的相似度。Item-CF最早是由亞馬遜公司提出的,目前在各大互聯網公司應用都十分頻繁。
整個算法同樣分為兩個步驟:
第一步:計算商品之間的相似度;
首先我們基于用戶歷史瀏覽的行為,統計兩個商品被同一用戶瀏覽過的次數,比如pair(e,d)同時被3個用戶都瀏覽過,那么相似度矩陣里面就填入3。最后我們使用余弦相似度公式來計算商品之間的相似度。
第二步:基于目標用戶歷史瀏覽行為和商品之間的相似度,為其推薦感興趣且未瀏覽過的商品;
相似度計算完以后,我們需要計算用戶對這些沒有瀏覽過商品的興趣度。比如我們計算用戶A對于商品d的興趣度,案例中因為一共只出現了5個商品,只有d和e用戶A沒有瀏覽過,這里的K值我們就設置為3,我們只基于商品d和a,b,c之間的相似度以及用戶A對于商品a,b,c的興趣度進行計算。
實際案例中用戶A瀏覽過的商品很多,和d有交集的商品也會很多,我們需要設置一個合理的K值,無法計算商品d和所有商品的相似度,再去乘以用戶A對于這些商品的興趣度。最終根據上述公式計算得出用戶A對e的興趣度為1.74,對d的興趣度為1.17。所以優先為用戶A推薦商品e。
最后我們用下面這張圖將User CF和Item CF之間的區別進行歸納:
上圖里面有幾個核心的點需要關注。
(1)應用領域
User-CF在新聞社交網站等UGC社區使用的較多,而Item-CF在電商、電影&音樂等網站使用的較多。一方面因為新聞等網站內容更新快,使用Item-CF無法滿足時效更新的要求,另一方面新聞等網站上用戶的興趣相對粗粒度,很多用戶群體喜歡閱讀同一內容。而在電商、電影等網站上用戶興趣相對比較個性化,使用Item-CF更能夠反映用戶興趣的傳承。
(2)可解釋性
User-CF的解釋性弱于Item-CF,因為User-CF是側重于人與人之間的相似,給用戶A推薦用戶B感興趣的東西。而Item-CF是側重于基于用戶A歷史買過的商品,為其推薦相似的商品。從直觀上用戶也更愿意相信Item-CF這種推薦方式。
三、基于模型的方法
協同過濾是一種思想,很多時候大家在講協同過濾時就講User-CF和Item-CF,其實協同過濾中有很大一部分甚至說當前先進的協同過濾算法都是基于模型的協同過濾。下面為大家介紹幾種常見基于模型的協同過濾。
3.1 基于圖模型(Graph-based model)
第一步:將數據由表格轉化為二分圖;
我們將表格用戶歷史瀏覽過的數據轉化為Graph,左邊為用戶Node,右邊為物料Node。用戶瀏覽過的物料兩個頂點之間就連一條線,頂點與頂點之間的連線我們叫做邊Edge。
第二步:基于兩個頂點之間路徑數、路徑長度及經過的節點出度判斷相關性;
比如我們計算用戶Node-A與物料Node-c和Node-e之間的相關性。首先我們統計Node-A到Node-c可以有幾條路徑,這里面只有一條路徑可以到達就是A—a—B—c,長度是3。而Node-A與Node-e之間一共有兩條路徑可以到達,分別是A—b—C—e和A—d—D—e,長度均為3。所以Node-A和Node-e的相關性要強于NodeA與Node-c。
同時我們再去比較同樣是兩條長度為3的路徑“A—b—C—e”,哪條路徑產生的鏈接更強了?我們分別去統計兩個路徑經過Node的出度,何為出度?
出度就是該Node對外連接幾個其他Node,比如Node-A的出度就是3。
兩條路徑經過節點的出度分別是【3,2,2,2】和【3,2,3,2】,該某個節點的出度越大代表這個節點的鏈接越多,該節點和連接的單個節點的相關性就越弱。所以路徑A—b—C—e產生的A與e的相關性要強于A—d—D—e產生的A與e的相關性。
以上就是基于圖模型的協同過濾算法。
下一篇將重點為大家介紹基于向量的召回,大家經常聽到的FM模型以及雙塔模型,大家敬請期待~
本文由 @King James 原創發布于人人都是產品經理。未經許可,禁止轉載。
題圖來自 Unsplash,基于 CC0 協議
請教一下,A-e之間為什么A-a-D-e不能算一條路徑呢
想問下如果路徑2/3的length=4
路徑1的length=3 這時e的相關性高還是c呢 還優先路徑數多的嗎
太強了,今年看過最干貨的文章
期待下一篇文章早點出
感謝分享,請問A—b—C—e和A—d—D—e兩條路徑經過節點的出度是否應分別是【3,2,2,2】和【3,2,3,2】。
是的,感謝提醒
這篇文章干貨滿滿,結構清晰,感謝作者的分享,值得收藏