KDD论文解读 | 想要双11抢单快?靠这个技术提速9MS

简介:

6月29日,阿里巴巴在杭州召开2017天猫双十一发布会,宣布启动:双11超级IP计划。今年晚会将由北京卫视、浙江卫视、深圳卫视三台同时直播。淘宝直播、优酷等在内的多家平台同步跟上,让澳门、香港、新加坡等地也能同步收看天猫双11晚会,相信今年的双11一定会成为举世瞩目的全球狂欢节。

同时,为2016双11提供技术支持的团队也首次曝光了其研究成果,通过CLOSE排序算法,2016双11CPU的使用率降低了约45%,搜索的平均延迟下降了约30%(平均的搜索latency从33ms下降到24ms),同时CLOES本身带来的GMV提升了近1%。相关论文《Cascade Ranking for Operational E-commerce Search》也被国际数据挖掘顶会KDD 2017收录。

该论文设计并实现了一种级联式电商搜索方式:它的主要思想是将一次排序分成递进的多个阶段,各阶段使用逐渐复杂的特征去得到逐渐准确的结果。在靠前阶段使用简单特征过滤显然不合要求的结果,在靠后阶段使用复杂特征辨别难以区分的结果。除此以外,算法结合电商场景的特殊性,严格限制了引擎的响应时间以及返回商品的数量,以保证用户的搜索体验。

离线实验和在线实验均验证了算法的正确性以及有效性,对比传统的方法能提升准确率的同时大幅提升了计算性能;在去年双11,在新增了大量准确又耗时的计算特征(包括强化学习和深度学习特征)的情况下,算法极大的保证了引擎的效率,使排序对引擎的压力下降40%,同时使排序效果有较大提升。

image
KDD 2017将于8月13日召开

针对这篇论文,阿里妹公布独家技术解读:

面临的问题

淘宝的搜索系统无疑是全球最大的电商搜索系统。“最大”这里包括商品量、用户量,包括引导的成交额、点击成交量,还包括引擎的访问次数、访问QPS…这样一个搜索引擎,所需要面对的访问压力也是巨大的,尤其在“双十一”等大促场景,压力更是平时的数倍。

另外一般搜索引擎的目标主要是引导点击,而在电商中,排序的结果更希望引导的是成交量和成交额。因此我们的搜索系统、排序方案需要考虑多种实际问题。首先是在有限计算资源情况下,如何拿到更好的排序结果;其次是怎样保证用户的搜索体验,包括结果返回时间、返回商品量等;最后是怎么保证电商场景下的多目标,包括点击、成交量和成交额。

已有方法的不足

学术界和工业界都有大量learningto rank方面的研究,均期望能通过机器学习,为用户给出更优的排序结果。然而绝大部分相关工作都集中在如何提升排序的质量,却并不关系排序的效率,而太低效的排序方案在实际的工业在线应用中,往往是不可接受的。

淘宝搜索和其他类似应用主要采取的解决方案是使用一种“两轮排序方案”:在第一轮使用非常简单的特征去得到一个小的候选集;第二轮在小的集合上做复杂的排序。可是这种启发式的方案并不能保证性能与效果的取舍是最优的。基于以上考虑,我们需要一种全新的、工业可用的、能更合理平衡效率与性能的排序方案。

CLOSE排序算法,平衡性能与效率,保障用户体验

论文受图像中快速目标检测算法的启发,发现并不是引擎中的每个商品都需要全部特征参与计算、排序——一些基本特征能帮助过滤掉大多数商品;逐渐复杂的特征过滤逐渐难以区分好坏的商品;全部特征排序剩余商品。基于这样的思想,论文提出了一种多轮级联排序方法Cascade model in a Large-scale OperationalEcommerce Search application(CLOES)。

CLOES主要采用了一种基于概率的cascade learning方法,将排序分为多轮计算;将排序效果和CPU的计算量作为优化目标,一起建立数学模型,同时优化。除了考虑性能与效率,算法还考虑了用户的搜索体验,保证用户在输入任何一个query后都能在限制时间内得到足够的返回结果。最后CLOES还考虑了电商场景的特殊性,保障了多目标的平衡与可调整。

平衡性能与效率的排序
(Query-Dependent Trade Off Between Effectiveness and Efficiency)

论文最重要的部分就是怎么样去平衡一个排序算法的性能和效率,那么我们主要使用的方法是cascade learning,即将一次排序拆分成多个递进阶段(stage),每个阶段选用逐渐复杂的特征去过滤一次商品集合。同时我们使用learning to rank设定,将排序问题转化为一个二分类问题,预估每个商品的点击率。

image


如图所示,我们记一个商品x(表示为一个k维向量)在Query q下,能通过第j个stage的概率为,其中表示sigmoid函数。那么一个商品最终能被点击的概率为能通过所有stage的概率之积:

image


我们通过极大似然估计去拟合样本,使用负的log似然来表示损失函数,那么基础的损失函数可以表示为L_1。L_1关注的是排序的准确性:

image

用户体验保障(Multiple Factors of User Experience)

