推薦算法入門:避開公式,產(chǎn)品經(jīng)理了解這些就夠了

3 評(píng)論 5327 瀏覽 61 收藏 15 分鐘

編輯導(dǎo)語:推薦算法,其實(shí)早在1992年就提出來了,但是火起來卻是最近這些年的事情,因?yàn)榛ヂ?lián)網(wǎng)的爆發(fā),有了更大的數(shù)據(jù)量可以供我們使用,推薦算法才有了很大的用武之地。對(duì)產(chǎn)品經(jīng)理來說,了解推薦算法也是其工作內(nèi)容之一,那么應(yīng)該從哪里入門呢?本文作者為我們進(jìn)行了分析總結(jié)。

8月28日,商務(wù)部發(fā)布了一則公告《中國禁止出口限制出口技術(shù)目錄》,第 45 條這次調(diào)整的內(nèi)容,增加了多項(xiàng)目前最熱門的技術(shù),其中就提到了:個(gè)性化推送服務(wù)。

眾所周知,這次調(diào)整是有意針對(duì)Tik Tok的出售風(fēng)波,昆士蘭科技大學(xué) ( Queensland University of Technology ) 研究 Tik Tok 的研究員 Bondy Valdovinos Kaye 說:” 我個(gè)人認(rèn)為,如果沒有推薦算法,Tik Tok 就不會(huì)是 Tik Tok”。

從一定程度上可以說明,正是推薦算法成就了字節(jié)跳動(dòng)的今天,作為當(dāng)今內(nèi)容型產(chǎn)品的“標(biāo)配”,不管是業(yè)務(wù)需要還是拓寬視野,了解業(yè)界常用的推薦算法及其應(yīng)用總是很有必要的。

一、協(xié)同過濾推薦算法

協(xié)同過濾推薦算法(Collaborative Filtering recommendation)是目前最流行的推薦算法。

其算法原理通俗來說就是利用那些興趣相同的用戶群體,來為目標(biāo)用戶推薦其感興趣的信息,而協(xié)同過濾算法又大致可以分為基于用戶(User-based)和基于物品(Item-based)兩種協(xié)同過濾。

1. 基于用戶的協(xié)同過濾算法(User-based):

如果說某些用戶群體對(duì)某類物品的評(píng)分是相似的,那么我們可以認(rèn)為這些用戶屬于相似用戶,基于用戶的協(xié)同過濾推薦算法便是通過找到與目標(biāo)用戶相似的其他用戶,然后通過其他相似用戶對(duì)某類物品的評(píng)分來預(yù)測(cè)目標(biāo)用戶對(duì)該物品的評(píng)分,并以此為依據(jù)進(jìn)行推薦。

如果用戶A喜歡項(xiàng)目A和項(xiàng)目C,用戶C同樣喜歡項(xiàng)目A與項(xiàng)目C,那么用戶A與用戶C可以被判定為相似用戶,根據(jù)用戶C喜歡項(xiàng)目D這一情況,可以推斷出用戶A喜歡項(xiàng)目D的概率較大,因此可以將項(xiàng)目D推薦給用戶A。

基于用戶的推薦算法需要計(jì)算用戶間的相似度矩陣,所以當(dāng)用戶數(shù)量變化很大的時(shí)候,每次都要重新計(jì)算,比較耗時(shí),可拓展性較差。

2. 基于物品的協(xié)同過濾算法(Item-based):

很多電商網(wǎng)站中的商品相對(duì)于用戶數(shù)量來說,變化是相對(duì)穩(wěn)定的,所以物品的相似矩陣相比用戶的相似矩陣來說要穩(wěn)定很多。

基于物品的協(xié)同過濾算法思想就是根據(jù)所有用戶的歷史偏好來計(jì)算推薦物品之間的相似性,然后把與用戶喜歡的物品相似的其他物品推薦給用戶。

如果項(xiàng)目A與項(xiàng)目C同時(shí)被多個(gè)用戶(用戶A與用戶C)喜歡,那么可以認(rèn)為項(xiàng)目A與項(xiàng)目C是相似項(xiàng)目,便可以把它推薦給同樣喜歡項(xiàng)目A的用戶D。

協(xié)同過濾類推薦算法特點(diǎn):

  1. 不需要對(duì)推薦內(nèi)容本身做太多了解便可以完成推薦工作;
  2. 能夠挖掘用戶的潛在興趣;
  3. 需要依賴大量用戶對(duì)項(xiàng)目的評(píng)分矩陣,存在新用戶與新物品的冷啟動(dòng)問題。

二、基于內(nèi)容的推薦算法

基于內(nèi)容的推薦系統(tǒng)最早來自于對(duì)協(xié)同過濾算法的改進(jìn),協(xié)同過濾算法只考慮到了用戶對(duì)于物品的打分,而沒有考慮物品本身所具備的多種屬性特征,比如該物品是一篇文章,那么它的屬性特征就有作者、標(biāo)題、類別等。

