Office Depot使用Apache Spark和Analytics Zoo上的分散式Keras實現實時產品推薦

AnalyticsZoo發表於2019-09-03

背景

Office Depot(納斯達克股票程式碼:ODP)是一家領先的B2B綜合分銷公司,成立於1986年,在美國有1800人的專業銷售隊伍、1350個零售網點和數十個第三方物流合作伙伴,為中小企業提供產品、服務和技術解決方案。透過旗下品牌Office Depot、OfficeMax*、Compucom*和Grand&Toy為客戶提供他們所需的工具和資源,專注於他們創業、成長和經營業務的熱情。


Office Depot希望從傳統的基於規則的供應商推薦解決方案轉向自主開發更智慧的深度學習推薦解決方案,該解決方案可以根據客戶的實時會話行為做出個性化的推薦決策。在這項工作中,我們面臨著使用大量大規模clickstream資料訓練深度神經網路(DNNs)的挑戰。在Office Depot電子商務平臺上銷售的活躍產品超過30萬件,每月產生超過1億個不同的會話控制。目前,Office Depot採用Apache Spark生態系統作為大資料平臺,使用Sparse MLlib開發機器學習模型,但在現有的Apache Spark生態系統上,我們很難大規模地訓練和利用深度學習模型。


新開發的DNNs透過捕獲許多行業中使用者項資料集的非線性關係,已不斷被證明能作為成功的推薦系統。經驗證據表明,使用深層DNNs可以提供更好的推薦效能[2,3,4]。因此,在現有的大資料平臺和管道上應用DNNs的推薦系統對於像Office Depot這樣的電子商務行業來說至關重要。


在這個部落格中,我們會詳細介紹如何使用Analytics Zoo和Apache Shark上的分散式Keras,在AWS上大規模構建端到端的推薦流系統。 


Analytics Zoo 解決方案

Analytics Zoo[1], Intel開源的一個統一的分析和人工智慧平臺,將Spark、TensorFlow、Keras和BigDL[5] 程式無縫地整合到一個整合的管道中;然後整個管道可以透明地擴充套件到一個大型Hadoop/Spark叢集中進行分散式深度學習訓練和推理,而無需額外的GPU基礎設施

Office Depot使用Apache Spark和Analytics Zoo上的分散式Keras實現實時產品推薦

office depot推薦系統的端到端流程

推薦系統AWS上執行的端到端流程包括訓練和推理 (圖1)。

1. 首先,系統會在AWS上使用Spark對clickstream資料進行預處理,使用Spark原生StringIndexer和Pipeline對所有產品和使用者進行索引,產生對應的ID作為模型訓練的特徵,並進一步使用Mleap儲存pipeline模型。

val userIndexer = new StringIndexer().setInputCol("strUserId").setOutputCol("userId")

val itemIndexer = new StringIndexer().setInputCol("strItemId").setOutputCol("itemId")              

val pipelineEstimator: Pipeline = new Pipeline()

                    .setStages(Array(userIndexer, itemIndexer))

val plModel: PipelineModel = pipelineEstimator.fit(df)

2. 系統進一步將特徵轉換成Analytics Zoo推薦模型需要的RD[Sample]。對於session recommender, 每個session的特性都預先設定了一個為10的長度。 

3. 使用Analytics Zoo大規模訓練不同的DNNs,包括神經協同過濾(NCF)網路、廣域和深度(WND)網路和基於迴圈神經網路的session recommender(RNN,圖2),並將模型儲存在AWS S3上。目前,Analytics Zoo為不同的用例提供了3個內建的recommender models

Office Depot使用Apache Spark和Analytics Zoo上的分散式Keras實現實時產品推薦2  基於RNNSession recommender

val model = SessionRecommender[Float](itemCount, itemEmbed, maxLength)
model.compile(loss="mse", optimizer= "adam")
model.fit(data, nbEpoch=20)
model.saveModel(modelPath)

4. 最後,系統載入了第一步已經儲存的管道模型,將產品轉化為ID,然後載入第三步儲存的推薦模型,使用BigDL [5] 的LocalPredictor在WebService上進行推理。為每個客戶的產品推薦是基於特定產品新增到其購物車中的機率排名。推理流透過利用play framework有效地擴充套件。用LocalPredictor推理並不依賴Spark,從而大大加快了響應延遲。

val model = LocalPredictor(Module.loadModule[Float](bigDLModelPath))

model.recommenderForUsers(data, 5)

結果和討論 

模型透過離線效能比較和線上A/B測試進行評估。

Model

ALS

NCF

Wide and Deep

Session recommender

Top 5 Accuracy

16.2%

46.7%

45.2%

52.3%

圖表不同推薦系統的離線效能比較

離線效能比較(圖表1)表明,透過採用基於DNN的Analytics Zoo解決方案的端到端流程,我們發現與ALS等傳統推薦演算法相比,準確性有了顯著提高。與ALS相比,NCF透過捕獲使用者和產品之間的非線性關係,將前5位精度從16.2%提高到46.7%。與NCF相比,WND模型前5位精度具有一定的競爭力。為了瞭解使用者與產品之間的非線性關係,我們基於DNN再增加了一個寬度模型來學習使用者的屬性,包括忠誠度指標,Office Depot卡使用者標識等。使用者屬性的噪聲,也被新增到WND中的訓練過程中,以至於WND的精度相比NCF有一點下降。

根據Wu[4]的發表論文指出,電子商務系統中的每個使用者session都可以被作為一系列的網頁 來建模,深度RNN可以透過使用多個隱藏層來學習跟蹤使用者瀏覽網站(圖2),每個隱藏層都模擬瞭如何訪問網頁組合以及按什麼順序訪問。透過使用Analytics Zoo構建基於兩層GRU的session recommender,我們的前5名精度相比在NCF和WND的基礎上提高了6%以上。

我們已在OfficeDepot的官方網站上部署了session recommender,並針對當前基於規則的推薦器系統執行了兩週多的線上A/B測試。與當前的recommender相比,session recommender顯示銷售額和平均訂單價值分別上升了1%和1.6%。 

結論

本文簡要介紹了Office Depot在構建基於DNN的推薦系統以增加線上銷售方面面臨的挑戰。然後,我們提出了一個執行在AWS上,使用Analytics Zoo構建了端到端深度學習管道,其中我們採用了Analytics Zoo內建的基於DNN的recommender來建模。最後,我們展示了線上和離線評估結果,發現基於RNN的session recommender極大的提升了銷售額和平均訂單價值。類似的session recommender也可能會在電子商務的其他案例中發揮關鍵作用。更多的示例和API在Analytics Zoo Model Recommendation 

參考文獻

  1. Analytics Zoo
  2. X He, L Liao, H Zhang, etc., 2015, Neural Collaborative Filtering
  3. H-T Cheng, 2016, Wide & Deep Learning: Better Together with TensorFlow
  4. S Wu, W Ren, C Yu, etc. 2016, Personal Recommendation Using Deep Recurrent Neural Networks in NetEase
  5. BigDL
  6. J Dai, Y Wang, X Qiu, etc., 2018, BigDL: A Distributed Deep Learning Framework for Big Data

相關文章