如果直接使用上述模型,确实可以直接降低引擎的负载,但是仍然存在2点用户体验上的问题:一是对于某些query(特别是hot query),可能计算latency仍然会非常高;二是某些query(一般是长尾query)下,返回给用户的结果特别少。那么为了解决这2个问题,我们进一步的增加了2个约束:单query下的latency不能超过100(只是举例,不一定是100)ms;返回给用户的结果数不能小于200。那么很自然的,我们会想到使用类似SVM的loss形式:

image

商品场景下的多目标(Importance Factors of E-commerce Search)

image

离线与在线验证

image


在离线验证了算法效果后,我们在双11前夕对算法进行了上线,以期望降低引擎的计算压力。上线期间的引擎CPU使用率以及平均搜索latency变化如下图:可以看到CPU使用率从32%下降到18%;而平均的搜索latency从33ms下降到24ms,图中有2条曲线分别表示引擎的2个集群。需要注意的是,在引擎压力大量下降的情况下,线上的排序指标,包括CTR和GMV是略上升的。

image


受益于CLOES,在双11当天,引擎的负载在最高峰也没有超过70%,CPU的使用率降低了约45%,搜索的平均延迟下降了约30%,同时CLOES本身带来的GMV提升了近1%。考虑到其他因为性能改善而能上线的特征(包括实时特征和RNN特征等),排序的CTR提升有10%-20%,同时成交量、GMV等指标也有大幅提升(指标对比基于标准A/B Test)。

总结

搜索对于电商来说是最大的流量入口,搜索排序的质量对用户的体验、对商家的收入、对平台的效率都会起到至关重要的作用。未来淘宝搜索会继续以用户的搜索体验为主要目标,为用提供能更优质、更能满足用户个性需求的排序结果。

本文出自阿里技术公众号,原文链接

相关文章
|
9月前
|
Kubernetes 应用服务中间件 nginx
最全的kubectl命令用法
本文系统讲解kubectl命令行工具:详解所有子命令(创建、查询、部署、调试等)、API资源列表、自动补全配置,并通过大量实操示例(如创建/查看/编辑/删除资源、扩缩容、回滚、标签管理等)助你快速掌握Kubernetes集群管理核心技能。(239字)
1203 143
|
7月前
|
存储 算法 Java
Java的垃圾回收算法演进:从Serial到ZGC
Java的自动内存管理(垃圾回收,GC)是其区别于C++的重要特性之一。
539 3
|
运维 网络协议 网络安全
Kali虚拟机间搭建iodine DNS隧道实验指南
本指南介绍如何在两台Kali虚拟机间使用iodine搭建DNS隧道。通过服务端(192.168.1.44)与客户端(192.168.1.36)配置,利用DNS查询建立虚拟局域网,实现受限网络下的隐蔽通信。包含环境准备、命令详解、连通性测试及故障排查,助你快速掌握DNS隧道技术原理与实践应用。(238字)
3537 7
|
12月前
|
存储 Web App开发 监控
服装网 item_search 接口对接全攻略:从入门到精通
本文详解服装网商品搜索接口(item_search)的技术实现,涵盖多维度筛选、反爬对抗与数据解析,助你构建稳定高效的时尚商品采集系统,支持选品、趋势分析与比价应用。
|
机器学习/深度学习 自然语言处理 物联网
Chronos: 将时间序列作为一种语言进行学习
Chronos框架预训练时间序列模型,将序列值转为Transformer模型的tokens。通过缩放、量化处理,模型在合成及公共数据集上训练,参数量20M至710M不等。优于传统和深度学习模型,展示出色零样本预测性能。使用分类交叉熵损失,支持多模态输出分布学习。数据增强策略包括TSMix和KernelSynth。实验显示大型Chronos模型在概率和点预测上超越多种基线,且微调小型模型表现优异。虽然推理速度较慢,但其通用性简化了预测流程。论文探讨了优化潜力和未来研究方向。
1668 3
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
存储 缓存 NoSQL
【缓存】J2Cache —— 基于内存和 Redis 的两级 Java 缓存框架的使用方法
【缓存】J2Cache —— 基于内存和 Redis 的两级 Java 缓存框架的使用方法
1193 0
|
XML Java 开发者
springboot 启动原理、启动过程、启动机制的介绍
【5月更文挑战第13天】Spring Boot 是一种基于 Java 的框架,用于创建独立的、生产级别的 Spring 应用程序。它的主要目标是简化 Spring 应用的初始搭建和开发过程,同时提供一系列大型项目常见的非功能性特征(如嵌入式服务器、安全性、度量、健康检查和外部化配置)。
2506 3
|
网络协议 安全 程序员
网络原理-UDP/TCP详解
网络原理-UDP/TCP详解
网络原理-UDP/TCP详解
|
存储 监控 NoSQL
【MongoDB 专栏】MongoDB 分片策略与最佳实践
【5月更文挑战第10天】MongoDB 分片是应对大数据量的扩展策略,涉及哈希和范围分片两种策略。分片架构包含分片服务器、配置服务器和路由服务器。最佳实践包括选择合适分片键、监控调整、避免热点数据等。注意数据分布不均和跨分片查询的挑战。通过实例展示了如何在电商场景中应用分片。文章旨在帮助理解并优化 MongoDB 分片使用。
860 3
【MongoDB 专栏】MongoDB 分片策略与最佳实践

热门文章

最新文章