深度模型(十二):Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba

簡介

互聯網技術一直不斷地在改變着商業,今天電子商務已經非常普及了。阿里作爲中國最大的電子商務企業,使得全世界的消費者和企業在線上做生意。阿里擁有十億的用戶,2017年的總交易額(Gross Merchandise Volume)爲37,670億人民幣,總收入爲1,580億人民幣。2017年雙十一購物節總交易額在1,680億左右。其中,淘寶作爲最大的C2C平臺,貢獻了75%的交易額。

淘寶擁有10億用戶,20億的商品,如何幫助用戶快速找到需要的和感興趣的商品是一個關鍵問題。推薦系統成爲解決這個問題的關鍵技術。例如淘寶APP的首頁(圖1)是通過推薦技術基於用戶過去的行爲而生成的,佔總推薦量的40%。簡單來說,推薦刺痛已經成爲淘寶和阿里交易額和收入的關鍵因素。雖然學術和工業界有很多成功的推薦方法,比如協同過濾(CF)[9,11,16],基於內容的方法[2],基於深度學習的方法[5,6,22],這些方法的問題由於淘寶龐大的用戶和商品數量而變的更加嚴重。
在這裏插入圖片描述

淘寶的推薦系統面對的主要問題有三點:

  • 可擴展性(Scallability):雖然很多推薦算法在小規模的數據上表現很好,比如在百萬數量級的用戶和物品,但這些方法沒法擴展到10億數量級的用戶和商品上。
  • 稀疏性(Sparsity):用戶一般只會與一小部分的商品有過交互,通過這些少量的交互信息,很難訓練一個準確的推薦模型,這個問題通常被稱爲數據稀疏問題。
  • 冷啓動(Cold Start): 淘寶每小時都有數以百萬的新商品持續地上傳到淘寶。這些商品都沒有用戶交互信息。這些新商品的推薦十分困難,這個問題通常被稱爲冷啓動問題。

爲了解決這些問題,我們設計了分爲兩階段的推薦框架。第一個階段稱之爲匹配(matching)階段,第二階段稱之爲排序(ranking)階段。在匹配階段我們生成一個候選集合,由與用戶交互過的商品的相似商品組成。然後在排序階段訓練一個深度模型,基於用戶喜好對候選集合內的商品進行排序。兩個階段面對的問題不一樣,而且兩個階段的目標也不一樣。

本文我們主要關注匹配階段,核心任務是基於用戶的行爲計算商品間的相似度,有了相似度之後,就可以基於相似度生成候選集。爲了完成這個任務,我們首先基於用戶歷史行爲構建商品圖,然後採用Dubbed Base Graph Embedding-最先進的圖embedding方法[8,15,17]學習商品的embedding。最後通過商品embedding向量的點積計算物品間的相似度。基於協同過濾的方法也會計算物品間的相似度,但是它們[9,11,16]只會考慮用戶的歷史行爲。我們的方法會在物品圖中隨機遊走,捕捉物品間相似度,所以我們的方法優於CF方法。但是這個方法依然沒有解決數據稀疏問題。因此,我們提出採用使用附加信息(side information)來加強embedding過程:Dubbed Graph Emebdding with Side information。例如,同一類的物品在嵌入空間內應該相距更近。通過這個方法,技術在很少甚至沒有交互信息的情況下,我們也能獲取商品的準確embedding.但是商品有上百種附加信息,比如類別、品牌、價格等等。直觀感覺是不同的附加信息對商品的embedding應該有不同程度的貢獻。因此我們又提出了一種加權機制:Dubbed Enhanced Graph Embedding with Side information(EGES).

