推薦系統(tǒng)[二]:召回算法超詳細(xì)講解[召回模型演化過程、召回模型主流常見算法
1.前言:召回排序流程策略算法簡介

推薦可分為以下四個流程,分別是召回、粗排、精排以及重排:
召回是源頭,在某種意義上決定著整個推薦的天花板;
粗排是初篩,一般不會上復(fù)雜模型;
精排是整個推薦環(huán)節(jié)的重中之重,在特征和模型上都會做的比較復(fù)雜;
重排,一般是做打散或滿足業(yè)務(wù)運營的特定強插需求,同樣不會使用復(fù)雜模型;
召回層:召回解決的是從海量候選item中召回千級別的item問題
統(tǒng)計類,熱度,LBS;
協(xié)同過濾類,UserCF、ItemCF;
U2T2I,如基于user tag召回;
I2I類,如Embedding(Word2Vec、FastText),GraphEmbedding(Node2Vec、DeepWalk、EGES);
U2I類,如DSSM、YouTube DNN、Sentence Bert;

模型類:模型類的模式是將用戶和item分別映射到一個向量空間,然后用向量召回,這類有itemcf,usercf,embedding(word2vec),Graph embedding(node2vec等),DNN(如DSSM雙塔召回,YouTubeDNN等),RNN(預(yù)測下一個點擊的item得到用戶emb和item emb);向量檢索可以用Annoy(基于LSH),F(xiàn)aiss(基于矢量量化)。此外還見過用邏輯回歸搞個預(yù)估模型,把權(quán)重大的交叉特征拿出來構(gòu)建索引做召回
排序策略,learning to rank 流程三大模式(pointwise、pairwise、listwise),主要是特征工程和CTR模型預(yù)估;
CTR預(yù)估:lr,gbdt,fm及其變種(fm是一個工程團隊不太強又對算法精度有一定要求時比較好的選擇),widedeep,deepfm,NCF各種交叉,DIN,BERT,RNN
多目標(biāo):MOE,MMOE,MTL(多任務(wù)學(xué)習(xí))
打分公式融合: 隨機搜索,CEM(性價比比較高的方法),在線貝葉斯優(yōu)化(高斯過程),帶模型CEM,強化學(xué)習(xí)等

常見的特征挖掘(user、item、context,以及相互交叉);
粗排層:本質(zhì)上跟精排類似,只是特征和模型復(fù)雜度上會精簡,此外也有將精排模型通過蒸餾得到簡化版模型來做粗排
精排層:精排解決的是從千級別item到幾十這個級別的問題
重排層:重排層解決的是展示列表總體最優(yōu),模型有 MMR,DPP,RNN系列(參考阿里的globalrerank系列)
展示層:
推薦理由:統(tǒng)計規(guī)則、行為規(guī)則、抽取式(一般從評論和內(nèi)容中抽?。?、生成式;排序可以用湯普森采樣(簡單有效),融合到精排模型排等等
首圖優(yōu)選:CNN抽特征,湯普森采樣
探索與利用:隨機策略(簡單有效),湯普森采樣,bandit,強化學(xué)習(xí)(Q-Learning、DQN)等
產(chǎn)品層:交互式推薦、分tab、多種類型物料融合
2.召回算法簡介
召回區(qū)分主路和旁路,主路的作用是個性化+向上管理,而旁路的作用是查缺補漏 推薦系統(tǒng)的前幾個操作可能就決定了整個系統(tǒng)的走向,在初期一定要三思而后行 做自媒體,打廣告,漏斗的入口有多大很重要。

召回這里稍微有些復(fù)雜,因為召回是多路的。首先我們要解釋主路和旁路的差別,主路的意義和粗排類似,可以看作是一個入口更大,但模型更加簡單的粗排。主路的意義是為粗排分擔(dān)壓力。但是旁路卻不是這樣的,旁路出現(xiàn)的時機往往是當(dāng)主路存在某種機制上的問題,而單靠現(xiàn)在的這個模型很難解決的時候。舉個例子,主路召回學(xué)的不錯,但是它可能由于某種原因,特別討厭影視劇片段這一類內(nèi)容,導(dǎo)致了這類視頻無法上升到粗排上。那這樣的話整個系統(tǒng)推不出影視劇片段就是一個問題。從多路召回的角度來講,我們可能需要單加一路專門召回影視劇的,并且規(guī)定:主路召回只能出3000個,這一路新加的固定出500個,兩邊合并起來進入到粗排中去。這個栗子,是出現(xiàn)旁路的一個動機。
2.1 召回路徑介紹
推薦系統(tǒng)中的i2i、u2i、u2i2i、u2u2i、u2tag2i,都是指推薦系統(tǒng)的召回路徑。
第一種召回,是非個性化的。比如對于新用戶,我們要確保用最高質(zhì)量的視頻把他們留住,那么我們可以劃一個“精品池”出來,根據(jù)他們的某種熱度排序,作為一路召回。做法就是新用戶的每次請求我們都把這些精品池的內(nèi)容當(dāng)做結(jié)果送給粗排。這樣的召回做起來最容易,用sql就可以搞定。
第二種召回,是i2i,i指的是item,嚴(yán)格意義上應(yīng)該叫u2i2i。指的是用用戶的歷史item,來找相似的item。比如說我們把用戶過去點過贊的視頻拿出來,去找畫面上,BGM上,或者用戶行為結(jié)構(gòu)上相似的視頻。等于說我們就認(rèn)為用戶還會喜歡看同樣類型的視頻。這種召回,既可以從內(nèi)容上建立相似關(guān)系(利用深度學(xué)習(xí)),也可以用現(xiàn)在比較火的graph來構(gòu)建關(guān)系。這種召回負(fù)擔(dān)也比較小,圖像上誰和誰相似完全可以離線計算,甚至都不會隨著時間變化。
第三種召回是u2i,即純粹從user和item的關(guān)系出發(fā)。我們所說的雙塔就是一個典型的u2i。在用戶請求過來的時候,計算出user的embedding,然后去一個實現(xiàn)存好的item embedding的空間,尋找最相似的一批拿出來。由于要實時計算user特征,它的負(fù)擔(dān)要大于前面兩者,但這種召回個性化程度最高,實踐中效果也是非常好的。

通過上圖理解什么是召回路徑:
u、i、tag是指圖中的節(jié)點
2是指圖中的線(關(guān)系)
i2i:指從一個物品到達另外一個物品,item 到 item
應(yīng)用:頭條,在下方列出相似的、相關(guān)的文章;
算法:
內(nèi)容相似,eg:文章的相似,取標(biāo)題的關(guān)鍵字,內(nèi)容相似
協(xié)同過濾
關(guān)聯(lián)規(guī)則挖掘等
兩個物品被同時看的可能性很大,當(dāng)一個物品被查看,就給他推薦另一個物品
u2i:指從一個用戶到達一個物品,user 到item
一般指用戶的直接行為,比如播放、點擊、購買等;
用戶查看了一個物品,就會再次給它推薦這個物品
結(jié)合i2i一起使用,就是用戶查看以合物品,就會給他推薦另一個相似的物品,就是u2i2i路徑;
u2i2i:從一個用戶,通過一個物品,到達另一個物品
用戶查看了一個耳機(u2i),找出和這個耳機相似或者相關(guān)的產(chǎn)品(i2i)并推薦給用戶
對路徑的使用,已經(jīng)從一條線變成兩條線
方法:就是把兩種算法結(jié)合起來,先得到u2i的數(shù)據(jù),再利用i2i的數(shù)據(jù)進行擴展,就可以從第一個節(jié)點,越過一個節(jié)點,到達第三個節(jié)點,實現(xiàn)推薦
中間的橋梁是item
u2u2i:從一個用戶,到達另一個用戶,到達一個物品
先計算u2u:兩種方法
一是:取用戶的性別、年齡、職業(yè)等人工屬性的信息,計算相似性,得到u2u;
一是:從行為數(shù)據(jù)中進行挖掘,比如看的內(nèi)容和視頻大部分很相似,就可以看作一類人;
也可以使用聚類的方法進行u2u計算
u2u一般用在社交里,比如微博、Facebook,推薦感興趣的人
userB和UserC相似,如果userB查看了某個商品,就把這個商品推薦給userC;
中間的橋梁是user
u2tag2i:中間節(jié)點是Tag標(biāo)簽,而不是 u 或者 i
京東,豆瓣,物品的標(biāo)簽非常豐富、非常詳細(xì);比如統(tǒng)計一個用戶歷史查看過的書籍,就可以計算標(biāo)簽偏好的向量:標(biāo)簽+喜歡的強度。
用戶就達到了tag的節(jié)點,而商品本身帶有標(biāo)簽,這就可以互通,進行推薦
先算出用戶的tag偏好,然后匹配item列表
這種方法的泛化性能比較好(推薦的內(nèi)容不那么狹窄,比如喜歡科幻,那么會推薦科幻的所有內(nèi)容)
今日頭條就大量使用標(biāo)簽推薦
基于圖的算法:u22i*
起始于U,結(jié)束于I,中間跨越很多的U、很多的I,可以在圖中不停的游走
例如:PersonalRank,不限制一條還是兩條線,在圖中到處的游走,游走帶著概率,可以達到很多的item;但是相比前面一條、兩條邊的路徑,性能不是很好
2.2 多路召回融合排序
2.2.1 多路召回
推薦服務(wù)一般有多個環(huán)節(jié)(召回、粗排序、精排序),一般會使用多個召回策略,互相彌補不足,效果更好。比如說:
實時召回- U2I2I,
幾秒之內(nèi)根據(jù)行為更新推薦列表。
用U2I得到你實時的行為對象列表,再根據(jù)I2I得到可能喜歡的其他的物品
這個是實時召回,剩下3個是提前算好的
基于內(nèi)容 - U2Tag2I
先算好用戶的偏好tag,然后對tag計算相似度,獲取可能感興趣的item
矩陣分解 - U2I
先算好User和Item的tag矩陣,然后叉乘,給每個user推薦item
提前存儲好進行推薦
聚類推薦 - U2U2I
根據(jù)用戶信息對用戶進行聚類,然后找到最相似的user,推薦最相似user喜歡的物品;或者找到聚類中大家喜歡的物品,進行推薦
寫程序時,每個策略之間毫不相關(guān),所以:
1、一般可以編寫并發(fā)多線程同時執(zhí)行
2、每一種策略輸出結(jié)果,都有一個順序,但最后要的結(jié)果只有一個列表,這就需要融合排序
2.2.2 融合排序
多種召回策略的內(nèi)容,取TOPN合并成一個新的列表。這個新的列表,可以直接返回給前端,進行展示;也可以發(fā)給精排,進行排序。
精排模型非常耗時,所以召回的內(nèi)容,會經(jīng)過粗排之后,把少量的數(shù)據(jù)給精排進行排序
幾種多路召回結(jié)果融合的方法
舉個例子:幾種召回策略返回的列表(Item-id,權(quán)重)分別為: |召回策略 |返回列表 | | | |--|--|--|--| | 召回策略X | A:0.9 |B:0.8 | C:0.7 | | 召回策略Y |B:0.6 | C:0.5 |D:0.4 | | 召回策略Z |C:0.3 |D:0.2 | E:0.1|
融合策略:?1、按順序展示
比如說實時 > 購買數(shù)據(jù)召回 > 播放數(shù)據(jù)召回,則直接展示A、B、C、D、E
2、平均法
分母為召回策略個數(shù),分子為權(quán)重加和
C為(0.7+0.5+0.3)/3,B為(0.8+0.6)/3
3、加權(quán)平均
比如三種策略自己指定權(quán)重為0.4、0.3、0.3,則B的權(quán)重為(0.40.8 + 0.60.3 + 0*0.2)/ (0.4+0.3+0.2),這個方法有個問題就是,每個策略的權(quán)重是自己設(shè)置的,并不準(zhǔn)確,所以,有動態(tài)加權(quán)法
4、動態(tài)加權(quán)法
計算XYZ三種召回策略的CTR,作為每天更新的動態(tài)加權(quán)
只考慮了點擊率,并不全面
每種召回源CTR計算方法:
展現(xiàn)日志-帶召回源:X,Y,Z,X,Y,Z
點擊日志-帶召回源:點擊X
則每種召回的CTR = 點擊數(shù)/展現(xiàn)數(shù)
5、機器學(xué)習(xí)權(quán)重法
邏輯回歸LR分類模型預(yù)先離線算好各種召回的權(quán)重,然后做加權(quán)召回
考慮更多的特征以及環(huán)境因素,會更準(zhǔn)確
以上融合排序的方法,成本逐漸增大,效果依次變好,按照成本進行選擇
3.推薦場景中召回模型的演化過程
3.1 傳統(tǒng)方法:基于協(xié)同過濾
更多內(nèi)容參考:https://blog.csdn.net/sinat_39620217/article/details/129119611
3.2 單 Embedding 向量召回
3.2.1?Youtube DNN 召回
3.2.2 雙塔模型召回
3.2 多 Embedding 向量召回-用戶多興趣表達
3.2.1?Multi-Interest Network with Dynamic Routing 模型
3.3 Graph Embedding
3.3.1 阿里 Graph Embedding with Side information
傳統(tǒng)的 graph embedding 過程如下圖:
3.3.2 GraphSAGE:Inductive representation learning on large graphs
3.4 結(jié)合用戶長期和短期興趣建模
### 3.4.2 Next Item Recommendation with Self-Attention
更多內(nèi)容參考:https://blog.csdn.net/sinat_39620217/article/details/129119611
3.5 TDM 深度樹匹配召回
TDM 是為大規(guī)模推薦系統(tǒng)設(shè)計的、能夠承載任意先進模型 ( 也就是可以通過任何深度學(xué)習(xí)推薦模型來訓(xùn)練樹 ) 來高效檢索用戶興趣的推薦算法解決方案。TDM 基于樹結(jié)構(gòu),提出了一套對用戶興趣度量進行層次化建模與檢索的方法論,使得系統(tǒng)能直接利高級深度學(xué)習(xí)模型在全庫范圍內(nèi)檢索用戶興趣。其基本原理是使用樹結(jié)構(gòu)對全庫 item 進行索引,然后訓(xùn)練深度模型以支持樹上的逐層檢索,從而將大規(guī)模推薦中全庫檢索的復(fù)雜度由 O(n) ( n 為所有 item 的量級 ) 下降至 O(log n)。
3.5.1 樹結(jié)構(gòu)
### 3.5.2 怎么基于樹來實現(xiàn)高效的檢索?
3.5.3 興趣建模
4.當(dāng)前業(yè)界的主流召回算法綜述
4.1 Youtube DNN

當(dāng)前的主流方法的通用思路就是對于use和item的embedding的學(xué)習(xí), 這也被稱為表示學(xué)習(xí); YoutbeDNN是經(jīng)典的將深度學(xué)習(xí)模型引入推薦系統(tǒng)中,可以看到網(wǎng)絡(luò)模型并不復(fù)雜,但是文中有很多工程上的技巧,比如說 word2vec對 video 和 search token做embedding后做為video初始embedding,對模型訓(xùn)練中訓(xùn)練時間和采集日志時間之間“position bias”的處理,以及對大規(guī)模多分類問題的負(fù)采樣softmax。
4.2 DeepMF
4.3 DSSM
更多內(nèi)容參考:https://blog.csdn.net/sinat_39620217/article/details/129119611
4.4.Item2vec
4.5.Airbnb Embedding
4.6.DeepWalk

4.7 Node2Vec
4.8.EGES
4.9.LINE
更多內(nèi)容參考:https://blog.csdn.net/sinat_39620217/article/details/129119611
4.10.SDNE
4.11.GraphSAGE
4.12 MIND
4.13.SDM
4.14.DeepFM
4.15.NCF
4.16.TDM
更多內(nèi)容參考:https://blog.csdn.net/sinat_39620217/article/details/129119611
參考推薦:
關(guān)于圖相關(guān)學(xué)習(xí)推薦參考
更多內(nèi)容參考:https://blog.csdn.net/sinat_39620217/article/details/129119611
圖學(xué)習(xí)項目合集&數(shù)據(jù)集分享&技術(shù)歸納業(yè)務(wù)落地技巧[系列十]
更多內(nèi)容參考:https://blog.csdn.net/sinat_39620217/article/details/129119611