作者在《推薦系統(tǒng)的工程實現(xiàn)》這篇文章的第五部分“推薦系統(tǒng)范式”中講到工業(yè)級推薦系統(tǒng)有非個性化范式、完全個性化范式、群組個性化范式、標的物關(guān)聯(lián)標的物范式、笛卡爾積范式等5種常用的推薦范式。本文會按照這5大范式來講解常用的推薦算法,但不會深入講解算法的實現(xiàn)原理,只是概述算法的實現(xiàn)思路,后面的系列文章我會對常用的重點算法進行細致深入剖析。
本文會從推薦算法與產(chǎn)品介紹、推薦召回算法概述、排序算法概述、推薦算法落地需要關(guān)注的幾個問題等4部分來講解。完全個性化范式和標的物關(guān)聯(lián)標的物范式是最常用的推薦范式,在互聯(lián)網(wǎng)產(chǎn)品中有大量真實場景應(yīng)用,也是本文重點講解的。
讀者讀完本文后,你會知道每類范式常用的算法有哪些、實現(xiàn)的思路是什么、以及常用的應(yīng)用場景。本文也可以作為讀者落地推薦算法到真實推薦場景的參考指南。
一、推薦算法與產(chǎn)品介紹
工業(yè)級推薦系統(tǒng)的推薦業(yè)務(wù)流程一般分為召回和排序兩個階段,召回就是將用戶可能會感興趣的標的物通過算法從全量標的物庫中取出來,一般會采用多個算法來召回,比如熱門召回、協(xié)同過濾召回、標簽召回等,排序階段將召回階段的標的物列表根據(jù)用戶可能的點擊概率大小排序(即所謂的ctr預(yù)估)。在實際業(yè)務(wù)中,在排序后還會增加一層調(diào)控邏輯,根據(jù)業(yè)務(wù)規(guī)則及運營策略對排序后的列表進一步增補微調(diào),滿足特定的運營需求。
下面圖1是電視貓(一款基于OTT端[智能電視或者智能盒子]的視頻播放軟件)的推薦系統(tǒng)的業(yè)務(wù)流程,包含召回、排序和業(yè)務(wù)調(diào)控三大算法和策略模塊,可以作為大家設(shè)計推薦系統(tǒng)算法模塊的參考。本文只講解召回、排序兩個階段涉及到的算法,業(yè)務(wù)調(diào)控跟具體業(yè)務(wù)及公司運營策略強相關(guān),本文不做過多描述。
圖1 電視貓推薦系統(tǒng)業(yè)務(wù)流
推薦算法是一種機器學(xué)習算法,所以算法模型的質(zhì)量強依賴于用于算法訓(xùn)練的數(shù)據(jù)集,這里我們簡單提下推薦系統(tǒng)可以利用的數(shù)據(jù)有哪些(參考下面圖2及上面圖1的數(shù)據(jù)源)。一般推薦系統(tǒng)依賴三大類數(shù)據(jù):標的物metadata數(shù)據(jù)(標的物相關(guān)的描述信息)、用戶畫像數(shù)據(jù)(用戶相關(guān)數(shù)據(jù),如年齡、地域、性別、收入等)、用戶行為數(shù)據(jù)(用戶對標的物的操作行為,如播放、點擊、購買、收藏等)。這三類數(shù)據(jù)是主要可用的模型數(shù)據(jù)。另外人工標注數(shù)據(jù)、第三方數(shù)據(jù)等也可以用來補充完善上述三類數(shù)據(jù)。
圖2 推薦系統(tǒng)依賴的三類數(shù)據(jù)
相信大家對推薦流程及算法依賴的數(shù)據(jù)有了初步了解,下面我們來根據(jù)不同的推薦范式重點講解對應(yīng)的推薦產(chǎn)品及可行的推薦算法,方便大家將不同的推薦算法對應(yīng)到不同的推薦產(chǎn)品中。
上面我們提到的5類推薦范式,可以從三個維度來理解:
一個是用戶維度,
一個是標的物維度,
一個是用戶與標的物笛卡爾積維度。
從用戶維度來看就是為用戶推薦可能感興趣的標的物,從標的物維度來看,就是用戶在訪問標的物詳情頁(或者退出標的物詳情頁)時,關(guān)聯(lián)一組標的物作為推薦。第三個維度是將用戶維度和標的物維度結(jié)合起來,不同的用戶訪問同樣的標的物詳情頁看到的內(nèi)容也不一樣。
1. 基于用戶維度的推薦
基于用戶維度的推薦可以根據(jù)個性化的粒度分為非個性化、群組個性化、完全個性化。這三種粒度對應(yīng)我們前面提到的非個性化范式、群組個性化范式、完全個性化范式。
非個性化是每個用戶看到的推薦內(nèi)容都完全一樣,傳統(tǒng)門戶網(wǎng)站的編輯對內(nèi)容的編排就是非個性化的方式,每個用戶看到的內(nèi)容都是一樣的。對于各類網(wǎng)站或者APP的排行榜的推薦形態(tài)也是非個性化的。下面圖3是網(wǎng)易云音樂的排行榜推薦,根據(jù)各個維度計算各類榜單。
圖3 網(wǎng)易云音樂排行榜
群組個性化就是將相同特征的用戶聚合成一組,同一組用戶在某些特征上具備相似性,我們?yōu)檫@一組用戶推薦完全一樣的內(nèi)容。
精細化運營一般會采用該方式,通過用戶畫像系統(tǒng)圈一批人,并對這批人做統(tǒng)一的運營。比如視頻行業(yè)的會員精細化運營,當會員快到期時,可以借助精準運營留住用戶,具體可以將快到期的會員用戶圈出來,針對這批用戶做會員打折活動,促進用戶產(chǎn)生新的購買。
圖4是電視貓電視劇頻道”戰(zhàn)爭風云“tab的基于群組的個性化重排序。我們將用戶根據(jù)興趣分組(聚類),同一組內(nèi)的用戶看到的內(nèi)容是一樣的順序,但是不同組的用戶的排序是不一樣的。但是不管哪個用戶其實看到的內(nèi)容集合(戰(zhàn)爭風云tab的全部內(nèi)容)是相同的,只不過根據(jù)用戶的興趣做了排序,把用戶更喜歡的內(nèi)容排在了前面。
圖4 電視貓基于群組的個性化重排序
對于天貓這類購物網(wǎng)站來說,對未登錄用戶或是冷啟動的用戶,可以采用基于人群屬性來做推薦。通過將用戶按照性別、年齡段、收貨城市等粗粒度的屬性劃分為若干人群,然后基于每個人群的行為數(shù)據(jù)挑選出該人群點擊率最高的TopK個商品作為該人群感興趣的商品推薦給他們。該方法也是一種群組個性化推薦策略。
完全個性化就是為每個用戶推薦的內(nèi)容都不一樣,是根據(jù)用戶的行為及興趣來為用戶做推薦,是最常用的一種推薦形式。大多數(shù)時候我們所說的推薦就是指這種形式的推薦。圖5是淘寶首頁的猜你喜歡推薦,這個推薦就是完全個性化的,每個人推薦的都不一樣。
圖5 淘寶首頁的猜你喜歡推薦,不同用戶推薦的內(nèi)容不一樣
完全個性化也可以基于用戶的好友關(guān)系來做推薦。下面圖6是微信最近上線的好物推薦,是基于社交關(guān)系的個性化推薦,將你的好友買過的商品推薦給你。
圖6 微信基于社交關(guān)系的個性化好物推薦
從另外一個角度看,完全個性化推薦可以分為只基于用戶個人行為的推薦和基于群組行為的推薦。基于個人行為的推薦,在構(gòu)建推薦算法時只依賴個人的行為,不需要其他用戶的行為,常見的基于內(nèi)容推薦就是這類推薦?;谌航M行為的推薦,除了利用自己的行為外,還依賴其他用戶的行為構(gòu)建算法模型,這類推薦可以認為是全體用戶的“協(xié)同進化“,像協(xié)同過濾、基于模型的推薦等都是這類推薦形式。
2. 基于標的物維度的推薦
基于標的物維度的推薦是用戶在訪問標的物詳情頁時,或者訪問后退出時,關(guān)聯(lián)一批相似或者相關(guān)的標的物列表,對應(yīng)我們上面提到的標的物關(guān)聯(lián)標的物范式。圖7是電視貓APP節(jié)目詳情頁的相似影片,就是常見的一類標的物關(guān)聯(lián)標的物的推薦模式。
圖7 電視貓電影詳情頁的相似影片
除了視頻網(wǎng)站外,電商、短視頻等APP都大量使用基于標的物維度的推薦。下面圖8分別是淘寶APP和網(wǎng)易新聞APP上的標的物關(guān)聯(lián)標的物推薦。淘寶APP上當你點擊某個衣服詳情頁后從該詳情頁退出,就會在該衣服圖片下面用小圖展示4個相關(guān)的衣服(下面左圖紅色圈圈部分),網(wǎng)易新聞視頻模塊當你點擊播放一個視頻超過幾秒后就會在該視頻下面展示一行相關(guān)視頻(見下面右圖紅色圈圈部分),如果你一直播放,當該視頻播完后會播放后面的相似視頻,最終形成連播推薦的效果。這兩款A(yù)PP的相似推薦都是非常好的推薦形態(tài),交互非常自然流暢,毫無違和感。
圖8 淘寶APP首頁及網(wǎng)易新聞首頁上的標的物關(guān)聯(lián)標的物推薦
3. 基于用戶和標的物交叉維度的推薦
這類推薦,不同用戶對同一個標的物的關(guān)聯(lián)推薦是不一樣的,對應(yīng)我們上面提到的笛卡爾積范式。拿上面的圖3來舉例,如果該推薦是用戶與標的物笛卡爾積式的推薦的話,不同用戶看到雙重約會這個電影,下面的相似影片是不一樣的,推薦會整合用戶的興趣特征,過濾掉用戶已經(jīng)看過的電影等等。對于搜索來說,不同的人搜索同一個關(guān)鍵詞得到的搜索結(jié)果及排序是不同的,搜索結(jié)果及排序整合了個人的歷史行為特征及興趣。
這類推薦由于每個用戶在每個標的物上的推薦列表都不一樣,我們沒法事先將所有的組合算出并存下來(否則存儲量是用戶數(shù) × 標的物數(shù),對于互聯(lián)網(wǎng)公司,這個數(shù)量是巨大的),我們必須在用戶請求的過程中快速地為用戶計算個性化的推薦列表,這對整個推薦系統(tǒng)的架構(gòu)有更高的要求,所以在實際場景中用得比較少。
上面我們介紹了工業(yè)界常用的推薦范式及對應(yīng)的產(chǎn)品形態(tài),在下面一節(jié)我們對每種推薦范式涉及到的召回算法做一個綜述,希望讀者對這些算法有初步了解,知道在哪類產(chǎn)品形態(tài)上使用哪類算法。
二、推薦召回算法概述
在本節(jié)我們會根據(jù)推薦召回算法的5種范式來講解每種范式常用的算法策略,讓大家對各種算法有一個整體的了解。
1. 非個性化范式
非個性化范式就是所有用戶推薦一樣的標的物列表,一般各種榜單就是這類推薦,如最新榜、最熱榜等等。這類排行榜就是基于某個規(guī)則來對標的物降序排列,將排序后的標的物取topN推薦給用戶。比如最新榜可以根據(jù)標的物上線的時間順序來倒序排列,取前面的topN推薦給用戶。最熱榜可以根據(jù)用戶播放量(點擊量)降序排列。
這里面可能需要考慮標的物的多品類特性,甚至還會考慮地域、時間、價格等各個維度。在具體實施時會比較復(fù)雜,需要根據(jù)具體的產(chǎn)品及業(yè)務(wù)場景來設(shè)計。
非個性化范式可以基于簡單的計數(shù)統(tǒng)計來生成推薦,基本不會用到很復(fù)雜的機器學(xué)習算法。當然,用來取topN的排行榜計算公式可能會整合各類用戶行為數(shù)據(jù),公式會比較復(fù)雜(如豆瓣評分公式就比較復(fù)雜)。
非個性化范式的排行榜等算法,實現(xiàn)起來很簡單,可解釋性也很強。雖然每個用戶推薦的內(nèi)容都一樣,但是(從生物進化上)人都是有從眾心理的,大家都喜歡的東西,我們也喜歡的概率還是很大的,所以這類推薦效果還是非常不錯的。這類算法也可以作為冷啟動或者默認的推薦算法。
2. 完全個性化范式
完全個性化范式是最常用的推薦模式,可用的推薦方法非常多。下面對常用的算法及最新的算法進展進行簡單梳理。
(1)基于內(nèi)容的個性化推薦算法
這類推薦算法只依賴于用戶自己的歷史行為而不必知道其他用戶的行為。該算法的核心思想是:標的物是有描述屬性的,用戶對標的物的操作行為為用戶打上了相關(guān)屬性的烙印,這些屬性就是用戶的興趣標簽,那么我們就可以基于用戶的興趣來為用戶生成推薦列表。拿視頻推薦來舉例,如果用戶過去看了科幻和恐怖兩類電影,那么恐怖、科幻就是用戶的偏好標簽了,這時我們就可以給用戶推薦科幻、恐怖類的其他電影。具體來說,我們有如下兩類方法來為用戶做推薦。
a 基于用戶特征表示的推薦
標的物是具備很多文本特征的,比如標簽、描述信息、metadata信息等。我們可以將這些文本信息采用TF-IDF或者LDA等算法轉(zhuǎn)化為特征向量,如果是用標簽來描述標的物,那么我們可以構(gòu)建一個以標簽為特征的特征向量。
有了特征向量,就可以將用戶所有操作過的標的物的特征向量的(時間加權(quán))平均作為用戶的特征向量,利用用戶特征向量與標的物特征向量的乘積就可以計算用戶與標的物的相似度,從而計算出用戶的推薦列表。
b 基于倒排索引查詢的推薦
如果我們基于標簽來表示標的物屬性,那么基于用戶的歷史行為,可以構(gòu)建用戶的興趣畫像,該畫像即是用戶對各個標簽的偏好,并且有相應(yīng)的偏好權(quán)重。
構(gòu)建完用戶畫像后,我們可以構(gòu)建出標簽與標的物的倒排索引查詢表(熟悉搜索的同學(xué)應(yīng)該不難理解)?;谠摲聪蛩饕砑坝脩舻呐d趣畫像,我們就可以為用戶做個性化推薦了。該類算法其實就是基于標簽的召回算法。
具體推薦過程是這樣的(見下面圖9):從用戶畫像中獲取用戶的興趣標簽,基于用戶的興趣標簽從倒排索引表中獲取該標簽對應(yīng)的節(jié)目,這樣就可以從用戶關(guān)聯(lián)到節(jié)目了。其中用戶的每個興趣標簽及標簽關(guān)聯(lián)到的標的物都是有權(quán)重的。
圖9 基于倒排索引的電影推薦
該類推薦算法是非常自然直觀的,可解釋性強。同時可以較好地解決冷啟動,只要用戶有一次行為,就可以基于該行為做推薦。但是,該類算法往往新穎性不足,給用戶的推薦往往局限在一個狹小的范圍中,如果用戶不主動拓展自己的興趣空間,該方法很難為用戶推薦新穎的內(nèi)容。
(2)基于協(xié)同過濾的推薦算法
基于協(xié)同過濾的推薦算法,核心思想是很樸素的”物以類聚、人以群分“的思想。所謂物以類聚,就是計算出每個標的物最相似的標的物列表,我們就可以為用戶推薦用戶喜歡的標的物相似的標的物,這就是基于物品的協(xié)同過濾。所謂人以群分,就是我們可以將與該用戶相似的用戶喜歡過的標的物(而該用戶未曾操作過)的標的物推薦給該用戶,這就是基于用戶的協(xié)同過濾。具體思想可以參考圖10。
圖10:”物以類聚,人以群分“的樸素協(xié)同過濾推薦
協(xié)同過濾的核心是怎么計算標的物之間的相似度以及用戶之間的相似度。我們可以采用非常樸素的思想來計算相似度。
我們將用戶對標的物的評分(或者隱式反饋,如點擊等)構(gòu)建如下矩陣(見圖11),矩陣的某個元素代表某個用戶對某個標的物的評分(如果是隱式反饋,值為1),如果某個用戶對某個標的物未產(chǎn)生行為,值為0。其中行向量代表某個用戶對所有標的物的評分向量,列向量代表所有用戶對某個標的物的評分向量。有了行向量和列向量,我們就可以計算用戶與用戶之間、標的物與標的物之間的相似度了。具體來說,行向量之間的相似度就是用戶之間的相似度,列向量之間的相似度就是標的物之間的相似度。相似度的計算可以采用cos余弦相似度算法。
圖11:用戶對標的物的操作行為矩陣
在互聯(lián)網(wǎng)產(chǎn)品中一般會采用基于物品的協(xié)同過濾,因為對于互聯(lián)網(wǎng)產(chǎn)品來說,用戶相對于標的物變化更大,用戶是增長較快的,標的物增長相對較慢,利用基于物品的協(xié)同過濾算法效果更穩(wěn)定。
協(xié)同過濾算法思路非常直觀易懂,計算也相對簡單,易于分布式實現(xiàn),也不依賴于用戶及標的物的其他信息,效果也非常好,也能夠為用戶推薦新穎性內(nèi)容,所以在工業(yè)界得到非常廣泛的應(yīng)用。
(3)基于模型的推薦算法
基于模型的推薦算法種類非常多,最常用的有矩陣分解算法、分解機算法等。目前深度學(xué)習算法、強化學(xué)習算法、遷移學(xué)習算法也在推薦系統(tǒng)中得到大規(guī)模采用。
基于模型的推薦算法基于用戶歷史行為數(shù)據(jù)、標的物metadata、用戶畫像數(shù)據(jù)等構(gòu)建一個機器學(xué)習模型,利用數(shù)據(jù)訓(xùn)練模型,求解模型參數(shù)。最終利用該模型來預(yù)測用戶對未知標的物的偏好。下面圖12就是基于模型的推薦系統(tǒng)模型訓(xùn)練與預(yù)測的流程。
圖12 基于模型的推薦系統(tǒng)
基于模型的推薦算法有三類預(yù)測方式,一類是預(yù)測標的物的評分,基于評分的大小表示對標的物的偏好程度。第二類是采用概率的思路,預(yù)測用戶對標的物的喜好概率,利用概率值的大小來預(yù)測用戶對標的物的喜好程度。另外一類是采用分類的思路,將每個標的物看成一類,通過預(yù)測用戶下一個(幾個)標的物所屬的類別來做推薦。矩陣分解算法就是預(yù)測用戶對標的物的評分,logistic回歸算法就是概率預(yù)測方法,而youtube發(fā)表的深度學(xué)習推薦就是基于分類思路的算法(參見參考文獻10)。
矩陣分解算法是將用戶評分矩陣M分解為兩個矩陣U、V的乘積。U代表的用戶特征矩陣,V代表標的物特征矩陣。某個用戶對某個標的物的評分,就可以采用矩陣U對應(yīng)的行(該用戶的特征向量)與矩陣V對應(yīng)的列(該標的物的特征向量)的乘積。分解機算法是矩陣分解算法的推廣,這里不做介紹。
隨著最近幾年深度學(xué)習在圖像識別、語音識別領(lǐng)域的大獲成功。有很多研究者及工業(yè)實踐者將深度學(xué)習用于推薦系統(tǒng),也取得了非常好的成績,如youtube、Netflix、阿里、京東、網(wǎng)易、攜程等,都將深度學(xué)習部署到了實際推薦業(yè)務(wù)中,并取得了非常好的轉(zhuǎn)化效果(參考后面的參考文獻中對應(yīng)的論文)。
強化學(xué)習及遷移學(xué)習等新的方法也開始在推薦業(yè)務(wù)中嶄露頭角,有興趣的讀者可以閱讀文末對應(yīng)的參考文獻。
3. 群組個性化范式
群組個性化范式需要先將用戶分組,分組的原則是非常重要的。一般有如下兩類分組方案。
(1)基于用戶畫像圈人的推薦
先基于用戶的人口統(tǒng)計學(xué)數(shù)據(jù)或者用戶行為數(shù)據(jù)構(gòu)建用戶畫像。用戶畫像一般用于做精準的運營,通過顯示特征將一批人圈起來,對這批人做針對性的運營。在前面也做了介紹,這里不再說明。
(2)采用聚類算法的推薦
聚類是非常直觀的一種思路,將行為偏好相似的用戶聚成一類,他們有相似的興趣。常用的聚類策略有如下兩類。
a 將用戶嵌入一個高維向量空間,基于用戶的向量表示做聚類
將用戶相關(guān)特征嵌入向量空間的方式有很多,下面都是非常主流的做法。
采用基于內(nèi)容推薦的思路,可以構(gòu)建用戶的特征向量(TF-IDF,LDA,標簽等,前面已經(jīng)介紹過)。有了用戶的特征向量就可以聚類,該類所有用戶特征向量的加權(quán)平均就是該組用戶的特征向量,再利用群組特征向量與標的物特征向量的內(nèi)積來計算群組與標的物的相似度,從而為該群組做個性化推薦。
采用基于用戶的協(xié)同過濾的思路,可以構(gòu)建用戶和標的物的行為矩陣,矩陣的元素就是用戶對標的物的評分,利用該矩陣的行向量就構(gòu)建了一個衡量用戶特征的向量,基于該特征向量可以對用戶聚類。先對該組用戶所有的特征向量求均值,可以取k個最大的特征,其他特征忽略不計(設(shè)置為0),最終得到該組用戶的特征。最后就可以根據(jù)基于用戶協(xié)同過濾的思路來為該組用戶計算推薦列表了。
利用矩陣分解可以得到每個用戶的特征向量,我們可以用該組用戶特征向量的均值來作為該用戶組的特征向量。再利用用戶組的特征向量與標的物特征向量的內(nèi)積來計算群組對該標的物的偏好,所有偏好計算出來后,通過降序排列就可以為該組用戶推薦topN的標的物列表了。前面我們提到的電視貓的重排序算法就是基于該思路實現(xiàn)的。
還可以基于詞嵌入的方式,將每個用戶對標的物的所有操作(購買、觀看等)看成一個文檔集合,標的物的sid就是一個單詞,采用類似word2vec的方式可以獲得標的物的向量表示(見參考文獻9),那么用戶的向量表示就是用戶操作過的所有標的物的向量表示的均值(可以采用時間加權(quán),對最早操作的標的物給予最低的權(quán)重),這樣就獲得了每個用戶的特征向量了。該組所有用戶的平均特征向量就是該組的特征向量。這時可以采用類似上面矩陣分解的方式計算該組特征向量與標的物特征向量的內(nèi)積為該組用戶做個性化推薦。
除了上面幾種計算群組推薦的方法外,還有一種基于計數(shù)統(tǒng)計的更直觀的推薦方法。當我們對用戶進行聚類后,我們可以對這一組用戶操作過的標的物采用計數(shù)的方式統(tǒng)計每個標的物被操作的次數(shù),將同一標的物的操作次數(shù)累加,最后按照標的物計數(shù)大小按照降序排列。 將標的物列表topn推薦給該組,這個topN列表就是絕大多數(shù)人喜歡的標的物。
b 基于圖的聚類
我們可以構(gòu)建用戶關(guān)系圖,頂點是用戶,邊是用戶之間的關(guān)系,我們可以采用圖的分割技術(shù),將圖分割成若干個聯(lián)通子圖,這些子圖即是用戶的聚類。還有一種方法是將圖嵌入到高維向量空間中,這樣就可以采用kmeans聚類方法做聚類了。有了用戶的聚類就可以采用上面基于計數(shù)統(tǒng)計的直觀方法做推薦了,或者采用更復(fù)雜的方案做推薦。
那怎么構(gòu)建用戶關(guān)系圖呢?一般有兩種方法。如果是社交類產(chǎn)品,可以基于社交關(guān)系來構(gòu)建用戶關(guān)系圖,用戶之間的邊,代表好友關(guān)系。如果是非社交類產(chǎn)品,如果兩個用戶對同一標的物都有操作行為,那么這兩個用戶之間可以構(gòu)建一條邊。
群組個性化推薦的優(yōu)勢是每組給出一樣的推薦,可以減少推薦的計算和存儲。但該方案有一個最大的問題,同一組推薦一樣的標的物列表,很可能對某個用戶來說,推薦的標的物他已經(jīng)看過,但是其他用戶沒有看過,所以無法過濾掉該標的物,針對某些用戶推薦體驗不夠好。另外,同一組用戶在興趣特征上多少是有差別的,無法精細地照顧到每個用戶的興趣點。
群組個性化推薦的思路和優(yōu)點也可以用于完全個性化范式的推薦??梢詫⒂脩粝确纸M,每一個分組看成一個等價類(熟悉數(shù)學(xué)的同學(xué)應(yīng)該很容易理解,不熟悉的同學(xué)可以理解為一個興趣小組),同一組的用戶當成一個用戶,這樣就可以利用完全個性化范式中的算法思路來做推薦。Google在07年發(fā)表的一篇論文(參考文獻17)就是采用該思路的協(xié)同過濾實現(xiàn)。將用戶分組可以減少計算量,支持大規(guī)模并行計算。
4. 標的物關(guān)聯(lián)標的物范式
標的物關(guān)聯(lián)標的物就是為每個標的物推薦一組標的物。該推薦范式的核心是怎么從一個標的物關(guān)聯(lián)到一組標的物。這種關(guān)聯(lián)關(guān)系可以是相似的,也可以是基于其他維度的關(guān)聯(lián)。常用的推薦策略是相似推薦。下面給出4種常用的生成關(guān)聯(lián)推薦的策略。
(1)基于內(nèi)容的推薦
這類方法一般可以利用已知的數(shù)據(jù)和信息利用向量來描述標的物,如果每個標的物都被向量化了,那么我們就可以利用向量之間的相似度來計算標的物之間的相似度。
如果標的物是新聞等文本信息,可以采用TF-IDF將標的物映射為詞向量,我們可以通過詞向量的相似度來計算標的物之間的相似度。
即使不是文本,只要標的物具備metadata等文本信息,也可以采用該方法。很多互聯(lián)網(wǎng)產(chǎn)品是具備用戶評論功能的,這些評論文本就可以看成是標的物的描述信息。
LDA模型也非常適合文本類的推薦,通過LDA模型將文章(文檔)表示為主題及相關(guān)詞的概率,我們可以通過如下方式計算兩個文檔的相似度:先計算兩個文檔某個主題的相似度,將所有主題的相似度加權(quán)平均就可以得到兩篇文檔的相似度,而主題的相似度可以采用主題的詞向量的余弦內(nèi)積來表示。
(2)基于用戶行為的推薦
在一個成熟的推薦產(chǎn)品中,會包含很多用戶的行為,如用戶的收藏、點贊、購買、播放、瀏覽、搜索等,這些行為代表了用戶對標的物的某種偏好。我們可以基于該用戶行為來進行關(guān)聯(lián)推薦。具體的策略有如下4類。
a 比如常用的矩陣分解算法,可以將用戶的行為矩陣分解為用戶特征矩陣和物品特征矩陣,物品特征矩陣可以看成是衡量物品的一個向量,利用該向量我們就可以計算兩個標的物之間的相似度了。
b 采用嵌入的思路做推薦。用戶的所有行為可以看成是一個文檔,每個標的物可以看成是一個詞,我們可以采用類似word2vec的思路,最終訓(xùn)練出每個詞(即標的物)的向量表示,利用該向量表示可以計算標的物之間的相似度。
c 我們可以將用戶對標的物的所有操作行為投射到一個二維表(或者矩陣)上,行是用戶,列是標的物,表中的元素就是用戶對該標的物的操作(評分或者點擊等隱式行為),通過這種方式我們就構(gòu)建了一個二維表。這個二維表的列向量就可以用來表示標的物。這樣我們就可以采用向量相似來計算標的物之間的相似度了。
d 采用購物籃的思路做推薦,這種思路非常適合圖書、電商等的推薦。 經(jīng)常一起購買(或者瀏覽)的標的物形成一個列表(一個購物籃),將過去一段時間所有的購物籃收集起來。 任何一個標的物,我們可以找到跟它出現(xiàn)在同一個購物籃的標的物及次數(shù),統(tǒng)計完該次數(shù)后,我們就可以按照該次數(shù)降序排列,那么這個列表就可以當做標的物的關(guān)聯(lián)推薦了。該推薦思路非常直觀易懂,可解釋性強。下面圖13就是亞馬遜網(wǎng)站上采用該思路的兩類關(guān)聯(lián)推薦。
圖13 基于”購物籃“思路的關(guān)聯(lián)推薦
(3) 基于標簽推薦
如果標的物是包含標簽的,比如視頻推薦。我們就可以利用標簽來構(gòu)建向量,每個標簽代表一個維度??倶撕灥膫€數(shù)就是向量的維度,這樣每個標的物就可以利用標簽的向量來表示了。一般標的物的標簽個數(shù)遠遠小于總標簽的個數(shù),所以這個向量是稀疏向量。這樣我們就可以基于稀疏向量的表示來計算標的物之間的相似度了。
(4)基于標的物聚類的推薦
我們可以將標的物按照某個維度聚類,同一類具備某些相似性,那么我們在推薦時,就可以將同一類的其他標的物作為關(guān)聯(lián)推薦。我們需要解決的問題是,某些類可能數(shù)量很小,不夠做推薦,這時可以采用一些策略來補充(如補充熱門推薦等)不足的數(shù)量。
5. 笛卡爾積范式
笛卡爾積范式的推薦算法一般可以先采用標的物關(guān)聯(lián)標的物范式計算出待推薦的標的物列表。再根據(jù)用戶的興趣來對該推薦列表做重排(調(diào)整標的物列表的順序)、增補(增加用戶的個性化興趣)、刪除(比如過濾掉用戶看過的)等。由于笛卡爾積范式的推薦算法在真實業(yè)務(wù)場景中使用不多,這里不再詳細講解。
到目前為止,我們講完了常用的召回策略。召回除了根據(jù)上面的一些算法策略外,還跟具體業(yè)務(wù)及產(chǎn)品形態(tài)有關(guān),可以基于更多的其他維度(如時間、地點、用戶屬性、收入、職業(yè)等)來做召回。
智能電視上的推薦,早上、白天、晚上推薦的不一樣,節(jié)假日和平常推薦的也不一樣。上班族早上需要上班,時間不充足,可能推薦短視頻或者新聞更加合適,白天一般是老人在家,可以推薦戲曲、抗戰(zhàn)類節(jié)目等,晚上主人回家又會推薦不一樣的內(nèi)容。
基于地點的召回,要求在不同的地方推薦不一樣的標的物,典型的應(yīng)用有美團外賣,你在不同的地方,給你推薦的是你所在地附近幾公里范圍內(nèi)的餐廳。
三、排序算法概述
推薦系統(tǒng)排序模塊將召回模塊產(chǎn)生的標的物列表(一般幾百個標的物),通過排序算法做重排,更好的反應(yīng)用戶的點擊偏好,通過排序優(yōu)化用戶的點擊行為,將用戶更可能點擊的標的物(一般幾十個)取出來推薦給用戶,最終提升用戶體驗。
排序模塊會用到很多特征,基于這些特征構(gòu)建排序模型,排序特征在排序的效果中起到非常關(guān)鍵的作用,常用的特征可以抽象為如下5大類:
用戶側(cè)的特征,如用戶的性別、年齡、地域、購買力、家庭結(jié)構(gòu)等。
商品側(cè)的特征,如商品描述信息、價格、標簽等。
上下文及場景特征,如位置、頁面、是否是周末節(jié)假日等。
交叉特征,如用戶側(cè)特征與商品側(cè)特征的交叉等。
用戶的行為特征,如用戶點擊、收藏、購買、觀看等。
排序框架需要充分利用上述五大類特征,以便更好的預(yù)測用戶的點擊行為。排序?qū)W習是機器學(xué)習中一個重要的研究領(lǐng)域,廣泛應(yīng)用于信息檢索、搜索引擎、推薦系統(tǒng)、計算廣告等的排序任務(wù)中,有興趣的讀者可以參考微軟亞洲研究院劉鐵巖博士的專著《Learning to Rank for Information Retrieval》。常用的排序算法框架有pointwise、pairwise、listwise三類,見圖14。
圖14 三類排序?qū)W習算法框架
上圖中x1,x2,... 代表的是訓(xùn)練樣本1,2,... 的特征,y1,y2,s1,... 等是訓(xùn)練集的label(目標函數(shù)值)。pointwise學(xué)習單個樣本,如果最終預(yù)測目標是一個實數(shù)值,就是回歸問題,如果目標是概率預(yù)測,就是一個分類問題,例如CTR預(yù)估。pairwise和listwise分別學(xué)習一對有序?qū)鸵粋€有序序列的樣本特征,考慮得更加精細。在推薦系統(tǒng)中常用pointwise方法來做排序,它更直觀,易于理解,也更簡單。
常用的排序?qū)W習算法有l(wèi)ogistic回歸、GBDT、Wide & Deep等,這里對這些算法的實現(xiàn)原理做一個簡單描述。
1. logistic回歸模型
logistic回歸是比較簡單的線性模型,通過學(xué)習用戶點擊行為來構(gòu)建CTR預(yù)估。利用logistic回歸構(gòu)建推薦算法模型,具體模型如下面公式。
其中,p是用戶喜歡某個標的物的概率;
?是權(quán)重,是需要學(xué)習的模型參數(shù);?
? 是特征i的值,特征如上面所述,有5大類可用特征。
我們可以通過上述公式計算待推薦標的物的p值。最終我們可以按照p值的大小降序排列來對召回的標的物列表做排序。
在工業(yè)界,為了更好地將該模型應(yīng)用到真實業(yè)務(wù)場景中,很多公司對logistic回歸模型做了推廣。比如用到在線實時推薦場景中做排序,有Google在2013年推廣的FTRL(見參考文獻14),以及阿里推廣的分片線性模型(見參考文獻13)。
2. GBDT模型
GBDT(Gradient Boosting Decision Tree)是一種基于迭代思路構(gòu)造的決策樹算法(可以參考文獻15),該算法在實際問題中將生成多棵決策樹,并將所有樹的結(jié)果進行匯總來得到最終答案,該算法將決策樹與集成思想進行了有效的結(jié)合,通過將弱學(xué)習器提升為強學(xué)習器的集成方法來提高預(yù)測精度。GBDT是一類泛化能力較強的學(xué)習算法。
2014年Facebook發(fā)表了一篇介紹將GBDT+LR(Logistic Regression)模型用于其廣告CTR預(yù)估的論文(參考文獻16),開啟了利用GBDT模型應(yīng)用于搜索、推薦、廣告業(yè)務(wù)的先河。GBDT作為一種常用的樹模型,可天然地對原始特征進行特征劃分、特征組合和特征選擇,并得到高階特征屬性和非線性映射。從而可將GBDT模型抽象為一個特征處理器,通過GBDT分析原始特征獲取到更利于LR分析的新特征,這也正是GBDT+LR模型的核心思想——利用GBDT構(gòu)造的新特征來訓(xùn)練LR模型。
3. Wide & deep模型
Wide&deep模型最早被Google提出來,并用于Android手機應(yīng)用商店上APP的推薦排序。目前該算法在國內(nèi)很多互聯(lián)網(wǎng)企業(yè)得到大規(guī)模的采用,有比較好的效果。該模型將傳統(tǒng)模型和深度學(xué)習模型相結(jié)合。wide部分(傳統(tǒng)模型,如logistic回歸)起記憶(memorization)的作用,即從歷史數(shù)據(jù)中發(fā)現(xiàn)item(推薦內(nèi)容)或者特征之間的相關(guān)性,deep部分(深度學(xué)習模型)起泛化(generalization)的作用,即相關(guān)性的傳遞,發(fā)現(xiàn)在歷史數(shù)據(jù)中很少或者沒有出現(xiàn)的新的特征組合,尋找用戶的新偏好。通過將這兩個模型結(jié)合起來可以更好地在用戶的歷史興趣和探索新的興趣點之間做到平衡。感興趣的讀者可以閱讀參考文獻12。
四、推薦算法落地需要關(guān)注的幾個問題
前面幾節(jié)對推薦系統(tǒng)算法和產(chǎn)品做了初步描述,相信大家對常用算法實現(xiàn)思路、怎么用于真實產(chǎn)品中有了比較直觀的認識。在本節(jié)作者對算法落地中幾個重要問題加以說明,以便你可以更好地將推薦算法落地到真實業(yè)務(wù)場景中。
1. 推薦算法工程落地是否一定需要排序模塊
工業(yè)上的推薦算法一般分為召回和排序模塊,召回的作用是從全量標的物集合(幾萬甚至上億)中將用戶可能喜歡的標的物取出來(幾百個),排序階段將召回的標的物集按照用戶點擊的可能性再做一次排序。但是排序階段不是必須的,特別是對于標的物池不大的產(chǎn)品及團隊資源較少的情形,沒必要一開始就開發(fā)出排序框架。召回算法一般也會對標的物做排序(如果是評分預(yù)測模型,如矩陣分解,可以按照評分大小排序,如果是概率模型,可以按照對標的物的偏好概率大小排序)。缺失了排序模塊的推薦系統(tǒng)可能精準度沒有那么高,但是工程實現(xiàn)上相對更加簡單,可以快速落地上線。特別對于剛做推薦系統(tǒng)的團隊,可以讓系統(tǒng)快速上線,后面再逐步迭代,補全缺失模塊。
2. 推薦算法服務(wù)于用戶的兩種形式
推薦算法計算出的推薦結(jié)果可以直接插入數(shù)據(jù)庫(如Redis等),直接為用戶提供服務(wù),另外一種方式是將核心特征計算好存儲下來,當用戶請求推薦業(yè)務(wù)時,推薦web服務(wù)通過簡單計算將特征轉(zhuǎn)化為最終給用戶的推薦結(jié)果返回給用戶。這兩種方式一個是事先計算好,拿來就用,另外一種是準備好核心數(shù)據(jù),在請求時實時計算最終結(jié)果。
我拿餐廳服務(wù)外賣來類比說明,第一種方式是將餐廳有的菜先做好很多份,如果有外賣單過來,直接將做好的送出。第二種是將所有的配菜都準備好,接到外賣單立馬將配菜加上調(diào)料炒熟再送出去,只要配菜準備足夠好,炒菜的時間不太長并且可控,也是可以很好的服務(wù)用戶的。第一種方式是事先做好的,無法滿足用戶個性化需求,同時如果做好了沒人點的話就浪費了,第二種可以更好滿足用戶個性化需求,比如用戶說不要香菜多放辣椒就可以在現(xiàn)做的時候滿足。
第二種方式對整個推薦系統(tǒng)要求更高,服務(wù)更加精細,但是第一種方案更加簡單,不過也需要更多的存儲資源(將所有用戶的推薦結(jié)果事先存下來)。在推薦系統(tǒng)構(gòu)建的初級階段建議采用方案一。
某些推薦業(yè)務(wù)用方案一是不可行的,比如上面的笛卡爾積范式的推薦系統(tǒng),因為用戶數(shù)乘以標的物數(shù)是一個巨大的天文數(shù)字,公司不可能有這么多的資源將每個用戶關(guān)聯(lián)的每個標的物的推薦結(jié)果事先計算好存儲下來。
3. 推薦系統(tǒng)評估
推薦系統(tǒng)是服務(wù)于公司商業(yè)目標的(盈利目標,提升用戶體驗、使用時長、DAU等,最終也是為了盈利),所以推薦系統(tǒng)落地到真實業(yè)務(wù)場景中一定要定義推薦系統(tǒng)的優(yōu)化目標,只有目標具體而清晰,并可量化,才能更好的通過不斷迭代優(yōu)化推薦效果。大家可以參考《推薦系統(tǒng)的商業(yè)價值》(點擊藍字可回顧)這篇文章,了解怎么定義推薦系統(tǒng)的商業(yè)指標。
五、總結(jié)
本文對工業(yè)級推薦系統(tǒng)的產(chǎn)品形態(tài)、推薦算法依賴的數(shù)據(jù)、算法業(yè)務(wù)流程、具體召回和排序算法做了概述,希望讀者對推薦產(chǎn)品的落地形態(tài)有初步了解,同時知道每類推薦范式有哪些可用的算法,以及相關(guān)算法的實現(xiàn)思路。在后續(xù)文章中,作者會詳細講解主流核心算法的實現(xiàn)細節(jié),歡迎大家持續(xù)關(guān)注!
-
模塊
+關(guān)注
關(guān)注
7文章
2628瀏覽量
47216 -
機器學(xué)習
+關(guān)注
關(guān)注
66文章
8323瀏覽量
132177 -
推薦算法
+關(guān)注
關(guān)注
0文章
47瀏覽量
9980
原文標題:推薦系統(tǒng)產(chǎn)品與算法概述 | 深度
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論