1. 程式人生 > >一天造出10億個淘寶首頁,阿里工程師如何實現?

一天造出10億個淘寶首頁,阿里工程師如何實現?

雙11手淘首頁的幾個重要推薦場景截圖如下:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

如上圖所示,左一場景為AIO綜合會場,包括AIO日常場景(淘搶購、有好貨、清單等)、雙11人群會場及行業會場;中間為AIOplus場景卡片綜合會場,包括5張會場卡片,每張卡片融入了行業主分會場、標籤會場,該業務涉及到20多個日常業務以及標籤、行業會場的分發;右三為主會場入口所見所得,用兩個素材輪播的方式給雙11主會場進行引流。雙十一當天整體點選UV引流效果方面,首頁給各會場還是取得了很好的分發效果,資料達到數千萬UV以上。

與此同時,今年雙十一在推薦的去重打散及探索發現上做了很多深度的優化,過去更多的是在相似性推薦的單一資料目標上進行優化,今年在match及rank技術上採用了更多多階遊走及探索發現的embedding技術,力爭在ctr效果有一定保證的情況下,加大對使用者體驗比如多樣性、搭配潛在興趣、深度使用者偏好等方面的推薦。

舉個簡單例子,之前的推薦系統在捕捉到使用者對茶杯這一商品感興趣後,很可能會推出更多的相似茶杯,新的推薦系統在多階召回技術的基礎上通過對使用者興趣進行深度學習的挖掘,會按一定的概率推薦茶葉、茶具等"弱相似"但滿足使用者搭配潛在興趣的商品。

究竟阿里如何使用AI構建淘寶首頁?今天一起來揭祕。

一. 業務技術簡介

首頁個性化在演算法技術上主要涉及Graph Embedding召回模型、DeepCross&ResNet實時網路排序模型,並在搜尋工程Porsche&Blink、Rank Service、Basic Engine等系統的基礎上結合業務應用的需求沉澱了Graph Embedding召回框架及XTensorflow排序模型平臺供推薦其他場景使用,提升效果均達到兩位數以上。

二. 首頁個性化推薦框架(包括MATCH召回和RANK排序兩部分)

1.萬物皆向量--Graph Embedding深度召回框架

在推薦系統的發展歷程中,面臨了兩個核心問題,使用者的長尾覆蓋度以及新商品的冷啟動,這兩個維度的資料擴充套件性瓶頸一直以來對廣大推薦演算法工程師都是不小的挑戰。而我們基於Graph Embedding的理論知識提出的相關創新框架在召回階段利用使用者的序列化點選行為構建全網行為graph,並結合深度速隨機遊走技術對使用者行為進行"虛擬取樣"擬合出多階(一般5以上)的潛在興趣資訊,擴大使用者的長尾興趣寶貝召回,並同時利用side information-based的深度網路進行知識泛化學習,在一定程度上解決了使用者覆蓋、新商品面臨的冷啟動問題,同時虛擬樣本的取樣技術結合深度模型的泛化學習等在使用者對商品的探索發現上加大的擴大了召回量,提升了多樣性及發現度。

Graph Embedding是一種將複雜網路投影到低維空間的機器學習演算法,典型的做法是將網路中的節點做向量化表達,使節點間的向量相似度接近原始節點間在網路結構、近鄰關係、meta資訊等多維度上的相似性。淘寶個性化推薦場景所面對的數以十億計的使用者、商品、互動資料和各類屬性構成了一個規模龐大的異構網路,如果能將網路中的各類資訊統一建模在同一個維度空間,用向量的方式進行表達,它的簡潔和靈活性會有巨大的應用空間,諸如擴充套件I2I計算、解決商品冷啟動、作為中間結果輸出到上層高階模型。據我們所知,業界尚未有,對如此大規模複雜網路進行embedding建模的成熟應用。

本篇主要介紹我們近期在這個方向上所做的一些探索:針對推薦場景,在Graph Embedding基礎上,提出了新的S³ Graph Embedding Model對上億級別的商品進行embedding建模,並將embedding結果應用在商品Item to Item計算中,作為一種全新的match召回方式在手淘首圖個性化場景進行應用。從線上BTS結果來看我們改進的Graph Embedding I2I得到不錯的效果提升,在覆蓋長尾使用者以及新寶貝的冷啟動上有效擴充套件了match召回候選。

1.1、Graph Embedding-DeepWalk演算法

