推薦系統(tǒng)是一個(gè)非常大的框架茄唐,有非常多的模塊在里面张惹,完整的一套推薦系統(tǒng)體系里舀锨,不僅會(huì)涉及到推薦算法工程師、后臺(tái)開發(fā)工程師宛逗、數(shù)據(jù)挖掘/分析工程師坎匿、NLP/CV工程師還有前端、客戶端甚至產(chǎn)品雷激、運(yùn)營等支持替蔬。我們作為算法工程師,需要掌握的技術(shù)棧主要就是在算法和工程兩個(gè)區(qū)域了屎暇,所以這篇文章將會(huì)分別從算法和工程兩個(gè)角度出發(fā)承桥,結(jié)合兩者分析當(dāng)前主流的一些推薦算法技術(shù)棧。
首先從推薦系統(tǒng)架構(gòu)出發(fā)根悼,一種分法是將整個(gè)推薦系統(tǒng)架構(gòu)分為召回凶异、粗排蜀撑、精排、重排剩彬、混排等模塊酷麦。它的分解方法是從一份數(shù)據(jù)如何從生產(chǎn)出來,到線上服務(wù)完整順序的一個(gè)流程喉恋。因?yàn)樵诓煌h(huán)節(jié)沃饶,我們一般會(huì)考慮不同的算法,所以這種角度出發(fā)我們來研究推薦系統(tǒng)主流的算法技術(shù)棧轻黑。
這些模塊的功能主要是:
- 召回:從推薦池中選取幾千上萬的item糊肤,送給后續(xù)的排序模塊。由于召回面對(duì)的候選集十分大氓鄙,且一般需要在線輸出轩褐,故召回模塊必須輕量快速低延遲。由于后續(xù)還有排序模塊作為保障玖详,召回不需要十分準(zhǔn)確把介,但不可遺漏(特別是搜索系統(tǒng)中的召回模塊)。目前基本上采用多路召回解決范式蟋座,分為非個(gè)性化召回和個(gè)性化召回拗踢。個(gè)性化召回又有content-based、behavior-based向臀、feature-based等多種方式巢墅。
- 粗排:粗拍的原因是有時(shí)候召回的結(jié)果還是太多,精排層速度還是跟不上券膀,所以加入粗排君纫。粗排可以理解為精排前的一輪過濾機(jī)制,減輕精排模塊的壓力芹彬。粗排介于召回和精排之間蓄髓,要同時(shí)兼顧精準(zhǔn)性和低延遲。一般模型也不能過于復(fù)雜
- 精排:獲取粗排模塊的結(jié)果舒帮,對(duì)候選集進(jìn)行打分和排序会喝。精排需要在最大時(shí)延允許的情況下,保證打分的精準(zhǔn)性玩郊,是整個(gè)系統(tǒng)中至關(guān)重要的一個(gè)模塊肢执,也是最復(fù)雜,研究最多的一個(gè)模塊译红。精排系統(tǒng)構(gòu)建一般需要涉及樣本预茄、特征、模型三部分侦厚。
- 重排:獲取精排的排序結(jié)果耻陕,基于運(yùn)營策略昵慌、多樣性、context上下文等淮蜈,重新進(jìn)行一個(gè)微調(diào)斋攀。比如三八節(jié)對(duì)美妝類目商品提權(quán),類目打散梧田、同圖打散淳蔼、同賣家打散等保證用戶體驗(yàn)措施。重排中規(guī)則比較多裁眯,但目前也有不少基于模型來提升重排效果的方案鹉梨。
- 混排:多個(gè)業(yè)務(wù)線都想在Feeds流中獲取曝光,則需要對(duì)它們的結(jié)果進(jìn)行混排穿稳。比如推薦流中插入廣告存皂、視頻流中插入圖文和banner等》晁遥可以基于規(guī)則策略(如廣告定坑)和強(qiáng)化學(xué)習(xí)來實(shí)現(xiàn)旦袋。
畫像層
首先是推薦系統(tǒng)的物料庫,這部分內(nèi)容里它改,算法主要體現(xiàn)在如何繪制一個(gè)用戶畫像和商品畫像疤孕。這個(gè)環(huán)節(jié)是推薦系統(tǒng)架構(gòu)的基礎(chǔ)設(shè)施,一般可能新用戶/商品進(jìn)來央拖,或者每周定期會(huì)重新一次整個(gè)物料庫祭阀,計(jì)算其中信息,為用戶打上標(biāo)簽鲜戒,計(jì)算統(tǒng)計(jì)信息专控,為商品做內(nèi)容理解等內(nèi)容。其中用戶畫像是大家比較容易理解的遏餐,比如用戶年齡伦腐、愛好通常APP會(huì)通過注冊(cè)界面收集這些信息。而商品畫像形式就非常多了境输,比如淘寶主要推薦商品蔗牡,抖音主要是短視頻,所以大家的物料形式比較多嗅剖,內(nèi)容、質(zhì)量差異也比較大嘁扼,所以內(nèi)容畫像各家的做法也不同信粮,當(dāng)前比較主流的都會(huì)涉及到一個(gè)多模態(tài)信息內(nèi)容理解。下面我貼了一個(gè)微信看一看的內(nèi)容畫像框架趁啸,然后我們來介紹下在這一塊主要使用的算法技術(shù)强缘。
一般推薦系統(tǒng)會(huì)加入多模態(tài)的一個(gè)內(nèi)容理解督惰。我們用短視頻形式舉個(gè)例子,假設(shè)用戶拍攝了一條短視頻旅掂,上傳到了平臺(tái)赏胚,從推薦角度看,首先我們有的信息是這條短視頻的作者商虐、長度觉阅、作者為它選擇的標(biāo)簽、時(shí)間戳這些信息秘车。但是這對(duì)于推薦來說是遠(yuǎn)遠(yuǎn)不夠的典勇,首先作者打上的標(biāo)簽不一定準(zhǔn)確反映作品,原因可能是我們模型的語義空間可能和作者/現(xiàn)實(shí)世界不一致叮趴。其次我們需要更多維度的特征割笙,比如有些用戶喜歡看小姐姐跳舞,那我希望能夠判斷一條視頻中是否有小姐姐眯亦,這就涉及到封面圖的基于CV的內(nèi)容抽取或者整個(gè)視頻的抽壬烁取;再比如作品的標(biāo)題一般能夠反映主題信息妻率,除了很多平臺(tái)常用的用“#”加上一個(gè)標(biāo)簽以外谈火,我們也希望能夠通過標(biāo)題抽取出基于NLP的信息。還有更多的維度可以考慮:封面圖多維度的多媒體特征體系舌涨,包括人臉識(shí)別糯耍,人臉embedding,標(biāo)簽囊嘉,一二級(jí)分類温技,視頻embedding表示,水印扭粱,OCR識(shí)別舵鳞,清晰度,低俗色情琢蛤,敏感信息等多種維度蜓堕。
這里面涉及的任務(wù)主要是CV的目標(biāo)檢測、語義分割等任務(wù)博其,NLP中的情感分析套才、摘要抽取、自然語言理解等任務(wù)慕淡。但是這部分算法一般團(tuán)隊(duì)都會(huì)有專門負(fù)責(zé)的組背伴,不需要推薦算法工程師來負(fù)責(zé),他們會(huì)有多模態(tài)的語意標(biāo)簽輸出,主要形式是各種粒度的Embedding傻寂。我們只需要在我們的推薦模型中引入這些預(yù)訓(xùn)練的Embedding息尺。
文本理解
這應(yīng)該是用的最多的模態(tài)信息,包括item的標(biāo)題疾掰、正文搂誉、OCR、評(píng)論等數(shù)據(jù)静檬。這里面也可以產(chǎn)生不同粒度的信息炭懊,比如文本分類,把整個(gè)item做一個(gè)粗粒度的分類巴柿。
這里的典型算法有:RNN凛虽、TextCNN、FastText广恢、Bert等凯旋;
關(guān)鍵詞標(biāo)簽
相比文本分類,關(guān)鍵詞是更細(xì)粒度的信息钉迷,往往是一個(gè)mutil-hot的形式至非,它會(huì)對(duì)item在我們的標(biāo)簽庫的選取最合適的關(guān)鍵詞或者標(biāo)簽。
這里典型的算法有:TF-IDF糠聪、Bert荒椭、LSTM-CRF等。
內(nèi)容理解
在很多場景下舰蟆,推薦的主題都是視頻或者圖片趣惠,遠(yuǎn)遠(yuǎn)多于僅推薦文本的情況,這里視頻/圖片item中的內(nèi)容中除了文本的內(nèi)容以外身害,更多的信息其實(shí)來源于視頻/圖片內(nèi)容本身, 因此需要嘗試從多種模態(tài)中抽取更豐富的信息味悄。主要包括分類信息、封面圖OCR的信息塌鸯、視頻標(biāo)簽信息等
這里典型的算法有:TSN侍瑟、RetinaFace、PSENet等丙猬。
知識(shí)圖譜
知識(shí)圖譜作為知識(shí)承載系統(tǒng)涨颜,用于對(duì)接內(nèi)外部關(guān)鍵詞信息與詞關(guān)系信息;內(nèi)容畫像會(huì)將原關(guān)系信息整合茧球,并構(gòu)建可業(yè)務(wù)應(yīng)用的關(guān)系知識(shí)體系庭瑰,其次,依賴業(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í)別,推薦語義理解福侈,興趣拓展推理等場景酒来,直接用于興趣推理的冷啟場景已經(jīng)驗(yàn)證有很不錯(cuò)的收益。
這方面的算法有:KGAT肪凛、RippleNet等堰汉。
召回/粗排
推薦系統(tǒng)的召回階段可以理解為根據(jù)用戶的歷史行為數(shù)據(jù),為用戶在海量的信息中粗選一批待推薦的內(nèi)容伟墙,挑選出一個(gè)小的候選集的過程翘鸭。粗排用到的很多技術(shù)與召回重合,所以放在一起講戳葵,粗排也不是必需的環(huán)節(jié)就乓,它的功能對(duì)召回的結(jié)果進(jìn)行個(gè)粗略的排序,在保證一定精準(zhǔn)的前提下拱烁,進(jìn)一步減少往后傳送的物品數(shù)量生蚁,這就是粗排的作用。
召回模塊面對(duì)幾百上千萬的推薦池物料規(guī)模戏自,候選集十分龐大邦投。由于后續(xù)有排序模塊作為保障,故不需要十分準(zhǔn)確擅笔,但必須保證不要遺漏和低延遲志衣。目前主要通過多路召回來實(shí)現(xiàn),一方面各路可以并行計(jì)算猛们,另一方面取長補(bǔ)短念脯。可以看到各類同類競品的系統(tǒng)雖然細(xì)節(jié)上多少存在差異阅懦,但不約而同的采取了多路召回的架構(gòu)和二,這類設(shè)計(jì)考慮如下幾點(diǎn)問題:
考慮用戶層面:用戶興趣的多元化,用戶需求與場景的多元化:例如:新聞需求耳胎,重大要聞惯吕,相關(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í)長缸废,時(shí)效性,特色內(nèi)容等等
可解釋性推薦一部分召回是有明確推薦理由的:很好的解決產(chǎn)品性數(shù)據(jù)的引入驶社;
介紹了召回任務(wù)的目的和場景后企量,接下來分析召回層面主要的技術(shù)棧,因?yàn)檎倩匾话愣际嵌嗦氛倩赝龅纾瑥哪P徒嵌确治鲇泻芏嗾倩厮惴ń旃@種一般是在召回層占大部分比例點(diǎn)召回,除此之外份乒,還會(huì)有探索類召回恕汇、策略運(yùn)營類召回、社交類召回等冒嫡。接下來我們著重介紹模型類召回拇勃。
經(jīng)典模型召回
隨著技術(shù)發(fā)展,在Embedding基礎(chǔ)上的模型化召回是一個(gè)技術(shù)發(fā)展潮流方向孝凌。這種召回的范式是通過某種算法方咆,對(duì)user和item分別打上Embedding,然后user與item在線進(jìn)行KNN計(jì)算實(shí)時(shí)查詢最近領(lǐng)結(jié)果作為召回結(jié)果蟀架,快速找出匹配的物品瓣赂。需要注意的是如果召回采用模型召回方法,優(yōu)化目標(biāo)最好和排序的優(yōu)化目標(biāo)一致片拍,否則可能被過濾掉煌集。
在這方面典型的算法有:FM、雙塔DSSM捌省、Multi-View DNN等苫纤。
序列模型召回
推薦系統(tǒng)主要解決的是基于用戶的隱式閱讀行為來做個(gè)性化推薦的問題,序列模型一些基于神經(jīng)網(wǎng)絡(luò)模型學(xué)習(xí)得到Word2Vec模型纲缓,再后面的基于RNN的語言模型卷拘,最先用的最多的Bert,這些方法都可以應(yīng)用到召回的學(xué)習(xí)中祝高。
用戶在使用 APP 或者網(wǎng)站的時(shí)候栗弟,一般會(huì)產(chǎn)生一些針對(duì)物品的行為,比如點(diǎn)擊一些感興趣的物品工闺,收藏或者互動(dòng)行為乍赫,或者是購買商品等瓣蛀。而一般用戶之所以會(huì)對(duì)物品發(fā)生行為,往往意味著這些物品是符合用戶興趣的雷厂,而不同類型的行為惋增,可能代表了不同程度的興趣。比如購買就是比點(diǎn)擊更能表征用戶興趣的行為罗侯。在召回階段器腋,如何根據(jù)用戶行為序列打 embedding溪猿,可以采取有監(jiān)督的模型钩杰,比如 Next Item Prediction 的預(yù)測方式即可;也可以采用無監(jiān)督的方式诊县,比如物品只要能打出 embedding讲弄,就能無監(jiān)督集成用戶行為序列內(nèi)容,例如 Sum Pooling依痊。
這方面典型的算法有:CBOW避除、Skip-Gram、GRU胸嘁、Bert等瓶摆。
用戶序列拆分
上文講了利用用戶行為物品序列,打出用戶興趣 Embedding 的做法性宏。但是群井,另外一個(gè)現(xiàn)實(shí)是:用戶往往是多興趣的,比如可能同時(shí)對(duì)娛樂毫胜、體育书斜、收藏感興趣。這些不同的興趣也能從用戶行為序列的物品構(gòu)成上看出來酵使,比如行為序列中大部分是娛樂類荐吉,一部分體育類,少部分收藏類等口渔。那么能否把用戶行為序列物品中样屠,這種不同類型的用戶興趣細(xì)分,而不是都籠統(tǒng)地打到一個(gè)用戶興趣 Embedding 里呢缺脉?用戶多興趣拆分就是解決這類更細(xì)致刻畫用戶興趣的方向痪欲。
本質(zhì)上,把用戶行為序列打到多個(gè) embedding 上枪向,實(shí)際它是個(gè)類似聚類的過程勤揩,就是把不同的 Item,聚類到不同的興趣類別里去秘蛔。目前常用的拆分用戶興趣 embedding 的方法陨亡,主要是膠囊網(wǎng)絡(luò)和 Memory Network傍衡,但是理論上,很多類似聚類的方法應(yīng)該都是有效的负蠕,所以完全可以在這塊替換成你自己的能產(chǎn)生聚類效果的方法來做蛙埂。
這方面典型的算法有:Multi-Interest Network with Dynamic Routing for Recommendation at Tmall等。
知識(shí)圖譜
知識(shí)圖譜有一個(gè)獨(dú)有的優(yōu)勢和價(jià)值遮糖,那就是對(duì)于推薦結(jié)果的可解釋性绣的;比如推薦給用戶某個(gè)物品,可以在知識(shí)圖譜里通過物品的關(guān)鍵關(guān)聯(lián)路徑給出合理解釋欲账,這對(duì)于推薦結(jié)果的解釋性來說是很好的屡江,因?yàn)橹R(shí)圖譜說到底是人編碼出來讓自己容易理解的一套知識(shí)體系,所以人非常容易理解其間的關(guān)系赛不。知識(shí)圖譜的可解釋性往往是和圖路徑方法關(guān)聯(lián)在一起的惩嘉,而 Path 類方法,很多實(shí)驗(yàn)證明了踢故,在排序角度來看文黎,是效果最差的一類方法,但是它在可解釋性方面有很好的效果殿较,所以往往可以利用知識(shí)圖譜構(gòu)建一條可解釋性的召回通路耸峭。
這方面的算法有:KGAT、RippleNet等淋纲。
圖模型
推薦系統(tǒng)中User和Item相關(guān)的行為劳闹、需求、屬性和社交信息具有天然的圖結(jié)構(gòu)帚戳,可以使用一張復(fù)雜的異構(gòu)圖來表示整個(gè)推薦系統(tǒng)玷或。圖神經(jīng)網(wǎng)絡(luò)模型推薦就是基于這個(gè)想法,把異構(gòu)網(wǎng)絡(luò)中包含的結(jié)構(gòu)和語義信息編碼到結(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í)推薦算法》書中的精排層模型演化線路芜赌。具體來看分為DNN仰挣、Wide&Deep兩大塊,實(shí)際深入還有序列建模缠沈,以及沒有提到的多任務(wù)建模都是工業(yè)界非常常用的膘壶,所以我們接下來具體談?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)化的特征交叉。再往后就是深度模型良狈,深度模型雖然有萬能近似定理后添,但是真正想要發(fā)揮模型的潛力,顯式的特征交叉還是必不可少的薪丁。
這方面的經(jīng)典研究工作有:DCN遇西、DeepFM、xDeepFM等严嗜;
序列模型
在推薦系統(tǒng)中粱檀,歷史行為序列是非常重要的特征。在序列建模中漫玄,主要任務(wù)目標(biāo)是得到用戶此刻的興趣向量(user interest vector)茄蚯。如何刻畫用戶興趣的廣泛性,是推薦系統(tǒng)比較大的一個(gè)難點(diǎn)睦优,用戶歷史行為序列建模的研究經(jīng)歷了從Pooling渗常、RNN到attention、capsule再到transformer的順序汗盘。在序列模型中皱碘,又有很多細(xì)分的方向,比如根據(jù)用戶行為長度有研究用戶終身行為序列的隐孽,也有聚焦當(dāng)下興趣的癌椿,還有研究如何抽取序列特征的抽取器家凯,比如研究attention還是膠囊網(wǎng)絡(luò)。
這方面典型的研究工作有:DIN如失、DSIN绊诲、DIEN、SIM等褪贵;
多模態(tài)信息融合
在上文我們提到算法團(tuán)隊(duì)往往會(huì)利用內(nèi)容畫像信息掂之,既有基于CV也有基于NLP抽取出來的信息。這是非常合理的脆丁,我們?cè)诠涠兑羰澜ⅰ⑻詫毜臅r(shí)候關(guān)注的不僅僅item的價(jià)格、品牌槽卫,同樣會(huì)關(guān)注封面小姐姐好不好看跟压、標(biāo)題夠不夠震驚等信息。除此之外歼培,在冷啟動(dòng)場景下震蒋,我們能夠利用等信息不夠多,如果能夠使用多模態(tài)信息躲庄,能很大程度上解決數(shù)據(jù)稀疏的問題查剖。
傳統(tǒng)做法在多模態(tài)信息融合就是希望把不同模態(tài)信息利用起來,通過Embedding技術(shù)融合進(jìn)模型噪窘。在推薦領(lǐng)域笋庄,主流的做法還是一套非端到端的體系,由其他模型抽取出多模態(tài)信息倔监,推薦只需要融合入這些信息就好了直砂。同時(shí)也有其他工作是利用注意力機(jī)制等方法來學(xué)習(xí)不同模態(tài)之間的關(guān)聯(lián),來增強(qiáng)多模態(tài)的表示浩习。
比較典型的工作有:Image Matters: Visually modeling user behaviors using Advanced Model Server静暂、UMPR等。
多任務(wù)學(xué)習(xí)
很多場景下我們模型優(yōu)化的目標(biāo)都是CTR瘦锹,有一些場景只考慮CTR是不夠的籍嘹,點(diǎn)擊率模型、時(shí)長模型和完播率模型是大部分信息流產(chǎn)品推薦算法團(tuán)隊(duì)都會(huì)嘗試去做的模型弯院。單獨(dú)優(yōu)化點(diǎn)擊率模型容易推出來標(biāo)題黨辱士,單獨(dú)優(yōu)化時(shí)長模型可能推出來的都是長視頻或長文章,單獨(dú)優(yōu)化完播率模型可能短視頻短圖文就容易被推出來听绳,所以多目標(biāo)就應(yīng)運(yùn)而生颂碘。信息流推薦中,我們不僅希望用戶點(diǎn)進(jìn)我們的item,還希望能有一個(gè)不錯(cuò)的完播率头岔,即希望用戶能看完我們推薦的商品塔拳。或者電商場景希望用戶不僅點(diǎn)進(jìn)來峡竣,還希望他買下或者加入購物車了靠抑。這些概率實(shí)際上就是模型要學(xué)習(xí)的目標(biāo),多種目標(biāo)綜合起來适掰,包括閱讀颂碧、點(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)勢睬澡,首先強(qiáng)化學(xué)習(xí)能夠比較靈活的定義優(yōu)化的業(yè)務(wù)目標(biāo),考慮推薦系統(tǒng)長短期的收益艳汽,比如用戶留存猴贰,在深度模型下,我們很難設(shè)計(jì)這個(gè)指標(biāo)的優(yōu)化函數(shù)河狐,而強(qiáng)化學(xué)習(xí)是可以對(duì)長期收益下來建模。第二是能夠體現(xiàn)用戶興趣的動(dòng)態(tài)變化瑟捣,比如在新聞推薦下馋艺,用戶興趣變化很快,強(qiáng)化學(xué)習(xí)更容易通過用戶行為動(dòng)態(tài)產(chǎn)生推薦結(jié)果迈套。最后是EE也就是利用探索機(jī)制捐祠,這種一種當(dā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)禁荒,還有騰訊音樂猬膨,如果能夠結(jié)合這幾個(gè)場景的數(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)鍵的問題衫贬。
這方面典型的模型有:DTCDR德澈、MV-DNN、EMCDR等固惯;
重排序
我們知道常見的有三種優(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)空間如何求解的問題,一般在精排層我們使用AUC作為指標(biāo)汛骂,但是在重排序更多關(guān)注NDCG等指標(biāo)罕模。
重排序在業(yè)務(wù)中,還會(huì)根據(jù)一些策略帘瞭、運(yùn)營規(guī)則參與排序淑掌,比如強(qiáng)制去重、間隔排序蝶念、流量扶持等抛腕,但是總計(jì)趨勢上看還是算法排序越來越占據(jù)主流趨勢。重排序更多的是List Wise作為優(yōu)化目標(biāo)的媒殉,它關(guān)注的是列表中商品順序的問題來優(yōu)化模型担敌,但是一般List Wise因?yàn)闋顟B(tài)空間大,存在訓(xùn)練速度慢的問題适袜。這方面典型的做法柄错,基于RNN、Transformer、強(qiáng)化學(xué)習(xí)的都有售貌,這方面因?yàn)椴皇峭扑]的一個(gè)核心给猾,所以沒有展開來講,而且這一塊比較依賴實(shí)際的業(yè)務(wù)場景颂跨。
這里的經(jīng)典算法有:MRR敢伸、DPP、RNN等恒削;
工程
推薦系統(tǒng)的實(shí)現(xiàn)需要依托工程池颈,很多研究界Paper的idea滿天飛,卻忽視了工業(yè)界能否落地钓丰,進(jìn)入工業(yè)界我們很難或者很少有組是做純r(jià)esearch的躯砰,所以我們同樣有很多工程技術(shù)需要掌握。下面列舉了在推薦中主要用到的工程技術(shù):
- 編程語言: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)容最重要的就是加粗的三部分笤休,第一是語言:必須掌握的是Python蝉揍,C++和JAVA中根據(jù)不同的組使用的是不同的語言,這個(gè)如果沒有時(shí)間可以等進(jìn)組后慢慢學(xué)習(xí)。然后是機(jī)器學(xué)習(xí)框架:Tensorflow和Pytorch至少要掌握一個(gè)吧荐健,前期不用糾結(jié)學(xué)哪個(gè),這個(gè)遷移成本很低砚偶,基本能夠達(dá)到觸類旁通躺酒,而且面試官不會(huì)為難你只會(huì)這個(gè)不會(huì)那個(gè)。最后是數(shù)據(jù)分析工具:Pandas是我們處理單機(jī)規(guī)模數(shù)據(jù)的利器冀惭,但是進(jìn)入工業(yè)界震叙,Hadoop和Spark是需要會(huì)用的,不過不用學(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é)的海洋中拂共。
我和非常多的大廠面試官討論過技術(shù)深度和廣度的問題,得出來的結(jié)論是對(duì)于入門的推薦算法工程師而言姻几,實(shí)際上深度和廣度的要求取決于你要去的組宜狐,有些組有很深的推薦技術(shù)沉淀,有很強(qiáng)的工程師團(tuán)隊(duì)蛇捌,這樣的組就會(huì)希望候選者能夠在某個(gè)方面有比較深入的研究抚恒,這個(gè)方面既包含工程方面也包含研究方面。但是如果是比較新的組络拌、或者技術(shù)沉淀不深俭驮、推薦不是主要任務(wù)的組,對(duì)深度要求就不會(huì)很高春贸』炻埽總而言之,我認(rèn)為對(duì)于應(yīng)屆生/實(shí)習(xí)生來說萍恕,在推薦最重要的工程技術(shù)/研究方向逸嘀,至少在召回和排序模塊,需要選一個(gè)作為方向允粤,是需要較深鉆研崭倘。對(duì)于其他技術(shù)/研究方向需要有一定了解翼岁,比如可以沒用過強(qiáng)化學(xué)習(xí),但是要知道強(qiáng)化學(xué)習(xí)能夠在推薦中解決什么問題司光,剩下的可以等到真實(shí)遇到需要后再去學(xué)習(xí)琅坡。