而基于內(nèi)容的推薦則是利用這些特征來進(jìn)行推薦,該推薦方法會(huì)提取物品中的內(nèi)容特征,然后與用戶的興趣標(biāo)簽進(jìn)行匹配,匹配度高的推薦物品就可以推薦給相應(yīng)用戶:文本A的特征詞為教育、大學(xué);文本C的特征詞為教育、高校。

那么可以認(rèn)為文本A與文本C為相似文本,用戶A閱讀了文本A以后便可認(rèn)為其對(duì)教育類的文章感興趣,從而將文本C推薦給用戶A。

基于內(nèi)容類推薦算法特點(diǎn):

  1. 用戶之間保持獨(dú)立性,推薦結(jié)果與他人的行為無關(guān);
  2. 新項(xiàng)目可以立即得到推薦,新的項(xiàng)目加入到系統(tǒng)中時(shí),只要擁有標(biāo)簽,便可以和用戶的興趣模型進(jìn)行匹配完成推薦;
  3. 新用戶冷啟動(dòng)問題,由于新的用戶沒有歷史行為記錄,會(huì)存在冷啟動(dòng)問題,這也是為什么很多產(chǎn)品第一次登陸時(shí)都會(huì)讓用戶選擇自己感興趣的內(nèi)容分類,就是為了快速對(duì)用戶建立興趣標(biāo)簽。

三、推薦算法如何被應(yīng)用?

目前的主流推薦算法,大多可以歸類為以上的兩種策略,然而,在實(shí)際應(yīng)用中只使用一種推薦策略是沒有辦法滿足生產(chǎn)環(huán)境的需求的,多是將兩者混合使用。

這里我用B站的推薦Feed流來簡單舉例(真實(shí)的工業(yè)級(jí)推薦模型要更為復(fù)雜),其中很多的推薦內(nèi)容很大程度上都是通過基于內(nèi)容的方法產(chǎn)生的。

這是充分利用到基于內(nèi)容的推薦策略精細(xì)化標(biāo)簽描述的優(yōu)勢(shì):當(dāng)用戶觀看過感興趣的視頻后,往往更傾向于繼續(xù)觀看類似的內(nèi)容。

比如下圖中,當(dāng)我在觀看過幾次iphone12的測(cè)評(píng)視頻后,系統(tǒng)應(yīng)該會(huì)更傾向于向我繼續(xù)推薦iphone12相關(guān)的視頻;但同時(shí)我們也發(fā)現(xiàn),在Feed流中同樣還存在著一些其他類型的視頻內(nèi)容,并且這些內(nèi)容與我的觀看歷史關(guān)聯(lián)度并不高,這又是為什么呢?

這里自問自答一下,這是因?yàn)槿绻粸橛脩敉扑]完全相似的內(nèi)容,會(huì)發(fā)生推薦內(nèi)容越推越窄的現(xiàn)象,這會(huì)大大降低用戶觀看內(nèi)容時(shí)的新鮮感。

這個(gè)時(shí)候,便可以利用協(xié)同過濾算法來拓寬推薦的范圍,于是在推薦Feed流中,我們常常既能看到與自己歷史觀看內(nèi)容類似的視頻,也能看到一些新奇的新內(nèi)容(當(dāng)然也會(huì)有部分新內(nèi)容是通過人工干預(yù)的方式出現(xiàn)在你的Feed流中的)。

到這里,我們大致知道了我們平時(shí)所觀看的推薦Feed流中的視頻的。

四、召回與排序

像B站這樣的大型內(nèi)容平臺(tái),內(nèi)容的數(shù)量是海量的(千萬級(jí)甚至更多),所以在為用戶進(jìn)行內(nèi)容推薦時(shí)往往會(huì)面臨一個(gè)問題,即如何從海量內(nèi)容中快速尋找用戶感興趣的內(nèi)容,這個(gè)時(shí)候就需要用到召回與排序了:

1. 召回

召回階段的主要職責(zé)是:從千萬量級(jí)的候選物品里,采取簡單模型將推薦物品候選集合快速篩減到千級(jí)別甚至百級(jí)別,這樣將候選集合數(shù)量降下來,之后在排序階段就可以上一些復(fù)雜模型,細(xì)致地對(duì)候選集進(jìn)行個(gè)性化排序。

在召回階段,工業(yè)界通用做法是多路召回,即使用不同的推薦策略來進(jìn)行多路勁召回,每一個(gè)路徑對(duì)應(yīng)一個(gè)推薦策略,如下圖所示:

在基于內(nèi)容標(biāo)簽的策略中,又被業(yè)界分了為兩種,即長期內(nèi)容標(biāo)簽與實(shí)時(shí)內(nèi)容標(biāo)簽:

1)實(shí)時(shí)內(nèi)容標(biāo)簽

多在近線部分完成,主要目的是實(shí)時(shí)收集用戶行為反饋,并選擇訓(xùn)練實(shí)例,實(shí)時(shí)抽取拼接特征,并近乎實(shí)時(shí)地更新在線推薦模型。這樣做的好處是,用戶的最新興趣能夠近乎實(shí)時(shí)地體現(xiàn)到推薦結(jié)果里。

2)長期內(nèi)容標(biāo)簽

則在離線部分完成,通過對(duì)線上用戶點(diǎn)擊日志的存儲(chǔ)和清理,整理離線訓(xùn)練數(shù)據(jù),并周期性地更新推薦模型。對(duì)于超大規(guī)模數(shù)據(jù)和機(jī)器學(xué)習(xí)模型來說,往往需要高效地分布式機(jī)器學(xué)習(xí)平臺(tái)來對(duì)離線訓(xùn)練進(jìn)行支持。

需要注意的是,由于在召回階段需要處理的數(shù)據(jù)集極其龐大。

所以需要盡量選擇簡單的模型和使用盡量少的特征,這樣才可以快速有效的將內(nèi)容視頻的數(shù)量降下來,之后在排序過程中就可以使用一些復(fù)雜的模型來進(jìn)行個(gè)性化排序。

2. 排序

由于召回階段使用了不同的召回策略,導(dǎo)致了候選物的評(píng)判標(biāo)準(zhǔn)并不是唯一的,所以無法相互比較。

這里便需要使用排序,來對(duì)多個(gè)召回方法的結(jié)果進(jìn)行統(tǒng)一打分,從召回層中選出最優(yōu)的TopK,其中需要依靠各種機(jī)器學(xué)習(xí)算法與神經(jīng)網(wǎng)絡(luò)模型來對(duì)候選集中的內(nèi)容進(jìn)行預(yù)測(cè)打分排序,如WIDE&DEEP,LR+GBDT等。

這里我們來盡量通俗的描述一下機(jī)器學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)的在推薦中的作用:它們可以在依靠候選物品中大量的特征因子來尋找這些候選物品與用戶之前的潛在聯(lián)系,這里舉一個(gè)簡單的例子:

假設(shè)上圖是一個(gè)自編碼器推薦模型,它由輸入層、隱藏層和輸出層三個(gè)部分構(gòu)成,假設(shè)此時(shí)在輸入層中輸入的是一個(gè)用戶對(duì)的幾個(gè)物品的評(píng)分向量R。

該評(píng)分向量中,含有用戶打過分的數(shù)據(jù)(圖中用黑色部分表示)和用戶沒有打過分的數(shù)據(jù)(圖中用白色部分表示),自編碼器會(huì)將輸入層中的向量,通過某些規(guī)則映射到一個(gè)隱空間中(編碼過程),然后再從隱空間中將其還原到原來的空間中(解碼過程)。

此時(shí)會(huì)得另一個(gè)用戶評(píng)分向量R’,顯然兩個(gè)評(píng)分向量中的數(shù)據(jù)在經(jīng)過兩次轉(zhuǎn)換以后已經(jīng)截然不同(指黑色部分),但經(jīng)過轉(zhuǎn)換后,在輸出層的評(píng)分向量R’中,那些原本沒有被打分的項(xiàng)目(白色部分),這次卻擁有了分?jǐn)?shù)。

此時(shí)我們需要做的就是通過對(duì)模型進(jìn)行不斷的迭代訓(xùn)練(即不斷調(diào)整編碼與解碼的過程),來最小化兩個(gè)評(píng)分向量之間的誤差(即黑色部分輸入與輸出之間的誤差)。

當(dāng)用戶的評(píng)分向量與之間的誤差足夠小時(shí),R’中白色部分的評(píng)分便是該用戶對(duì)這些未打分項(xiàng)目的預(yù)測(cè)值。

整個(gè)過程就像是一個(gè)黑盒,盡管過程不具備解釋性,結(jié)果卻意外的精準(zhǔn)。在拿到侯選物的預(yù)測(cè)分之后便能以此為依據(jù)來進(jìn)行開始排序,最后再加上一些業(yè)務(wù)規(guī)則如去重、去已讀、加廣告等,展示給用戶:

五、結(jié)語

當(dāng)然,真實(shí)的推薦系統(tǒng)是更為復(fù)雜的,這里只是為了方便理解才將其簡化,省掉了很多細(xì)節(jié),內(nèi)容也是基于我自己對(duì)于推薦系統(tǒng)的理解,如有描述不足的地方,還請(qǐng)大家多多指教,共同進(jìn)步!

 

本文由@Kazan 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自Unsplash, 基于CC0協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 講的很清晰,適合0基礎(chǔ)的小白閱讀

    來自吉林 回復(fù)
  2. 淺顯易懂,深入淺出,贊

    來自北京 回復(fù)
  3. 分析的很有道理!

    回復(fù)