推薦系統(tǒng)是一個(gè)非常大的框架,有非常多的模塊在里面,完整的一套推薦系統(tǒng)體系里,不僅會(huì)涉及到推薦算法工程師、后臺(tái)開(kāi)發(fā)工程師、數(shù)據(jù)挖掘/分析工程師、NLP/CV工程師還有前端、客戶端甚至產(chǎn)品、運(yùn)營(yíng)等支持。我們作為算法工程師,需要掌握的技術(shù)棧主要就是在算法和工程兩個(gè)區(qū)域了,所以這篇文章將會(huì)分別從算法和工程兩個(gè)角度出發(fā),結(jié)合兩者分析當(dāng)前主流的一些推薦算法技術(shù)棧。
首先從推薦系統(tǒng)架構(gòu)出發(fā),一種分法是將整個(gè)推薦系統(tǒng)架構(gòu)分為召回、粗排、精排、重排、混排等模塊。它的分解方法是從一份數(shù)據(jù)如何從生產(chǎn)出來(lái),到線上服務(wù)完整順序的一個(gè)流程。因?yàn)樵诓煌h(huán)節(jié),我們一般會(huì)考慮不同的算法,所以這種角度出發(fā)我們來(lái)研究推薦系統(tǒng)主流的算法技術(shù)棧。

這些模塊的功能主要是:
- 召回:從推薦池中選取幾千上萬(wàn)的item,送給后續(xù)的排序模塊。由于召回面對(duì)的候選集十分大,且一般需要在線輸出,故召回模塊必須輕量快速低延遲。由于后續(xù)還有排序模塊作為保障,召回不需要十分準(zhǔn)確,但不可遺漏(特別是搜索系統(tǒng)中的召回模塊)。目前基本上采用多路召回解決范式,分為非個(gè)性化召回和個(gè)性化召回。個(gè)性化召回又有content-based、behavior-based、feature-based等多種方式。
- 粗排:粗拍的原因是有時(shí)候召回的結(jié)果還是太多,精排層速度還是跟不上,所以加入粗排。粗排可以理解為精排前的一輪過(guò)濾機(jī)制,減輕精排模塊的壓力。粗排介于召回和精排之間,要同時(shí)兼顧精準(zhǔn)性和低延遲。一般模型也不能過(guò)于復(fù)雜
- 精排:獲取粗排模塊的結(jié)果,對(duì)候選集進(jìn)行打分和排序。精排需要在最大時(shí)延允許的情況下,保證打分的精準(zhǔn)性,是整個(gè)系統(tǒng)中至關(guān)重要的一個(gè)模塊,也是最復(fù)雜,研究最多的一個(gè)模塊。精排系統(tǒng)構(gòu)建一般需要涉及樣本、特征、模型三部分。
- 重排:獲取精排的排序結(jié)果,基于運(yùn)營(yíng)策略、多樣性、context上下文等,重新進(jìn)行一個(gè)微調(diào)。比如三八節(jié)對(duì)美妝類(lèi)目商品提權(quán),類(lèi)目打散、同圖打散、同賣(mài)家打散等保證用戶體驗(yàn)措施。重排中規(guī)則比較多,但目前也有不少基于模型來(lái)提升重排效果的方案。
- 混排:多個(gè)業(yè)務(wù)線都想在Feeds流中獲取曝光,則需要對(duì)它們的結(jié)果進(jìn)行混排。比如推薦流中插入廣告、視頻流中插入圖文和banner等??梢曰谝?guī)則策略(如廣告定坑)和強(qiáng)化學(xué)習(xí)來(lái)實(shí)現(xiàn)。
畫(huà)像層
首先是推薦系統(tǒng)的物料庫(kù),這部分內(nèi)容里,算法主要體現(xiàn)在如何繪制一個(gè)用戶畫(huà)像和商品畫(huà)像。這個(gè)環(huán)節(jié)是推薦系統(tǒng)架構(gòu)的基礎(chǔ)設(shè)施,一般可能新用戶/商品進(jìn)來(lái),或者每周定期會(huì)重新一次整個(gè)物料庫(kù),計(jì)算其中信息,為用戶打上標(biāo)簽,計(jì)算統(tǒng)計(jì)信息,為商品做內(nèi)容理解等內(nèi)容。其中用戶畫(huà)像是大家比較容易理解的,比如用戶年齡、愛(ài)好通常APP會(huì)通過(guò)注冊(cè)界面收集這些信息。而商品畫(huà)像形式就非常多了,比如淘寶主要推薦商品,抖音主要是短視頻,所以大家的物料形式比較多,內(nèi)容、質(zhì)量差異也比較大,所以內(nèi)容畫(huà)像各家的做法也不同,當(dāng)前比較主流的都會(huì)涉及到一個(gè)多模態(tài)信息內(nèi)容理解。下面我貼了一個(gè)微信看一看的內(nèi)容畫(huà)像框架,然后我們來(lái)介紹下在這一塊主要使用的算法技術(shù)。

