RankLib
overview
RankLib是一个使用java实现的Learning to rank的算法库,主要实现了以下几种算法:
- MART (Multiple Additive Regression Trees, a.k.a. Gradient boosted regression tree
- RankNet,pair-wise
- RankBoost
- AdaRank, list-wise
- Coordinate Ascent, list-wise
- LambdaMART, list-wise 微软
- ListNet, list-wise
- Random Forests RankLib同时也实现了信息检索领域的评测函数,MAP,NDCG.
Learn to Rank
LTR 算法通常有三种手段,分别是:Pointwise、Pairwise 和 Listwise。Pointwise 和 Pairwise 类型的 LTR 算法,将排序问题转化为回归、分类或者有序分类问题。Listwise 类型的 LTR 算法则另辟蹊径,将用户查询(Query)所得的结果作为整体,作为训练用的实例(Instance)
pointwise
pairwise
Listwise
LambdaMART
-
LambdaMART是Learning To Rank的其中一个算法,适用于许多排序场景。它是微软Chris Burges大神的成果,最近几年非常火,屡次现身于各种机器学习大赛中,Yahoo! Learning to Rank Challenge比赛中夺冠队伍用的就是这个模型[1],据说Bing和Facebook使用的也是这个模型。
-
LambdaMART模型从名字上可以拆分成Lambda和MART两部分,表示底层训练模型用的是MART(Multiple Additive Regression Tree),如果MART看起来比较陌生,那换成GBDT(GradientBoosting Decision Tree)估计大家都很熟悉了,没错,MART就是GBDT。Lambda是MART求解过程使用的梯度,其物理含义是一个待排序的文档下一次迭代应该排序的方向(向上或者向下)和强度。将MART和Lambda组合起来就是我们要介绍的LambdaMART。Lambda就是用户自定义的梯度
-
lambdaMART优势:
3.1 适用于排序场景:不是传统的通过分类或者回归的方法求解排序问题,而是直接求解
3.2 损失函数可导:通过损失函数的转换,将类似于NDCG这种无法求导的IR评价指标转换成可以求导的函数,并且富有了梯度的实际物理意义,数学解释非常漂亮
3.3 增量学习:由于每次训练可以在已有的模型上继续训练,因此适合于增量学习
3.4 组合特征:因为采用树模型,因此可以学到不同特征组合情况
3.5 特征选择:因为是基于MART模型,因此也具有MART的优势,可以学到每个特征的重要性,可以做特征选择
3.6 适用于正负样本比例失衡的数据:因为模型的训练对象具有不同label的文档pair,而不是预测每个文档的label,因此对正负样本比例失衡不敏感