導(dǎo)讀:
本文主要介紹了Wide&Deep、PNN、DeepFM、Wide&Resnet模型結(jié)構(gòu),并嘗試在1688猜你喜歡的真實(shí)數(shù)據(jù)場景中進(jìn)行應(yīng)用。
一、背景
猜你喜歡是推薦領(lǐng)域極其經(jīng)典的一個(gè)場景,在1688首頁無線端猜你喜歡欄目日曝光約23w,其中約72%的用戶會(huì)產(chǎn)生點(diǎn)擊行為,人均點(diǎn)擊約8次。在我們的場景中,這部分是一個(gè)相對較大的流量來源。算法要做的就是通過用戶的真實(shí)行為數(shù)據(jù),預(yù)測用戶最可能感興趣的商品進(jìn)行展示,以提高點(diǎn)擊率,從而提高購買量。
不同于搜索,這種用戶帶有明確目的的行為,猜你喜歡是在用戶沒有明確目的時(shí)讓用戶“逛起來”,挖掘用戶的潛在喜好商品,增強(qiáng)用戶體驗(yàn)。
整個(gè)猜你喜歡的框架如圖。用戶產(chǎn)生的實(shí)時(shí)數(shù)據(jù)放在ABFS上,通過TPP傳入BE,在BE中通過swing、c2i等算法召回1000個(gè)商品(粗排),再把這1000個(gè)商品通過TPP傳入RTP中在線打分,最后把分?jǐn)?shù)最高的600個(gè)商品按得分展現(xiàn)給用戶(精排)。離線在Porsche平臺上調(diào)試模型,調(diào)到最優(yōu)結(jié)果再發(fā)布到RTP看線上效果。
ABFS (Ali Basic Feature Server),統(tǒng)一特征服務(wù)平臺:該模塊主要負(fù)責(zé)用戶實(shí)時(shí)數(shù)據(jù)的處理以及特征的統(tǒng)計(jì)工作,如基礎(chǔ)行為特征(點(diǎn)擊、收藏、加購等),統(tǒng)計(jì)特征(點(diǎn)擊次數(shù)、點(diǎn)擊率等),并傳遞到TPP供BE系統(tǒng)調(diào)用;
TPP(The Personalization Platform),阿里個(gè)性化平臺:集成RTP、IGraph、BE等常用服務(wù),方便數(shù)據(jù)的流動(dòng)調(diào)用,降低開發(fā)成本,幫助業(yè)務(wù)和算法快速上線迭代;
TPP(Taobao Personalization Platform, 也稱阿里推薦平臺 ) 平臺承接了阿里集團(tuán)300+重要個(gè)性化推薦場景,包括手淘首頁猜你喜歡、首圖個(gè)性化、購物鏈路等。除了提供應(yīng)用層面的支持和封裝,還肩負(fù)著機(jī)器分配和維護(hù)各場景運(yùn)行穩(wěn)定的重任。
BE(Basic Engine),向量化召回。是DII上的一個(gè)為推薦場景定制的召回引擎服務(wù),負(fù)責(zé)從多種類型的索引表中召回商品,并關(guān)聯(lián)具體的商品信息進(jìn)行過濾和粗排。線上召回效率極高,可以在幾毫秒內(nèi)對全庫商品召回結(jié)果;
iGraph平臺:超大規(guī)模分布式在線圖存儲和檢索。在我們的流程中主要用來儲存一些用戶特征,用戶偏好類目和熱門商品召回等。因?yàn)檫@些信息不需要頻繁更新,存到iGraph上方便存取和調(diào)用;
RTP(Real Time Prediction),實(shí)時(shí)打分服務(wù)系統(tǒng):利用Swift增量傳輸模型,使用實(shí)時(shí)BUILD索引技術(shù)來實(shí)現(xiàn)特征和模型的秒級更新,RTP系統(tǒng)在收到TPP推薦系統(tǒng)的前端請求后,進(jìn)行FG的實(shí)時(shí)特征產(chǎn)出,并對請求的item list中每個(gè)item計(jì)算出一個(gè)分值,是CTR、CVR各種機(jī)器學(xué)習(xí)模型預(yù)估的專用服務(wù)器;
Porsche在線學(xué)習(xí)平臺: Porsche是基于Blink的分布式流式計(jì)算框架,提供了日志處理、特征計(jì)算和實(shí)時(shí)建模的插件接口。實(shí)時(shí)更新的模型和特征通過swift秒級別同步RTP等服務(wù)端。從用戶發(fā)生交互行為、行為樣本被實(shí)時(shí)系統(tǒng)接收和解析、加入在線訓(xùn)練、將更新的模型參數(shù)發(fā)送給服務(wù)端到最終新的推薦結(jié)果被用戶感知,這個(gè)過程高度實(shí)時(shí)化、在線化。
二、模型簡介
1. 搭積木

