導讀:隨著電商平臺對影象資訊的大量引入,透過影象分析來進行廣告點選率判斷就成了新的趨勢。本次分享的主題為CSCNN:新一代京東電商廣告排序模型,主要介紹視覺資訊在CTR排序模型中的應用。一方面,我們將介紹在工業場景下使用CNN將影象加入CTR模型聯合建模的方法;另一方面,我們指出傳統用於分類任務的CNN並不適合電商場景。將電商場景中豐富的、具有強視覺先驗的"商品類目標註"作為CNN輸入的一部分,將有效降低CNN訓練的難度,提升排序效果。
模型於2019年上線,是京東搜尋廣告業務中收效較好的一種演算法,也入選了今年的KDD論文集。在介紹方法的同時,本文還介紹了一些點選率模型整體最佳化方案,有助於幫大家對這種演算法在整體點選率模型框架中所起到的作用有更加深入的理解。
本次分享主要包括以下內容:
- 背景介紹
- CTR模型的最佳化方向
- 基於視覺資訊的CTR廣告預測
- 我們的工作:CSCNN
- 效果展示
01
背景介紹
京東搜尋廣告依託於京東和京準通的數字營銷平臺實現搜尋場景下的流量變現,每天幫助數百萬的廣告主觸達數億的京東使用者。
1. 京東9NAI平臺
京東廣告演算法團隊主要做京東電商平臺下全場景的廣告流量變現,包括的業務線包括搜尋、推薦、站外、線下、品牌,360營銷等等。用到的主要的模型,除了CTR模型,還有CVR、出價、影象、創意模型等,這些都依賴於京東自研的9NAI的機器學習平臺。該平臺擁有離線訓練,離線預估,線上inference、 模型的發版等功能。整個平臺的核心基於TensorFlow框架搭建,並根據業務進行了效能最佳化,離線訓練的排程則基於k8s開發。
2. 電商環境下最佳化ECPM的主要方式
上圖是京東搜尋廣告的直觀的展示介面。當用戶搜尋Query為"連衣裙"時,前序模組會召回n個廣告,都是和連衣裙的Query強相關、符合Query約束的商品。
ECPM排序的主要工作是n個廣告內部順序的精排。在廣告場景下,排序的指標就是平臺的營收。
具體來看,作為CPC廣告,廣告主為每次點選支付確定的出價bid。因此每次展現平臺所獲得的價值,就等於使用者點選廣告的機率再乘以這次點選的出價,即ECPM ( effective cost per mile,千次展示期望收入 )。但是有時需要考慮Query下所有展現給使用者的商品對平臺帶來的總價值,即此時需要最佳化所有展現給使用者廣告ECPM的和。但由於使用者Query為"連衣裙"時,使用者的下拉深度有限,所以該問題是有約束的最佳化:在使用者看到有限深度廣告的前提下,極大化使用者對平臺的總營收。
如果展現給使用者廣告之間的CTR條件獨立,可以透過貪婪方式求解最佳化,即:按ECPM從大到小依次展現給使用者,這樣Query下的整體收入最高。
而ECPM中的第二項bid是由廣告主給出的。假如用ECPM的序作為訓練和預估的指標的話,廣告主可能透過調bid來hack模型系統。為避免這種情況,我們一般在離線時採用AUC作為訓練和評估指標,透過訓練CTR排序效果更好的模型,來間接提升線上ECPM排序和線上收入。
02
CTR模型的最佳化方向
CTR ( Click-Through-Rate ) 即在建模展現這條廣告的情況下,使用者點選的機率。在搜尋的場景下,該機率可以描述成依賴於4個不同型別輸入的函式:
- Query:描述使用者搜尋意圖。
- 使用者側特徵:描述使用者的興趣、偏好。
- 商品側特徵:描述這個商品是否優質。
- context特徵:描述使用者搜尋時屬於怎樣的場景,是上班的時候搜的還是週末搜的,此時是否有活動。
1. 特徵工程與提取資料
特徵工程主要包括以下幾點:
多模態資訊建模:
- 人工特徵:一般在構建CTR模型的初期,會花很多精力做人工特徵,比如說ID類的或者是實數的特徵。透過構建有區分性的特徵來最佳化模型的效果。
- 文字特徵:描述細粒度Query中的使用者意圖。
- 使用者側特徵:對使用者和商品之間關係的建模。比如說對使用者序列進行建模,或者是對使用者和商品之間的互動關係做圖表示建模。
- 影象特徵:它和前面的資訊源的模態不同,但在多媒體的場景下,影象一般是和文字一起構建完整的商品資訊展現給使用者,所以這部分的建模也很有必要。
特徵的交叉:FM 、FFM、DCN等替代繁重手工特徵交叉的方法。
解決過擬合問題:解決特徵長尾稀疏時,embedding的過擬合問題。
2. 對CTR模型做目標函式刻畫
度量學習問題:之前給出的搜尋場景不是很適合做pointwise的模型,主要的原因在於在搜尋的場景下,候選集很有限。比如說搜連衣裙的時候, n個商品都是連衣裙,並不需要區分使用者點選連衣裙商品和鞋子商品的機率的高低,因為它沒有可比性。所以在搜尋場景下,做得更多的是在小候選集下的最佳化過程,此時需要做一些Query下的AUC的訓練和預估。
Selection bias 問題:主要描述的是在電商場景下會出現一些訓練集和測試集不一致的情況。測試集指的就是線上預估的集合,因為在線上召回幾百個商品,要對這幾百個商品進行排序的情況下,因為實際上一頁展現的商品有限,可能最終展現給使用者只有頭部的這幾個有label的商品。所以在離線評估的時候,只能評估這幾個商品的使用情況,但是在線上Serving的時候需要對整體進行排序,就要解決Selection bias的問題。
長期回報問題:在上一頁PPT中給出了一些簡單的假設,是當上下的商品沒有耦合關係的情況下,可以做貪婪CTR模型。如果有耦合關係,可能就要對搜尋詞下的整個使用者對電商平臺產生的回報,即加和的Reward ( 長期回報 ) 建模。
3. 結合系統架構的工作
Online Learning:線上系統中資料分散式是時變的。工程上的傳統方式是做定期重啟的全量訓練。但由於資料量大,訓練很慢,依然會導致訓練和預估存在時間/分佈的gap。online-learning是一種很有用的方向,透過流式的資料預處理和訓練,使模型緊跟線上分佈,解決時變帶來的gap。
線上分散式serving:由於單機記憶體的限制,線上模型的體積會受到約束。我們透過分散式和模型並行支援TB型的模型的載入,同時保證模型各部分引數版本一致性。放開了線上記憶體的限制,增加模型的表達能力。
線上gpu serving:放開線上計算複雜度的限制,有助於使用更深的更復雜的模型結構來增加模型的表達能力。
所以說從整體上來看,本研究所探討的使用視覺資訊提升排序模型效果的工作,主要還是集中在第一部分——特徵和資料建模中多模態的建模。透過最佳化這些影象的特徵建模,能夠得到商品側更好的展現效果,進而提升使用者對於商品的點選率。
03
基於視覺資訊的CTR廣告預測
1. 視覺資訊在商品展現中給人呈現的印象
具體Intuition可以從這張圖中看出來:在整個搜尋版面中,每個商品都是圖文結合的。商品主圖的版面很大,有很強的視覺衝擊力,而且主圖中會包含很多細節資訊,比如說材質、紋理、款式等,這些資訊是難以透過title、ID類特徵或者是一些屬性資訊體現出來的,只能透過影象來提取這些細節資訊進行建模。而且在訓練的過程中,只對這些ID類特徵進行辨別,可能還會遇到一些稀疏或者冷啟動的問題。假如使用CNN來提取影象特徵的話,更有可能來避免這些事情來提升模型的泛化性。
2. 使用影象建模的瓶頸
工程實現較為困難:此前用到的一些點選率預估模型都是比較簡單的MLP的模型,他們其實訓練和serving都是非常快的。但是加上CNN之後,訓練會出現效能瓶頸,導致模型更新週期更長;serving也會出現非常嚴重的效能瓶頸,可能會直接影響線上服務的時遲。
建模效果收益有限:
在使用影象特徵之前,我們已經提了很多的商品側的特徵,傳統建模方式不能完全保證從影象中來獲取到的是增量細節資訊。假如只提取到一些和已有屬性或者類目重複的資訊,那麼引入CNN直接建模影象的意義就很小了。
和傳統影象的任務不同,例如檢測分割或者是分類問題的監督訊號非常強,但點選率預估是一個監督訊號很弱的場景。使用者點或者沒點二分類場景中,本身就是包含了一定的random noise。在這種監督訊號不強、有噪的情況下,訓練好CNN是困難的。
3. 問題的解決
下面我們主要針對這兩點做了一些已有方法的調研。
- 固定提取embedding影象:不做二階段的訓練,從而規避前述問題。但是固定的CNN提取出來的特徵,無法保證和已有的屬性、類目資訊不產生交疊,因此CNN提供的增量資訊有限。
- 端到端的CNN和CTR模型聯合的訓練:絕大多數工作還都是在做離線的評估,很少有做工業級資料的線上serving。所有工作都直接將傳統用於影象分類的CNN直接拼入CTR模型中,並沒有做任何結構的改進以適配當下問題 ( 後續會說明傳統CNN解決CTR問題的不足 )。
- pre-training:使用影象分類/只基於影象的CTR問題,做pre-training。以期獲得二階段更好的效果。
04
我們的工作:CSCNN
接下來介紹的是在KDD 2020上發表的:專門用於視覺感知的電子商務中的點選率預測場景下的類別特定的神經網路。
研究實驗資料集來自JD.com中的廣告展現、點選日誌,前32天的100億樣本訓練,第33天的50萬條樣本測試。我們也在JD.com上數億活躍使用者的線上場景中做了AB測試,結果表明本方法可以顯著提升線上效果。目前本方法已經在JD.com最大的廣告位上達成了全量。
1. 研究的出發點:CTR模型建模本身存在的問題
傳統使用CNN引入影象資訊的模式,屬於Late Fusion。這種方法從CNN提取出embedding,再和已有的特徵一起參與 CTR的模型建模,本身就存在一些問題。
- 資訊浪費:在建模影象之前,模型透過類目等id類特徵就已經知道這個商品是連衣裙了。而這些視覺先驗現在還沒有加到CNN的建模中來,即這部分的資訊被浪費了。假如知道這些先驗,CNN的任務就會更簡單些。換句話說,CNN的任務應該是:在知道該商品為連衣裙類目的情況下,提取出連衣裙相關的特徵、捕獲連衣裙的細節。假如能把已有的視覺先驗加到CNN的輸入中,CNN的訓練和 serving效果都會更好。
- 包含與類目無關的資訊:如果把這些有視覺先驗的資訊提前告訴CNN,它就有可能避擴音取到一些與類目無關的資訊。對於連衣裙圖片,可能背景中有一些和類目相關性不高的物品。我們可以根據類別先驗,避免將背景噪聲耦合進來。
綜上,我們整體的方向就是透過已有的影象之外的視覺先驗,幫助CNN的學習。
2. SENet作為特徵再校準模組的作用
前期的調研中,我們發現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進行的工程實現
再介紹一下為了解決前面說到的一些工程實現的問題,和對應的加速方法。
這張圖是模型系統的簡化圖。從右下角開始看,特徵透過線上feature dump下來。由於線上預估時實際上沒有用到影象,所以這部分特徵裡也是沒有影象的。
經過對相同商品ID及其影象特徵的離線拼接,特徵中就同時包含了影象特徵、類別特徵等三部分的特徵,融到一起得到了一個端到端的帶CNN的 CTR 預估訓練模型。
端到端訓練之後,會產生這樣一個問題:CNN部分線上serving緩慢。我們採用了一種空間換時間的加速方式。具體是我們先對全站商品的CNN embedding進行離線預估,形成詞表,把這個詞表和模型的其他部分一起載入到線上的系統中,線上就可以直接透過商品的ID來查到商品的embedding。
之所以這樣做,是因為統計發現廣告主更換商品主圖的頻次很低。每天更新模型,每天使用最新的 CNN產出線上用的Lookup Table ( 查詢表 ),對這種低頻變化的主圖是穩定可靠的。在線上透過20G的查詢表,我們在CPU的機器上實現了20毫秒以內的tp99 ( 99%以內網路需求的最低延時 )。
4. 離線訓練加速
加入CNN之後,原來可能一天能訓練好的模型需要數天時間才能訓練好,CNN在這部分的離線計算瓶頸比較大。
具體進行離線加速的方式包括兩部分:
- 按照商品的主圖進行聚合。我們將至多25個對應同商品的不同的請求聚合 ( 他們可能是來自不同使用者的,但是他們看到或者點選了相同的商品 )。這批聚合了的請求在訓練的過程中由於影象是相同的,所以CNN這部分只用forward和backward一次。這種方式在不影響離線訓練效果的情況下,能極大提升離線訓練效率。
- 單機4卡的同步更新。做這件事情的主要意義是可以節省CNN梯度回傳的次數,4GPU只回傳一次梯度,節省了 PS框架下server傳輸成本,進而提升離線訓練速度。最終在百億規模的訓練集上我們可以在24小時內完成離線訓練。
05
實際效果
接下來介紹整個演算法以及工程架構在線上和公開資料集上的實際效果。
1. 演算法模型在公共資料集中的效果
在公開資料集的實驗用了比較簡單的CTR模型,來檢驗影象特徵提取的這部分究竟起到多大的作用。這裡沒有看它和CTR模型的耦合,基本只關注影象。以亞馬遜的資料集為訓練集,每個子類裡邊都有幾十類的商品,採用AUC評估指標,主要的對比方法分成以下幾種:
- 不依賴於影象的方法;
- 依賴影象的方法;
- 在影象之外加入類別資訊的視覺先驗的方法。
和我們最接近的方法是SCA,它是在image caption ( 影象描述 ) 方向的工作,在卷積的後幾層加入空間域和通道域的注意力機制。
對比之後發現,加入影象資訊相比不加影象有非常大的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. 演算法模型在工業資料集中的效果
工業資料相比於公開資料有很大的不同,主要有兩大特點:
- 資料量非常大:150億的資料,3000多類別數,還包含各種各樣已有的人工提取的特徵。
- 工業資料的特點:長尾、稀疏。
這裡我畫了幾個特徵的例子。比如Query這個特徵,有90%的Query出現的次數不足10次。在這種非常稀疏的場景下,特徵泛化性差,過擬合和冷啟問題嚴重。
我們的建模基礎——CTR model是三層的DCN的模型,提取影象資訊的網路採用了Res18的網路。我們在它的基礎上進一步增加了category specific 模組。
研究發現,在基礎的模型下,加入這種固定的CNN embedding已經有了一些提升效果,但並不是很大。在加入了Fintune遷移學習之後,得到了進一步的提升。再加入CBAM的模組,以類似self-attention的方式來決定哪些特徵應該加強或者減弱,整個模型效果又得到一點點提升。但主要的提升還是來自於最後的CSCNN,透過加入類目特定的視覺先驗來幫助CNN的學習。目前CSCNN已經在京東搜尋廣告上全量,每天服務數億使用者和數百萬廣告主。
今天的分享就到這裡,謝謝大家。
在文末分享、點贊、在看,給個三連擊唄~~
嘉賓介紹:
劉鵠
京東 | 演算法工程師
劉鵠,清華大學自動化系碩士。目前就職於京東,搜尋廣告排序模型方向負責人。工作曾在CVPR,NIPS,KDD等頂級會議發表。
分享嘉賓:劉鵠 京東 演算法工程師
編輯整理:李沛欣
出品平臺:DataFunTalk