![](http://static.javashuo.com/static/loading.gif)
本文將介紹有好貨推薦場景下的排序算法。有好貨做爲淘寶典型的內容導購場景,產品的定位是幫助消費升級人羣發現口碑好貨。排序做爲推薦場景鏈路中重要環節,很大程度決定了推薦效率。過去一年,咱們在排序算法的超長序列建模、多目標排序、模型結構優化、Loss優化、LTR等多個方向進行了持續迭代,並取得了一些進展,在這裏分享給你們。
用戶興趣序列建模一直是推薦系統排序算法優化的重點,使用用戶的歷史行爲序列可以精準的預估用戶對當前內容的興趣偏好程度。受限於線上打分性能,難以對超長的用戶興趣序列進行attention建模,若是隻是簡單對超長序列進行mean pooling操做又會損失不少信息。針對這些問題,咱們使用超長序列子序列提取+Attention,以及多個子序列Mean Pooling的建模方案。
▐ 類目檢索序列 + Attention
介紹類目檢索序列以前,咱們先回顧下attention計算的公式:
![](http://static.javashuo.com/static/loading.gif)
當q和k不相關時,score(q,k)的值會近似爲0,基於此咱們能夠事先篩選出超長序列中與當前商品相關的內容做爲候選集進行Attention建模。
類目檢索序列採起的篩選方案是使用融合類目(大類目下使用二級類目,小類目下使用一級類目)進行篩選,而後進行Attention建模,篩選的過程以下圖所示:
![](http://static.javashuo.com/static/loading.gif)
在精排中,當前待打分商品對應的類目檢索序列會進行在線獲取,生成特徵後輸入模型中進行打分。精排中使用target attention對類目檢索序列進行建模,模型結構以下圖所示(真實模型中使用了多個序列進行建模,這裏爲方便表示,只列舉了兩個序列),其中「cate click seq」表示在線實時獲取的類目檢索序列。
![](http://static.javashuo.com/static/loading.gif)
添加類目檢索序列後,精排模型離線AUC+1.1%、PV_GAUC+1.7%、CLICK_GAUC+1.7%,在線實驗pctr+5.31%、uctr+1.60%、uclick+7.27%、dpv+7.32%。
有好貨粗排模型使用的是多塔的模型結構,沒法進行Target Attention建模。另外粗排打分的內容接近一萬個,在線獲取近萬個待打分商品對應的類目檢索序列,性能開銷大。針對這幾個問題,粗排採起了如下解決方案:
Ø 使用self-attention對類目檢索序列進行建模
Ø 離線計算類目向量、在線獲取用戶類目向量,輸入模型進行打分
![](http://static.javashuo.com/static/loading.gif)
因爲資源限制,離線計算獲得全部用戶的類目檢索向量沒法供在線獲取。所以咱們又進一步嘗試了 1)只預測60d活躍用戶以及 2)縮減維度預測全部用戶 兩種方案,最後咱們線上使用的是縮減維度的方案。
![](http://static.javashuo.com/static/loading.gif)
縮減維度預測全部用戶的在線實驗,pctr+2.19%、uctr+2.48%、uclick+4.73%、dpv+4.83%。
▐ 原始超長點擊序列建模
類目檢索序列只考慮了target item類目下的長期興趣,而忽視了其餘類目的長期興趣。爲了補充其餘類目的長期興趣,咱們嘗試對用戶的原始超長點擊序列進行建模,咱們主要嘗試瞭如下四種方法:
Ø mean pooling:對序列中每一個商品的特徵concat後,直接作mean pooling
Ø 全鏈接 + mean pooling:用全鏈接層對序列中每一個商品的特徵進行融合後,直接mean pooling
Ø 子序列提取 + mean pooling:根據用戶產生行爲的時間,將原始序列拆分爲不一樣的子序列,表示用戶不一樣維度的興趣,分別mean pooling後concat起來
Ø 動態路由 + target attention:利用動態路由算法提取超長點擊序列的k個興趣簇,構成新的序列,再作target attention
![](http://static.javashuo.com/static/loading.gif)
出於性能與效果的綜合考量,咱們最後線上使用子序列提取+mean pooling的方案,做用於粗排和精排模型,在線實驗效果以下表所示:
![](http://static.javashuo.com/static/loading.gif)
場景的優化目標過去一直關注在用戶的一跳點擊和二跳點擊行爲,而忽視了用戶的種草行爲。
從導購場景角度來看,種草行爲相比點擊行爲也更能反應用戶的心智,所以
場景
的優化目標
進一步
升級爲提升用戶的種草效率,這裏種草指在場景內的加購和收藏。
▐ 多目標排序模型結構
爲了提升用戶種草效率,有幾種建模方案,一種是直接預估種草效率,還有一種是同時預估多個目標,而後融合多個目標分進行排序。爲了保證一跳目標不會降低太多,咱們選取了第二種方案,具體建模方案以下:
1)其餘目標使用user_id、content_id爲key,複用一跳樣本,從而可使用一跳埋點解析的實時特徵提升預估效果
2)複用一跳模型參數,解決其餘目標數據稀疏(Data Sparsity)問題,同時下降模型大小
3)經過梯度阻隔,只有CTR任務更新embedding層、attention層,防止點擊率任務受其餘任務影響
多目標精排的模型結構以下圖所示,其中紅色虛線框內的參數由CTR任務更新,其餘任務只更新各自MLP層參數。
![](http://static.javashuo.com/static/loading.gif)
多目標精排上線實驗效果:人均點擊-5.38%,pctr-3.46%,人均IPV+1.46%,人均加購+8.79%,人均收藏+7.74%,加購uv比率+6.72%,收藏uv比率+3.86%。
多目標粗排的模型結構以下圖所示,每一個目標構建單獨的user tower,多個目標的雙塔內積獲得每一個目標的得分,而後經過公式進行分數融合。
![](http://static.javashuo.com/static/loading.gif)
多目標粗排模型上線實驗效果:人均點擊-0.02%,pctr-0.47%,人均IPV+3.28%,人均加購+7.31%,人均收藏+4.39%。
▐ 多目標融合公式
多目標排序中比較常見的問題就是選擇適合場景目標的融合排序公式,咱們分別嘗試了加法公式、乘法公式、混合公式。
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
其中加法公式線上有必定效果,一跳點擊降低較少,種草行爲提高較多,乘法公式一跳降低較多,種草行爲提高也沒加法公式高,而混合公式可以在加法公式的基礎上進一步提高種草行爲,最後咱們選擇了混合公式做爲場景的多目標融合排序公式。
在混合公式的基礎上咱們又嘗試了幾組參數,各參數的實驗效果(本次實驗是在疊加召回、粗排等優化後進行的參數探索實驗,因此各項指標都有比較明顯的提高)以下圖所示:
![](http://static.javashuo.com/static/loading.gif)
其中實驗三效果會比較好,即α=1,β=2.5,γ=15,δ=15。若是進一步提升種草係數,各指標會有所降低。
在實驗三的基礎
上咱們
統計
了線上埋點獲得的各目標分在融合分中的佔比,發現CTR、IPV、GRS、CVR比重呈現遞減趨勢,其中CTR指標比重最高
,因爲當前業務階段更關注種草,因此支付權重佔比較低
。
![](http://static.javashuo.com/static/loading.gif)
在模型結構上咱們也嘗試了一些優化工做,如CAN、MMoE、ESMM、模型重構、CrossAttention、加寬加深、Special Layer(各任務擁有獨立的Attention參數)、模型拆解等。這裏重點介紹CAN、MMoE、ESMM、模型重構等相關的工做。
▐ CAN
關於CAN的詳細介紹能夠參考相關文獻,介紹CAN以前咱們先介紹下特徵交叉的兩種常見形式:
Ø 笛卡爾積:強記憶性,缺點是組合特徵量大,多數低頻,學習過程不穩定
Ø FM:強泛化性,缺點是特徵交叉容易受各自單獨學習的過程影響,致使過分泛化
而CAN經過引入Co-Action Unit結構,可以在保證提升泛化性的同時加強記憶性Co-Action Unit的結構中,item特徵在look up後經過reshape操做獲得weights和bias,做爲Co-Action結構中MLP層的參數,user特徵在look up後對一階、二階、三階操做求和獲得高階表達,做爲MLP層的輸入。離線進行了笛卡爾積和FM的實驗:
Ø CAN實驗離線CTR AUC+0.3%,在線人均點擊+0.87%,種草指標幾乎持平。
Ø 笛卡爾積,將target與序列的item id進行拼接做爲的新的hash key,因爲構造後序列過於稀疏,離線auc-0.2%。
▐ MMoE + ESMM
MMoE和ESMM的詳細介紹能夠參考具體論文,這裏主要介紹引入MMoE和ESMM的目的,引入後的模型結構以及實驗效果。
引入MMoE主要是爲了讓各任務可以共享更復雜的高階特徵,引入ESMM主要是爲了將子空間的學習上升到全空間學習,緩解其餘任務的樣本選擇誤差(Sample Selection Bias)問題 ,另外經過引入前序任務預估值,緩解其餘任務正樣本稀疏(Data Sparsity)問題。
![](http://static.javashuo.com/static/loading.gif)
Ø 對比base模型,MMoE離線實驗,CTR AUC-0.5%,clk->ipv(子空間)AUC 持平,ipv->crt(子空間)AUC+1.0%。在線實驗:人均點擊+0.42%、人均ipv+0.41%、加購uv比率-0.03%、收藏uv比率+0.24%、uv轉化率+1.65%。
Ø 對比base模型,ESMM離線實驗(只CTR任務更新emb參數和attention層參數,各任務更新各自MLP參數),CTR AUC持平,pv->ipv(全空間)+0.1%,pv->crt(全空間)+0.2%。在線實驗各指標略微提高。
其中clk表示一跳點擊,ipv表示在二跳點擊,crt表示三跳加購。因爲實驗效果只是略微提高,但上線後RT上漲較多,兩個結構優化的工做未疊加上線。
在Loss優化方面咱們嘗試了Focal Loss和GHM Loss。
▐ Focal Loss
在模型訓練過程當中,存在不少簡單易學的樣本,這些樣本會主導模型的訓練過程。Focal Loss經過引入α、根據預估值與實際label的誤差對訓練樣本中的難樣本增長權重,從而加強難樣本的學習,大大下降簡單樣本的分類損失。
![](http://static.javashuo.com/static/loading.gif)
Focal Loss離線實驗CTR AUC+0.3%,但總體CTR預估分偏高,影響多目標模型參數的設定,未上線實驗。
▐ GHM Loss
GHM Loss的做者分析真實樣本中的梯度分佈(以下圖左一所示)以及梯度貢獻(以下圖右一)的分佈,發現Focal Loss容易關注異常樣本的學習。其中梯度小的爲容易學的樣本,梯度大的爲困難樣本,這兩種樣本梯度密度都比較大,做者認爲梯度接近1的多是異常樣本,過渡關注這部分樣本的學習會致使模型學習效果變差,在模型學習過程當中更應該關注梯度密度小的那部分樣本的學習。
![](http://static.javashuo.com/static/loading.gif)
梯度計算公式以下圖所示,p表示預測值,p*表示真實值。
![](http://static.javashuo.com/static/loading.gif)
GHM Loss離線實驗AUC+0.3%,GAUC-0.3%,線上實驗效果略微負向,且會致使曝光集中度上升。
業務目標升級爲多目標後,須要一個靈活的排序模型進行多目標的融合,所以咱們在推薦鏈路上添加了LTR層。咱們探索了兩種LTR建模方式:Stacking和Mixed Sampling。
▐ Stacking
進行Stacking建模時,咱們調研了一些特徵,發如今有好貨場景,比較有效的是上頁的曝光點擊序列,user和cate的實時統計特徵也會有必定效果,而user和item的實時統計特徵則比較弱。
![](http://static.javashuo.com/static/loading.gif)
進行Stacking建模時,咱們發現引入實時的用戶行爲特徵(上一頁曝光點擊)後,不一樣Page之間的分數不可比,新請求的Page預估分會更準。爲了方便進一步分析,咱們使用了Page GAUC指標(按照每page做爲group,計算AUC),發現引入更多實時特徵後,page>1的Page GAUC提高更明顯。
![](http://static.javashuo.com/static/loading.gif)
添加實時特徵的Stacking模型離線實驗AUC+1.7%,Page PV GAUC+0.5%,Page CLICK GAUC+0.4%。在線實驗pctr+1.52%,upv+1.06%,uclick+2.62%,uipv+1.89%。
▐ Normalization
進行Stacking實驗時,咱們發現隨着CTR預估分的分佈發生變化,以前多目標排序融合公式的權重不必定適配新的分佈。咱們使用Normalization將各目標分佈調整到0均值左右,再進行權重的調整。
標準化公式以下所示,標準化後各目標分佈在0均值左右,更方便選擇合理的權重值:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
▐ Mixed Sampling
場景的優化目標升級爲種草目標後,咱們嘗試了融合多目標預估的CTR、IPV、CRT預估分,再添加其餘實時特徵等,直接預估種草目標,線上排序時使用預估的種草目標分進行排序,但上線後發現一跳的人均點擊降低比較多。所以咱們嘗試了在種草樣本中添加一跳樣本,來儘可能減小人均點擊的降低,在線也取得了必定效果。進一步添加下滑種草樣本後,線上效果提高幅度不大。
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
本文選取有好貨過去一段時間在排序算法上的部分工做進行重點介紹,除以上工做外,咱們還進行了其餘嘗試和探索,如精排蒸餾、粗排未曝光樣本利用、首猜樣本學習、多場景內容點擊序列、二跳特有序列和特徵、ODL等。
後續咱們會繼續在超長序列建模、內容通用表徵學習、排序結構優化、LTR建模等方面進行優化,以進一步提升場景的導購體驗和導購效率。
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
做者|鴻遠、孑行、晨良、徐往、從之、肖榮優化
編輯|橙子君ui
出品|阿里巴巴新零售淘系技術url
本文分享自微信公衆號 - 淘系技術(AlibabaMTT)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。