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%,同时使排序效果有较大提升。

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设定,将排序问题转化为一个二分类问题,预估每个商品的点击率。

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

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

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

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

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

离线与在线验证

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

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

其他的实验结果以及算法细节请点击文末“阅读原文”,并选择在浏览器打开。

(文件较大,需要耐心等待哦~)

总结

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

2