了解携程个性化推荐算法原理,让旅行更实惠

携程作为国内领先的OTA,每天向上千万用户提供全方位的旅行服务,如何为如此众多的用户发现适合自己的旅游产品与服务,挖掘潜在的兴趣,缓解信息过载,个性化推荐系统与算法在其中发挥着不可或缺的作用 。而OTA的个性化推荐一直也是个难点,没有太多成功经验可以借鉴,本文分享了携程在个性化推荐实践中的一些尝试与摸索 。
推荐流程大体上可以分为3个部分,召回、排序、推荐结果生成,整体的架构如下图所示 。

了解携程个性化推荐算法原理,让旅行更实惠

文章插图
 
召回阶段,主要是利用数据工程和算法的方式,从千万级的产品中锁定特定的候选集合,完成对产品的初步筛选,其在一定程度上决定了排序阶段的效率和推荐结果的优劣 。
业内比较传统的算法,主要是CF[1][2]、基于统计的Contextual推荐和LBS,但近期来深度学习被广泛引入,算法性取得较大的提升,如:2015年Netflix和Gravity R&D Inc提出的利用RNN的Session-based推荐[5],2016年Recsys上提出的结合CNN和PMF应用于Context-aware推荐[10],2016年google提出的将DNN作为MF的推广,可以很容易地将任意连续和分类特征添加到模型中[9],2017年IJCAI会议中提出的利用LSTM进行序列推荐[6] 。2017年携程个性化团队在AAAI会议上提出的深度模型aSDAE,通过将附加的side information集成到输入中,可以改善数据稀疏和冷启动问题[4] 。
对于召回阶段得到的候选集,会对其进行更加复杂和精确的打分与重排序,进而得到一个更小的用户可能感兴趣的产品列表 。携程的推荐排序并不单纯追求点击率或者转化率,还需要考虑距离控制,产品质量控制等因素 。相比适用于搜索排序,文本相关性检索等领域的pairwise和listwise方法,pointwise方法可以通过叠加其他控制项进行干预,适用于多目标优化问题 。
工业界的推荐方法经历从线性模型+大量人工特征工程[11] -> 复杂非线性模型-> 深度学习的发展 。Microsoft首先于2007年提出采用Logistic Regression来预估搜索广告的点击率[12],并于同年提出OWLQN优化算法用于求解带L1正则的LR问题[13],之后于2010年提出基于L2正则的在线学习版本Ad Predictor[14] 。
Google在2013年提出基于L1正则化的LR优化算法FTRL-Proximal[15] 。2010年提出的Factorization machine算法[17]和进一步2014年提出的Filed-aware Factorization Machine[18]旨在解决稀疏数据下的特征组合问题,从而避免采用LR时需要的大量人工特征组合工作 。
阿里于2011年提出Mixture of Logistic Regression直接在原始空间学习特征之间的非线性关系[19] 。Facebook于2014年提出采用GBDT做自动特征组合,同时融合Logistic Regression[20] 。
近年来,深度学习也被成功应用于推荐排序领域 。Google在2016年提出wide and deep learning方法[21],综合模型的记忆和泛化能力 。进一步华为提出DeepFM[15]模型用于替换wdl中的人工特征组合部分 。阿里在2017年将attention机制引入,提出Deep Interest Network[23] 。
携程在实践相应的模型中积累了一定的经验,无论是最常用的逻辑回归模型(Logistic Regression),树模型(GBDT,Random Forest)[16],因子分解机(FactorizationMachine),以及近期提出的wdl模型 。同时,我们认为即使在深度学习大行其道的今下,精细化的特征工程仍然是不可或缺的 。
基于排序后的列表,在综合考虑多样性、新颖性、Exploit & Explore等因素后,生成最终的推荐结果 。本文之后将着重介绍召回与排序相关的工作与实践 。
一、数据
 机器学习=数据+特征+模型
在介绍召回和排序之前,先简单的了解一下所用到的数据 。携程作为大型OTA企业,每天都有海量用户来访问,积累了大量的产品数据以及用户行为相关的数据 。实际在召回和排序的过程中大致使用到了以下这些数据:
  • 产品属性:产品的一些固有属性,如酒店的位置,星级,房型等 。
  • 产品统计:比如产品一段时间内的订单量,浏览量,搜索量,点击率等 。
  • 用户画像:用户基础属性,比如年纪,性别,偏好等等 。
  • 用户行为:用户的评论,评分,浏览,搜索,下单等行为 。
值得注意的是,针对统计类信息,可能需要进行一些平滑 。例如针对历史CTR反馈,利用贝叶斯平滑来预处理 。
二、召回召回阶段是推荐流程基础的一步,从成千上万的Item中生成数量有限的候选集,在一定程度上决定了排序阶段的效率和推荐结果的优劣 。而由OTA的属性决定,用户的访问行为大多是低频的 。这就使得user-item的交互数据是极其稀疏的,这对召回提出了很大的挑战 。在业务实践中,我们结合现有的通用推荐方法和业务场景,筛选和摸索出了几种行之有效的方法:


推荐阅读