2017年8月20日
目前我正在寫(xiě)一系列"電商的推薦系統(tǒng)"相關(guān)的文章。主要包括基于物品相似度的推薦、基于用戶(hù)相似度的推薦、基于內(nèi)容的推薦、推薦系統(tǒng)冷啟動(dòng)的問(wèn)題、推薦系統(tǒng)的時(shí)效性問(wèn)題、給用戶(hù)重復(fù)推薦已購(gòu)買(mǎi)的物品的問(wèn)題等等內(nèi)容。對(duì)這一方面內(nèi)容感興趣的請(qǐng)關(guān)注我。
一、基于用戶(hù)的協(xié)同過(guò)濾
我們經(jīng)常會(huì)找身邊的朋友給我們推薦電影、電視劇,我們會(huì)發(fā)現(xiàn)一個(gè)規(guī)律,跟我們興趣類(lèi)似的人,推薦的往往比較符合我們口味。其實(shí)這就是基于用戶(hù)的協(xié)同過(guò)濾。

上一篇文章《亞馬遜和淘寶的"猜你喜歡"是怎么實(shí)現(xiàn)的?》[1]中談到了,基于領(lǐng)域的協(xié)同過(guò)濾算法主要有兩種,一種是基于物品的,一種是基于用戶(hù)的。所謂基于物品,就是用戶(hù)喜歡了X商品,我們給他推薦與X商品相似的商品。所謂基于用戶(hù),就是用戶(hù)A和用戶(hù)B相似,用戶(hù)A買(mǎi)了X、Y,用戶(hù)B買(mǎi)了X、Y、Z,我們就給用戶(hù)A推薦商品Z。

基于物品的協(xié)同過(guò)濾的一個(gè)優(yōu)點(diǎn)是容易解釋推薦原因,第二個(gè)是電商網(wǎng)站中物品的相似度是相對(duì)不變的,物品相似度的矩陣維護(hù)起來(lái)相對(duì)容易。

使用基于物品的協(xié)同過(guò)濾,需要維護(hù)一個(gè)物品相似度矩陣;使用基于用戶(hù)的協(xié)同過(guò)濾,需要維護(hù)一個(gè)用戶(hù)相似度矩陣??梢栽O(shè)想,如果物品之間的相似度經(jīng)常變化,那么物品相似度的矩陣則需要經(jīng)常更新。如果物品經(jīng)常增加,那么物品相似度的矩陣也會(huì)增長(zhǎng)的非??臁P侣劸W(wǎng)站就同時(shí)具有這兩個(gè)特點(diǎn),所以基于物品的協(xié)同過(guò)濾并不適用于新聞的推薦。
二、誰(shuí)在用基于用戶(hù)的協(xié)同過(guò)濾
物品增長(zhǎng)很快,同時(shí)物品之間相似度頻繁變化的網(wǎng)站,并不適用基于物品的協(xié)同過(guò)濾,所以他們可以選擇基于用戶(hù)的協(xié)同過(guò)濾。目前業(yè)界使用基于用戶(hù)的協(xié)同過(guò)濾作為推薦系統(tǒng)核心算法的并不多,今日頭條是其中一個(gè)。個(gè)人認(rèn)為,像簡(jiǎn)書(shū)、知乎這種,內(nèi)容頻繁增加,但是用戶(hù)相似對(duì)相對(duì)固定的網(wǎng)站,也適合使用基于用戶(hù)給的協(xié)同過(guò)濾。
今日頭條核心算法負(fù)責(zé)人楊震原說(shuō):
一開(kāi)始今日頭條的推薦算法,首先入手的是"非個(gè)性化推薦"——解決的熱門(mén)文章推薦,以及新文章冷啟動(dòng)的問(wèn)題?!?,今日頭條開(kāi)始逐步引入個(gè)性化推薦的策略。他們所采用的,是協(xié)同過(guò)濾+基于內(nèi)容推薦,直到今天依然構(gòu)成今日頭條推薦算法的基礎(chǔ)[2]。
他提到的算法有三種:1)熱門(mén)推薦,2)協(xié)同過(guò)濾,3)基于內(nèi)容推薦。
熱門(mén)推薦就是優(yōu)先推薦熱門(mén)的文章。協(xié)同過(guò)濾就是通過(guò)物品、用戶(hù)的相似度來(lái)推薦。基于內(nèi)容的推薦,就是判斷兩篇文章是否相似,比如用算法判斷兩篇文章都是關(guān)于健身、飲食的,進(jìn)而可以給喜歡這些內(nèi)容的用戶(hù)推薦這兩篇文章。
本文會(huì)主要介紹基于內(nèi)容的推薦。接下來(lái)的文章會(huì)介紹基于內(nèi)容的推薦。關(guān)于熱門(mén)推薦,大家可以參考《產(chǎn)品經(jīng)理需要了解的算法——熱度算法和個(gè)性化推薦》[3],后面的文章可能也會(huì)介紹這一算法。
三、基于用戶(hù)的協(xié)同過(guò)濾的算法
兩用戶(hù)之間的相似度的計(jì)算其實(shí)很簡(jiǎn)單,用戶(hù)i與用戶(hù)j的相似度 = (i、j都打開(kāi)過(guò)的網(wǎng)頁(yè)數(shù))/根號(hào)(i打開(kāi)過(guò)的網(wǎng)頁(yè)數(shù) * j打開(kāi)過(guò)的網(wǎng)頁(yè)數(shù))。這個(gè)計(jì)算與“基于物品的協(xié)同過(guò)濾”中的物品之間相似度的計(jì)算是類(lèi)似的,大家可以參考《亞馬遜和淘寶的"猜你喜歡"是怎么實(shí)現(xiàn)的?》[1]。

