簡介
互聯網技術一直不斷地在改變着商業,今天電子商務已經非常普及了。阿里作爲中國最大的電子商務企業,使得全世界的消費者和企業在線上做生意。阿里擁有十億的用戶,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方法。給定一個圖,其中V和E分別表示節點和邊的集合。圖embedding的目標是對於集合中的每一個節點學習一個低維度的空間表示,表示空間爲.換句話說,也就是我們的目標是學習一個映射函數,將V中的每一個節點表示爲一個維度爲d的向量。
[13,14]提出word2vec算法,由語料中學習每個單詞的embedding。收到word2vec的啓發,Perozzi等提出了DeepWalk算法,學習圖中每個節點的embedding[15].他們首先通過圖中的隨機遊走產生節點序列,然後採用Skip-Gram算法學習每個節點的表示。爲了保持圖的拓撲結構,他們需要解決下面的最優化問題:
其中表示節點的鄰接節點,可以定義爲與的距離爲1或2的節點。表示給定節點,存在鄰接節點的條件概率。
2.2 由用戶行爲創建商品Graph
實際中用戶的歷史行爲是一些序列,如圖2。基於CF的方法只考慮了商品的共現,但忽略了順序信息,而順序信息可以更準確的反應用戶的偏好。然而不可能使用用戶的全部歷史行爲,因爲1)計算的空間和時間複雜度巨大,2)用戶的興趣點隨時間會偏移。因此實際中,我們通常設置一個時間窗口,只使用用戶在時間窗口內的行爲歷史。我們稱之爲基於會話的用戶行爲。時間窗口的經驗值通常設置切一小時。
在獲取了用戶的基於會話的行爲數據後,如果兩個物品在行爲數據中先後出現,則在物品間添加一條邊。入圖2中,物品D和A之間存在一條邊,因爲他們被用戶U1先後訪問。我們基於物品在所有用戶行爲序列中先後出現的次數,爲沒一條邊賦予一個權重。
實際中,在提取用戶行爲序列之前,我們需要過濾掉無效的和異常的行爲,降低噪音。目前下列行爲被認爲是噪音:
- 停留時長低於1秒的點擊,可能是無心的點擊,需要過濾掉
- 有一些過於活躍的用戶,實際上是爬蟲,需要過濾掉
- 商家在太傲持續的更新商品的詳細信息。在極端的情況下,商品變成了完全不同的另一個商品,需要移除。
2.3 Base Graph Embedding
給定加權圖,表示圖的相鄰矩陣,表示由到的邊的權重。我們首先基於隨機遊走產生節點序列,然後採用Skip-Gram算法訓練模型。隨機遊走的概率爲:
其中表示出邊的鄰接節點集合。通過隨機遊走產生了一些序列,如圖2©.
然後我們採用Skip-Gram算法[13,14]學習embedding,目標是最大化序列數據中兩個節點共現的概率。等於以下目標:
其中表示窗口大小。假設條件獨立,得到:
通過負採樣[13,14], 可以轉化爲:
其中表示的負樣本,.經驗上,負樣本越多,效果越好。
2.4 Graph Embedding with Side Information
2.3的算法並沒有解決冷啓動的問題。爲了解決冷啓問題,我們加入附加信息,包括商品的類型,商店,價格等等。這些信息廣泛的用在排序階段,而匹配階段比較少用。我們可以在匹配階段假如這些信息。例如喜歡Nikon鏡頭的或許也喜歡Canon的勁頭(相似的商品類別和相似的品牌)。這意味着有着相似附加信息的商品在嵌入空間內應該距離相近。基於這個假設,我們提出GES算法,如圖3.
爲了表達的簡潔,我們用表示embedding矩陣或附加信息。表示商品v的embedding.表示節點v相關的第s類附加信息。對於有n類附加信息的商品v,有n+1個向量。其中d表示嵌入空間的維度。注意我們經驗地將物品和附加信息的空間緯度設置爲相等。
如圖3,我們連接這n+1個embedding向量並添加一個平均pooling操作:
2.5 Enhanced Graph Embedding with Side Information
GES假設各種的附加信息對embedding的貢獻相等,但這個假設並非實際情況。爲了解決這個問題,我們提出EGES算法。對於商品v, 表示權重矩陣,其中表示j類附加信息對於第i個物品的權重。我們用表示s類附加信息對物品v的權重,表示物品v本身的權重。然後定義如下:
對於節點v和它的上下文借點u,我們用表示embedding ,y表示標記。則EGES的目標函數爲: