京东电商推荐系统实践

今天为大家分享下京东电商推荐系统实践方面的经验,主要包括:

  • 简介
  • 排序模块
  • 实时更新
  • 召回和首轮排序
  • 实验平台
▌简介
京东电商推荐系统实践

文章插图
 
说到推荐系统,最经典的就是协同过滤,上图是一个协同过滤的例子 。协同过滤主要分为俩种:user-based 基于用户的协同过滤和 item-based 基于商品的协调过滤 。
但是,现在绝大多数推荐系统都不会直接使用协同过滤来做推荐 。目前主要用的是 learning to rank 框架 。
京东电商推荐系统实践

文章插图
 
这里,是推荐系统的框架,整个推荐系统可以分为两部分,在线部分和离线部分 。
  • 在线部分主要负责当用户访问时,如何把结果拼装好,然后返回给用户 。主要模块有召回、排序和对结果的调整 。
  • 离线部分主要是对用户日志的数据分析,应用于线上 。
整个推荐系统大概就是这样的一个框架 。
和新闻、视频这类的内容推荐相比,电商推荐系统又有一些特殊的地方,比如:
优化方向(点击、销售额、时长、用户留存等) 。另外,电商中推荐的内容也会有很多种,尤其像是活动类的内容,很多推荐都是算法和人工运营共同完成的 。这就是电商推荐和新闻推荐等的区别之处 。
京东电商推荐系统实践

文章插图
 
我们展开看下在线推荐系统:
除了刚才说的召回和排序以及最终的调整之外,还有实践过程中的一些细节 。
  • 召回:这里召回会有很多种方法,如协同过滤,热门商品、实时促销等和应用场景相关的召回,还有一些基于 KNN 的召回 。
  • 过滤:召回之后,会进行过滤,主要是和应用场景相关,如已购商品过滤掉、没有库存的过滤掉,或者敏感的商品过滤掉等等这些逻辑 。
  • 排序:排序目前主要用到的是 DNN 模型,某些流量比较小的地方会用到 GBDT 。
  • 过滤:排序之后还会有些分页、同商品过滤等逻辑 。
调整:最终调整过程中,主要有两部分逻辑,多样性和探索逻辑 。
▌排序模块
1. 模型结构
京东电商推荐系统实践

文章插图
【京东电商推荐系统实践】 
深度学习 ranking 模型结构我们不作为重点讨论,这里列举了一种最经典的模型,它们都用到了很多 id 的 Embedding,然后这些 Embedding 规模都很大,这样训练和上线都比较耗时 。因此,我们做了一些优化,比如做分布式的训练,并且会有一套 Pipeline 来完成模型的上线 。另外,虽然模型很复杂,并且能带来很好的效果,但是特征工程还是必不可少的,很多指标的提升还是依赖于特征工程,当然也包括一些模型调整的工作 。
2. 实践
京东电商推荐系统实践

文章插图
 
那么如何把这些模型落地呢?我们看下整个模型的上线过程:
首先最重要的部分是模型训练平台和排序服务,因为很多深度模型计算量要求很高,为了能达到比较快的效果,需要部署单独的排序服务 。目前比较流行的是 TensorFlow serving,可以很快速的来上线一个深度模型,并充分利用对分片、单机并行,达到很高的计算效率 。
模型线上线下一致性问题对于模型效果非常重要,我们使用特征日志来实时记录特征,保证特征的一致性 。这样离线处理的时候会把实时的用户反馈,和特征日志做一个结合生成训练样本,然后更新到模型训练平台上,平台更新之后在推送到线上,这样整个排序形成了一个闭环 。
3. 实时更新
京东电商推荐系统实践

文章插图
 
我们的特征和模型都需要做实时的更新 。因为我们经常需要很快的 catch 一些实时的信号,比如需要实时的用户画像来抓住实时的用户兴趣的变化,还比如需要抓住实时的商品画像,因为经常会有一些活动或者爆品,我们需要快速的捕捉这些信号,并应用到推荐中 。另外还有一些实时的召回和特征,比如一些交叉的特征,实时的点击率,实时订单等特征 。
除了特征外,模型也需要实时更新,对于电商场景来说这是有一定困难的,因为订单是有延时的,延时可能是十几分钟到十几小时不等,这样实时模型更新上就会采取一些保守的策略,比如用点击率对模型做些微调,然后订单数据再通过离线来获得,这属于业务场景的限制 。


推荐阅读