【ML】LambdaMART算法原理--应用场景

上篇介绍了lambdaRank,本篇介绍其演进LambdaMART。

1.引言

lambdaMart出现想解决什么问题?

我们知道lambdaRank的主要突破点是:分析了梯度的物理意义;绕开了损失函数,直接定义梯度。LambdaRank 重新定义了梯度,赋予了梯度新的物理意义,因此,所有可以使用梯度下降法求解的模型都可以使用这个梯度,基于决策树的 MART 就是其中一种,将梯度 Lambda 和 MART 结合就是大名鼎鼎的 LambdaMART。实践证明,基于决策树的方法对于排序问题非常有效果,也就成了很多类似方法的标准配置。LambdaMART 不但是微软 Bing 搜索引擎使用较长时间的算法,也是获得 2008 年 Yahoo!learning to rank challenge 比赛的冠军使用的算法。

2.原理

MART 就是我们熟知的 GBDT,LambdaMART 只是在 GBDT 的过程中做了一个很小的修改。原始 GBDT 的原理是直接在函数空间对函数进行求解模型,结果由许多棵树组成,每棵树的拟合目标是损失函数的梯度,而在 LambdaMART 中这个梯度就换成了 Lambda 梯度,这样就使得 GBDT 并不是直接优化二分分类问题,而是一个改装了的二分分类问题,也就是在优化的时候优先考虑能够进一步改进 NDCG 的方向。

实际的搜索排序使用的是LambdaMART算法,必须指出的是由于这里要使用排序需要的cost function,LambdaMART迭代用的并不是残差。Lambda在这里充当替代残差的计算方法,它使用了一种类似Gradient*步长模拟残差的方法。这里的MART在求解方法上和之前说的残差略有不同。

就像所有的机器学习一样,搜索排序的学习也需要训练集,这里一般是用人工标注实现,即对每一个(query,doc) pair给定一个分值(如1,2,3,4),分值越高表示越相关,越应该排到前面。然而这些绝对的分值本身意义不大,例如你很难说1分和2分文档的相关程度差异是1分和3分文档差距的一半。相关度本身就是一个很主观的评判,标注人员无法做到这种定量标注,这种标准也无法制定。但标注人员很容易做到的是”AB都不错,但文档A比文档B更相关,所以A是4分,B是3分“。RankNet就是基于此制定了一个学习误差衡量方法,即cost function。具体而言,RankNet对任意两个文档A,B,通过它们的人工标注分差,用sigmoid函数估计两者顺序和逆序的概率P1。然后同理用机器学习到的分差计算概率P2(sigmoid的好处在于它允许机器学习得到的分值是任意实数值,只要它们的分差和标准分的分差一致,P2就趋近于P1)。这时利用P1和P2求的两者的交叉熵,该交叉熵就是cost function。它越低说明机器学得的当前排序越趋近于标注排序。为了体现NDCG的作用(NDCG是搜索排序业界最常用的评判标准),RankNet还在cost function中乘以了NDCG。

现在我们有了cost function,而且它是和各个文档的当前分值yi相关的,那么虽然我们不知道它的全局最优方向,但可以求导求Gradient,Gradient即每个文档得分的一个下降方向组成的N维向量,N为文档个数(应该说是query-doc pair个数)。这里仅仅是把”求残差“的逻辑替换为”求梯度“,可以这样想:梯度方向为每一步最优方向,累加的步数多了,总能走到局部最优点,若该点恰好为全局最优点,那和用残差的效果是一样的。这时套到之前讲的逻辑,GDBT就已经可以上了。那么最终排序怎么产生呢?很简单,每个样本通过Shrinkage累加都会得到一个最终得分,直接按分数从大到小排序就可以了(因为机器学习产生的是实数域的预测分,极少会出现在人工标注中常见的两文档分数相等的情况,几乎不同考虑同分文档的排序方式)

xgboost框架目标函数如下,可见里面支持pairwise样本形式:

(1)objective [ default=reg:linear ] 定义学习任务及相应的学习目标,可选的目标函数如下:

“reg:linear” –线性回归。
“reg:logistic” –逻辑回归。
“binary:logistic” –二分类的逻辑回归问题,输出为概率。
“binary:logitraw” –二分类的逻辑回归问题,输出的结果为wTx。
“count:poisson” –计数问题的poisson回归,输出结果为poisson分布。 在poisson回归中,max_delta_step的缺省值为0.7。(used to safeguard optimization)
“multi:softmax” –让XGBoost采用softmax目标函数处理多分类问题,同时需要设置参数num_class(类别个数)
“multi:softprob” –和softmax一样,但是输出的是ndata * nclass的向量,可以将该向量reshape成ndata行nclass列的矩阵。没行数据表示样本所属于每个类别的概率。
“rank:pairwise” –set XGBoost to do ranking task by minimizing the pairwise loss