深度學(xué)習(xí)模型很大程度上來自不同基礎(chǔ)模塊的組合,通過不同方式組合不同模塊,構(gòu)建不同的模型。最經(jīng)典的就是Google的Wide&Deep模型,結(jié)合深度模塊DNN和線性模塊LR,讓模型同時(shí)擁有記憶性和泛化性。
在WDL之后,學(xué)術(shù)界和工業(yè)界在此結(jié)構(gòu)上有很多其他的嘗試。下面分析幾個(gè)我試過的網(wǎng)絡(luò)。
2. Wide&Deep

這是Google提出的非常經(jīng)典的網(wǎng)絡(luò)結(jié)構(gòu),論文見《Wide & Deep Learning for Recommender Systems》。離散特征經(jīng)過Embedding和連續(xù)特征一起輸入到DNN側(cè),Wide側(cè)是一些人工交叉(如用笛卡爾積)特征,主要交叉的是id類特征,來學(xué)習(xí)特征間的共現(xiàn)。主要公式如下:

Wide側(cè)LR模型的記憶性很強(qiáng),比如用戶買了一本科幻書,下一次再出現(xiàn)這樣的組合,模型就會(huì)記住判斷正確。但若此時(shí)來了一本科學(xué)書,LR模型不一定能分對,所以需要Deep側(cè)DNN模型的補(bǔ)充。
Deep側(cè)DNN模型通過Embedding層挖掘特征間的語義相關(guān)性,比如上個(gè)例子中,通過Embedding模型可以學(xué)到“科學(xué)”和“科幻”是相似的,從而也能推出用戶也可能喜歡科學(xué)書。這樣,通過DNN和LR模型的結(jié)合,Wide&Deep模型有很好的記憶性和泛化性。這也是我們目前猜你喜歡線上在用的模型。
3. PNN
PNN的思想來自于對MLP學(xué)習(xí)的交叉特征的補(bǔ)充,論文見《Product-based Neural Networks for User Response Prediction》。作者認(rèn)為MLP不能很好地學(xué)出特征間的交叉關(guān)系,所以提出了一種product layer的思想,也就是基于乘法的運(yùn)算強(qiáng)行顯式地進(jìn)行二階特征交叉,結(jié)構(gòu)如下圖:
從結(jié)構(gòu)圖可以看出,product layer可以分成z和p兩部分。線性部分z直接從Embedding結(jié)果得到,非線性部分也就是乘積部分,這里的乘積有兩種選擇,內(nèi)積或者外積。

但這種結(jié)構(gòu)的受限之處在于,它要求輸入特征Embedding到相等的維度,因?yàn)榫S度相同才能做乘積運(yùn)算。
4.DeepFM
DeepFM由華為諾亞方舟實(shí)驗(yàn)室和哈工大共同提出,論文見《DeepFM:A Factorization-Machine based Neural Network for CTR Prediction》。它的結(jié)構(gòu)很像Wide&Deep與PNN的結(jié)合,它是把Wide&Deep中Wide側(cè)的LR換成了乘積結(jié)構(gòu)FM,通過FM和DNN分別提取低階和高階特征。而且這兩部分共享Embedding輸入。結(jié)構(gòu)如下圖:

FM部分是一個(gè)因子分解機(jī)。關(guān)于因子分解機(jī)可以參閱Steffen Rendle 在ICDM, 2010發(fā)表的文章《Factorization Machines》。因?yàn)橐肓穗[變量的原因,對于幾乎不出現(xiàn)或者很少出現(xiàn)的隱變量,F(xiàn)M也可以很好的學(xué)習(xí)。FM的公式如下:

而且在FM的文章中,作者還給出了求解交叉項(xiàng)的化簡公式:

跟PNN一樣,因?yàn)镕M強(qiáng)制特征間二階交叉,所以需要把特征Embedding到相等長度的維度,且DeepFM結(jié)構(gòu)兩邊的輸入是共享的,不需要像Wide&Deep一樣人工給LR模型構(gòu)造交叉特征,節(jié)省了人力。但在集團(tuán)實(shí)際應(yīng)用中,不同特征的維度相差很大,比如性別只有3維(男、女、未知),而id類特征多達(dá)上億維,不可能都Embedding到相同的長度。這里可以參考淘寶搜索團(tuán)隊(duì)的做法,通過Group product的方式分組Embedding:雙11實(shí)戰(zhàn)之大規(guī)模深度學(xué)習(xí)模型。他們在雙十一中也取得了不錯(cuò)的效果。
5.Wide&Resnet
這個(gè)結(jié)構(gòu)是我自己在工作中的嘗試。想法來源于對Wide&Deep模型的改進(jìn),把原來Wide&Deep結(jié)構(gòu)中DNN部分改成了一個(gè)類似Resnet那樣skip connection的結(jié)構(gòu),也就是信號分成兩路,一路還是經(jīng)過兩個(gè)relu層,另一路直接接到第二層relu,形成類似殘差網(wǎng)絡(luò)的結(jié)構(gòu)。這樣做的好處是,可以把不同層級的特征進(jìn)行組合,豐富特征的信息量。兩個(gè)模型的對比圖如下:

此外,我還發(fā)現(xiàn)單純從DNN改到Resnet的結(jié)構(gòu)并沒有多少作用,但是在Resnet中加入batch normalization,即BN層后,網(wǎng)絡(luò)的表達(dá)能力得到了很大的提高??梢詮碾x線CTR實(shí)驗(yàn)的準(zhǔn)確率中得以提現(xiàn)。離線效果見第四部分。

三、訓(xùn)練數(shù)據(jù)
訓(xùn)練數(shù)據(jù)來自目標(biāo)日前七天內(nèi)用戶在1688首頁猜你喜歡模塊行為數(shù)據(jù),曝光點(diǎn)擊label為1,曝光未點(diǎn)擊則label為0。
1688猜你喜歡使用的數(shù)據(jù)特征體系如下:

圖中滑窗期指目標(biāo)前1/3/5/7/15/30天的行為窗口。
1688平臺與淘寶等傳統(tǒng)的B2C平臺不同,1688是一個(gè)B2B的平臺,意味著我們的買家和賣家都是B類用戶。B類用戶與C類用戶在特征上有明顯的不同,比如:
B類用戶特征會(huì)有是否是淘寶賣家;
相比于C類,B類用戶沒有年齡、性別、社會(huì)狀態(tài)(是否有孩子、車子、房子)等人口統(tǒng)計(jì)學(xué)特征;
對于1688的商品也沒有品牌特征,因?yàn)槲覀冎鞔虻氖欠瞧放祁惖呐l(fā)市場。
四、實(shí)驗(yàn)結(jié)果
在Porsche平臺上做離線實(shí)驗(yàn),可以看到帶BN層的Wide&Resnet的模型比baseline的Wide&Deep模型在訓(xùn)練集和測試集上的AUC基本都要高1個(gè)多百分點(diǎn)。經(jīng)過三次增量,即每批數(shù)據(jù)從上一次訓(xùn)練的模型基礎(chǔ)上進(jìn)一步迭代訓(xùn)練,AUC能提高5%~6%。

從loss曲線中更能明顯看出,加了BN后的模型,loss基本在0.3之下,穩(wěn)定在一個(gè)較小水平;而原來Wide&Deep模型的loss波動(dòng)范圍較大。所以BN對模型的穩(wěn)定性起到了很明顯的效果。

五、調(diào)參經(jīng)驗(yàn)
分享一些其他的調(diào)參經(jīng)驗(yàn):

六、總結(jié)
本文在Wide&Deep模型上進(jìn)行改進(jìn),提出Wide&Resnet結(jié)構(gòu),并通過Batch Normalization的方式大幅提升網(wǎng)絡(luò)效果,是一次有意義的探索。