携程技术2018年度合辑

这本书作为 2018 年携程技术的结晶,集合来自携程技术中心微信公众号全年度的重要技术文章,涵盖了从无线大前端到后端架构,从大数据到 AI 应用,从研发质量到 DevOps 几乎所有主流的互联网技术方向。总共 69 篇,细分为 8 个领域:人工智能、架构、无线大前端、 大数据、质量、运维、数据库、风险控制。
展开查看详情

1.

2.序 2019 年已悄然来到我们身边,回首过去的 2018 年,携程 GMV 达到 6900 亿元,首次成 为全球 OTA 行业第一;线下门店超 7000 家,国内城市覆盖率达到 80%;海外平台月度活 跃用户量已达到 9000 万,携程全品牌月活跃用户数超过 2 亿。 在背后支撑和驱动业务快速发展的,正是数千名日夜奋战的携程技术人。携程技术工程团队 逐步成长为成熟和有业界影响力的互联网技术团队,技术已成为推动携程业务发展的持续源 动力。 2018 年是携程技术人繁忙的一年:  后端技术方面,已初步实现从.Net 到 Java 技术栈的转型,分布式服务框架、消息队 列、缓存、服务监控、DR 支持等框架和中间件日臻成熟;  大数据作为日常业务决策和产品优化的必备工具和基础设施,从底层数据平台到上层 应用均发展迅速,『用数据说话』已成为技术和业务同事的共识;  人工智能尤其深度学习作为当今业界技术潮流,携程当然也没有落下,持续的探索和 落地 AI 技术,在个性化推荐、智能客服、图像识别和智能运维等业务场景发挥越来越 大的作用;  无线大前端领域,无论 React Native 经过两年多的打磨成长为替代传统 Native 和 Hybrid 的无线开发技术,还是 NodeJS 技术栈的成熟和应用数的高速增长,都表明携

3. 程在业界快速发展的大前端技术潮流中准确把握了方向,并且脚踏实地的实现了落 地;  得益于运维基础设施和私有云技术的日益成熟,DevOps 在携程早已不是概念,而是 携程技术人每天的日常操作;  风控作为金融服务中的核心技术,今年我们实现了携程和去哪儿风控系统的统一,并 且成功输出到携程收购的英国机票搜索引擎 Skyscanner。  2018 年也是携程尝试技术出海的一年,海外呼叫中心和海外公有云应用部署都标志着 携程技术人会成为业务出海的坚定后盾。 技术从来不是闭门造车,这一年我们也在积极和业界通过各种渠道进行交流,无论是微信公 众号、专题技术沙龙,还是举办携程技术峰会,以及参加各类业界技术会议,我们会一直以 开放和充满热情的心态和小伙伴们探讨技术。我们相信不同的技术都有其特定的应用场景, 在交流中碰撞出新思路的火花,是我们进行技术交流的目标。 携程目前使用了各个技术领域的大量开源技术,例如 Redis、Dubbo、CAT、Kubernetes、 React Native 等,我们也曾开源 Apollo 等『GitHub 高星』作品。作为技术交流的终极形 式,我们期待未来能更多以开放源码的形式回馈技术社区,据悉 3 月左右 CRN 框架核心部 分即将开源。Talk is cheap, show me the code. 这本书作为 2018 年携程技术的结晶,集合来自携程技术中心微信公众号全年度的重要技术 文章,涵盖了从无线大前端到后端架构,从大数据到 AI 应用,从研发质量到 DevOps 几乎 所有主流的互联网技术方向。总共 69 篇,细分为 8 个领域:人工智能、架构、无线大前端、

4.大数据、质量、运维、数据库、风险控制。 欢迎大家针对书中的技术问题深入探讨,如果发现问题或者有更好的想法,期待及时向我们 提供反馈。 新的一年我们会继续在技术路上狂奔,欢迎业界小伙伴们通过关注携程技术中心微信公众 号,参加携程主办的专题技术沙龙和会议,大家都能有更多的成长和收获。 携手致远,百战功程! 携程技术副总裁 李小林 2019.1.19 于上海

5. “携程技术中心”微信公众号(ID:ctriptech) 分享来自携程技术人的一手干货文章,发起技术活动,发布热招职位, 和技术圈小伙伴一起学习成长~

6. 目录 目录 人工智能篇 ............................................................................................. 1 机器学习在酒店呼叫中心自动化中的应用 ...........................................................................................2 携程度假智能云客服平台............................................................................................................................5 机器学习算法在饿了么供需平衡系统中的应用 ............................................................................... 11 携程个性化推荐算法实践......................................................................................................................... 18 平安银行算法实践 ...................................................................................................................................... 27 携程“小诗机”背后的机器学习和自然语言处理技术 ................................................................. 36 携程图像智能化建设之路......................................................................................................................... 45 面向前端工程师的机器学习引导课 ...................................................................................................... 53 证件全文本 OCR 技术,了解一下......................................................................................................... 66 携程 AI 模型引擎设计与实践 .................................................................................................................. 81 “猜你所想,答你所问”,携程智能客服算法实践 ...................................................................... 88 知识图谱在旅游领域有哪些应用?携程度假团队这样回答 ........................................................ 96 如何选出最“美”图片展示给你?携程做了基于深度学习的图像美感评分系统............. 101 全球顶级算法赛事 Top5 选手,跟你聊聊推荐系统领域的“战斗机” ................................ 107 携程实时智能异常检测平台的算法及工程实现 ............................................................................. 113 行业智能客服构建探索 ........................................................................................................................... 121

7. 目录 架构篇 ................................................................................................. 129 携程软件 SBC 实践 ................................................................................................................................... 130 携程图片服务架构 .................................................................................................................................... 139 揭秘携程三端通用框架中的 CRNWEB ............................................................................................... 144 快速排障,VI 能帮你做什么 ................................................................................................................. 154 Meteor 实时计算平台架构与实践 ....................................................................................................... 160 携程国际化进程中,是怎么做站点多语言处理的? .................................................................... 170 高效开发与高性能并存的 UI 框架——携程 Flutter 实践 ............................................................ 181 携程度假起价引擎架构演变 .................................................................................................................. 189 携程国际 BU 的 SEO 重构实践 ............................................................................................................. 200 携程机票日志追踪系统架构演进......................................................................................................... 207 携程国际站点 Trip.com 的无线异步启动框架................................................................................. 211 携程 Redis 海外机房数据同步实践 ..................................................................................................... 218 HyperLedger Fabric 在携程区块链服务平台的应用实战 ............................................................ 224 配置中心,让微服务『智能』 ............................................................................................................. 235 携程基于云的软呼叫中心及客服平台架构实践 ............................................................................. 253 携程 Redis 容器化实践 ............................................................................................................................ 273 携程新一代监控告警平 Hickwall 架构演进 ...................................................................................... 287 无线大前端篇 ................................................................................... 293

8. 目录 携程 MTP 和 MCD 平台,如何支撑一年 10W+次无线集成和发布 ........................................ 294 携程无线离线包增量更新方案实践 .................................................................................................... 302 携程无线 APM 平台,如何实现全球端到端性能监控 ................................................................. 310 Mvvm 前端数据流框架精讲 .................................................................................................................. 318 Android 工程模块化平台的设计 .......................................................................................................... 329 React Fiber 初探 ........................................................................................................................................ 342 Kotlin 超棒的语言特性............................................................................................................................. 350 关于 Apple Pay 接入和开发,看这一篇就够了 .............................................................................. 361 手把手教你 iOS 自定义视频压缩 ......................................................................................................... 371 携程国际 BU 酒店团队的大前端之路 ................................................................................................. 380 React 模块懒加载初探 ............................................................................................................................. 385 大数据篇 ............................................................................................ 392 ALLUXIO 在携程大数据平台中的应用与实践 ................................................................................. 393 携程机票实时数据处理实践及应用 .................................................................................................... 398 携程 Presto 技术演进之路...................................................................................................................... 403 一个数据分析师眼中的数据预测与监控 ........................................................................................... 412 携程机票是如何准确预测未来一段时间话务量的? .................................................................... 419 质量篇 ................................................................................................. 425 携程 DARE 回归测试实施二三鉴 ......................................................................................................... 426

9. 目录 分支集成加速器 Light Merge 在携程的应用 ................................................................................... 430 基于图像比对技术,低成本维护的携程机票前端测试平台 SnapDiff .................................... 435 携程 QA-流量回放系统揭秘 ................................................................................................................. 440 如何利用 Xcode 实现线上代码覆盖率的检查 ................................................................................. 444 带有业务逻辑的比对思想在接口测试中的应用 ............................................................................. 447 携程微服务架构下的测试浅谈 ............................................................................................................. 451 千万级别数据 20 秒内反馈,携程酒店智能监控平台如何实现? .......................................... 456 基于信息论构建的测试解决方案——携程机票如何利用大数据提升测试效果?............. 466 一文带你了解携程第四代全链路测试系统 ...................................................................................... 472 携程 Hybrid 代码评审服务 ..................................................................................................................... 484 携程用户中心接口自动化实践 ............................................................................................................. 490 运维篇 ................................................................................................. 500 AIOps 在携程的践行 ................................................................................................................................ 501 记一个真实的排障案例:携程 Redis 偶发连接失败案例分析 .................................................. 510 携程一次 Redis 迁移容器后 Slowlog“异常”分析....................................................................... 523 数据库篇 ............................................................................................ 530 MySQL 锁之源码探索 .............................................................................................................................. 531 携程酒店订单 Elastic Search 实战 ....................................................................................................... 538 携程数据库高可用和容灾架构演进 .................................................................................................... 544

10. 目录 风险控制篇 ........................................................................................ 551 基于红黑树的高效 IP 归属地查询方案 .............................................................................................. 552 携程基于大数据分析的实时风控体系 ............................................................................................... 558

11. 人工智能篇 人工智能篇 1

12. 人工智能篇 机器学习在酒店呼叫中心自动化中 的应用 [作者简介]周振伟,携程数据智能部数据科学工程师,同济大学硕士,主要承担酒店服务领 域的数据分析和挖掘工作。 无论是出门旅游还是商务出行,在外能有一个舒适的住处,往往都是首先要解决的问题。OTA 提供的酒店预订功能无疑为此提供了巨大的便利。 打开携程 APP,看中一家不错的酒店下单后,会有一个等待酒店确认的过程。携程将用户预 订的消息发送给酒店,酒店进行查房,确认是否有空余房间,然后回复携程,再由携程通知 用户确认结果。这个过程通常在半小时到一小时内完成,很多时候只需十分钟,在这背后, 携程的呼叫中心起到了重要的作用。 面对每天全国海量的出行和预订需求,避免用户长时间的等待,加上与酒店相关的各种复杂 事宜,呼叫中心的工作一直在高度紧张和繁忙的氛围中进行。然而随着业务量的不断增长, 完全靠人力完成这些工作效率是非常低的。在大数据和人工智能时代,我们自然会想到用数 据的力量代替一部分人力工作,即实现和提升流程的自动化,提高工作效率。 本文以订单确认智能外呼为例,分享携程在提升呼叫中心自动化方面所做的工作,介绍携程 是如何利用机器学习技术,改造呼叫中心外呼流程的。 一、呼叫中心职能 携程呼叫中心的职能主要包含以下四部分: (1)订单确认前处理:从用户下单到确认订单为止的过程,称为前处理。确认订单是指用 户下单后酒店确认是否可以正常入住,然后携程告知用户确认结果。除一部分房型可以直接 确认用户不用等酒店回复以外,大部分房型都需要由酒店亲自确认。这部分房型只要有用户 下单就必然经历这个过程,因此前处理是携程呼叫中心工作量最大的事务之一。 (2)订单确认后处理:从确认订单到用户入住和离店为止的过程,称为后处理。对用户来 说,订单确认后只需到那一天到达酒店入住即可。对携程来说还有很多事宜需要和酒店沟通, 例如入住人或时间变更、离店后的审核结算等。此外,确认订单时如果酒店告知房间已满无 法入住,携程会通知用户并推荐用户改订其他酒店,该过程也属于后处理。 (3)用户订单操作:即通常所说的客服,接听用户来电,处理用户取消订单、修改入住人 或时间、增加特殊要求、开发票等方面的需求。 2

13. 人工智能篇 (4)投诉处理:负责处理用户投诉 除处理投诉必须人工协调以外,其他三项职能的工作都有既定的流程,因此都包含大量重复 性的工作。经过长期的工作积累发现,这些流程整体保持高效,但部分环节效率略低,可以 用自动化的方式代替或改进。 二、订单确认智能外呼 上文提到,如果酒店长时间没有确认订单,呼叫中心会人工外呼给酒店催单。问题是,应该 采取怎样的外呼策略,可以使订单确认外呼这项工作更加高效。 2.1 传统的订单外呼流程 传统的订单确认流程很简单,等待酒店回复——到指定时间仍未回复——人工外呼酒店。这 是一个很自然的流程,然而实际效率并不高。主要有两点: (1)向酒店发出预订消息后,只能一直等待,直到快要超时了再去催单吗?事实上,有些 酒店确认订单的速度一向很慢,或者某个特殊的时段、某些特定的房型酒店总是很晚才给回 复。可能我们已经预料到酒店会很晚才给回复,但也会等到指定时间外呼催单,这样用户就 白白等待了很长时间。或者,我们可以提前外呼这些酒店催单? (2)实际操作中发现,很多时候,酒店只是在电话里表示了解情况,通话结束后仍然过很 久才给回复,那这次外呼就变得没有意义,可能酒店已经习惯或者确实需要那么多时间来做 确认,有没有给酒店外呼结果是一样的。毕竟人力有限,不可能所有订单都做外呼,应该优 先去做外呼有意义的订单,而可能无效的外呼就应暂缓。那么,在外呼之前,能否预判这次 外呼是否有效? 顺着以上两个问题的思路,就把一个依次排队的傻瓜式外呼,转变为智能化的预测式外呼。 这里的关键,就是要提前找出哪些订单需要提前外呼,以及预判外呼的有效性。这是一个需 要自动执行的预测功能,机器学习在这里派上了用场。 2.2 改造后的智能外呼流程 3

14. 人工智能篇 改造后的预测式外呼流程加入了两个机器学习模型:回复时长预测模型和外呼有效性模型。 (1)通过回复时长预测模型,预测订单的回复时长是否会超过一定容忍范围。在容忍范围 内回复的,暂时不用做什么。如果等到容忍范围后仍未回复,再进入队列准备外呼。预测回 复时长超过容忍范围的,提前外呼,提前对可能需要很长时间回复的酒店进行催单。 (2)准备外呼前,每个订单由外呼有效性模型做一次判定,即本次外呼是否有效。判定为 有效的,优先安排人工外呼;判定为无效的,说明此时电话打出去也没有意义,人工外呼延 后。但为了应对模型误判,防止确认超时,我们会用 IVR 自动语音外呼做一次催单。如果 IVR 没有起作用,在剩下的时间里,就对这些仍未确认的订单安排人工外呼。 总结一下这个预测式外呼流程,我们把可能会很晚回复,并且立即外呼也是有效的订单,尽 可能优先安排人工外呼;而其他需要较长时间回复,或者打电话不起作用的外呼延后。比起 原本订单一个个排队外呼的方式,新流程对资源的分配更为合理。 2.3 模型的构建 下面介绍一下上面所用的两个模型。这是两个有监督模型,我们结合业务背景提取相关特征, 构建数据集,离线进行模型训练。 以外呼有效性模型为例,决定外呼是否有效的因素有很多,包括下单所处的时间点,几天后 入住,是否是特殊或热卖的房型,携程与酒店的合作关系,酒店历史的外呼数量,无效外呼 数量,以及酒店的操作习惯等。训练过程中我们尝试了多种模型,最终选择 XGBoost 模型上 线。 模型以及新流程上线后,对比上线前后一段时间的数据,总订单量增长了 25%,而实际进行 人工外呼额订单占比减少了 1/3,同时确认用户的平均时长没有显著变化,说明在没有影响 客户体验的前提下,通过以模型预测进行资源重新分配的方式,减少了大量无效外呼,流程 得到了优化,呼叫中心工作的运行效率得到大幅提升。 三、总结和展望 以上我们介绍了大数据和机器学习在提升携程呼叫中心自动化方面的一些应用,重点介绍了 预测式智能外呼的细节。这些项目的成功上线,验证大数据和机器学习在提升自动化,优化 资源分配,改进流程提高效率方面可以发挥重要作用。我们分析现状,寻找流程中的不足和 改进点,用机器学习加以改进,在其他项目中也值得借鉴。 未来携程将致力于打造一个全新的、更加数据化智能化的呼叫中心,从而更好地服务用户, 为行业树立一个新的标杆。 4

15. 人工智能篇 携程度假智能云客服平台 [作者简介]李健,携程度假大数据开发总监。2013 年底加入携程,在攻略社区及度假负责自 然语言处理、图像、推荐等领域的开发管理工作。 写在前面 在人工智能时代, AI 技术会以提供更精准更高效的方式在流程改进、沟通费力度下降、沟 通效率提高、成本降低及收益提升等众多方面全面改变目前的商业模式、推动业务发展。携 程度假的智能云客服平台在这方面做了很多有益的尝试,大大提升了携程度假客服的效率和 用户体验。 一、智能云客服平台概述 在智能云客服平台上线前,在包括 IM/微信、在线客服和电话客服在内的多个服务渠道的各 个行为阶段都存在着不少痛点问题。由于度假的产品涵盖酒店、机票和门票等多个方面,服 务的多样性更加明显,给痛点问题的解决带来了更多的困难。 为了解决上述痛点问题,我们建立的智能云客服平台目标主要围绕以下六个方面进行改善: 1)服务流转效率; 2)服务响应时间; 3)标准化服务; 4)自动化服务; 5)违规管理; 6)流程优化; 当前的智能云客服平台已经在智能问答、服务渠道管理、服务流程优化和供应商管理四个方 5

16. 人工智能篇 面上线了近 80 个模型,取得了很好的效果。 二、系统架构 下图展示了我们智能云客服平台的系统架构,其中在算法部分,我们设计并上线的自动纠错 模型,使用户意图理解的准确率从 60%提升到了 90%以上;在工程部分,我们设计并构建了 EasyAI 平台,与很多 AI 平台往往提供给算法工程师使用不同,我们的 EasyAI 面向的是不熟 悉技术的业务群体,通过这个平台,提升了业务 50%的工作效率。 三、典型算法模型介绍 3.1 用户意图模型 用户在和客服聊天的时候,往往会有各种各样的意图,我们需要实时判断用户是否存在购买 某一个具体产品的意图,或者是否能够形成一个明确的意图方便后续的产品推荐。我们采用 了基于深度学习的多任务多标签的模型来实现,如果用户被判为存在上述意图,则会基于该 6

17. 人工智能篇 意图,为用户提供更个性化的服务。 3.2 群监督模型 因为用户和客服的沟通都是基于群的方式来实现的,所以我们需要使用群监督模型来更好得 对用户意图进行分析和判断。在真实情况下,用户的大部分聊天内容比较集中,样本量也非 常大,而在某些意图上的样本量缺极度缺乏,为此我们构建了一个有效的群监督模型来解决 样本极度不平衡的问题,该模型上线后,准确率从 10%+提升到了 80%+。 3.3 内容抽取模型 在智能云客服平台的诸多应用场景中都会使用到内容抽取功能,为此,我们构建了一个基于 半监督学习的内容抽取通用模型。具体地,我们在常用的内容抽取模型的基础上加入自己建 立的语言模型来实现半监督学习,最终准确率提升了 7%。 7

18. 人工智能篇 3.4 知识图谱构建 在知识图谱的构建过程中,我们首先划分 Domain,然后在每个 Domain 下去产生一个 Schema。产生 Schema 的方式分为人工和自动两种,自动产生 Schema 的效果往往不是很 理想,所以我们采用人工定义 Schema 的方式。 接下来我们在 Schema 的基础上实现信息的抽取,并进一步完成知识图谱的补全和融合。下 图展示了我们从知识图谱的构建、抽取、补全、融合到推理过程中使用的所有模型。 3.5 自助问答模型 智能云客服平台的自助问答系统经历了从 1.0 到 2.0 的发展过程,在自助问答 1.0 系统中, 我 们 建 立 粗 粒 度 检 索 式 模 型 来 实 现 和 用 户 的 单 轮 对 话 。 具 体 地 , 我 们 采 用 Bi- LSTM+Attention+CNN 的方式来实现,分别对问题和回答建立模型,最后计算两个模型输出 8

19. 人工智能篇 向量之间的相似度。 在自助问答 2.0 系统中,我们实现了机器和用户的多轮对话。对于用户的聊天内容,首先进 行内容自动纠错和自然语言理解,然后进入对话管理,为了保证对话管理的性能,我们开发 了核心组件。在对话管理之后,根据对用户意图和对话控制的理解,会选择检索式粗粒度回 答和知识库细粒度回答两种方式。在获取所有的回答之后,我们会对其进行重新排序,同时, 我们还会根据对用户意图的理解和当前用户所处的环节进行相应的推荐,最后生成最佳回 答。下图展示了自助问答 2.0 系统的处理流程。 四、EasyAI 平台介绍 在第二部分中,我们提到了 EasyAI 平台,这里我们做进一步的介绍。我们建立 EasyAI 平台 的初衷是为了直接给业务进行操作。利用 EasyAI 平台,我们可以提高语料标注和模型训练 的效率,实现标注语料的共享,同时也可以缩短建设周期,减少模型的重复建设。下图展示 了我们 EasyAI 平台的系统架构。 9

20. 人工智能篇 写在最后 以上对携程度假智能云客服平台进行了介绍,但 AI 对于携程度假的价值远远不限于此,后 续我们会进一步将知识图谱应用于智能推荐和搜索,同时也会实践旅游领域的机器阅读,减 少知识图谱构建的费力度,最终实现服务全流程的自动化和智能化。 10

21. 人工智能篇 机器学习算法在饿了么供需平衡系 统中的应用 [作者简介]陈宁,饿了么人工智能与策略部高级算法专家,负责供需平衡系统的算法与研发 工作。获新加坡南洋理工大学计算机博士学位,研究方向包括:数据挖掘,机器学习,自然 语言处理,软件工程等。本文来自陈宁在第二届携程云海机器学习沙龙上的分享。 即时配送物流系统是外卖领域核心价值所在。区别于其他物流,这个行业的“物流”是希望 30 分钟内能够送到,这就对我们的算法模型具有很大的挑战。智能调度系统更是即时配送 物流系统中的核心。 在本文中,我将介绍饿了么的智能调度系统,着重介绍其中的压力平衡子系统,并通过两个 实例,分享机器学习算法在构建压力平衡系统中起到的关键作用以及取得的成果。 希望通过本文,帮助一线的机器学习算法工程师和爱好者们了解饿了么即时配送系统中压力 平衡系统的构建,以及如何利用常见机器学习算法有效地解决 O2O 场景下的实际问题。 一、饿了么智能调度系统 饿了么智能调度系统是外卖即时配送领域中最核心的环节,该系统替代了调度员大部分的工 作,减少了人力介入的程度,实现了自动化、智能化的派单。 智能调度系统主要可以划分为四个子系统,如图 1 所示: 11

22. 人工智能篇 图 1 饿了么智能调度系统  智能派单:包括骑手与订单的匹配策略, 骑手的路径规划等;  时间预估:包括骑手行程时间预估, 骑手楼内停留时间预估, 出餐时间预估与下单送达 时间预估等;  供需平衡:包括实时的压力平衡,中长期订单预测、运力规划和短期的骑手排班等;  位置服务:包括配送范围划定, 商圈/楼宇/配送点的建设,位置校准等。 以上各个子系统相辅相成,组成了整个饿了么智能调度系统。本文中我将重点介绍机器学习 算法在供需平衡中的实时压力平衡系统中起到的作用。 二、压力平衡系统 2.1 系统目标 压力平衡系统要解决的问题是:当配送供给(骑手)与用户需求(订单)出现日内的异常不匹 配时,为了保证用户体验不受到过大损伤,及时有效地使用调控手段来平衡需求与供给。 图 2 压力平衡系统目标 造成用户需求和配送供给日内异常不匹配的原因有很多:比如遇到恶劣的天气、商家搞一些 临时性的大活动,骑手运力本身不充足等。 当出现异常不匹配时(压力高于某个阈值),压力平衡系统会采取一定的措施。比如上调配送 费、缩小配送范围、下满减活动、关店等。 2.2 算法框架 图 3 展示了压力平衡算法的总体架构: 12