Graph Embedding是近期熱門的一個課題,14年KDD的《DeepWalk: Online Learning of Social Representations》開啟了這個方向的熱潮,文中借鑑了深度學習在語言模型中的應用,以全新的方式學習網路節點的潛在向量表示,在社會化網路多標籤網路分類任務中取得了很好的效果。

DeepWalk是一個two-stage演算法:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

①構建同構網路,從網路中的每個節點開始分別進行Random Walk 取樣,得到區域性相關聯的訓練資料; ②對取樣資料進行SkipGram訓練,將離散的網路節點表示成向量化,最大化節點共現,使用Hierarchical Softmax來做超大規模分類的分類器;

  • DeepWalk框架:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

  • SkipGram訓練:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

首先從網路中取樣訓練資料,每一個訓練資料是由區域性相鄰的節點組成的序列,DeepWalk將這組序列看成語言模型中的一個短句或短語,將短句中的每個詞轉換成隱式表達,同時最大化給定短句某個中心詞時,出現上下文單詞的概率,具體可以表示為下面這個公式:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

其中v_i是中心詞(對應於網路中的target node),v_(i-w),···,v_(i+w)是上下文單詞(對應於網路中的N階近鄰的node)。在獨立分佈的假設下,可以簡化為:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

1.2、S³ Graph Embedding Model

針對推薦場景,我們將原本的Graph Embedding進行了多個方向上的創新改造,歷經多個版本逐步演化出S³ Graph Embedding Model,其中S³主要體現在三個方面:

  • Sequence BehaviorSub-graphSide-information

下面我們對演化的過程進行介紹:

(1)Naive版本

  • 將Graph Embedding應用到商品推薦領域中,第一步要解決的就是構建網路,由於商品推薦的整個網路是大規模的異構網路,網路節點型別包括使用者、商品、商品類別、使用者畫像等各種基礎屬性,不同型別的節點無法在統一的空間進行向量表示。為了簡化問題,首先使用阿里原創演算法swing來計算商品間的相似度(swing利用user-item二部圖計算i2i,比改進過的CF演算法仍有明顯提升,目前已在各場景中已經廣泛應用,構建關於商品的有向帶權圖同構網路;
  • 第二步是對商品網路進行Random Walk取樣,此處我們借鑑了《Node2vec: Scalable Feature Learning for Networks》中靈活的BFS and DFS search strategies(在取樣時以一定的機率回溯),通過改變控制引數靈活的控制Random Walk遊走過程,在Item Graph的區域性穩定性和全域性擴充套件性間做出權衡,調節match結果中多樣性和準確性之間的balance。
  • 在取樣得到item序列之後,第三步是進行Embedding表示學習,這裡對原文的SkipGram模型進行了兩處優化:(1)針對超大規模的字典,採用負樣本取樣(Negative Sampling)替代Hierarchical Softmax分類器,大幅提高訓練速度;(2)在語言學中,詞按照出現頻率從大到小排序之後,服從 Zipfian 分佈(即log-uniform分佈),所以SkipGram訓練多直接採用Zipfian來計算負樣本取樣的概率,而對我們的資料進行分析後,發現item出現的頻次與log-uniform並不完全吻合,不同時間段的資料間也呈現一定的波動趨勢,針對這個現象,我們用邊訓練邊統計每個item的出現頻次,維護一個能夠按照item出現頻次生成負樣本的動態取樣器。模型結構如圖所示:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

可以看到,相比於swing的一階擴充套件,Graph Embedding的相似度計算將高階資訊也納入其中。

(2) Sequence+Side-information版本

通過人工看case和統計得到的初步結論是基於已有Swing圖計算Graph Embedding再召回的結果與原本的召回方式有較高的重複度,這在一定程度上給了我們信心,表明embedding的方式是靠譜的,為了在豐富多樣性和提高精準度上有所突破,我們接下來做了三方面的嘗試:

(1)通過使用者session內的行為序列直接進行embedding建模;

(2)在session內行為構建全網圖後,引入類似tf-idf的轉移概率連線邊,克服哈利波特熱點問題,且在此基礎上進行概率取樣,構建使用者行為的"虛擬樣本",以擴大後面輸入到深度模型裡面的寶貝覆蓋量及準確度,使多階擴充套件資訊更加完善;

(3)引入side-information(如一級類目、葉子類目、店鋪、品牌、材質、購買力等級等)多維資訊,通過shared-embedding 加 pooling的結構嵌入到item語義中。模型結構如圖所示:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

  • 對於行為序列,短時間內的高密度點選更能夠反映使用者的真實意圖,短期的興趣偏好也更為集中,對比而言,基於使用者點選共現的傳統CF演算法在資料層面會有更多的噪聲。在實踐中,準備行為序列資料有兩個關鍵點值得注意:(1)如何選取行為序列的時間視窗,需要結合業務特點來進行仔細的調節;(2)如何過濾因為使用者誤操作而帶來的噪聲點,我們的實踐經驗是根據停留時長和類目不相似度來過濾典型的異常點選
  • 提出並定義了新的轉移概率連線圖,是為了克服使用者真實的session行為中存在的大量節點熱點問題,以每個節點為中心,利用其擴散子節點的連線頻次及行為共現頻次計算轉移概率,構建全網的轉移概率連線圖,並在此基礎上進行deep walk的隨機取樣,構造出千億級別的多階虛擬樣本,用於後續的深度網路學習
  • 引入寶貝的side-information資訊則受到語言模型中sub-word概念的啟發,可類比於在word2vector中加入單詞的詞根、詞綴等sub-word資訊,認為某些具有同樣詞根詞綴的單詞在某些維度上具有相似的語義,具有同店、同品牌的寶貝也有一定的相關性。引入side-information後i2i結果的頭部精度得到提高,同店、同品牌的寶貝在排序中更為靠前;同時對於一些沒有出現行為的、新鮮上架的寶貝,根據它的side-information對它進行embedding表達,有效解決寶貝的冷啟動問題。

(3) S³最終版本

在引入side-information和sequence行為序列之後,模型準確性大幅提升,但仍然面對全網寶貝embedding引數空間太大、訓練樣本過多的難題(均在千億量級以上)。為了解決這一問題,我們根據行為序列天然的轉移概率重構全網寶貝的weighted directed Graph,再將整個網路切分成多個sub-graph,在每個sub-graph內部進行Graph Embedding訓練,不同的sub-graph間並行訓練,縮短訓練迭代週期,網路結構如下圖所示:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

在最終計算i2i的召回環節,對embedding結果構建查詢索引,基於GPU叢集以batch形式進行高效的Nearest Inner Product Search最近鄰檢索,同時將整套框架落地在搜尋工程團隊的BE引擎當中,實現使用者到trigger到embedding寶貝結果的實時召回。

相比於經典的基於共現的i2i演算法,最終版本整體在召回上更加豐富,badcase出現情況較少。全網商品在首圖商品池召回的case如下,圖中三列分別是原始寶貝、swing召回、graph embedding召回:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

下面這幅炫酷圖對我們的embedding高維向量有一個更直觀的解釋,我們隨機選取了運動鞋這個一級類目下的寶貝embedding向量降維,不同的顏色代表不同的葉子類目,每一個點代表一個商品降維後的座標,可以清晰的看出同一個類目下的寶貝embedding向量很"自覺"的cluster在一起,說明這種自覺的本質就是graph embedding的向量是靠譜的。

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

1.3、在推薦場景中落地及調優

在演算法的深度模型訓練部分,我們依賴了搜尋工程團隊的Porsche blink系統,在XTensorflow上進行了模型TF版本的開發,構建全網序列行為圖並完成取樣,樣本級別達到千億,基於並行的GPU叢集訓練。整個召回框架中採用subgraph的拆圖結構,也是加速迭代效率的關鍵點,同時在PS的引數大規模上漲的情況下,樣本的遍歷及樣本的訓練覆蓋率對整個模型的收斂效果也至關重要。

首頁個性化推薦框架在線上召回階段,主要應用了搜尋工程團隊的Basic Engine線上化召回引擎,我們將Graph Embedding訓練完成的模型用近鄰檢索的方式把資料載入到引擎中,且將原有的offline,online結合的方式全部線上化,增強了推薦系統的靈活性,實時性及召回能力,整體框架如下圖所示。

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

在雙11之前,我們在這塊的工作迭代調優過程歷時近兩個月,期間分別嘗試了多種不同的網路模型結構,樣本選取過濾方式,引入sequential行為資訊、轉移概率邊的全新構建方法、side information等多方面,多角度調優方法,在日常首頁個性化(AIO)日常場景中uctr對比swing版本i2i提升明顯,同時雙11在該場景全面替換線上的最優召回方式。

2. 基於XTF的深度排序模型

2.1、 XTensorflow簡介

2017雙十一我們承接了手淘首頁流量分發最大的幾個首頁場景,這幾個場景的特點是流量大、業務規則限制多、同時業務變動頻繁,我們需要一個穩定、能支援快速迭代和實時計算的機器學習平臺來支撐我們訓練模型以及線上打分。為此,我們參與了工程團隊的共建工作基於Porsche blink的分散式Tensorflow訓練及線上打分平臺,首頁演算法同學基於該平臺開發出了若干Rank模型,在相應的業務場景拿到了不錯的效果,我們稱該平臺為XTensorflow,簡稱XTF。

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

在這個深度學習平臺上,我們在雙十一上線了包括DCN、DeepResNet的深層高階特徵學習模型,以及更加推廣及成熟應用了WDL深度模型,相對於WDL模型,更為複雜深度模型的嘗試也取得了明顯的效果。

2.2、DeepResNet在AIOplus場景的應用

在深度學習的推薦領域,當用戶寶貝資料以及相應的引數膨脹到一定規模後,加深網路的深度增強模型的學習泛化能力是眾所周知的方式,但網路盲目的加深又會同時引入引數爆炸、梯度消失、甚至過擬合等問題。參考Resnet網路技術在影象領域的獲得的成功,其解決的根本問題就是當網路深度不斷加深之後,梯度消失越來越明顯,效果越來越差。關於這一點,之前我們在WDL的deep側做過相應的嘗試,隨著網路導數及隱層結點數的增加,普通NN網路慢慢的訓練效果會越來越差,甚至導致效果出現較明顯的下降。基於這些實驗現象,我們將WDL進行了Deep Resnet的深層擴充套件,基本原理圖如下:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

原始的input層包含實值特徵及id類特徵的embedding向量,接入一個10層的Resnet層,最後通過logloss來定義最終的loss。同時,基於場景雙十一使用者行為變化迅速,以及AIOplus區塊活動素材的多變性(運營會根據BI資料,實時調整素材等),訓練了實時的Deep Resnet Model,在預期熱及雙11當天在場景卡片會場業務上上線拿到效果。

2.3、DCN(Deep & Cross Network)在主會場入口個性化的應用

通過將稀疏特徵embedding,配合多層全連線Relu層,DNN能夠自動進行特徵交叉,學習到高階非線性特徵,但是這種交叉是隱性的,交叉階數無法顯示控制,而且容易"over-generalization"。為了彌補這一點,WDL模型引入了wide側,顯示記憶一些可解釋的特徵交叉資訊以保證模型的精準性。但是wide側的引入帶來了大量的特徵工程的工作,同時也只能學習2階(cross-product)淺層的交叉。DCN引入了cross network,通過網路層數控制特徵交叉的階數,並且它實現高階特徵交叉需要的引數量遠遠小於DNN;cross layer的定義比較簡單:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

這個設計跟ResNet比較像,l+1層的對映函式f實際上是在擬合殘差

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

;cross network最終會和deep network進行jointly learning,完整的網路結構如下圖:

一天造出10億個淘寶首頁,阿里工程師如何實現?

 

雙十一主會場入口場景展位少召回相對充分對top n的精準度要求很高,因此我們選擇DCN模型,借用cross network的高階特徵交叉提升ctr預估精準性,同時由於從入口點進去後主會場承接模組變化頻繁,我們必須選擇item粒度(而非素材content粒度)來建模,並且對模型泛化能力的要求較高,因此我們用了較深的DNN網路來提升模型的泛化能力。作為主要引流場景之一,我們有充分的資料來學習模型,最終上線的版本中,我們設定了3層cross layer,以及10層Deep Layer(Resnet結構)。為了適應場景的變化我們做了大量的日誌清理工作,相對於純實時樣本流,小時級樣本流更加方便做複雜的樣本清理,因此在調優階段選擇的是incremental的小時級訓練,再切換到實時模型的方式。

2.4、Union-DeepModel

Google 提出Wide&Deep model之後,這種基於Deep側做高維特徵提取(泛化),Wide側進行顯示特徵交叉(記憶),最後進行Jointly Learning的框架被進行了各種各樣的升級。我們整理並實現了裡面比較經典的有意思幾個模型,包括WDL、PNN、DeepFM、NeuralFM、DCN、DeepResNet等,這些模型均基於TF Estimator框架實現,封裝為model_fn,特徵處理以及模型訓練過程高度可配置。同時,基於這個長期在深度模型上的積累,提出了Union結構的DeepModel,用以適應各種各樣業務場景對深度模型的需求。

一天造出10億個淘寶首頁,阿里工程師如何實現?

            掃碼關注不迷路

分享每日最新IT資訊和技術乾貨