作者简介

葛荣亮,携程搜索部门高级研发工程师。2015年加入携程,目前主要负责搜索平台的前端+数据挖据工作。

一、前言

随着旅游业的发展,人们对搜索的要求越来越高。智能化大趋势下,个性化的推荐系统的应用及用户需求也越来越广泛。

旅游推荐系统主要面临的问题及挑战包括:

  • 用户维度,用户的需求多种多样,如本地异地的差异,年龄、家庭结构的差异等;

  • 时间、地理维度,每个时间点的需求都是不同的,如季节(冬季的温泉,夏季避暑...)、早中晚的需求差异,不同城市用户对同一目的地的旅游产品类别需求可能不同;

  • 产品维度,如何输出多样性的产品也是推荐系统考虑的重点,如相似的酒店、景点等。

针对以上面临的问题和挑战,本文将分享携程推荐系统的更新迭代过程。

二、推荐系统架构

携程搜索推荐系统架构如下:

抛开业务和数据部分,这里只简单介绍推荐服务的结构,其简要构造如下:

2.1 用户行为

用户行为数据展示了用户的操作习惯和偏好。对这部分数据进行离线分析,可以更好地理解用户,以此来做线上产品的推荐源。

对线上需要的行为数据,可以取一个月或者近7天的历史数据,以保证数据的时效性。

2.2 可用产品

这部分指的是可供用户使用的产品及可以提供帮助的文章等。主旨在于告诉系统,我们有什么产品,哪些产品是可以提供给用户的,及哪些是优质的产品。产品的定义比较广泛,可以不限定具体的售卖产品,也可指定用户偏好,比如用户对酒店、景点的偏向等。

2.3.召回

这部分是整个系统的重点,也是规划场景最多的地方。这部分可以细分成几大召回策略(以推荐实际酒店、文章、景点的系统为例):

2.3.1 补充策略

这部分主要输出当前热门的产品信息,比如当季热门的酒店、景点等。

在具体实现的时候可以考虑季节性的变化,比如以两周为周期,统计产品的点击情况,当用户对于温泉搜索量增加时,可以输出一些热门的温泉景点。

这部分补充策略,只是为了解决冷启动问题,即当用户没有行为,或者没有地理位置信息时,做最基本的补充。

2.3.2 基于位置召回

当得到具体位置信息之后,可以做更具体的补充召回:

1)根据当前用户所在地,推荐当地的热门产品;

2)判断用户是否在常住地。如常驻上海的用户,在上海搜索产品时,更喜欢周边游,而常驻北京的用户,在上海搜产品时,更喜欢东方明珠和迪士尼。

具体分类为:

本地需求(定位城市=常驻城市),输出当地人热搜/点击的产品;

外地需求(定位城市!=常驻城市),输出外地人热搜/点击的产品;

3)根据地理位置信息,输出用户周边的几公里内的产品。

2.3.3 基于历史关联策略

这部分内容是基于用户历史行为,推出相关的产品。需要对数据和行为进行总结,并提供相应的产品展示逻辑,丰富推荐召回的内容。比如用户预定迪士尼乐园的门票,可以推迪士尼附近的酒店等。

2.3.4 协同过滤

协同过滤是推荐系统经典的算法。其对用户行为、产品的相关性做了抽象和泛化。协同过滤算法主要分为USER CF和ITEM CF,即基于用户的协同过滤和基于物品的协同过滤。

在这里我们主要用到基于物品的协调过滤,相比用户的协同过滤,物品的内容属性和数量更便于统计和计算。具体算法可以参看《推荐系统实践》这本书。

大体可以理解为,定了某一酒店的用户,又定了哪些酒店,及通常订了又订的逻辑。比如,以用户一个月的点击或订单数据为基础,计算出物品的相似度,当用户搜了某条产品时,推荐与其相似的其他产品。具体示例为:假设东方明珠、外滩、迪士尼产品相似,当用户搜索东方明珠的时,推荐外滩和迪士尼。

2.4 排序

上述召回策略,会召回大量的产品,如何对这些产品进行合理排序,是推荐系统的核心部分,同时也是反映系统优劣的指标。

这部分,经历几次迭代。

在1.0时代,在排序策略上进行了几次变动:

1)对召回产品按照类别,对相同类型产品,进行销量排序;

2)考虑到操作时间问题,加入操作时间权重。对历史行为的时间进行归一化得出权重,最大为1。操作时间越近,权重越大;

3)考虑规则的重要性,加入规则分;

上述排序策略取得一定效果,但很难完善排序问题。

最终,选取了机器学习的排序算法。其基本实现为:对每个输出产品,规划特征,输出特征集。比如季节特征,当地人/外地人特征,一天内的早、中、晚特征等。接下来根据订单和点击数据,输出训练样本,为每个召回产品做一个打分,最高5分,最低1分。最后使用XGBoost工具,对样本进行训练,这样就能得出基本模型。

通过模型,对线上每个召回产品进行打分并排序,得出最终结果。同时在系统上线后,定期的进行更新,并通过ABTest系统不断对模型进行迭代。

大致流程如下:

2.5 过滤输出

这部分内容,主要做格式化输出,并过滤一些无效,黑名单产品。

每个场景的输出,都不太一样,就需要对其数据进行筛选。比如进入搜索默认页时,提前给出推荐产品,减少用户操作。还可以在用户搜某个具体城市时,输出相应的结果。

这里需要注意的是马太效应。由于推出的内容有限,对于一些产品,会导致点击多的会越来越多,而点击少的,则慢慢退出推荐序列。这里需要对那些不常用产品做展示规划。比如随机出一两条,给一定曝光,消除一部分马太效应。

三、展望

目前推荐系统已经运用在多个场景,但对场景及产品的引入毕竟有限,同时对query 分析还不够完善,后续将丰富产品,并引入更多机器学习的内容,让系统更智能化和自动化。同时会加入更多深度学习内容,在搜索意图和NLP相关方面做更进一步的分析。

干货 | 当你在携程搜索时,背后的推荐系统是如何工作的相关推荐

  1. 干货 | 深度学习在携程搜索词义解析中的应用

    作者简介 携程旅游研发部大数据与AI研发团队,为旅游事业部提供丰富的AI技术产品和技术能力. 一.背景介绍 搜索是电商最重要的门面之一,大部分用户通过搜索来找到他们想要的商品,因此搜索是用户表达意图最 ...

  2. 干货 | XGBoost在携程搜索排序中的应用

    作者简介 曹城,携程搜索部门高级研发工程师,主要负责携程搜索的个性化推荐和搜索排序等工作. 一.前言 在互联网高速发展的今天,越来越复杂的特征被应用到搜索中,对于检索模型的排序,基本的业务规则排序或者 ...

  3. 排序 np_干货 | XGBoost在携程搜索排序中的应用

    作者简介 曹城,携程搜索部门高级研发工程师,主要负责携程搜索的个性化推荐和搜索排序等工作. 一.前言 在互联网高速发展的今天,越来越复杂的特征被应用到搜索中,对于检索模型的排序,基本的业务规则排序或者 ...

  4. 干货 | 机器学习模型在携程海外酒店推荐场景中的应用

    "关于作者:Louisa,携程算法工程师,热爱前沿算法和技术在个性化推荐和广告建模等业务的性能优化和落地. 大数据产业创新服务媒体 --聚焦数据 · 改变商业 导读 互联网企业的核心需求是& ...

  5. 干货 | 用户画像在携程商旅的实践

     作者简介 大卫,携程资深算法工程师,关注计算广告和推荐系统. 一.用户画像 用户画像这一概念最早源于交互设计领域,由交互设计之父Alan Cooper提出.其指出用户画像是真实用户的虚拟代表,是建立 ...

  6. 干货 | 强化学习在携程酒店推荐排序中的应用探索

    宣云儿,携程酒店排序算法工程师,主要负责酒店排序相关的算法逻辑方案设计实施.目前主要的兴趣在于排序学习.强化学习等领域的理论与应用. 前言 目前携程酒店绝大部分排序业务中所涉及的问题,基本可以通过应用 ...

  7. XGBoost在携程搜索排序中的应用

    一.前言 在互联网高速发展的今天,越来越复杂的特征被应用到搜索中,对于检索模型的排序,基本的业务规则排序或者人工调参的方式已经不能满足需求了,此时由于大数据的加持,机器学习.深度学习成为了一项可以选择 ...

  8. 干货 | 数据思维在携程商旅页面性能优化中的一次实践

    作者简介 Graviton,携程研发总监,专注数据思维驱动团队效能与技术发展. 本文旨在通过一个实际的例子,说明如何通过数据思维来解决研发工作中的一些棘手问题.通过此文,希望能够清楚地阐述我对下面几个 ...

  9. 干货 | 信息图谱在携程酒店的应用

    作者简介 Kuan.Pengfei,主要从事携程酒店知识图谱.问一问智能查询助手.内容信息挖掘平台的建设运维工作,热衷于各类大数据和分布式相关技术的研究和实践. "对于用户的每一次查询,都能 ...

最新文章

  1. android 悬停按钮,Android悬浮按钮的使用方法
  2. Vue axios 中提交表单数据(含上传文件)
  3. 分光计游标盘ab两个游标作用_汽车防撞梁的作用究竟有多大?没有后防撞梁的汽车真的不安全吗?...
  4. Airflow 中文文档:Lineage
  5. install intel c/c++ compiler
  6. Flask部署工具的安装与使用
  7. 中国石油大学--生活学习简易FAQ
  8. 利用PhotoShop批量压缩和转换图片格式
  9. idm 2019 中文版下载
  10. java sof栈泄露_java虚拟机(四)--内存溢出、内存泄漏、SOF
  11. mysql workbench 闪电_MySQL Workbench下载|可视化数据库设计建模(MySQL Workbench) 8.0 最新版-闪电下载吧...
  12. 舟山景区概况 舟山旅游项目介绍
  13. 云原生应用负载均衡系列 (2): 入口流量分发、容错与高可用调度
  14. stm8L-----ADC获取芯片内部参考电压
  15. 环境问题还是测试的老大难?
  16. 程序员python表白代码
  17. h5移动端调试工具vConsole
  18. 平面四节点等参单元和八节点等参单元的单元刚度矩阵计算MATLAB代码实现
  19. VB中给UInt32,UShort以16进制方式赋值编译不通过
  20. 工程图学及计算机绘图第二版答案,工程图学及计算机绘图: 非机类

热门文章

  1. postman 抓包工具charles的使用
  2. Kotlin on Android 开发环境介绍
  3. 多平台支持:下一步容器技术热点
  4. WinRAR 注册方法
  5. 实验室机器OracleXE客户端连接远程Oracle服务器
  6. java url 解码 编码 奇怪的解码两次
  7. 让 windows 的桌面 干净。。。再干净点。。。
  8. 简述configure,pkg-config,pkg_config_path三者的关系
  9. java 死锁 内存消耗_详解Java中synchronized关键字的死锁和内存占用问题
  10. find排除文件 linux_Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键...