-->

AI内参_56_054_机器学习排序算法经典模型LambdaMART

你好,我是洪亮杰。

今天我和你分享的主题是机器学习排序算法经典模型。

Lambdmart t在这周时间里,我们讨论机器学习习排序算法几个经典典模型。

周一我们分享了排序支识研研究,并这算算法的好处是模型是线性的,容易理解。

周三,我们聊了度物理学决色树,长期以来这种算法被用在很多商业搜索引擎当中来作为序算型。

今天我们来分享这这部分的最后一个经典模型。

Lambda mart,这是微软在兵营中使用了较长时间的模型,也在机器学习排序这个领域享有盛誉。

我先来说说lambda mart的历史,lambdmart的提出可以说是一个三部曲。

这里呢有一个核心人物叫克里斯托夫博格斯。

博格斯早年从牛津大学物理学毕业,之后又与布兰戴斯大学获得物理学博士学位。

他曾在麻省理工大学做过短暂的博士后研究,之后来到贝尔实验室一呆十四年。

二零零零年,他来到微软研究院,并一直在微软研究院从事机去学习和人工智能的研究工作。

直到二零一六年退休,可以说是博格斯领导的团队发明了微软搜索引擎定的算法。

Lambda mark的第一步来自于一个叫rank nenet的思这个模型型表表ICMM二零零零,并且在十年之后获得ICML的时间检验讲。

这也算是在深度学习习热之之前,用用c网网络进行规规模商业应用。

经典典例laladnet之后,博格斯的团队很快意识到了rank, d net并不能直接优化搜索的评价指标。

于此,他们根据一个惊人的发现,提出了lambda rank这一个重要的方法。

Lambda rank的进步在于算法开始和搜索的评价指标,也就是NDCG挂钩,也就能够大幅度提高算法的精度。

Lambda rank之后,博格斯的团队也认识到了当时从雅虎开始流行的使用梯度,增强,特别是梯度增强决策树的思路,来进能排序算法的训练。

于是,他们就把lambda rank和GBDT的思想结合起来,开发出了更加具有模型表现力的lambdmart. Lambda mark在之后的雅虎排序学习比赛中获得了最佳成绩。

要理解lambda mart,我们首先要从rank net说起,其实有了排序,支持向量机rank SVM的理论基础。

要理解rank net就非常容易。

Rank net是一个和排序,支持向量机非常类似的配对法排序模型。

也就是说rank net尝试正确学习每组两两文档的顺序。

那么怎么来定义这个所谓的两两文档的顺序呢?其实啊我们需要做的就是定义一个损失函数来描述如何引导模型学习正确的两两关系。

我们可以假设能够有文档两两关系的标签,也就是某一个文档比另外一个文档更加相关的信息。

这个信息可以是二元的,比如正一代表更加相关,负一代表更加不相关。

注意,这里的更加表达了次序关系。

那么在理想状态下,不管我们使用什么模型,都希望模型的输出和这个标签信息是匹配的。

也就是说,模型对于更加相关的文档应该输出更加高的预测值,反之亦然,很自然。

我们能够使用一个二元分类器的办法来处理这样的关系。

Rank net在这里使用了对数几率损失函数,其实就是希望能够利用对数几率回归这一思想来处理这个二元关系。

唯一的区别是,这里的正立是两个文档的相对关系。

有了损失函数之后,我们使用什么模型来最小化这个损失函数呢?在rank net中,作者们使用了神经网络模型,这也是net部分的由来。

那么整个模型在这里就变得异常清晰,那就是使用神经网络模型来对文档与文档之间的相对相关度进行建模。

而损失函数选用了对数几率损失函数。

尽管rank net取得了一些成功,但是文档的两两相对关系,并不和搜索评价指标直接相关。

我们之前讲过,搜索评价指标,例如NDCG或者MAP等,都是直接建立在对于某一个查询关键字的相关文档的整个序列上,或者至少是序列的头部的整个关系上的。

因此,rank net并不能保证在NDCG这些指标上能够达到很好的效果。

因为毕竟没有直接或者间接优化这样的指标,要想认识这一点其实很容易。

比如你可以设想,对于某一个查询关键字有十个文档,其中有两个相关的文档,一个相关度是五,另外一个相关度是三。

那么很明显,再一个理想的排序下,这两个文档应该排在所有十个文档的头部。

现在我们假定相关度五的排在第四的位置,而相关度三排在第七的位置,rank net会愿意去调整相关度三的,并且试图把其从第七往前挪。

因为这样就可以把其他不相关的挤下去。

然而,更优化的办法应该是尝试先把相关度五的往更前面排。

也就是说,从ADCG的角度来说,相关度高的文档并没有排在前面,受到的损失要大于相关度,比较低的文档排在了下面。

Ndcg和其他一系列搜索评价指标都是更加注重头部的相关度。

关于这一点,rank net以及我们之前介绍的GBDT或者排序知识向量机都忽视了。

既然我们找到了问题,那么如何进行补救呢?之前说的博克斯的团队有一个惊人的发现,其实就在这里。

他们发现,rank net的优化过程,使用到的梯度下降算法需要求解损失函数。

针对模型的参数的梯度可以写成两个部分的乘积。

在这里模型的参数其实就是神经网络中的各类系数。

第一部分是损失函数,针对模型的输出值的。

第二部分是模型输出值,针对模型的参数的第二个部分跟具体的模型有关系。

但是第一个部分没有,第一个部分跟怎么来定一个损失函数有关系。

在原始的rank n net定义中,这当然就是对数几率函数定义下的损失函数的梯度。

这个数值就是提醒了rank net还需要针对这个损失做多少修正。

其实这个损失梯度并不一定非得对应一个损失函数,这是博格斯的团队的一个重大发现。

只要这个损失的梯度能够表示指引函数的方向就行了。

那既然是这样,能不能让这个损失的梯度和NDCG扯上边呢?答然是可以的。

也就是说,我们只要定义两个文档之间的差距,是这两个文档互换之后NDCG的变化量。

第时这个变化量等于之前所说的损失的梯度。

那么我们就可以指导去去优recognin DCG.在这里,博格斯斯和其他作者这个损失的梯度定义为lambda.因为整个过程是在优化一个排序,所以新的方法叫做lambda. Rank有了lambda, rank之后,lambda mark就变得水稻rank之先。

Lambda是被定义为两个文档NDCG的变化量。

那么只要这个lambda可以计算模型,就可以嫁接别的算法。

于是,博格斯的团队使用了在当时比神经网络更加流行的梯度增增强决策来作为学习器。

不过,梯度增强决策数在计计算的时需需计算一个梯度在这里就直接接入lambda的概念,使得GBDT并不是直接优化二分分类问题,而是一个改装了的二分分类问题,也就是在优化的时候优先考虑能够进一步改进NDCG的方向。

今天我为你讲了lambda marr t算法的基本原理,于是配对法和列表排序学习的一个混合经典算法。

Lambda mart在实际运用中有着强劲的表现。

一起来回顾一下要点。

第一,我们简要介绍了lambda mart提出的历史。

第二,我们详细介绍了lambda mart的核心思路。

最后给你留一个思考题,采用lambda这样更改优化过程中的梯度计算。

虽然很形象,但是有没有什么坏处呢?欢迎你给我留言,和我一起讨论。