一般推薦系統(tǒng)會(huì)加入多模態(tài)的一個(gè)內(nèi)容理解。我們用短視頻形式舉個(gè)例子,假設(shè)用戶拍攝了一條短視頻,上傳到了平臺(tái),從推薦角度看,首先我們有的信息是這條短視頻的作者、長(zhǎng)度、作者為它選擇的標(biāo)簽、時(shí)間戳這些信息。但是這對(duì)于推薦來(lái)說(shuō)是遠(yuǎn)遠(yuǎn)不夠的,首先作者打上的標(biāo)簽不一定準(zhǔn)確反映作品,原因可能是我們模型的語(yǔ)義空間可能和作者/現(xiàn)實(shí)世界不一致。其次我們需要更多維度的特征,比如有些用戶喜歡看小姐姐跳舞,那我希望能夠判斷一條視頻中是否有小姐姐,這就涉及到封面圖的基于CV的內(nèi)容抽取或者整個(gè)視頻的抽??;再比如作品的標(biāo)題一般能夠反映主題信息,除了很多平臺(tái)常用的用“#”加上一個(gè)標(biāo)簽以外,我們也希望能夠通過(guò)標(biāo)題抽取出基于NLP的信息。還有更多的維度可以考慮:封面圖多維度的多媒體特征體系,包括人臉識(shí)別,人臉embedding,標(biāo)簽,一二級(jí)分類(lèi),視頻embedding表示,水印,OCR識(shí)別,清晰度,低俗色情,敏感信息等多種維度。
這里面涉及的任務(wù)主要是CV的目標(biāo)檢測(cè)、語(yǔ)義分割等任務(wù),NLP中的情感分析、摘要抽取、自然語(yǔ)言理解等任務(wù)。但是這部分算法一般團(tuán)隊(duì)都會(huì)有專(zhuān)門(mén)負(fù)責(zé)的組,不需要推薦算法工程師來(lái)負(fù)責(zé),他們會(huì)有多模態(tài)的語(yǔ)意標(biāo)簽輸出,主要形式是各種粒度的Embedding。我們只需要在我們的推薦模型中引入這些預(yù)訓(xùn)練的Embedding。
文本理解
這應(yīng)該是用的最多的模態(tài)信息,包括item的標(biāo)題、正文、OCR、評(píng)論等數(shù)據(jù)。這里面也可以產(chǎn)生不同粒度的信息,比如文本分類(lèi),把整個(gè)item做一個(gè)粗粒度的分類(lèi)。
這里的典型算法有:RNN、TextCNN、FastText、Bert等;
關(guān)鍵詞標(biāo)簽
相比文本分類(lèi),關(guān)鍵詞是更細(xì)粒度的信息,往往是一個(gè)mutil-hot的形式,它會(huì)對(duì)item在我們的標(biāo)簽庫(kù)的選取最合適的關(guān)鍵詞或者標(biāo)簽。
這里典型的算法有:TF-IDF、Bert、LSTM-CRF等。
內(nèi)容理解
在很多場(chǎng)景下,推薦的主題都是視頻或者圖片,遠(yuǎn)遠(yuǎn)多于僅推薦文本的情況,這里視頻/圖片item中的內(nèi)容中除了文本的內(nèi)容以外,更多的信息其實(shí)來(lái)源于視頻/圖片內(nèi)容本身, 因此需要嘗試從多種模態(tài)中抽取更豐富的信息。主要包括分類(lèi)信息、封面圖OCR的信息、視頻標(biāo)簽信息等
這里典型的算法有:TSN、RetinaFace、PSENet等。
知識(shí)圖譜
知識(shí)圖譜作為知識(shí)承載系統(tǒng),用于對(duì)接內(nèi)外部關(guān)鍵詞信息與詞關(guān)系信息;內(nèi)容畫(huà)像會(huì)將原關(guān)系信息整合,并構(gòu)建可業(yè)務(wù)應(yīng)用的關(guān)系知識(shí)體系,其次,依賴(lài)業(yè)務(wù)中積累用戶行為產(chǎn)生的實(shí)體關(guān)系數(shù)據(jù),本身用戶需求的標(biāo)簽信息,一并用于構(gòu)建業(yè)務(wù)知識(shí)的興趣圖譜,基于同構(gòu)網(wǎng)絡(luò)與異構(gòu)網(wǎng)絡(luò)表示學(xué)習(xí)等核心模型,輸出知識(shí)表示與表達(dá),抽象后的圖譜用于文本識(shí)別,推薦語(yǔ)義理解,興趣拓展推理等場(chǎng)景,直接用于興趣推理的冷啟場(chǎng)景已經(jīng)驗(yàn)證有很不錯(cuò)的收益。
這方面的算法有:KGAT、RippleNet等。
召回/粗排
推薦系統(tǒng)的召回階段可以理解為根據(jù)用戶的歷史行為數(shù)據(jù),為用戶在海量的信息中粗選一批待推薦的內(nèi)容,挑選出一個(gè)小的候選集的過(guò)程。粗排用到的很多技術(shù)與召回重合,所以放在一起講,粗排也不是必需的環(huán)節(jié),它的功能對(duì)召回的結(jié)果進(jìn)行個(gè)粗略的排序,在保證一定精準(zhǔn)的前提下,進(jìn)一步減少往后傳送的物品數(shù)量,這就是粗排的作用。

召回模塊面對(duì)幾百上千萬(wàn)的推薦池物料規(guī)模,候選集十分龐大。由于后續(xù)有排序模塊作為保障,故不需要十分準(zhǔn)確,但必須保證不要遺漏和低延遲。目前主要通過(guò)多路召回來(lái)實(shí)現(xiàn),一方面各路可以并行計(jì)算,另一方面取長(zhǎng)補(bǔ)短??梢钥吹礁黝?lèi)同類(lèi)競(jìng)品的系統(tǒng)雖然細(xì)節(jié)上多少存在差異,但不約而同的采取了多路召回的架構(gòu),這類(lèi)設(shè)計(jì)考慮如下幾點(diǎn)問(wèn)題:
考慮用戶層面:用戶興趣的多元化,用戶需求與場(chǎng)景的多元化:例如:新聞需求,重大要聞,相關(guān)內(nèi)容沉浸閱讀等等
考慮系統(tǒng)層面:增強(qiáng)系統(tǒng)的魯棒性;部分召回失效,其余召回隊(duì)列兜底不會(huì)導(dǎo)致整個(gè)召回層失效;排序?qū)邮?,召回?duì)列兜底不會(huì)導(dǎo)致整個(gè)推薦系統(tǒng)失效
系統(tǒng)多樣性內(nèi)容分發(fā):圖文、視頻、小視頻;精準(zhǔn)、試探、時(shí)效一定比例;召回目標(biāo)的多元化,例如:相關(guān)性,沉浸時(shí)長(zhǎng),時(shí)效性,特色內(nèi)容等等
可解釋性推薦一部分召回是有明確推薦理由的:很好的解決產(chǎn)品性數(shù)據(jù)的引入;
介紹了召回任務(wù)的目的和場(chǎng)景后,接下來(lái)分析召回層面主要的技術(shù)棧,因?yàn)檎倩匾话愣际嵌嗦氛倩?,從模型角度分析有很多召回算法,這種一般是在召回層占大部分比例點(diǎn)召回,除此之外,還會(huì)有探索類(lèi)召回、策略運(yùn)營(yíng)類(lèi)召回、社交類(lèi)召回等。接下來(lái)我們著重介紹模型類(lèi)召回。
經(jīng)典模型召回
隨著技術(shù)發(fā)展,在Embedding基礎(chǔ)上的模型化召回是一個(gè)技術(shù)發(fā)展潮流方向。這種召回的范式是通過(guò)某種算法,對(duì)user和item分別打上Embedding,然后user與item在線進(jìn)行KNN計(jì)算實(shí)時(shí)查詢最近領(lǐng)結(jié)果作為召回結(jié)果,快速找出匹配的物品。需要注意的是如果召回采用模型召回方法,優(yōu)化目標(biāo)最好和排序的優(yōu)化目標(biāo)一致,否則可能被過(guò)濾掉。
在這方面典型的算法有:FM、雙塔DSSM、Multi-View DNN等。
序列模型召回
推薦系統(tǒng)主要解決的是基于用戶的隱式閱讀行為來(lái)做個(gè)性化推薦的問(wèn)題,序列模型一些基于神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)得到Word2Vec模型,再后面的基于RNN的語(yǔ)言模型,最先用的最多的Bert,這些方法都可以應(yīng)用到召回的學(xué)習(xí)中。
用戶在使用 APP 或者網(wǎng)站的時(shí)候,一般會(huì)產(chǎn)生一些針對(duì)物品的行為,比如點(diǎn)擊一些感興趣的物品,收藏或者互動(dòng)行為,或者是購(gòu)買(mǎi)商品等。而一般用戶之所以會(huì)對(duì)物品發(fā)生行為,往往意味著這些物品是符合用戶興趣的,而不同類(lèi)型的行為,可能代表了不同程度的興趣。比如購(gòu)買(mǎi)就是比點(diǎn)擊更能表征用戶興趣的行為。在召回階段,如何根據(jù)用戶行為序列打 embedding,可以采取有監(jiān)督的模型,比如 Next Item Prediction 的預(yù)測(cè)方式即可;也可以采用無(wú)監(jiān)督的方式,比如物品只要能打出 embedding,就能無(wú)監(jiān)督集成用戶行為序列內(nèi)容,例如 Sum Pooling。
這方面典型的算法有:CBOW、Skip-Gram、GRU、Bert等。
用戶序列拆分
上文講了利用用戶行為物品序列,打出用戶興趣 Embedding 的做法。但是,另外一個(gè)現(xiàn)實(shí)是:用戶往往是多興趣的,比如可能同時(shí)對(duì)娛樂(lè)、體育、收藏感興趣。這些不同的興趣也能從用戶行為序列的物品構(gòu)成上看出來(lái),比如行為序列中大部分是娛樂(lè)類(lèi),一部分體育類(lèi),少部分收藏類(lèi)等。那么能否把用戶行為序列物品中,這種不同類(lèi)型的用戶興趣細(xì)分,而不是都籠統(tǒng)地打到一個(gè)用戶興趣 Embedding 里呢?用戶多興趣拆分就是解決這類(lèi)更細(xì)致刻畫(huà)用戶興趣的方向。
本質(zhì)上,把用戶行為序列打到多個(gè) embedding 上,實(shí)際它是個(gè)類(lèi)似聚類(lèi)的過(guò)程,就是把不同的 Item,聚類(lèi)到不同的興趣類(lèi)別里去。目前常用的拆分用戶興趣 embedding 的方法,主要是膠囊網(wǎng)絡(luò)和 Memory Network,但是理論上,很多類(lèi)似聚類(lèi)的方法應(yīng)該都是有效的,所以完全可以在這塊替換成你自己的能產(chǎn)生聚類(lèi)效果的方法來(lái)做。
這方面典型的算法有:Multi-Interest Network with Dynamic Routing for Recommendation at Tmall等。
知識(shí)圖譜
知識(shí)圖譜有一個(gè)獨(dú)有的優(yōu)勢(shì)和價(jià)值,那就是對(duì)于推薦結(jié)果的可解釋性;比如推薦給用戶某個(gè)物品,可以在知識(shí)圖譜里通過(guò)物品的關(guān)鍵關(guān)聯(lián)路徑給出合理解釋?zhuān)@對(duì)于推薦結(jié)果的解釋性來(lái)說(shuō)是很好的,因?yàn)橹R(shí)圖譜說(shuō)到底是人編碼出來(lái)讓自己容易理解的一套知識(shí)體系,所以人非常容易理解其間的關(guān)系。知識(shí)圖譜的可解釋性往往是和圖路徑方法關(guān)聯(lián)在一起的,而 Path 類(lèi)方法,很多實(shí)驗(yàn)證明了,在排序角度來(lái)看,是效果最差的一類(lèi)方法,但是它在可解釋性方面有很好的效果,所以往往可以利用知識(shí)圖譜構(gòu)建一條可解釋性的召回通路。
這方面的算法有:KGAT、RippleNet等。
圖模型
推薦系統(tǒng)中User和Item相關(guān)的行為、需求、屬性和社交信息具有天然的圖結(jié)構(gòu),可以使用一張復(fù)雜的異構(gòu)圖來(lái)表示整個(gè)推薦系統(tǒng)。圖神經(jīng)網(wǎng)絡(luò)模型推薦就是基于這個(gè)想法,把異構(gòu)網(wǎng)絡(luò)中包含的結(jié)構(gòu)和語(yǔ)義信息編碼到結(jié)點(diǎn)Embedding表示中,并使用得到向量進(jìn)行個(gè)性化推薦。知識(shí)圖譜其實(shí)是圖神經(jīng)網(wǎng)絡(luò)的一個(gè)比較特殊的具體實(shí)例,但是,知識(shí)圖譜因?yàn)榫幋a的是靜態(tài)知識(shí),而不是用戶比較直接的行為數(shù)據(jù),和具體應(yīng)用距離比較遠(yuǎn),這可能是導(dǎo)致兩者在推薦領(lǐng)域表現(xiàn)有差異的主要原因。
這方面典型的算法有:GraphSAGE、PinSage等。
精排
排序模型是推薦系統(tǒng)中涵蓋的研究方向最多,有非常多的子領(lǐng)域值得研究探索,這也是推薦系統(tǒng)中技術(shù)含量最高的部分,畢竟它是直接面對(duì)用戶,產(chǎn)生的結(jié)果對(duì)用戶影響最大的一層。目前精排層深度學(xué)習(xí)已經(jīng)一統(tǒng)天下了,這是王喆老師《深度學(xué)習(xí)推薦算法》書(shū)中的精排層模型演化線路。具體來(lái)看分為DNN、Wide&Deep兩大塊,實(shí)際深入還有序列建模,以及沒(méi)有提到的多任務(wù)建模都是工業(yè)界非常常用的,所以我們接下來(lái)具體談?wù)撈渲忻恳粔K的技術(shù)棧。