3.优势

LambdaMART 具有很多优势:

  1. 适用于排序场景:不是传统的通过分类或者回归的方法求解排序问题,而是直接求解;
  2. 损失函数可导:通过损失函数的转换,将类似于 NDCG 这种无法求导的 IR 评价指标转换成可以求导的函数,并且富有了梯度的实际物理意义,数学解释非常漂亮;
  3. 增量学习:由于每次训练可以在已有的模型上继续训练,因此适合于增量学习;
  4. 组合特征:因为采用树模型,因此可以学到不同特征组合情况;
  5. 特征选择:因为是基于 MART 模型,因此也具有 MART 的优势,每次节点分裂选取 Gain 最⼤的特征,可以学到每个特征的重要性,因此可以做特征选择;
  6. 适用于正负样本比例失衡的数据:因为模型的训练对象具有不同 label 的文档 pair,而不是预测每个文档的 label,因此对正负样本比例失衡不敏感。

LambdaMART 提供了一个很好的算法框架,有了这个 Lambda 梯度的计算和应用方法,我们还可以与深度网络相结合,通过该梯度构造出的深度学习网络称之为 LambdaDNN,训练的时候利用深度网络预测同 Query 下的 Doc 得分,根据用户实际点击 Doc 的情况计算 Lambda 梯度并反向传播回深度网络,则可以得到一个直接预测 NDCG 的深度网络。Lambda 梯度除了与 DNN 网络相结合外,事实上可以与绝大部分常见的网络结构相结合。为了进一步学习到更多交叉特征,在 LambdaDNN 的基础上还可以拓展到 LambdaDeepFM 和 LambdaDCN 网络;其中 DCN 网络是一种加入 Cross 的并行网络结构,交叉的网络每一层的输出特征与第一层的原始输入特征进行显性的两两交叉,相当于每一层学习特征交叉的映射去拟合层之间的残差。

另外需要注意的是,LmabdaRank 和 LambdaMART 虽然看起来很像配对法(Pairwise),但其实都属列表法(Listwise),确切来说是 Listwise 和 Pairwise 之间的一种混合方法。列表法从理论上和研究情况来看,都是比较理想的排序学习方法。因为列表法尝试统一排序学习的测试指标和学习目标。尽管在学术研究中,纯列表法表现优异,但是在实际中,类似于 LambdaRank 和 LambdaMART 这类思路,也就是基于配对法和列表法之间的混合方法更受欢迎。因为从总体上看,纯列表法的运算复杂度都比较高,而在工业级的实际应用中,真正的优势并不是特别大,因此纯列表法的主要贡献目前还多是学术价值。

4.应用场景

在推荐领域,排序学习可能会用在以下场景:

  1. 用于多路召回策略的融合排序

    一个推荐系统的召回阶段可能会用到多种不同召回策略,比如基于内容的召回、基于热门物品的召回、基于协同过滤的召回、基于类别和标签的召回等等,不同的召回策略召回的物品无法确切地分辨哪个策略召回更重要,所以需要一个排序学习模型,根据用户的行为反馈来对多路召回的物品进行排序推荐,这也是排序模块的一大重要作用。

  2. 一个排序模型完成召回排序

    某些简单的推荐场景下,召回排序过程区分的不够开,目标比较单一,比如相关推荐,对相关性要求比较高,此时可以用 LTR,一个排序模型就可以完成召回排序任务。

  3. 解决多目标排序问题

    通常一个推荐系统的目标是提高点击率(CTR)或转化率(CVR),但是这些并不能完全反映用户对推荐物品的满意度,以此为目标的推荐系统也无法保证用户存留。为了提高用户对推荐物品满意度,可能还需要依赖更多的指标,比如加购、收藏、分享等等。由此便产生了多种目标,如何优化最终推荐列表的顺序来使得众多指标在不同的场景下近可能达到最优或者满意,这就是推荐系统中的多目标排序问题,而排序学习是解决多目标排序问题的一种重要方法。

5.代码:

 

 

参考文献:

1.最后面讲了lambdaMArt https://www.cnblogs.com/peizhe123/p/6105696.html

2.代码:https://blog.csdn.net/mr_tyting/article/details/80580075

 

你可能感兴趣的:(推荐排序)