23. 人工智能篇 图 3 压力平衡算法框架图 首先,图 3 的最上方 (M1) 展示的是团队(饿了么组织运力的最小单元,一个团队由若干骑 手组成) 压力系数及其辅助指标的实时监控和预测模块。这个模块主要的作用是估算自动调 控开始的最佳时机和调控的量化控目标:即当压力系数大于一定的阈值时,开始自动采取一 系列的措施,使得压力系数降低到可接受的范围。 其次,图 3 的中部 (M2) 展示的主要是两个模块:1)餐厅理解;2)调控策略池。其中,餐 厅理解:利用餐厅重要性排序模型,单店爆单模型,餐厅配送难度等信息来细化调控的基本 单元,它使我们知道哪些餐厅是应该首先被调控的。调控策略池包含了调控可用的调控手段, 例如:增加配送费,下大额满减活动,缩小餐厅的配送范围等。 最后,图 3 的底部 (M3) 展示的是自动调控策略生成主模型:我们会根据量化的调控目标, 来优化单个或多个指标的组合。通过数据、算法来决定调控哪些餐厅,每个餐厅使用什么样 的调控策略。 图中每个模块都通过数据驱动,应用了机器学习算法来实现相应的目标。图中绿色标记是我 们已经完成的,标记黄色部分是我们正在或者规划中的工作。在第四章中,我将通过两个例 子来介绍我们取得的一些成果。 2.3 数据监控 13

24. 人工智能篇 我们还构建了一套策略实时监控系统,方便相关人员查看。例如,图 4 显示的是某个团队的 实时压力系数。团队压力系数,我们做到了归一化(所有团队值域一致,含义一致),并且能 根据天气、温度等情况自适应地变化。当前,这个指标我们做到了每隔 5 分钟更新一次。在 第四章中,我将会更加详细地介绍团队压力系数的计算方式。 图 4 压力系数监控看板 三、机器学习算法在压力平衡中的应用 在这个章节中,我将通过两个案例来介绍机器学习算法在构建饿了么压力平衡系统中起到的 关键作用。 3.1 骑手最大背单能力模型 骑手的最大背单能力反应了一个骑手的水平,是骑手画像的非常重要的组成部分。第一版, 由于我们只是为了得到团队的最大背单能力,所以我们只使用了简单的规则,计算了团队的 平均最大背单能力,用这个平均最大背单能力作为这个团队骑手的最大背单能力。显然,这 是非常不合理的。 在第二版中,我们通过一些负责的规则,将骑手分成了若干等级,每个等级的骑手具有一个 相同的最大背单能力。这个版本的骑手最大背单能力具有了一些个性化,但是任然无法细致、 有效地区分不同骑手的水平。 在第三版中,我们采用了机器学习的方法,把这个问题抽象成一个二分类的问题,从而得到 了每个骑手在不同背单量情况下超时的概率。图 5 显示了以上介绍的迭代内容,下面介绍 V3.0 版本我们的思路。 14

25. 人工智能篇 图 5 骑手最大背单能力模型迭代 解决这个问题的关键思路在于,我们将骑手最大背单能力的估算转化为一个二分类问题。具 体步骤如下: 第一步:我们队每张骑手的运单构建一条训练数据; 第二步:统计这张运单运送过程中骑手的最大背单量作为其中一个特征; 第三步:统计其他特征,包括骑手画像相关特征,天气特征等; 第四步:构建二分类的 Label,一张运单超时记为 1,不超时记为 0; 第五步:使用大量的训练数据,训练得到一个线性的二分类模型; 第六步:给定一个骑手,固定其他特征,并滑动最大背单量特征,得到该骑手在不同最大背 单量下超时的概率。 下面,我详细介绍一下特征工程部分,主要包括以下几块内容: 1)骑手历史最大非超时背单量。包含前 28 天、21 天、14 天、7 天、5 天、3 天的骑手平均 最大非超时背单量; 2)天气和温度信息; 3) 骑手的个性化信息:包括骑手的等级,骑手的工作天数,骑手所在团队的信息等; 4) 时间信息:主要包括该日是一周的哪一天,是否是工作日两个特征; 5)运单信息:运单运送过程中骑手的身上最大背单量。 接下来我介绍一下模型的选择和训练集和预测集的构造。根据简单有效原理(即:奥卡姆剃 刀定律),我们采用了常用的线性模型,即 Logistic Regression(LR)模型,我们的考虑如下:  线性模型,模型非常简单,有效,计算速度快;  模型可解释性很强,便于业务人员理解;  问题需要输出[0,1]之间的概率值, LR 使用 sigmoid 函数能够将预测值转化为概率值。 训练集的构造我们采用了最近 14 天的运单数据,即数据日期范围是[T-13,T], 时间范围限 定在了午高峰(10:30~12:30)。由于超时单相比非超时单占比非常小,所以我们对正负样本的 比例进行了调整,对非超时样本按照 10%左右进行了降采样。 15