上面是一個(gè)用戶(hù)相似度計(jì)算的案例[4]。我們?cè)囍?jì)算A和D之間的相似度。從“用戶(hù)打開(kāi)過(guò)的網(wǎng)頁(yè)”可以看出,A和D都打開(kāi)過(guò)的網(wǎng)頁(yè)只有d,也就是1個(gè)。用戶(hù)A打開(kāi)過(guò)的網(wǎng)頁(yè)數(shù)=3,用戶(hù)D打開(kāi)過(guò)的網(wǎng)頁(yè)數(shù)=3。所以A和D的相似度=1/根號(hào)(3*3)。其他的計(jì)算也是類(lèi)似的。
有了用戶(hù)之間的相似度之后,就可以計(jì)算推薦度了。假設(shè)e是剛剛發(fā)布的文章,這時(shí)候用戶(hù)B、C、D都瀏覽到e新聞的標(biāo)題,其中C、D點(diǎn)擊了,我們就可以計(jì)算A對(duì)e的興趣度。
A對(duì)e的興趣度=A與B的相似度*B對(duì)e的興趣度 + A與C的相似度*C對(duì)e的興趣度 + A與D的相似度*D對(duì)e的興趣度。 因?yàn)槲覀冞@里用的不是評(píng)分制,而是考慮是否點(diǎn)擊,那么D點(diǎn)擊了e,D對(duì)e的興趣度=1。
A對(duì)e的興趣度 = 1/根號(hào)(6)*1 + ?1/根號(hào)(6)*1 + ?1/根號(hào)(9)*1
所以,比如100篇新的文章出來(lái)之后,對(duì)部分用戶(hù)進(jìn)行了曝光,然后就可以根據(jù)用戶(hù)相似度,來(lái)預(yù)計(jì)其他用戶(hù)對(duì)這篇文章的興趣度,進(jìn)而挑選這100篇中預(yù)計(jì)興趣度最高的30篇曝光給這群用戶(hù)。
四、基于用戶(hù)的協(xié)同過(guò)濾的缺陷
我們知道,今日頭條的推薦,不單單用了協(xié)同過(guò)濾,還用了基于內(nèi)容的推薦。剛剛的例子說(shuō)到,新文章出來(lái)之后,必須選定一定量的用戶(hù)來(lái)進(jìn)行曝光,那么怎么選這一群用戶(hù)呢?這個(gè)問(wèn)題是協(xié)同過(guò)濾解決不了的。但是基于內(nèi)容的推薦可以解決。后面將聊聊基于內(nèi)容的推薦。
五、參考資料
[1]《亞馬遜和淘寶的"猜你喜歡"是怎么實(shí)現(xiàn)的?》http://www.itdecent.cn/p/d03fb6d68716
[2]《今日頭條是怎么做新聞推薦的?這篇文章告訴你》http://www.ifanr.com/649620
[3]《產(chǎn)品經(jīng)理需要了解的算法——熱度算法和個(gè)性化推薦》https://mp.weixin.qq.com/s/W-q2IY2IZ9OFQyLWT5G8Yw
[4]《基于用戶(hù)的協(xié)同過(guò)濾推薦算法原理和實(shí)現(xiàn)》http://www.cnblogs.com/technology/p/4467895.html