Office Depot使用Apache Spark和 Analytics Zoo上的分布式Keras实现实时产品推荐

出处:https://software.intel.com/en-us/articles/real-time-product-recommendations-for-office-depot-using-apache-spark-and-analytics-zoo-on 

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实现实时产品推荐_第1张图片
图1 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张图片
图2  基于RNN的Session 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测试进行评估。

图表1 不同推荐系统的离线性能比较

离线性能比较(图表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

你可能感兴趣的:(Office Depot使用Apache Spark和 Analytics Zoo上的分布式Keras实现实时产品推荐)