26. 人工智能篇 在构造测试集时,我们对运单运送过程中骑手的最大背单量特征进行滑动,从 0 ~ 30 按照 0.5 的间隔进行构造。然后通过训练的模型进行预测,从而得到骑手在不同背单量下的超时 概率。如图 6 所示, 是 taker_id =342853 的骑手在不同 max_order_num_on_taker 情况下超 时的 probability。 图 6 骑手在不同背单量情况下超时的概率 下面我来介绍一个骑手最大背单模型的重要应用场景,即计算团队的压力系数: 我们定义团队压力系数 = load / (q1 + q2 + .... qn) 1)load=团队负载 2)qn=该团队第 n 位骑手的个性化最大背单量(使用骑手最大背单模型计算的数值) 团队压力系数的定义简洁有效,直接支持了饿了么即时配送相关 10 多个相关业务系统:包 括智能派单,压力平衡,运单分流,T 模型,客服系统等。 3.2 团队压力系数预测模型 正如章节 3.1 所介绍,团队压力系数是即时配送中一项非常重要的基础指标,因此,如果我 们能提前预测这一指标将会对多个业务系统产生巨大的价值。基于此,我们构建了一个实时 的团队压力系数预测模型,它能够每隔 5 分钟对团队未来 1 个半小时(每 15 分钟一个时间 16

27. 人工智能篇 片,共 6 个时间片)的压力系数进行预测。图 4 中的虚线即展示了其中一次预测的值。我们 将这个模型应用在以下 2 个场景中: 1)定量描述压力平衡自动调控的目标,辅助确定自动调控的时间点,进行提前调控; 2)应用在智能派单策略上,通过压力系数的预知,规划不同的派单策略。 如下图所示:截止目前,我们完成了团队压力系数预测模型的三轮迭代。通过持续迭代,我 们大幅提高了模型预测的准确率和预测的频率。 四、总结展望 通过本文,我们希望读者能够对饿了么即时配送体系中的压力平衡系统以及如何利用常见的 机器学习算法有效解决 O2O 场景下的实际问题有所了解。展望未来,压力平衡系统中仍然 有很多问题可以抽象成机器学习问题(例如:排序学习,时间序列等) ,希望在不久的未来, 有机会和大家分享我们更多的成果。 17

28. 人工智能篇 携程个性化推荐算法实践 [作者简介]携程基础业务研发部-数据产品和服务组,专注于个性化推荐、自然语言处理、图 像识别等人工智能领域的先进技术在旅游行业的应用研究并落地产生价值。目前,团队已经 为携程提供了通用化的个性化推荐系统、智能客服系统、AI 平台等一系列成熟的产品与服 务。 携程作为国内领先的 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]。 对于召回阶段得到的候选集,会对其进行更加复杂和精确的打分与重排序,进而得到一个更 18

29. 人工智能篇 小的用户可能感兴趣的产品列表。携程的推荐排序并不单纯追求点击率或者转化率,还需要 考虑距离控制,产品质量控制等因素。相比适用于搜索排序,文本相关性检索等领域的 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 企业,每天 都有海量用户来访问,积累了大量的产品数据以及用户行为相关的数据。实际在召回和排序 的过程中大致使用到了以下这些数据:  产品属性:产品的一些固有属性,如酒店的位置,星级,房型等。  产品统计:比如产品一段时间内的订单量,浏览量,搜索量,点击率等。  用户画像:用户基础属性,比如年纪,性别,偏好等等。  用户行为:用户的评论,评分,浏览,搜索,下单等行为。 19