Learning to Rank:X-wise
排序学习是搜索推荐系统、计算广告领域的核心方法。同时排序结果的好坏,在搜索推荐任务中很大程度直接影响用户点击、转化、用户体验和收入等。
在《推荐系统技术演进趋势:重排篇》一文中,作者张俊林介绍了在重排环节,推荐系统里Learning to Rank做排序,我们知道常见的有三种优化目标:Point Wise、Pair Wise和List Wise。最简单的损失函数定义是Point-wise,就是输入用户特征和单个物品特征,对这个物品进行打分,物品之间的排序,就是谁应该在谁前面,不用考虑。而Pair-wise损失在训练模型时,直接用两个物品的顺序关系来训练模型,就是说优化目标是物品A排序要高于物品B,类似这种优化目标。 List-wise的Loss更关注整个列表中物品顺序关系,会从列表整体中物品顺序的角度考虑,来优化模型。
Permutation-wise
上面我们对Point-wise、Pair-wise、List-wise这三种方式,做了一个简单的介绍。但Permutation-wise是什么呢?其实,十方同学在《排序(rank)后重排(re-rank)》一文中,为我们介绍了Permutation-wise的文章,文章中给出了一个真实的案例,如下图。
这个图给了个真实的案例,一个User,给他展示了A、B、C就不会买任何item,给他展示了B、A、C就后购买A。
论文《Revisit Recommender System in the Permutation Prospective》给了个例子,如果把贵的商品B放前面,用户就会觉得A便宜,值得购买。好像很有道理,所以我们看到,如果是list-wise的模型给排好序的的B->A->C分别预估一个分(0.38, 0.40, 0.36),然后按照这个分重排序,就会得到A->B->C,用户就不会购买了。
如果我们提供多个候选排列队列: A->B->C和B->A->C,然后把list-wise的分加起来,得到不同排列的分,那就会得到最优解,B->A->C。但是一般情况下,需要重排序的item可能有上百个,上百个item做排列,再过list-wise模型预估,这是不现实的,于是论文提出了两阶段的重排序框架PRS(Permutation Retrieve System),分别是PMatch阶段和PRank阶段,整体架构如下图所示:
关于具体PMatch和PRank的细节,感兴趣的可以直接阅读《排序(rank)后重排(re-rank)》一文。
Pair-wise的方法是将同一个查询中两个不同的Item作为一个样本,主要思想是把rank问题转换为二值分类问题。对于同一Query的相关文档集中,对任何两个不同label的文档,都可以得到一个训练实例(di,dj),如果di>dj则赋值+1,反之-1,于是我们就得到了二元分类器训练所需的训练样本了。
常用Pair-wise实现有SVMRank、RankBoost、RankNet等。
优点
输出空间中样本是 pairwise preference;
假设空间中样本是二变量函数;
输入空间中样本是同一 query 对应的两个 doc和对应 query构成的两个特征向量;
损失函数评估 doc pair 的预测 preference 和真实 preference 之间差异;
缺点
只考虑了两篇文档的相对顺序,没有考虑他们出现在搜索结果列表中的位置;即:Pair-wise方法仅考虑了doc-pair的相对位置,损失函数还是没有模型到预测排序中的位置信息;
对于不同的查询相关文档集的数量差异很大,转换为文档对后,有的查询可能只有十几个文档对,而有的查询可能会有数百个对应的文档对,这对学习系统的效果评价带来了偏置;
Pair-wise对噪声标注更敏感,即一个错误标注会引起多个doc-pair标注错误;
Point-wise排序是将训练集中的每个Item看作一个样本获取rank函数,主要解决方法是把分类问题转换为单个item的分类或回归问题。就是输入用户特征和单个Item特征,对这个物品进行打分,物品之间的排序,就是谁应该在谁前面,不用考虑。Point-wise方法很好理解,即使用传统的机器学习方法对给定查询下的文档的相关度进行学习,比如CTR就可以采用PointWise的方法学习,但是有时候排序的先后顺序是很重要的,而Point-wise方法学习到全局的相关性,并不对先后顺序的优劣做惩罚。
明显这种方式无论是训练还是在线推理,都非常简单直接效率高,但是它的缺点是没有考虑物品直接的关联,而这在排序中其实是有用的。
常用Point-wise实现基于回归的算法、基于分类的算法、基于有序回归的算法等。
优点
使用传统的机器学习方法对给定查询下的文档的相关度进行学习;
输入空间中样本是单个document和对应query构成的特征向量;
输出空间中样本是单个documen和对应query的相关度;
假设空间中样本是打分函数,损失函数评估单个 doc 的预测得分和真实得分之间差异。
缺点
Point-wise类方法并没有考虑同一个query对应的documents间的内部依赖性,完全从单文档的分类角度计算,没有考虑文档之间的相对顺序;
和Pair-wise类似,损失函数也没有模型到预测排序中的Position位置信息;
List-wise排序是将整个item序列看作一个样本,通过直接优化信息检索的评价方法和定义损失函数两种方法来实现。它是直接基于评价指标的算法非直接基于评价指标的算法。在推荐中,List-wise损失函数因为训练数据的制作难,训练速度慢,在线推理速度慢等多种原因,尽管用的还比较少,但是因为更注重排序结果整体的最优性,所以也是目前很多推荐系统正在做的事情。
和其他X-wise方法比较,List-wise方法往往更加直接,它专注于自己的目标和任务,直接对文档排序结果进行优化,因此往往效果也是最好的。Listwise常用方法有AdaRank、SoftRank、LambdaMART、LambdaRank等。
优点
输入空间中样本是同一query对应的所有documents构成的多个特征向量;
输出空间中样本是这些documents和对应query的相关度排序列表或者排列;
假设空间中样本是多变量函数,对于documents得到其排列,实践中,通常是一个打分函数,根据打分函数对所有documents的打分进行排序得到documents相关度的排列;
listwise 类相较 pointwise、pairwise 对 ranking 的 model 更自然,解决了 ranking 应该基于 query 和 position 问题。
缺点
一些ranking算法需要基于排列来计算 loss,从而使得训练复杂度较高,如 ListNet和 BoltzRank。
位置信息并没有在loss中得到充分利用,可以考虑在ListNet和ListMLE loss中引入位置折扣因子。
https://blog.csdn.net/nanjunxiao/article/details/8976195
https://zhuanlan.zhihu.com/p/111636490
排序(rank)后重排(re-rank)
https://zhuanlan.zhihu.com/p/26539920
https://zhuanlan.zhihu.com/p/337478373
推荐系统技术演进趋势:重排篇