特征交叉模型
在深度學(xué)習(xí)推薦算法發(fā)展早期,很多論文聚焦于如何提升模型的特征組合和交叉的能力,這其中既包含隱式特征交叉Deep Crossing也有采用顯式特征交叉的探究。本質(zhì)上是希望模型能夠擺脫人工先驗(yàn)的特征工程,實(shí)現(xiàn)端到端的一套模型。
在早期的推薦系統(tǒng)中,基本是由人工進(jìn)行特征交叉的,往往憑借對(duì)業(yè)務(wù)的理解和經(jīng)驗(yàn),但是費(fèi)時(shí)費(fèi)力。于是有了很多的這方面的研究,從FM到GBDT+LR都是引入模型進(jìn)行自動(dòng)化的特征交叉。再往后就是深度模型,深度模型雖然有萬(wàn)能近似定理,但是真正想要發(fā)揮模型的潛力,顯式的特征交叉還是必不可少的。
這方面的經(jīng)典研究工作有:DCN、DeepFM、xDeepFM等;
序列模型
在推薦系統(tǒng)中,歷史行為序列是非常重要的特征。在序列建模中,主要任務(wù)目標(biāo)是得到用戶此刻的興趣向量(user interest vector)。如何刻畫(huà)用戶興趣的廣泛性,是推薦系統(tǒng)比較大的一個(gè)難點(diǎn),用戶歷史行為序列建模的研究經(jīng)歷了從Pooling、RNN到attention、capsule再到transformer的順序。在序列模型中,又有很多細(xì)分的方向,比如根據(jù)用戶行為長(zhǎng)度有研究用戶終身行為序列的,也有聚焦當(dāng)下興趣的,還有研究如何抽取序列特征的抽取器,比如研究attention還是膠囊網(wǎng)絡(luò)。
這方面典型的研究工作有:DIN、DSIN、DIEN、SIM等;
多模態(tài)信息融合
在上文我們提到算法團(tuán)隊(duì)往往會(huì)利用內(nèi)容畫(huà)像信息,既有基于CV也有基于NLP抽取出來(lái)的信息。這是非常合理的,我們?cè)诠涠兑?、淘寶的時(shí)候關(guān)注的不僅僅item的價(jià)格、品牌,同樣會(huì)關(guān)注封面小姐姐好不好看、標(biāo)題夠不夠震驚等信息。除此之外,在冷啟動(dòng)場(chǎng)景下,我們能夠利用等信息不夠多,如果能夠使用多模態(tài)信息,能很大程度上解決數(shù)據(jù)稀疏的問(wèn)題。
傳統(tǒng)做法在多模態(tài)信息融合就是希望把不同模態(tài)信息利用起來(lái),通過(guò)Embedding技術(shù)融合進(jìn)模型。在推薦領(lǐng)域,主流的做法還是一套非端到端的體系,由其他模型抽取出多模態(tài)信息,推薦只需要融合入這些信息就好了。同時(shí)也有其他工作是利用注意力機(jī)制等方法來(lái)學(xué)習(xí)不同模態(tài)之間的關(guān)聯(lián),來(lái)增強(qiáng)多模態(tài)的表示。
比較典型的工作有:Image Matters: Visually modeling user behaviors using Advanced Model Server、UMPR等。
多任務(wù)學(xué)習(xí)
很多場(chǎng)景下我們模型優(yōu)化的目標(biāo)都是CTR,有一些場(chǎng)景只考慮CTR是不夠的,點(diǎn)擊率模型、時(shí)長(zhǎng)模型和完播率模型是大部分信息流產(chǎn)品推薦算法團(tuán)隊(duì)都會(huì)嘗試去做的模型。單獨(dú)優(yōu)化點(diǎn)擊率模型容易推出來(lái)標(biāo)題黨,單獨(dú)優(yōu)化時(shí)長(zhǎng)模型可能推出來(lái)的都是長(zhǎng)視頻或長(zhǎng)文章,單獨(dú)優(yōu)化完播率模型可能短視頻短圖文就容易被推出來(lái),所以多目標(biāo)就應(yīng)運(yùn)而生。信息流推薦中,我們不僅希望用戶點(diǎn)進(jìn)我們的item,還希望能有一個(gè)不錯(cuò)的完播率,即希望用戶能看完我們推薦的商品?;蛘唠娚虉?chǎng)景希望用戶不僅點(diǎn)進(jìn)來(lái),還希望他買(mǎi)下或者加入購(gòu)物車(chē)了。這些概率實(shí)際上就是模型要學(xué)習(xí)的目標(biāo),多種目標(biāo)綜合起來(lái),包括閱讀、點(diǎn)贊、收藏、分享等等一系列的行為,歸納到一個(gè)模型里面進(jìn)行學(xué)習(xí),這就是推薦系統(tǒng)的多目標(biāo)學(xué)習(xí)。
這方面比較典型的算法有:ESSM、MMoE、DUPN等。
強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)與一般有監(jiān)督的深度學(xué)習(xí)相比有一些很顯著的優(yōu)勢(shì),首先強(qiáng)化學(xué)習(xí)能夠比較靈活的定義優(yōu)化的業(yè)務(wù)目標(biāo),考慮推薦系統(tǒng)長(zhǎng)短期的收益,比如用戶留存,在深度模型下,我們很難設(shè)計(jì)這個(gè)指標(biāo)的優(yōu)化函數(shù),而強(qiáng)化學(xué)習(xí)是可以對(duì)長(zhǎng)期收益下來(lái)建模。第二是能夠體現(xiàn)用戶興趣的動(dòng)態(tài)變化,比如在新聞推薦下,用戶興趣變化很快,強(qiáng)化學(xué)習(xí)更容易通過(guò)用戶行為動(dòng)態(tài)產(chǎn)生推薦結(jié)果。最后是EE也就是利用探索機(jī)制,這種一種當(dāng)前和長(zhǎng)期收益的權(quán)衡,強(qiáng)化學(xué)習(xí)能夠更好的調(diào)節(jié)這里的回報(bào)。
這方面比較典型的算法有:DQN、Reinforcement Learning for Slate-based Recommender Systems: A Tractable Decomposition and Practical Methodology;
跨域推薦
一般一家公司業(yè)務(wù)線都是非常多的,比如騰訊既有騰訊視頻,也有微信看一看、視頻號(hào),還有騰訊音樂(lè),如果能夠結(jié)合這幾個(gè)場(chǎng)景的數(shù)據(jù),同時(shí)進(jìn)行推薦,一方面對(duì)于冷啟動(dòng)是非常有利的,另一方面也能補(bǔ)充更多數(shù)據(jù),更好的進(jìn)行精確推薦。
跨域推薦系統(tǒng)相比一般的推薦系統(tǒng)要更加復(fù)雜。在傳統(tǒng)推薦系統(tǒng)中,我們只需要考慮建立當(dāng)前領(lǐng)域內(nèi)的一個(gè)推薦模型進(jìn)行分析;而在跨域推薦中,我們更要關(guān)心在不同領(lǐng)域間要選擇何種信息進(jìn)行遷移,以及如何遷移這些信息,這是跨域推薦系統(tǒng)中非常關(guān)鍵的問(wèn)題。
這方面典型的模型有:DTCDR、MV-DNN、EMCDR等;
重排序
我們知道常見(jiàn)的有三種優(yōu)化目標(biāo):Point Wise、Pair Wise 和 List Wise。重排序階段對(duì)精排生成的Top-N個(gè)物品的序列進(jìn)行重新排序,生成一個(gè)Top-K個(gè)物品的序列,作為排序系統(tǒng)最后的結(jié)果,直接展現(xiàn)給用戶。重排序的原因是因?yàn)槎鄠€(gè)物品之間往往是相互影響的,而精排序是根據(jù)PointWise得分,容易造成推薦結(jié)果同質(zhì)化嚴(yán)重,有很多冗余信息。而重排序面對(duì)的挑戰(zhàn)就是海量狀態(tài)空間如何求解的問(wèn)題,一般在精排層我們使用AUC作為指標(biāo),但是在重排序更多關(guān)注NDCG等指標(biāo)。
重排序在業(yè)務(wù)中,還會(huì)根據(jù)一些策略、運(yùn)營(yíng)規(guī)則參與排序,比如強(qiáng)制去重、間隔排序、流量扶持等,但是總計(jì)趨勢(shì)上看還是算法排序越來(lái)越占據(jù)主流趨勢(shì)。重排序更多的是List Wise作為優(yōu)化目標(biāo)的,它關(guān)注的是列表中商品順序的問(wèn)題來(lái)優(yōu)化模型,但是一般List Wise因?yàn)闋顟B(tài)空間大,存在訓(xùn)練速度慢的問(wèn)題。這方面典型的做法,基于RNN、Transformer、強(qiáng)化學(xué)習(xí)的都有,這方面因?yàn)椴皇峭扑]的一個(gè)核心,所以沒(méi)有展開(kāi)來(lái)講,而且這一塊比較依賴(lài)實(shí)際的業(yè)務(wù)場(chǎng)景。
這里的經(jīng)典算法有:MRR、DPP、RNN等;
工程
推薦系統(tǒng)的實(shí)現(xiàn)需要依托工程,很多研究界Paper的idea滿天飛,卻忽視了工業(yè)界能否落地,進(jìn)入工業(yè)界我們很難或者很少有組是做純r(jià)esearch的,所以我們同樣有很多工程技術(shù)需要掌握。下面列舉了在推薦中主要用到的工程技術(shù):
- 編程語(yǔ)言:Python、Java(scala)、C++、sql、shell;
- 機(jī)器學(xué)習(xí):Tensorflow/Pytorch、GraphLab/GraphCHI、LGB/Xgboost、SKLearn;
- 數(shù)據(jù)分析:Pandas、Numpy、Seaborn、Spark;
- 數(shù)據(jù)存儲(chǔ):mysql、redis、mangodb、hive、kafka、es、hbase;
- 相似計(jì)算:annoy、faiss、kgraph
- 流計(jì)算:Spark Streaming、Flink
- 分布式:Hadoop、Spark
上面那么多技術(shù),我內(nèi)容最重要的就是加粗的三部分,第一是語(yǔ)言:必須掌握的是Python,C++和JAVA中根據(jù)不同的組使用的是不同的語(yǔ)言,這個(gè)如果沒(méi)有時(shí)間可以等進(jìn)組后慢慢學(xué)習(xí)。然后是機(jī)器學(xué)習(xí)框架:Tensorflow和Pytorch至少要掌握一個(gè)吧,前期不用糾結(jié)學(xué)哪個(gè),這個(gè)遷移成本很低,基本能夠達(dá)到觸類(lèi)旁通,而且面試官不會(huì)為難你只會(huì)這個(gè)不會(huì)那個(gè)。最后是數(shù)據(jù)分析工具:Pandas是我們處理單機(jī)規(guī)模數(shù)據(jù)的利器,但是進(jìn)入工業(yè)界,Hadoop和Spark是需要會(huì)用的,不過(guò)不用學(xué)太深,會(huì)用即可。
總結(jié)
本文從算法和工程兩個(gè)角度分析了推薦系統(tǒng)的一個(gè)技術(shù)棧,但是還有很多方向遺漏,也有很多方向受限于現(xiàn)在的技術(shù)水平深度不夠和有錯(cuò)誤的情況,后續(xù)會(huì)不斷補(bǔ)充和更正。
所以技術(shù)棧我列出的是一個(gè)非常廣度的技術(shù),實(shí)際上每一個(gè)技術(shù)鉆研下去都需要非常多時(shí)間,而且不一定是你實(shí)際工作中會(huì)遇到的,所以不要被那么多技術(shù)嚇到,也要避免陷入技術(shù)細(xì)節(jié)的海洋中。
我和非常多的大廠面試官討論過(guò)技術(shù)深度和廣度的問(wèn)題,得出來(lái)的結(jié)論是對(duì)于入門(mén)的推薦算法工程師而言,實(shí)際上深度和廣度的要求取決于你要去的組,有些組有很深的推薦技術(shù)沉淀,有很強(qiáng)的工程師團(tuán)隊(duì),這樣的組就會(huì)希望候選者能夠在某個(gè)方面有比較深入的研究,這個(gè)方面既包含工程方面也包含研究方面。但是如果是比較新的組、或者技術(shù)沉淀不深、推薦不是主要任務(wù)的組,對(duì)深度要求就不會(huì)很高??偠灾?,我認(rèn)為對(duì)于應(yīng)屆生/實(shí)習(xí)生來(lái)說(shuō),在推薦最重要的工程技術(shù)/研究方向,至少在召回和排序模塊,需要選一個(gè)作為方向,是需要較深鉆研。對(duì)于其他技術(shù)/研究方向需要有一定了解,比如可以沒(méi)用過(guò)強(qiáng)化學(xué)習(xí),但是要知道強(qiáng)化學(xué)習(xí)能夠在推薦中解決什么問(wèn)題,剩下的可以等到真實(shí)遇到需要后再去學(xué)習(xí)。