文章目录

  • 1、算法介绍
    • 1.1 LambdaMart的历史演变
      • 1.1.2 RankNet
      • 1.1.3 LambdaRank
    • 1.2 LambdaMart原理
  • 2、源码解析

1、算法介绍

1.1 LambdaMart的历史演变

Lambdamart是一种用于排序的机器学习算法。像这种在排序问题中用到的机器学习算法,被统称为 Learning to Rank (LTR) 算法,或者 Machine-Learning Rank (MLR) 算法。

LTR 算法通常有三种手段,分别是:Pointwise、Pairwise 和 Listwise。Pointwise 和 Pairwise 类型的 LTR 算法,将排序问题转化为回归、分类或者有序分类问题。Listwise 类型的 LTR 算法则另辟蹊径,将用户查询(Query)所得的结果作为整体,作为训练用的实例(Instance)。

LambdaMART 是一种 Listwise 类型的 LTR 算法,它基于 LambdaRank 算法和 MART (Multiple Additive Regression Tree) 算法,将搜索引擎结果排序问题转化为回归决策树问题。MART 实际就是梯度提升决策树(GBDT, Gradient Boosting Decision Tree)算法。GBDT 的核心思想是在不断的迭代中,新一轮迭代产生的回归决策树模型拟合损失函数的梯度,最终将所有的回归决策树叠加得到最终的模型。LambdaMART 使用一个特殊的 Lambda 值来代替上述梯度,也就是将 LambdaRank 算法与 MART 算法加和起来。

小结:lambdamart算法就是LambdaRank+Mart。其中Mart就是GBDT,网上有非常多的详细介绍,这里就不多费笔墨了。我们着重看一下LambdaRank,而LambdaRank又是由RankNet发展而来。

1.1.2 RankNet

Ranking 常见的评价指标都无法求梯度,因此没法直接对评价指标做梯度下降。

RankNet 的创新之处在于,它将不适宜用梯度下降求解的 Ranking 问题,转化为对概率的交叉熵损失函数的优化问题,从而适用梯度下降方法。

RankNet不去直接去学习每个文档的相关性, 而是去比较两个文档的相关性, 其将相关性规定如下:

P(u1>u2)=1;P(u1==u2)=0.5;P(u1<u2)=0P(u1 > u2) = 1; P(u1 == u2) = 0.5; P (u1<u2) =0P(u1>u2)=1;P(u1==u2)=0.5;P(u1<u2)=0

所以 1, 0 , -1 就是学习的label。 即不同文档比较下的相对相关性。
具体的相似度衡量公式为:
Pij≡P(Ui⊳Uj)≡11+e−σ(si−sj)P_{ij}≡P(Ui⊳Uj)≡\frac{1}{1+e^{−σ(si−sj)}}Pij​≡P(Ui⊳Uj)≡1+e−σ(si−sj)1​
其中sis_isi​,sjs_jsj​是文档xix_ixi​,xjx_jxj​的评分,通过一个带参数的评分函数得到,这个评分函数其实就是Ranknet最终要求解出的目标。
使用交叉熵作为损失函数:
L=(1−Sij)σ(si−sj)+log(1+e−σ(si−sj))L = (1−S_{ij})σ(s_i−s_j)+log(1+e^{−σ(s_i−s_j)})L=(1−Sij​)σ(si​−sj​)+log(1+e−σ(si​−sj​))
然后使用梯度下降进行求解,但是这里有一个问题,那就是RankNet的优化方向为降低pair-wise error,并不关心最相关的doc是否排在最前面。

以下图为例,这里每条横线代表一条文档,其中蓝色的表示相关的文档,灰色的则表示不相关的文档。RankNet优化过程如图中黑线所示:

看上去逆序对是下降的:13 → 11。但在实际中我们可能更需要将相关性最高的样本尽可能排在最前面,即图中红线所示的更新方向。
于是就有了LambdaRank。

1.1.3 LambdaRank

在讲lambdaRank之前,先看一下RankNet的梯度:

其有如下的对称性:

定义λij\lambda_{ij}λij​

可以把λij\lambda_{ij}λij​看成是Ui和Uj中间的作用力,如果Ui⊳Uj,则Uj会给予Ui向上的大小为|λij\lambda_{ij}λij​|的推动力,而对应地Ui会给予Uj向下的大小为|λij\lambda_{ij}λij​|的推动力。

如何将NDCG等类似更关注排名靠前的搜索结果的评价指标加入到排序结果之间的推动力中去呢?实验表明,直接用|ΔNDCG|乘以原来的λij就可以得到很好的效果,也即:

其中|ΔNDCG|是交换排序结果Ui和Uj得到的NDCG差值。NDCG倾向于将排名高并且相关性高的文档更快地向上推动,而排名地而且相关性较低的文档较慢地向上推动。

另外还可以将|ΔNDCG|替换成其他的评价指标。

1.2 LambdaMart原理

