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基础设施。


图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

图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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356