做搜索和推荐的同学可能都知道LTR(Learning To Rank) ,其中比较有代表性的方法右:pointwise、pairwise和listwise,今天我们类似综述的性质来简单谈谈ltr的算法发展。
1、pointwise
这种方法是我们比较常见、且比较简单的一种方式,这种排序方法是将排序问题直接转化ML相关问题,比较经典的问题就是CTR预估模型。主要思想就是将用户查询的query和单个doc构建训练样本。
缺点是:pointwise仅仅是从单文档的角度去建模的,并没有考虑到文档间的关系。并且算法的前提假设是查询query与id相关度与query无关的(但可以通过构建与query相关的特征来做相应的改善)。
2、pairwise
该方法是通过构建文档对的方式,将排序算法转化成二分类的问题。对于同一query的相关文档集中,对任何两个不同label的文档,都可以得到一个训练实例(di,dj),如果di>dj则赋值+1,反之-1,于是我们就得到了二元分类器训练所需的训练样本了,如下图所示。测试时,只要对所有pair进行分类就可以得到所有文档的一个偏序关系,从而实现排序。例如RankNet算法。其原理主要是学习两个文档Ui和Uj如下概率:
有了这个概率之后,我们可以通过构建损失函数:
缺点:
ranknet的评价指标是错误样本对个数。对于NDCG这样的评价指标就无法有效的优化,因为实际业务场景中,或者信息检索领域当中,往往是考虑TopK排序的效果,因此NDCG往往是关注TopK样本排序的结果好坏。
3、listwise
该方法是通过学习一个query对应的list样本进行学习更新模型的参数。比较具有代表性的是lambdarank和lambdamart。该类算法是直接通过计算梯度lambda,其表达式如下:
并通过mart来学习梯度lambda。其中lambdamart算法原理如下:
其优点如下:
1) 适用于排序场景:不是传统的通过分类或者回归的方法求解排序问题,而是直接求解
2) 损失函数可导:通过损失函数的转换,将类似于NDCG这种无法求导的IR评价指标转换成可以求导的函数,并且赋予了梯度的实际物理意义,数学解释非常漂亮
3) 增量学习:由于每次训练可以在已有的模型上继续训练,因此适合于增量学习
4) 组合特征:因为采用树模型,因此可以学到不同特征组合情况
5) 特征选择:因为是基于MART模型,因此也具有MART的优势,可以学到每个特征的重要性,可以做特征选择
6) 适用于正负样本比例失衡的数据:因为模型的训练对象具有不同label的文档pair,而不是预测每个文档的label,因此对正负样本比例失衡不敏感
参考文献: