Categories
程式開發

深度學習在省錢快報推薦排序中的應用與實踐


導讀:省錢快報是一家中小型綜合類電商APP,近2年平台規模有了較大增長,AI在平台業務發展中發揮了巨大作用。本文以推薦場景優化在省錢快報的發展為脈絡,對於中小型電商公司在資源有限的客觀條件下,對機器學習和深度學習的運用進行了架構和模型的相關探索

01. 業務背景

省錢快報推薦業務主要涉及首頁feeds推薦、詳情頁相似商品推薦、收藏、個人中心等其他入口的推薦,業務指標著重關注ctr/cvr/gmv等,產品形態上和淘寶、京東等大致一樣,不同之處在於下單的動作發生在第三方app上。簡單來說用戶在快報上的成交鏈路為瀏覽->點擊->領券->跳轉至第三方平台詳情頁並下單。因此不同於一般電商業務,快報的交易場景下轉化漏斗較多,漏斗各層都需要關注。點擊率、領券率、下單率每個環節都需要最優化,而各個指標又相互牽制相互影響,優化過程困難重重。

深度學習在省錢快報推薦排序中的應用與實踐 1

02. 系統架構

深度學習在省錢快報推薦排序中的應用與實踐 2

數據流

數據流分為離線部分和實時部分,離線部分主要包含了app曝光日誌、線上服務特徵日誌的收集、拼接、清洗等,大體上是一個label match的過程,這一過程的準確性決定了後續階段模型能夠給業務帶來的收益,如果label match出錯了,那訓練出來的模型也必然是不可用的,一定不會帶來好的應用效果。數據拼接的任務一定要盡可能的保證曝光、點擊、訂單的量和比例都能和BI報表的統計數據對的上,這是訓練出可靠模型的前提。快報團隊非常重視數據的準確性,我們從多個方面檢驗和保證最終數據的準確無誤。這中間最重要的是需要設計一個跟踪用戶請求、曝光、點擊、訂單整個轉化鏈路的唯一ID,我們稱之為traceID,主要通過這個ID來完成label match的過程。

模型訓練和評估

快報模型團隊在tensorflow的基礎上自研開發了一套輕便靈活的模型訓練系統,整個模型訓練、評估和上線的過程都通過配置文件完成。另外鑑於訓練資源的問題我們開發了增量訓練的功能,即base模型為過去90天的數據訓練的模型,之後的模型在base模型的基礎上逐天增量訓練,一般情況下增量訓練能在一個小時內完成。同時相比於batch模型 ( 每天訓練過去90天的模型 ) 增量模型能更好的學習到近期的數據分佈,從auc上看這種訓練方式能提升接近1個點的auc。

模型訓練部分有幾點經驗可以說一下:

  • 為了保持線上、線下特徵一致性,我們在線上會直接把特徵落下來。第一,省去線下再次進行特徵抽取的過程。第二,可以盡可能的保證特徵的一致性,避免因為線上、線下特徵不一致導致模型效果不理想。
  • 訓練數據集和測試數據集應該嚴格按照時間劃分,防止發生穿越情況,測試數據集必須是”未來”的數據,一般我們會用昨天以前的若干天數據作為訓練數據,用當天( 可能若干小時,一般建議選擇8點到12點這段時間數據) 的數據作為測試數據,每次模型調參訓練時訓練集、測試集應當固定,以保證評估結果的可對比性。
  • 根據我們的經驗,從遠到近按天shuffle訓練的效果要好於多天一起shuffle訓練,auc在千分位有若干點提升。
  • 評估主要看auc、user auc。

模型在線服務

對於深度模型,模型服務模塊我們直接使用了tensorflow serving,FM模型的服務是自己開發的Java微服務,不多表述,主要說一下tf serving在我們預估服務上的應用。

tf serving有很多優秀的特性:

  • Google開源,開箱即用,安裝、使用簡單
  • 支持模型版本控制、回滾
  • 支持並發,吞吐量高
  • 支持模型熱更新
  • 支持RESTful/HTTP或者gRPC接口

自己開發深度模型的預測服務需要大量的工作,鑑於G廠已經開源了tf serving,而其性能經過驗證也是符合我們線上要求的,所以我們利用tf serving來完成模型的預測工作。由於在FM的階段我們已經積累了很多模型服務的基礎功能,例如模型熱更新、模型上線/下線切換、版本管理等等,因此這些沒有用tf serving自帶的功能,而是主要通過集成consul來配合完成上述功能和預測服務的註冊發現的。

在推薦業務的模型中我們用了大量ID類特徵,所以開了比較大的特徵空間 ( 2的28次方 ),整個模型文件大概19G左右,線上預測的平均耗時在10ms左右。根據我們的經驗,最能提升性能的優化就是對請求進行分片,並行請求模型服務,這樣大概能提升40%左右的延時,當然耗時主要還是跟模型的複雜度有關,因此需要在模型複雜度( 效果) 和耗時之間做出合理權衡。

03. 模型演進

快報推薦模型的演進過程大致是從FM->DeepFM->custom DNN這樣的一個過程,中間還經歷了Din/Dien/ESMM等探索和過渡期。

深度學習在省錢快報推薦排序中的應用與實踐 3

base模型 ( FM )

一般的模型演進過程都是從LR或者GBDT開始,我們直接跳過了LR的階段,直接過渡到了FM作為第一個模型。究其原因,FM早在13年左右就已經開始被大範圍使用,而我們在18年中才開始應用模型進行排序工作,FM模型的效果已經得到各大廠的廣泛驗證,因此我們也比較有信心將FM作為base model。

深度學習在省錢快報推薦排序中的應用與實踐 4

相比於歷史更悠久LR模型,FM模型可以自動做二階的特徵組合,相比於需要人工進行特徵組合的LR來說FM在這方面完爆之。

深度學習在省錢快報推薦排序中的應用與實踐 5

看公式,FM只是比LR多了後面交叉項的因式分解部分,實際上這也算是如今大行其道的embedding的雛形了。公式上看直接計算FM複雜度是O(KN2),但是上述公式在簡化後可以在O(KN)複雜度內計算,而在稀疏情況下往往大量x為0,因此計算通常遠遠小於O(KN)的複雜度,同時稀疏模型的模型文件也可以大幅壓縮,在實際應用中我們去除了w和v全為0的參數,模型文件壓縮了80%左右,同步模型所需的帶寬和predictor服務所需的內存也大幅減少。

我們上線的第一版模型是FM+FTRL的組合,經過多次迭代auc大致在0.68~0.69左右,線上累計ctr提升30%+。

FM到DeepFM

經過小半年的迭代,FM逐漸有點力不從心,在特徵上挖掘和利用的差不多的時候我們逐漸開始把方向轉向深度模型,希望深度模型能進一步帶來效果提升。

深度模型在15、16年之後慢慢變成主流,在Google開源tensorflow,發表wide&deep模型,推出alpha go之後,深度模型便徹底火了起來。但是在推薦/搜索領域深度模型真正應用的好的也就是頭部幾個大廠,小公司印象裡有成功應用的並不多見。我們在18年底押注深度學習,經過調研後第一個模型便確定為DeepFM,因為FM模型我們已經做的相當成熟練,因此從FM升級到DeepFM是理所當然。

深度學習在省錢快報推薦排序中的應用與實踐 6

DeepFM本身並不復雜,從本質上講只是在FM的基礎上增加了若干層神經網絡而已,embedding層都是共享的,因此可以端到端的訓練。相對於FM模型,DeepFM的NN部分可以增加高階的特徵交互,彌補FM在高階特徵組合上的補足( 原理上FM可以任意階組合,但是受限於計算複雜度,一般應用中只有二階)。相較於FNN這種把FM的輸出當作NN輸入的模型,DeepFM可以端到端的訓練,而且能同時保留二階和高階的特徵組合。

在FM遷移到DeepFM後,並沒有取得預期的效果,auc和FM持平,經過多次調優依然不能超越FM。究其原因,我們推測有如下兩點:

  • 在我們的推薦排序場景下二階的特徵組合已經可以完全滿足組合特徵的需求;
  • 我們FM實現過程中未出現的特徵參數是沒有初始化的,也就默認是0。但tensorflow會初始化一個隨機值,這有可能影響到最終評估的效果。

後來翻閱各種資料,受YouTube Net ( Deep Neural Networks for YouTube Recommendation )、和DIN ( Deep Interest Network ) 等文章的啟發我們把用戶的點擊序列加入到模型當中,用戶的行為序列往往能非常好的刻畫該用戶的興趣分佈。和DIN不同的是,我們沒有對用戶行為序列做attention,我僅僅把序列做了一次sum。總的來說和sum相比attention並沒有明顯優勢,而且計算量更大。另外average的效果也略差於sum,看其他一些團隊的經驗貌似也有類似結論,所以我線上模型僅對序列做了sum。這一次改動auc提升了2個點左右,線上ctr有接近10%的提升。

其他模型探索

在DeepFM成功上線並取得不錯效果之後,我們又花了很長一段時間探索了諸如DIN/DIEN、ESMM、DCN、xDeepFM等當時一些思路新穎的模型,下面主要回顧一下在這些模型上的嘗試。

1. DIN/DIEN

深度學習在省錢快報推薦排序中的應用與實踐 7

DIN/DIEN是阿里媽媽團隊的ctr模型,主要用在廣告ctr預估上業務上,當然推薦排序場景也可以應用。上圖中和Base模型相比DIN的主要思想是引入attention,一般網絡中對序列特徵等多值/變長的特徵處理方法通常是embedding之後做sum/average/pooling等操作,將其變為定長。序列有長有短,這類操作往往導致信息損失和誤差。我們認為序列中每個元素都代表用戶的興趣點,引入attention之後便可以通過網絡來學習整個序列,每個點都可以學到一個歸一化的權重,整個序列可以通過加權和來表示,則興趣的表示更加合理,理論上效果要好的多。

深度學習在省錢快報推薦排序中的應用與實踐 8

而DIEN更進一步引入RNN來提取興趣,序列按時間先後順序先通過RNN再對RNN的輸出做attention,可以兼顧長短期興趣及興趣的演進,因此比DIN更加合理。

我們在實驗中使用了過去30天點擊過的物品序列,物品所屬類別序列,物品品牌序列等,序列長度為50,其他特徵方面和DeepFM差不多,經過多次迭代和調整,線下auc相比DeepFM沒有提升,最終沒有上線。 DIN/DIEN對數據要求比較高,我們最長商品點擊序列定為50,實際上大部分樣本序列都非常短,序列的延續性不高,這些因素都影響了模型能力的發揮。

2. DCN、xDeepFM

深度學習在省錢快報推薦排序中的應用與實踐 9

DCN和DeepFM相比主要區別是左邊FM部分替換為一個cross network的網絡,其中第L+1層表示為Xl+1=X0XlTwl+bl+Xl,可以簡單理解為前一層和第0層 ( 即輸入層 ) 的特徵組合。雖然cross net可以非常方便的控制任意高階的特徵組合,相比FM的二階組合更具優勢,但是從公式可以看出每一層都與輸入層有太強的關聯,因此高階的特徵交叉和一階特徵有很大相關性。

微軟出的xDeepFM則更進一步將DeepFM左邊FM部分替換為CIN ( Compressed Interaction Network ),xDeepFM及CIN的結構如下圖:

深度學習在省錢快報推薦排序中的應用與實踐 10

深度學習在省錢快報推薦排序中的應用與實踐 11

Xk即為K階的特徵組合,相比於DCN中的cross network,CIN表達能力更強。在CIN中第K層表示為Xh,*k=∑i=1Hk-1j=1mWijk,h(Xi,*k-1·Xj,*0),通過堆疊點乘和1維卷積操作,CIN能更充分的進行高階特徵融合,在加上右邊的RNN,使得模型可以兼具更強的記憶和泛化能力。在我們的實驗中,使用的特徵和base model保持一致,僅僅改變網絡結構,實驗結果是DCN和DeepFM持平,xDeepFM在auc上僅有非常微弱的優勢,但其計算量太大,線上預估時長較長,最終沒有上線。

3. ESMM

ESMM也是阿里團隊出的模型,其主要思想是將ctr/cvr兩個目標放在統一的空間裡進行訓練,以解決cvr模型對於曝光樣本的不可見和多目標優化、訓練的問題,這個模型會放在後面多目標優化一節詳細說明。

4. 自定義網絡模型

經過DIN/DIEN/DCN/xDeepFM等一系列模型的研究之後,我們開始反思為什麼這些大名鼎鼎的模型在我們的業務中沒有達到預期?一方面業務不同、數據不同,沒有一個萬能的模型。另一方面我們在照搬這些模型的時候也許有一些細節沒做好,這塊後續還會進一步研究。之後我們從業務出發,逐漸開發和調整自己現有的網絡結構和參數,最終我們的自定義網絡經過多次迭代和優化,累計auc提升了接近2個點,下面是最終的網絡結構。

深度學習在省錢快報推薦排序中的應用與實踐 12

模型效果對比

深度學習在省錢快報推薦排序中的應用與實踐 13

5. pairwise model

我們在pairwise model方面也做了好一些嘗試,模型上改動不大,主要是loss部分改為BPR ( Bayesian Personalized Ranking ) loss,訓練數據由pointwise調整為pairwise。

在pair構造方面主要嘗試過以下幾種方式構造 ( positive>negative ) 的樣本對:

  • 同一次請求內行為:訂單>點擊>曝光,對曝光進行下採樣,控製樣本量
  • 同一次session內行為:訂單>點擊>曝光
  • 用戶一天內推薦列表所有行為:訂單>點擊>曝光,對曝光進行下採樣,控製樣本量

以上方案均按skip above思路只用最後一次點擊以上的曝光樣本做負樣本。

pairwise方法考慮到了item之前的偏序關係,相比pointwise方法在列表排序場景中顯得更合理,但是在實際應用中沒有達到預期的效果。我們總結了pairwise方法的一些不足之處:

  • 評估指標調整為ndcg,但是用下單、點擊、曝光來作為標籤也不是很合理
  • 樣本量和pointwise方法相比會急劇膨脹,如果不做合理的下採樣,模型將難以訓練
  • 對數據噪聲更敏感,一個錯誤數據可能會影響到許多pair
  • pair的構造過程相當於強行改變來原有的數據分佈,樣本構造不合理則模型很難有好的效果,而構造合理的pair往往很困難

根據我們經驗,pairwise方法的難點主要集中在樣本構造方面,想要合理的構造訓練的pair對是困難的,訂單和點擊構造多少pair、訂單和曝光構造多少pair、點擊和曝光構造多少pair都是很難確定出合理的數值的,考慮的訓練成本問題需要進行負採樣,這也會損失部分信息,從我們的經驗來講,總體上pairwise方法不太適合做feeds類產品的排序而更適合在搜索領域去應用。

6. 模型總結

在省錢快報推薦業務近2年的模型應用中,我們總結了以下一些經驗:

  • 在模型應用過程中選一個好的base model是第一步,強烈推薦第一版模型先上LR/GBDT等模型。第一版模型主要是打好一個基礎,在數據、特徵、label match、模型評估等方面先建立起完善的pipeline和環境,之後才能更好的發力。如果第一個模型太過複雜,模型可解釋性差,那就不容易排查問題,而且複雜的模型對數據/特徵/評估等環節的要求更高,因此第一版模型不宜採用太複雜的模型。
  • 沒有通用的模型,只有適合的模型,模型要隨業務變動,往往根據業務特點針對性挖掘一些好的特徵、增加一些訓練數據比應用更新更複雜的模型來的更直接,所以我們也一直強調數據大於模型。
  • 線下實驗在評估的時候,一定要對齊測試樣本,如果不能對齊測試集則auc就沒有可比性。
  • 每次線下實驗不應該加太多特徵、調太多參數,盡量保持耐心,每次實驗最好只改變一處,這樣方便得到可靠的實驗結論。
  • 輕易不要改變原始數據的分佈。

對於深度推薦系統,有如下一些經驗與思考:

向量化的必要性:

應該先從一個更宏觀的角度來看向量的問題,不只是在推薦系統,或是NLP這些,而應該一切事物。如果前一句成立,則向量化就是必要的。而為什麼說一切事物,其靈感直接來源於NLP,如E(法國) + E(首都) ~ E(巴黎)。如一個個詞一樣,所有事物都在某個空間中可以用向量準確的表達,在推薦系統則可能有E(couponA) + E(couponB) + … ~ E(couponC)。但是,顯然我們沒有NLP中對詞的表達準確,所以一個優化的思路就是如何更準確的表達向量。要更準確,對應向量所要含有的信息量就應該足夠大,顯然現在使用的16維度向量不可能很好的包含這些信息。理想狀態下,人看到一個商品,基本已經知道了這個商品的大部分特徵,如類目,品牌,大致價格等。目前的算法是死的,要人為的指導它學習的方向,所以用商品向量+類目向量+品牌向量…作為一個商品就會有更足的信息這也是加類目序列的初衷。同時這樣也可以看作將原來16維度的商拓展到了16*N,當然這樣的拓展是不如直接使用高緯度向量的。

關於不做Mask:

輸入的序列必須定長,假設取用戶歷史最近的50個點擊,必然有很多用戶沒有50個點擊。對於點擊序列不做Mask將輸入相同的隨機初始化的向量,如下所示,全0向量對”缺失商品”的表達能力,很可能是不如網絡學習的結果的。注意:這種方法是對於隨機初始化的向量,且向量可學習。

序列:[S:12312,S:2345235,S:345345,S:-1,S:-1,S:-1,S:-1,S:-1,...]
 S:-1 -Hash-> 325344354 -embeding_lookup-> [.3,.5,.6,.7...]
 S:-1 -Hash-> 325344354 -embeding_lookup-> [.3,.5,.6,.7...] -Mask-> [.0,.0,.0,.0....]

關於特徵交叉:

很多方法如PNN,LatentCross都是在對特徵做交叉以更深的挖掘特徵中信息。快報目前的特徵是全部哈希後的隨機初始化向量,在同一個特徵域內,網絡能對這種交叉關係進行比較好的學習。所以PNN中的以特徵做點積、內積的方式並沒有收益。

DeepFM,FM也是一種特徵交叉的方式,不同於一般的經驗,在我們的數據集上去掉FM部分是有一些收益的。我們的理解是普通特徵經過了embeeding ( 如性別0, 1->性別向量X1, X2 ) 再通過網絡訓練,一方面本身的信息量放大了,另一方面特徵直接的交叉關係可被網絡學習到。所以DeepFM在我們的特徵工程下是負收益。

04. 多目標優化

快報推薦業務主要關注ctr、cvr兩個指標 ( 當然還有人均gmv、人均訂單、arpu等 )。

ctr/cvr平衡

針對ctr、cvr我們分別訓練了2個單獨的模型來做針對性優化,其中ctr model以曝光為負樣本,點擊為正樣本,cvr model以點擊為負樣本,下單為正樣本。

做過電商的都知道,ctr和cvr往往反著來的,提升ctr的同時cvr就可能下降,提升cvr那麼ctr就可能下降,算法同學需要權衡ctr、cvr兩個指標取得一個最優解。

我們線上最終排序的時候基本上是CTRt*CVR這種方式,對於t的確定,我們通過線下計算來確定,基本上希望按最終公式排序後的點擊auc能夠不降或者微降,同時下單auc能提升,因為總的來說先有點擊後有訂單,所以點擊這一步需要保證不能降太多。最終我們用這種方式上線後ctr微降1%左右,cvr提升10%,總體達到了不錯的效果。

目前我們的目標還比較少,基本通過上述公式可以比較好的滿足業務需求。

我們也嘗試過在線上通過一個簡單lr模型來更好的擬合ctr和cvr,但是最終效果不太理想,從總的思路來講我們需要讓整個轉化漏斗的每個環節的敞口最大化。

ESMM

深度學習在省錢快報推薦排序中的應用與實踐 14

在ctr和cvr分別建模的情況下cvr模型由於下單樣本相對於曝光/點擊樣本來說非常少,導致cvr模型難以充分訓練。另外只用點擊到下單的樣本則丟失了曝光樣本當中的大量信息,模型的預估也存在偏差。受到阿里ESSM模型的啟發我們也嘗試將ctr、cvr融合在一個模型進行建模。底層的輸入一致,ctr任務和cvr任務共享embedding層,對於cvr來說可以在整個曝光的大空間內學習embedding向量。

因為有兩個網絡因此模型訓練時長大致也增長一倍,從模型服務的角度講好處是請求模型時只需要請求一個模型就可以。在具體應用時我們可以得到三個預估數值:pctr、pcvr、pctcvr,在線下評估的時候分別評估了pctr對應的點擊auc,pcvr對應的下單auc,二者組合對應的點擊/下單auc ,從最終線下評估結果看ESMM要差於兩個模型分開訓練,最終線上的效果也低於基線。

ESMM之所以沒有達到預期,猜測有若干原因:

  • 在我們的場景中往往ctr高的商品cvr低,cvr高的商品ctr低,兩個任務的關聯性有時候剛好是反的。
  • 我們沒有精細調整兩個任務loss的權重,也許這塊可以優化。
  • pcvr其實實際是曝光到下單也即pctcvr,論文中關於ctr、cvr、pctcvr三者的關係說的有點模糊。

在ESMM方面有應用經驗的同行可以給點意見,一起交流分享一下。

05. 模型調優

超參數及特徵上的探索

由於模型較為複雜,數據量大,訓練成本高,無法用網格法暴力調參數,使用分階段調參。

順序為:隱層大小->學習率->Batch Size->Drop out/L1/L2的順序進行參數調優。

在快報的數據集分佈上,改變學習率帶來的提升比較明顯,由於Adam優化器佔用內存大,使用Adagrad所以對應的batch size較小,可能不同於其他文章中分享的經驗。網絡層數越高準確度越高,結構影響很小,當達到一定層數後再提升帶來的收益很小,綜合考慮計算成本取了500*300層。

輸入的數據全部是哈希之後embedding的所以有一個哈希空間和embedding向量維度的取捨,向量維度越高越準確,哈希空間也是。所以要根據機器內存綜合考慮哈希衝突率和向量維度的影響。

下表為在其他參數不變的情況下,調整不同參數帶來的AUC變化。

深度學習在省錢快報推薦排序中的應用與實踐 15

激活函數

激活函數方面,選擇了常用的Relu。嘗試過prelu和dice ( DIN中提出的激活函數 ),有略微的正收益,其中Dice>Prelu。

值得一提的是Dice激活函數在運算中進行了相當於BatchNorm的操作,在預測中Batch有變化時,輸入結果將隨之變化。例如,輸入(x1, x2)得到預測結果(y1, y2)和輸入(x1,x2,x3)得到預測結果(z1,z2,z3)時會導致(y1 !=z1, y2 != z2),不便於Debug,故未應用在線上模型中。

特徵處理

數據和特徵對於模型的重要度不言而喻,在特徵挖掘方面因業務而異,沒有統一的標準,我們主要分用戶側特徵、商品側特徵、店鋪特側特徵、上下文及交互特徵等。

在特徵處理上我們基本分兩大類方式:

  • ID類特徵和category特徵在id化 ( 為了方便我們採用hash方式 ) 後做embedding。
  • 數值類特徵按等頻分桶 ( 部分特徵也會根據業務做一些數值變換 ) 進行離散化之後做embedding。

對於缺失值我們以業務字段對應的默認值填充。另外關於特徵選擇,我們首先會評估特徵的覆蓋率,準確性和獲取難度等。然後會做一下相關性分析,經過以上步驟如果特徵可用,我們會先直接加入該新特徵,並在後續考慮是否做一下特徵交叉等。

有了深度模型之後特徵選擇、特徵工程往往容易被忽視,因為什麼特徵都全部embedding之後放到網絡裡面就可以了,但是原則上加特徵之前還是需要做個簡單評估,並且建議特徵最好一次加1-2兩個,加特徵實際上是有成本的,盡量避免一次性進行大批量的特徵加入。

position bias

推薦列表上不同位置的點擊率天然有差別,我們在做排序時,需要考慮到這種差別。因為position是排序之後確定的,因此在預測時是不知道的,一般的做法是在訓練時加入position信息作為特徵,在預測時給position一個默認值,以達到消除position偏置的效果。一開始我們也是按照這個思路去做的,在預測時嘗試給過多個默認position,但是在線上實驗時,效果總是不及baseline。後來無意中看到Google的Rules of Machine Learning- Best Practices for ML Engineering一文中有關positional feature的rule才恍然大悟,原文引用如下,希望對在研究position bias相關內容的同行有所幫助:

Note that it is important to keep any positional features somewhat separate from the rest of the model because of this asymmetry between training and testing.
Having the model be the sum of a function of the positional features and a function of the rest of the features is ideal.
For example, don’t cross the positional features with any document feature.

也即在使用位置特徵的時候需要保證位置特徵和其他特徵相互獨立,而不論FM還是NN模型中位置特徵和其他特徵都有交互,因此線上效果一直不符合預期。受此啟發我們重新調整了模型之後上線效果和base比上下小幅波動,基本持平,之所以沒有預期的提升,我們認為在我們的場景中position bias的影響並不大。