總而言之,匹配階段有三個重要部分:

  • (1)基於淘寶多年的實踐經驗,我們設計一個高效的啓發式方法,由10億用戶的行爲歷史構建出物品圖
  • (2)我們提出三中embedding方法:BGE(Base Graph Embedding),GES(Graph Embedding with Side Information), EGES(Enhanced Graph Embedding with Side Information).我們通過離線的實驗已經證明GES和EGES相對BGE和其他embeding方法更有效。
  • (3)部署方面,我們在我們組XTensorflow(XTF)系統基礎上開發了圖embedding系統。結果顯示我們的方法顯著提高了淘寶APP的推薦效果,並且滿足了雙十一對模型訓練效率以及服務性能的要求。

框架

這一節我們首先介紹一下圖embedding的基礎,然後介紹我們如何由用戶的歷史行爲構建商品graph。最後我們研究所提出的embedding訓練方法。

2.1 準備工作

這一小節我們首先整體介紹一下圖embedding和最流行的方法之一:DeepWalk[15],基於這些知識我們提出我們匹配階段的圖embedding方法。給定一個圖G=(V,E)G=(V,E),其中V和E分別表示節點和邊的集合。圖embedding的目標是對於集合中的每一個節點vVv\in V學習一個低維度的空間表示,表示空間爲Rd,d<<VR^d, d<<|V|.換句話說,也就是我們的目標是學習一個映射函數Φ:VRd\Phi: V\rightarrow R^d,將V中的每一個節點表示爲一個維度爲d的向量。

[13,14]提出word2vec算法,由語料中學習每個單詞的embedding。收到word2vec的啓發,Perozzi等提出了DeepWalk算法,學習圖中每個節點的embedding[15].他們首先通過圖中的隨機遊走產生節點序列,然後採用Skip-Gram算法學習每個節點的表示。爲了保持圖的拓撲結構,他們需要解決下面的最優化問題:

minimizeΦvVcN(v)logPr(cΦ(v))minimize_{\Phi}\sum_{v\in V}\sum_{c\in N(v)}-logPr(c|\Phi(v))

其中N(v)N(v)表示節點vv的鄰接節點,可以定義爲與vv的距離爲1或2的節點。Pr(cΦ(v))Pr(c|\Phi(v))表示給定節點vv,存在鄰接節點cc的條件概率。

2.2 由用戶行爲創建商品Graph

實際中用戶的歷史行爲是一些序列,如圖2。基於CF的方法只考慮了商品的共現,但忽略了順序信息,而順序信息可以更準確的反應用戶的偏好。然而不可能使用用戶的全部歷史行爲,因爲1)計算的空間和時間複雜度巨大,2)用戶的興趣點隨時間會偏移。因此實際中,我們通常設置一個時間窗口,只使用用戶在時間窗口內的行爲歷史。我們稱之爲基於會話的用戶行爲。時間窗口的經驗值通常設置切一小時。

在獲取了用戶的基於會話的行爲數據後,如果兩個物品在行爲數據中先後出現,則在物品間添加一條邊。入圖2中,物品D和A之間存在一條邊,因爲他們被用戶U1先後訪問。我們基於物品在所有用戶行爲序列中先後出現的次數,爲沒一條邊賦予一個權重eije_{ij}

在這裏插入圖片描述

實際中,在提取用戶行爲序列之前,我們需要過濾掉無效的和異常的行爲,降低噪音。目前下列行爲被認爲是噪音:

  • 停留時長低於1秒的點擊,可能是無心的點擊,需要過濾掉
  • 有一些過於活躍的用戶,實際上是爬蟲,需要過濾掉
  • 商家在太傲持續的更新商品的詳細信息。在極端的情況下,商品變成了完全不同的另一個商品,需要移除。

2.3 Base Graph Embedding

給定加權圖G=(V,E)G=(V,E),MM表示圖的相鄰矩陣,MijM_{ij}表示由iijj的邊的權重。我們首先基於隨機遊走產生節點序列,然後採用Skip-Gram算法訓練模型。隨機遊走的概率爲:

P(vjvi)={MijjN+(vi)Mij,vjN+(vi)0,eijEP(v_j|v_i)= \begin{cases} \frac{M_{ij}}{\sum_{j\in N_{+}(v_i)}M_{ij}}, & v_{j}\in N_{+}(v_i)\\ 0, & e_{ij} \notin E \end{cases}

其中N+(vi)N_{+}(v_i)表示出邊的鄰接節點集合。通過隨機遊走產生了一些序列,如圖2©.

然後我們採用Skip-Gram算法[13,14]學習embedding,目標是最大化序列數據中兩個節點共現的概率。等於以下目標:

minimizeΦlogPr({viw,...,vi+w}\viΦ(vi))minimize_{\Phi} -logPr(\{v_{i-w},...,v_{i+w}\} \backslash v_i|\Phi(v_i))

其中ww表示窗口大小。假設條件獨立,得到:

Pr({viw,...,vi+2\viΦ(vi)})=j=iw,jii+wPr(vjΦ(vi))Pr(\{v_{i-w},...,v_{i+2}\backslash v_{i}|\Phi(v_i)\})=\prod_{j=i-w, j\ne i}^{i+w}Pr(v_j|\Phi(v_i))

通過負採樣[13,14], 可以轉化爲:

minimizeΦlogσ(Φ(vj)TΦ(vi)+tN(vi)logσ(Φ(vt)TΦ(vi)))minimize_{\Phi}log\sigma(\Phi(v_j)^T\Phi(v_i) + \sum_{t\in N(v_i)'}log\sigma(-\Phi(v_t)^T\Phi(v_i)))

其中N(vi)N(v_i)'表示viv_i的負樣本,σ(x)=11+ex\sigma(x)=\frac{1}{1+e^{-x}}.經驗上,負樣本越多,效果越好。

2.4 Graph Embedding with Side Information

2.3的算法並沒有解決冷啓動的問題。爲了解決冷啓問題,我們加入附加信息,包括商品的類型,商店,價格等等。這些信息廣泛的用在排序階段,而匹配階段比較少用。我們可以在匹配階段假如這些信息。例如喜歡Nikon鏡頭的或許也喜歡Canon的勁頭(相似的商品類別和相似的品牌)。這意味着有着相似附加信息的商品在嵌入空間內應該距離相近。基於這個假設,我們提出GES算法,如圖3.

在這裏插入圖片描述

爲了表達的簡潔,我們用WW表示embedding矩陣或附加信息。Wv0W_v^0表示商品v的embedding.WvsW_v^s表示節點v相關的第s類附加信息。對於有n類附加信息的商品v,有n+1個向量Wv0,...,WvnRdW_v^0,...,W_v^n \in R^d。其中d表示嵌入空間的維度。注意我們經驗地將物品和附加信息的空間緯度設置爲相等。

如圖3,我們連接這n+1個embedding向量並添加一個平均pooling操作:

Hv=1n+1s=0nWvsH_v=\frac{1}{n+1}\sum_{s=0}^nW_v^s

2.5 Enhanced Graph Embedding with Side Information

GES假設各種的附加信息對embedding的貢獻相等,但這個假設並非實際情況。爲了解決這個問題,我們提出EGES算法。對於商品v, ARv×(n+1)A\in R^{|v|\times(n+1)}表示權重矩陣,其中AijA_{ij}表示j類附加信息對於第i個物品的權重。我們用avsa_v^s表示s類附加信息對物品v的權重,av0a_v^0表示物品v本身的權重。然後HvH_v定義如下:

Hv=j=0neavjWvjj=0neavjH_v=\frac{\sum_{j=0}^ne^{a_v^j}W_v^j}{\sum_{j=0}^ne^{a_v^j}}

對於節點v和它的上下文借點u,我們用ZuRdZ_u\in R^d表示embedding ,y表示標記。則EGES的目標函數爲:

L(v,u,y)=[ylog(σ(HvTZu))+(1y)log(1σ(HvtZu))]L(v,u,y)=-[ylog(\sigma(H_v^TZ_u))+(1-y)log(1-\sigma(H_v^tZ_u))]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章