前面说过lambdaMart = LambdaRank + MART。
其中,MART是一个算法框架,还需要一个梯度。而LambdaRank正好定义了一个可以将NDCG等指标进行优化的梯度。
组合后的lambdaMart伪代码如下所示:

2、源码解析

lambda计算
训练Regression Tree

参考:
https://www.jianshu.com/p/a23f33b58633

LambdaMART原理浅析相关推荐

  1. Python标准库queue模块原理浅析

    Python标准库queue模块原理浅析 本文环境python3.5.2 queue模块的实现思路 作为一个线程安全的队列模块,该模块提供了线程安全的一个队列,该队列底层的实现基于Python线程th ...

  2. Python标准库threading模块Condition原理浅析

    Python标准库threading模块Condition原理浅析 本文环境python3.5.2 threading模块Condition的实现思路 在Python的多线程实现过程中,在Linux平 ...

  3. 第一篇: 词向量之Word2vector原理浅析

    第一篇: 词向量之Word2vector原理浅析 作者 Aroundtheworld 2016.11.05 18:50 字数 1353 阅读 5361评论 1喜欢 9 一.概述 本文主要是从deep ...

  4. SPI及其工作原理浅析

    说明.文章摘自:SPI协议及其工作原理浅析 http://bbs.chinaunix.net/thread-1916003-1-1.html 一.概述. SPI, Serial Perripheral ...

  5. .NET1.1中预编译ASP.NET页面实现原理浅析[1]自动预编译机制浅析

    .NET1.1中预编译ASP.NET页面实现原理浅析[1]自动预编译机制浅析 .NET1.1中预编译ASP.NET页面实现原理浅析[1]自动预编译机制浅析 作者:&;nbsp来自:网络 htt ...

  6. LinkedList 的实现原理浅析

    转载自 LinkedList 的实现原理浅析 LinkedList内部结构 查看LinkedList的源码,发现其继承自AbstractSequentialList,实现了List,Deque,Clo ...

  7. Spring AOP原理浅析及入门实例

    上篇问题及Spring AOP实现原理浅析 上篇说了一个AOP编程问题,那是一个错误的AOP案例.它的错误在A类中,再次粘贴A类代码: @Componentpublic class AImpl imp ...

  8. redis单线程原理___Redis为何那么快-----底层原理浅析

    redis单线程原理 redis单线程问题 单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程. 1. 为什么说redis能够快速执行 ...

  9. 沉淀,再出发:docker的原理浅析

    沉淀,再出发:docker的原理浅析 一.前言 在我们使用docker的时候,很多情况下我们对于一些概念的理解是停留在名称和用法的地步,如果更进一步理解了docker的本质,我们的技术一定会有质的进步 ...

最新文章

  1. 【深度学习】引用次数在15000次以上的都是什么神仙论文?
  2. c++ createtoolhelp32snapshot取进程路径_Linux进程间通信(上)之管道、消息队列实践
  3. 【Vegas原创】X connection to localhost:11.0 broken (explicit kill or server shutdown)解决方法...
  4. 漫画算法:如何判断链表有环
  5. [转帖]USB-C和Thunderbolt 3连接线你搞懂了吗?---没搞明白.
  6. 面试题28 字符串排列
  7. JAVA手写ArrayList以及LinkedList
  8. gcc编译的几个重要参数
  9. html5 响应式背景图
  10. IIS7.5安全配置研究
  11. opencv4 python电子书_OpenCV轻松入门面向Python下载-OpenCV轻松入门面向Python电子书pdf免费版-精品下载...
  12. css漂亮的侧导航栏,jQuery+css实现非常漂亮的水平导航菜单效果
  13. 【Linux_02】
  14. SSIS Execute SQL Task assign output 的两种方法
  15. 分享6个目前网上赚钱比较稳定的方法!
  16. English trip V2-B 4 My Uncle Sam and Apple Pie 山姆大叔和苹果派 Teacher:Tom
  17. python制作自动交易软件下载_python自动量化交易系统
  18. vmware 启动虚机黑屏
  19. 某公司申请到一个C类IP地址,但要连接6个的子公司,最大的一个子公司有 26台计算机,每个子公司在一个网段中,则子网掩码应设为?
  20. 用matlab程序表示三角形序列,MATLAB程序举例带注释

热门文章

  1. 不动产查封裁定何时生效?能否对抗善意第三人
  2. 修改Centos7/RHEL7的主机名
  3. 区块链共识之Paxos算法理解与实战
  4. 2021年熔化焊接与热切割考试题库及熔化焊接与热切割复审考试
  5. Entry键值对对象
  6. WampServer安装教程、相关问题和检验
  7. 某211大学生保研思路分享【写给所有怀揣远大梦想的你们】
  8. 马化腾:搜索、电子商务硬仗一定要坚持打
  9. 好玩的Matlab 3D心形代码
  10. java仿QQ微信聊天室