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