目前公司在本地服务相关的领域进行探索,涉及到搜索排序相关的问题。相较于传统搜索,本地服务(尤其餐饮)的搜索排序问题较为特殊,由于用户的购买随机性较强,同时距离、时间、类目、评价等因素对用户的影响较大。例如因为时间成本,用户趋向于考虑离自己较近的店铺;另外不同的时间段,用户选择重点也有所不同,正午和晚上对正餐的需求量较大,而在下午三四点则对甜品、饮料的需求更大一些。
早期我们在商户排序问题上采用人工制定的规则来进行排序,引入了距离、评分、上架时间等因素,针对不同的区间段设置不同的分值,根据公式计算出总的分值,以此进行排序。这个方法的好处是实现简单,解释性强,容易控制,不存在冷启动的问题。
随着签约店铺的增多,需要加入的特征逐步增多,人工的打分机制也不能保证完全合理,同时维护升级也比较麻烦。如何通过有效的排序机制将优秀、合适的商户展现给用户,提高订单转化率成为平台比较核心的问题。
在上述基础上,我了解了一些Learning to 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的训练实例,然后可以使用机器学习的任一种多类分类算法进行学习,比如最大熵,支持向量机等。
当模型参数学习完毕后,之后就可利用模型进行相关性判断,对新的查询和文档,通过模型的打分函数可以得到一个数值,利用该数值即可对文档进行排序了。
更多智能排序相关问题可参考《这就是搜索引擎:核心技术详解》