CSCNN:新一代京東電商廣告排序模型
分享嘉賓:劉鵠?京東 算法工程師
編輯整理:李沛欣
出品平臺:DataFunTalk
本次分享主要包括以下內容:
-
背景介紹
-
CTR模型的優(yōu)化方向
-
基于視覺信息的CTR廣告預測
-
我們的工作:CSCNN
-
效果展示
京東搜索廣告依托于京東和京準通的數字營銷平臺實現搜索場景下的流量變現,每天幫助數百萬的廣告主觸達數億的京東用戶。
1.?京東9NAI平臺
京東廣告算法團隊主要做京東電商平臺下全場景的廣告流量變現,包括的業(yè)務線包括搜索、推薦、站外、線下、品牌,360營銷等等。用到的主要的模型,除了CTR模型,還有CVR、出價、圖像、創(chuàng)意模型等,這些都依賴于京東自研的9NAI的機器學習平臺。該平臺擁有離線訓練,離線預估,線上inference、 模型的發(fā)版等功能。整個平臺的內核基于TensorFlow框架搭建,并根據業(yè)務進行了性能優(yōu)化,離線訓練的調度則基于k8s開發(fā)。
2. 電商環(huán)境下優(yōu)化ECPM的主要方式
在京東搜索廣告的直觀的展示界面,當用戶搜索Query為"連衣裙"時,前序模塊會召回n個廣告,都是和連衣裙的Query強相關、符合Query約束的商品。
ECPM排序的主要工作是n個廣告內部順序的精排。在廣告場景下,排序的指標就是平臺的營收。
具體來看,作為CPC廣告,廣告主為每次點擊支付確定的出價bid。因此每次展現平臺所獲得的價值,就等于用戶點擊廣告的概率再乘以這次點擊的出價,即ECPM ( effective cost per mile,千次展示期望收入 )。但是有時需要考慮Query下所有展現給用戶的商品對平臺帶來的總價值,即此時需要優(yōu)化所有展現給用戶廣告ECPM的和。但由于用戶Query為"連衣裙"時,用戶的下拉深度有限,所以該問題是有約束的優(yōu)化:在用戶看到有限深度廣告的前提下,極大化用戶對平臺的總營收。
如果展現給用戶廣告之間的CTR條件獨立,可以通過貪婪方式求解優(yōu)化,即:按ECPM從大到小依次展現給用戶,這樣Query下的整體收入最高。
而ECPM中的第二項bid是由廣告主給出的。假如用ECPM的序作為訓練和預估的指標的話,廣告主可能通過調bid來hack模型系統(tǒng)。為避免這種情況,我們一般在離線時采用AUC作為訓練和評估指標,通過訓練CTR排序效果更好的模型,來間接提升線上ECPM排序和線上收入。
CTR ( Click-Through-Rate ) 即在建模展現這條廣告的情況下,用戶點擊的概率。在搜索的場景下,該概率可以描述成依賴于4個不同類型輸入的函數:
-
Query:描述用戶搜索意圖。
-
用戶側特征:描述用戶的興趣、偏好。
-
商品側特征:描述這個商品是否優(yōu)質。
-
context特征:描述用戶搜索時屬于怎樣的場景,是上班的時候搜的還是周末搜的,此時是否有活動。
1. 特征工程與提取數據
特征工程主要包括以下幾點:
多模態(tài)信息建模:
-
人工特征:一般在構建CTR模型的初期,會花很多精力做人工特征,比如說ID類的或者是實數的特征。通過構建有區(qū)分性的特征來優(yōu)化模型的效果。
-
文本特征:描述細粒度Query中的用戶意圖。
-
用戶側特征:對用戶和商品之間關系的建模。比如說對用戶序列進行建模,或者是對用戶和商品之間的交互關系做圖表示建模。
-
圖像特征:它和前面的信息源的模態(tài)不同,但在多媒體的場景下,圖像一般是和文字一起構建完整的商品信息展現給用戶,所以這部分的建模也很有必要。
特征的交叉:FM 、FFM、DCN等替代繁重手工特征交叉的方法。
解決過擬合問題:解決特征長尾稀疏時,embedding的過擬合問題。
2. 對CTR模型做目標函數刻畫
度量學習問題:之前給出的搜索場景不是很適合做pointwise的模型,主要的原因在于在搜索的場景下,候選集很有限。比如說搜連衣裙的時候, n個商品都是連衣裙,并不需要區(qū)分用戶點擊連衣裙商品和鞋子商品的概率的高低,因為它沒有可比性。所以在搜索場景下,做得更多的是在小候選集下的優(yōu)化過程,此時需要做一些Query下的AUC的訓練和預估。
Selection bias 問題:主要描述的是在電商場景下會出現一些訓練集和測試集不一致的情況。測試集指的就是線上預估的集合,因為在線上召回幾百個商品,要對這幾百個商品進行排序的情況下,因為實際上一頁展現的商品有限,可能最終展現給用戶只有頭部的這幾個有l(wèi)abel的商品。所以在離線評估的時候,只能評估這幾個商品的使用情況,但是在線上Serving的時候需要對整體進行排序,就要解決Selection bias的問題。
長期回報問題:在上一頁PPT中給出了一些簡單的假設,是當上下的商品沒有耦合關系的情況下,可以做貪婪CTR模型。如果有耦合關系,可能就要對搜索詞下的整個用戶對電商平臺產生的回報,即加和的Reward (?長期回報 ) 建模。
3. 結合系統(tǒng)架構的工作
Online Learning:線上系統(tǒng)中數據分布式是時變的。工程上的傳統(tǒng)方式是做定期重啟的全量訓練。但由于數據量大,訓練很慢,依然會導致訓練和預估存在時間/分布的gap。online-learning是一種很有用的方向,通過流式的數據預處理和訓練,使模型緊跟線上分布,解決時變帶來的gap。
線上分布式serving:由于單機內存的限制,線上模型的體積會受到約束。我們通過分布式和模型并行支持TB型的模型的加載,同時保證模型各部分參數版本一致性。放開了線上內存的限制,增加模型的表達能力。
線上gpu serving:放開線上計算復雜度的限制,有助于使用更深的更復雜的模型結構來增加模型的表達能力。
所以說從整體上來看,本研究所探討的使用視覺信息提升排序模型效果的工作,主要還是集中在第一部分——特征和數據建模中多模態(tài)的建模。通過優(yōu)化這些圖像的特征建模,能夠得到商品側更好的展現效果,進而提升用戶對于商品的點擊率。
03
基于視覺信息的CTR廣告預測
1. 視覺信息在商品展現中給人呈現的印象
Intuition:在整個搜索版面中,每個商品都是圖文結合的。商品主圖的版面很大,有很強的視覺沖擊力,而且主圖中會包含很多細節(jié)信息,比如說材質、紋理、款式等,這些信息是難以通過title、ID類特征或者是一些屬性信息體現出來的,只能通過圖像來提取這些細節(jié)信息進行建模。而且在訓練的過程中,只對這些ID類特征進行辨別,可能還會遇到一些稀疏或者冷啟動的問題。假如使用CNN來提取圖像特征的話,更有可能來避免這些事情來提升模型的泛化性。
2. 使用圖像建模的瓶頸
工程實現較為困難:此前用到的一些點擊率預估模型都是比較簡單的MLP的模型,他們其實訓練和serving都是非??斓摹5羌由螩NN之后,訓練會出現性能瓶頸,導致模型更新周期更長;serving也會出現非常嚴重的性能瓶頸,可能會直接影響線上服務的時遲。
建模效果收益有限:
在使用圖像特征之前,我們已經提了很多的商品側的特征,傳統(tǒng)建模方式不能完全保證從圖像中來獲取到的是增量細節(jié)信息。假如只提取到一些和已有屬性或者類目重復的信息,那么引入CNN直接建模圖像的意義就很小了。
和傳統(tǒng)圖像的任務不同,例如檢測分割或者是分類問題的監(jiān)督信號非常強,但點擊率預估是一個監(jiān)督信號很弱的場景。用戶點或者沒點二分類場景中,本身就是包含了一定的random noise。在這種監(jiān)督信號不強、有噪的情況下,訓練好CNN是困難的。
3. 問題的解決
下面,我們主要針對這兩點做了一些已有方法的調研。
-
固定提取embedding圖像:不做二階段的訓練,從而規(guī)避前述問題。但是固定的CNN提取出來的特征,無法保證和已有的屬性、類目信息不產生交疊,因此CNN提供的增量信息有限。
-
端到端的CNN和CTR模型聯合的訓練:絕大多數工作還都是在做離線的評估,很少有做工業(yè)級數據的線上serving。所有工作都直接將傳統(tǒng)用于圖像分類的CNN直接拼入CTR模型中,并沒有做任何結構的改進以適配當下問題 ( 后續(xù)會說明傳統(tǒng)CNN解決CTR問題的不足 )。
-
pre-training:使用圖像分類/只基于圖像的CTR問題,做pre-training。以期獲得二階段更好的效果。
04
我們的工作:CSCNN
1. 研究的出發(fā)點:CTR模型建模本身存在的問題
傳統(tǒng)使用CNN引入圖像信息的模式,屬于Late Fusion。這種方法從CNN提取出embedding,再和已有的特征一起參與 CTR的模型建模,本身就存在一些問題。
-
信息浪費:在建模圖像之前,模型通過類目等id類特征就已經知道這個商品是連衣裙了。而這些視覺先驗現在還沒有加到CNN的建模中來,即這部分的信息被浪費了。假如知道這些先驗,CNN的任務就會更簡單些。換句話說,CNN的任務應該是:在知道該商品為連衣裙類目的情況下,提取出連衣裙相關的特征、捕獲連衣裙的細節(jié)。假如能把已有的視覺先驗加到CNN的輸入中,CNN的訓練和 serving效果都會更好。
-
包含與類目無關的信息:如果把這些有視覺先驗的信息提前告訴CNN,它就有可能避免提取到一些與類目無關的信息。對于連衣裙圖片,可能背景中有一些和類目相關性不高的物品。我們可以根據類別先驗,避免將背景噪聲耦合進來。
綜上,我們整體的方向就是通過已有的圖像之外的視覺先驗,幫助CNN的學習。
2. SENet作為特征再校準模塊的作用
前期的調研中,我們發(fā)現SENET的思想和我們有些類似。做圖像的同學都比較清楚,SENET是被插在每個卷積操作的Feature map之后,有點類似于Self-attention的小模塊。首先把它的空間的尺度給壓掉,得到c維的向量,再做c維向量內部的交互,得到c維的 scale乘到c維的feature map上。
舉個例子,我有c個Feature map ( 特征圖 ),通過內部的交互來決定哪個特征圖應該加強,哪個應該減弱。這是一種類似self-attention ( 自注意力機制 ) 的 Feature map recalibration ( 特征圖再校準 ) 的問題。在點擊率預估的問題中,recalibration就有點像做特征選擇。可以認為這c個特征圖是表示圖像不同方面的信息,通過自注意力機制的方式去進行選擇。但是有沒有可能把這些類目的信息或者是從其他地方得到的視覺先驗加進來,做一些基于視覺先驗的特征選擇呢?答案是肯定的。
3. 類目特定的卷積神經網絡:CSCNN
Category Specific CNN ( 類目特定的卷積神經網絡 ),具體的操作方式和SENET稍微有點類似。
還是以連衣裙特征提取任務為例,當給定類目是連衣裙時,可以把連衣裙的embedding加到 channel-wise attention ( 通道域注意力機制 ),以及 spatial-wise attention ( 空間域注意力機制 ) 的過程中。這種方式相當于為輸入的feature map提取和 category有關的channel和spatial ?feature ( 空間特征 )。或者說是在卷積的每一層之后,通過引入category的信息做category specific的 feature recalibration。進而實現category specific的圖像特征的抽取和圖像特征選擇。
這種逐層引入 category ( 類目特征 ) 的視覺先驗到 CNN里面的方法,可以認為是在CNN逐層提取越來越抽象信息的過程中,不停地加入類目相關的特征選擇。最終CNN提取出來的視覺信息就是一種類目相關的信息,或者說是把很大的圖像信息抽取問題特化成小類目下的圖像特征抽取問題,進而簡化CNN的學習任務。
具體來講,上面是具體的channel-wise attention ( 通道域注意力機制 ) 的實現方式。和SENET很類似的部分是在這里——通過Feature map來做一些average pooling ( 平均池化 )?和 max pooling ( 最大池化 ),得到C維的向量。而后又拼上category embedding,從而相當于在前半部分得到全局的圖像特征表示。經過全連接,得到類目特定的通道域側的加權系數。平均池化和最大池化這兩路加起來,經過sigmoid函數來得到通道加權系數,加權后得到channel的refined-feature map ( 提純特征圖 )。類似地還做了category-specific Spatial Attention module ( 類別特定的空間域注意力機制模型 ),它的方式就是把channel 的這一維average pooling或者max pooling掉,再拼上同樣大小的category embedding,經過卷積的方式,提取到 spatial的加權系數,最后得到spatial的refined CNN Feature Map。通過這兩種不同的模塊,我們在卷積的過程中,在每個feature map后,都做了類目先驗相關的特征抽取 ( 特征選擇 ) 以提升CNN的學習效果。
3. 用9NAI進行的工程實現
再介紹一下為了解決前面說到的一些工程實現的問題,和對應的加速方法。
這張圖是模型系統(tǒng)的簡化圖。從右下角開始看,特征通過線上feature dump下來。由于線上預估時實際上沒有用到圖像,所以這部分特征里也是沒有圖像的。
經過對相同商品ID及其圖像特征的離線拼接,特征中就同時包含了圖像特征、類別特征等三部分的特征,融到一起得到了一個端到端的帶CNN的 CTR 預估訓練模型。
端到端訓練之后,會產生這樣一個問題:CNN部分線上serving緩慢。我們采用了一種空間換時間的加速方式。具體是我們先對全站商品的CNN embedding進行離線預估,形成詞表,把這個詞表和模型的其他部分一起加載到線上的系統(tǒng)中,線上就可以直接通過商品的ID來查到商品的embedding。
之所以這樣做,是因為統(tǒng)計發(fā)現廣告主更換商品主圖的頻次很低。每天更新模型,每天使用最新的 CNN產出線上用的Lookup Table ( 查找表 ),對這種低頻變化的主圖是穩(wěn)定可靠的。在線上通過20G的查找表,我們在CPU的機器上實現了20毫秒以內的tp99 ( 99%以內網絡需求的最低延時 )。
4. 離線訓練加速
加入CNN之后,原來可能一天能訓練好的模型需要數天時間才能訓練好,CNN在這部分的離線計算瓶頸比較大。
具體進行離線加速的方式包括兩部分:
-
按照商品的主圖進行聚合。我們將至多25個對應同商品的不同的請求聚合 ( 他們可能是來自不同用戶的,但是他們看到或者點擊了相同的商品 )。這批聚合了的請求在訓練的過程中由于圖像是相同的,所以CNN這部分只用forward和backward一次。這種方式在不影響離線訓練效果的情況下,能極大提升離線訓練效率。
-
單機4卡的同步更新。做這件事情的主要意義是可以節(jié)省CNN梯度回傳的次數,4GPU只回傳一次梯度,節(jié)省了 PS框架下server傳輸成本,進而提升離線訓練速度。最終在百億規(guī)模的訓練集上我們可以在24小時內完成離線訓練。
05
接下來介紹整個算法以及工程架構在線上和公開數據集上的實際效果。
1. 算法模型在公共數據集中的效果
在公開數據集的實驗用了比較簡單的CTR模型,來檢驗圖像特征提取的這部分究竟起到多大的作用。這里沒有看它和CTR模型的耦合,基本只關注圖像。以亞馬遜的數據集為訓練集,每個子類里邊都有幾十類的商品,采用AUC評估指標,主要的對比方法分成以下幾種:
-
不依賴于圖像的方法;
-
依賴圖像的方法;
-
在圖像之外加入類別信息的視覺先驗的方法。
和我們最接近的方法是SCA,它是在image caption ( 圖像描述 ) 方向的工作,在卷積的后幾層加入空間域和通道域的注意力機制。
對比之后發(fā)現,加入圖像信息相比不加圖像有非常大的AUC提升。通過Fintune ( 遷移學習 ) 的方法也比非Fintune的方法好,主要的考慮是來自于非遷移學習的方法可能提取出來的特征可能和已有的特征是有關系的,所以做遷移學習效果更好一些。
這三種方法就是加入類別信息的方法。雖然已有工作也加入了類別、視覺先驗,但是他們都采用了late fusion的方式:CNN并不知道這些類別的先驗,CNN提取了特征之后,再和這些類別、視覺先驗進行耦合建模。
后兩種方法都將類別先驗加到了CNN里。SCA雖然是在圖像描述中取得很好的效果,但是由于它無法很好地加到每一層的卷積后,對于簡化CNN學習效果并沒有我們好。我們在所有的指標上都大幅領先了state-of-the-art。
我們進一步回答了category specific模塊對所有的CNN架構、注意力機制的普適性。無論是CNN-F還是inception,SE還是一些spatial attention的模塊,加入了我們的category specific機制都可以得到一致的效果提升。
2. 算法模型在工業(yè)數據集中的效果
工業(yè)數據相比于公開數據有很大的不同,主要有兩大特點:
-
數據量非常大:150億的數據,3000多類別數,還包含各種各樣已有的人工提取的特征。
-
工業(yè)數據的特點:長尾、稀疏。
這里我畫了幾個特征的例子。比如Query這個特征,有90%的Query出現的次數不足10次。在這種非常稀疏的場景下,特征泛化性差,過擬合和冷啟問題嚴重。
我們的建?;A——CTR model是三層的DCN的模型,提取圖像信息的網絡采用了Res18的網絡。我們在它的基礎上進一步增加了category specific 模塊。
研究發(fā)現,在基礎的模型下,加入這種固定的CNN embedding已經有了一些提升效果,但并不是很大。在加入了Fintune遷移學習之后,得到了進一步的提升。再加入CBAM的模塊,以類似self-attention的方式來決定哪些特征應該加強或者減弱,整個模型效果又得到一點點提升。但主要的提升還是來自于最后的CSCNN,通過加入類目特定的視覺先驗來幫助CNN的學習。目前CSCNN已經在京東搜索廣告上全量,每天服務數億用戶和數百萬廣告主。
嘉賓介紹:
劉鵠
京東 |?算法工程師
劉鵠,清華大學自動化系碩士。目前就職于京東,搜索廣告排序模型方向負責人。工作曾在CVPR,NIPS,KDD等頂級會議發(fā)表。
免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!