06. 模型serving

tf-serving

tf serving這塊沒有太多可說的,部署也很方便,直接用docker去安裝就可以了,非常簡單。稍微不同的地方是我們對它做了一點包裝,給tf serving集成到了consul,以方便模型預測服務的微服務化。由於tf 模型內存消耗大,我們模型更​​新的時候不是熱加載的,模型更新過程中模型服務會中斷,這個時候系統會先把要更新的模型實例從consul上解除服務註冊,等到模型更新完成後重新註冊到consul上,然後繼續提供模型預測服務。考慮到流量問題我們模型的更新是一台一台依次更新的。

online feature

網上很少有人介紹模型預測部分線上特徵的構造,大體上基於tensorflow的模型在預測階段有兩大方案:

  • 所有特徵提取、構造的代碼寫成op,打到模型文件裡。這種方案輸入模型預估服務的一般是原始文本/數值特徵,特徵的提取轉換都發生在預估服務中,也就是tensorflow serving幫我們完成特徵提取/轉換的工作。
  • 特徵的提取和構造單獨抽出來,作為一個服務,客戶端先請求特征服務,由特征服務構造特徵並請求模型預估服務。這種方案下特徵處理在模型外部,輸入到模型的是處理好的數值特徵。

兩個方案各有優缺點,方案一更直觀一些,缺點是需要單獨編寫op,還需要保證特徵一致性,另外在預測服務機器資源緊張時大量特徵構造會拖累模型inference的速速。方案二流程上更繁瑣一些,需要把特徵構造抽像出來單獨作為一個微服務,但好處是可以減輕tensorflow serving的壓力,另外可以在特征服務上做針對性緩存進一步提升特徵提取的速度,減少大量重複計算。

我們經過反复考量最終選擇了方案二,採用方案二後調整特徵不需要重寫op,也更容易保證線上下線特徵的一致性,模型與特徵分離,線上特徵提取和落特徵日誌可以更靈活和方便,這些優勢給我們帶來了很大便利,讓我們後期各種模型迭代能很快地進行。

07. 總結

在深度學習火熱的大背景下,各個公司都在著力於如何用深度學習模型來提高自己的業務指標,快報作為導購領域的領頭羊也藉鑑了大量業界先進思想和模型,嘗試了許多種不同的排序模型,最終磕磕絆絆在業務上取得了相當不錯的成績。但我們模型演進的路徑卻不太一樣,我們最終借鑒了一些其他模型的思想構建了一個非典型性的神經網絡,在這中間最大的感想就是在不同階段不同場景需要找到適合的模型,模型本身沒有高下之分,重點還在於如何應用,而這需要長期的業務經驗的積累。

今天的分享就到這裡,謝謝大家。

如果您喜歡本文,歡迎點擊右上角,把文章分享到朋友圈~~

團隊介紹

省錢快報算法團隊 負責省錢快報 推薦、搜索 等業務的 支持效果提升。致力於打造一個面向業務的高效召回和排序算法平台,能夠在業務形態多變和新業務不斷開展的情況下,快速靈活的支持業務,持續優化底層召回排序策略和算法。在重視算法的同時,同樣重視策略、數據和工程體系,積極跟進業內最新的成果,面向業務做契合業務的實踐和創新。

參考資料

[1] Factorization Machines

[2] DeepFM: A Factorization-Machine based Neural Network for CTR Prediction

[3] Deep & Cross Network for Ad Click Predictions

[4] xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems

[5] Deep Interest Network for Click-Through Rate Prediction

[6] Deep Interest Evolution Network for Click-Through Rate Prediction

[7] Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate

[8] Deep Neural Networks for YouTube Recommendations

[9] Rules of Machine Learning- Best Practices for ML Engineering

[10] PAL: A Position-bias Aware Learning Framework for CTR Prediction in Live Recommender Systems

[11] BPR: Bayesian personalized ranking from implicit feedback

本文來自 DataFunTalk

原文鏈接

https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247498064&idx=1&sn=66db655be0bcc5e6ee0dc58f869ef6eb&chksm=fbd74b3ccca0c22aacea4a7aca9e803f4044f78ad056983484ebc5ab0c718773ebd4ee8204ea&scene=27#wechat_redirect