rank的产品目标:合理分配流量的问题,以及信息过载时提高用户效率的问题
如果你打开美团外卖,只有三个商家,那有没有rank就不重要了,因为用户很容易看完每个商家然后做出决策。但如果你打开外卖,附近有1000多个商家,用户不可能看完这1000个商家,这时候rank就要在合适的地点和场景,把合适的店展示给用户。即把有限的流量给到当前场景下,转化率最高的店
rank的衡量指标:在不同背景下可能不一样,但最常见的有转化率和GMV/UV。如果以订单量为目标的话,转化率可能就是rank的指标。如果以GMV为目标的话,GMV/UV才是最终的指标
人工排名
某外卖平台最早的时候,每个BD(市场经理)负责一定的区域,并且人工给这些餐厅排名。这样的方式在地推谈商家的时候,起到过一定的作用:比如BD去谈新的商家,可以承诺给到一段时间的较高排名来使老板加入平台;或者以较高的排名为条件,使得一些优质餐厅成为我们的独家餐厅,排名是BD谈判的筹码
但这样的排名方式有很多的弊端,比如工作量较大,标准不统一,容易滋生钱权交易,转化率不高等等。所以需要开始做智能排名,让统一的规则来接手这件事
公式排序
在外卖平台上,排序分为商家排序和菜品排序两种,先聊聊商家排序
首先,我们要分析什么样的因子会影响用户决策,比如用户点外卖的时候,会注重看一下商家的销量,评分,送餐速度,优惠活动的力度,起送价,配送费,那这些就是rank里面很重要的因子之一。但除了这些看得见的因子,还有很多看不见的因子,比如退单率,投诉率,进店到下单的转化率等等
然后,rank会把这些影响用户下单和最终转化的因子整理起来,给每个因子赋予不同的权重,放到A/B Test系统里去做测试,来确定最终合适的权重。然后根据每个商家计算出的分数,得到一个粗排的排名。在这个过程中,要结合外卖场景考虑到很多因素,比如商家在不同区域的服务能力不一样(比如送餐时长),以及各种容易钻的空子(刷单)
在粗排之后,rank会根据情景,给不同的商家在不同场景有一定的提权或降权,这叫做细排。比如下午的时段,会对下午茶的商家进行提权。或者商家即将关店的时候,对其排名有一定的下沉,避免用户选餐时商家突然休息。或者部分商家短时间内拒接或取消的订单过多,说明这个商家临时有问题,不能很好的承接已有的流量,所以要进行置底甚至关店的处罚
最后会根据用户,去做一些调整。比如对不同客单价的用户,对符合客单价的商家提权。对用户吃过好评的店,以及类似的店进行提权(这里其实已经涉及到了简单的个性化推荐)
到这里,rank基本上就已经完成了。但如果真的到这里就结束了,可能会遇到一些问题:比如新的商家,各项评分都很低,很可能排不到前面,导致一直无法快速成长,从而加剧马太效应,强者越强,新店永远也得不到成长。所以从长远健康的生态考虑,rank还有一个指标叫做基尼系数。rank会对新店和业务需要支持的商家,做一些提权和轮播,甚至锁定。来使这些店获得足够的流量来成长
机器学习
在外卖的场景下,有几百项因子在起作用。当只考虑销量和好评时,写一个公式调整其中的权重,人脑很容易实现。但当有几百项因子时,人脑怎么给每一个因子赋一个合适的值,怎么去一个因子一个因子去做A/B Test?
所以,我们把所有的因子告诉机器,让机器自动的去测试每个因子不同的权重,用大量的样本自动实验,找出最合适的权重给每个因子赋值。然后和人工设置的rank规则对比,哪个的效果更好
也就是说传统的检索模型采用人工拟合排序公式,通过用户数据反馈确定最佳的参数组合,以此不停的优化相关性打分函数。在随着影响相关度的参数逐步增多,传统的打分机制逐渐不能满足这方面的要求。机器学习更适合采用很多特征来进行公式拟合,最合理的排序公式由机器学习(Machine Learning)获得,因此考虑采用learning to rank(此处的learning取自Machine Learning)。learning to rank可以分为以下三大类:
pointwise(单文档方法)、pairwise(文档对方法)、listwise(文档列表方法)
相比于pairwise和listwise两种方法, pointwise 比较容易和其它控制项叠加,适用于多维度优化目标的问题。因此pointwise广泛应用于团购平台和外卖平台的排序问题。在应用中, pointwise方法会对所有的候选结果给出一个统一标准的分值,并根据分值进行排序
pointwise处理对象是单一文档,整个流程分为三部分:提取特征做训练;分类算法学习;测试query排序
将文档转化为特征向量后,主要是将排序问题转化为机器学习中常规的分类或回归问题。以多类分类为例:下图是人工标注的部分训练集合,每个文档采用三个特征:查询与文档的BM25相似度,查询与文档的cosin相似度,以及页面的PageRank值,query与di的相关性是多元的,label分为 5个等级,即{perfect,Excellent,good,fair,bad}。于是,产生了5个具有label的训练实例,然后可以使用机器学习的任一种多类分类算法进行学习,比如最大熵,支持向量机等。
当模型参数学习完毕后,之后就可利用模型进行相关性判断,对新的查询和文档,通过模型的打分函数可以得到一个数值,利用该数值即可对文档进行排序了
更多智能排序相关问题可参考《这就是搜索引擎:核心技术详解》