• GBRank:一种基于回归的排序方法


    1. Learning to Rank算法

    下图为机器学习排序的原理图,机器学习排序系统由4个步骤组成——人工标注训练数据文档特征抽取学习分类函数在实际搜索系统中采用机器学习模型

    在这里插入图片描述

    2. Learning to Rank的三种类型

    Learning to Rank主要包含pointwise方法、pairwise方法和listwise方法三种类型。

    • pointwise方法:对于某一个query,它将每个doc分别判断与这个query的相关程度,由此将docs排序问题转化为了分类(比如相关、不相关)或回归问题(相关程度越大,回归函数的值越大)。
    • pairwise方法:pairwise方法并不关心某一个doc与query相关程度的具体数值,而是将排序问题转化为任意两个不同的docs di和dj谁与当前的query更相关的相对顺序的排序问题。一般分为di比dj更相关、更不相关和相关程度相等三个类别,分别记为{+1, -1, 0},由此便又转化为了分类问题。
    • listwise方法:将一个query对应的所有相关文档看做一个整体,作为单个训练样本。

    3. GBRank

    (1)定义

    GBRank是一种pairwise的学习排序算法,它是基于回归来解决pair对的先后排序问题。在GBRank中使用的回归算法是GBT(Gradient Boosting Tree)

    (2)算法原理

    一般来说在搜索引擎里面,与用户搜索query相关度越高的网页越应该排在前面。现在query-doc的特征使用向量 x x x或者 y y y表示,假设现在有一个文档对 < x i , y i > <xi,yi>,当 x i x_i xi排在 y i y_i yi前面时,我们使用 x i > y i x_i > y_i xi>yi来表示。

    在实际用的时候可以将 x i x_i xi 当作doc_x的特征, y i y_i yi 当作doc_y的特征。这样的话 h ( x i ) h(x_i) h(xi) 可以理解为doc_x 的分数, h ( y i ) h(y_i) h(yi) 可以理解为doc_y 的分数。

    我们含顺序的pair对用如下集合表示(也就是真的 x i x_i xi排在真的 y i y_i yi前面):
    在这里插入图片描述
    现假设学习的排序函数为 h ( x ) h(x) h(x),我们希望当 h ( x i ) > h ( y i ) h(x_i) > h(y_i) h(xi)>h(yi)时,满足 x i > y i x_i > y_i xi>yi的样本的数量越多越好。

    现将 h ( x ) h(x) h(x)的风险函数用如下的式子表示:
    在这里插入图片描述
    R ( h ) R(h) R(h)可以知道每个pair对 < x i , y i > <xi,yi>的cost为:
    在这里插入图片描述

    可以发现当:

    • h ( x i ) ≥ h ( y i ) h(x_i) \ge h(y_i) h(xi)h(yi),cost为0,也就是并不会对最终的风险函数的值产生影响
    • h ( x i ) < h ( y i ) h(x_i) < h(y_i) h(xi)<h(yi),cost为其差值的平方

    上述风险函数直接优化比较困难,这里一个巧妙的解决方案是使用回归的方法,也就是让 x i x_i xi去拟合 y i y_i yi的预测值,让 y i y_i yi去拟合 x i x_i xi的目标值。

    为了避免优化函数 h ( x ) h(x) h(x)是一个常量函数,风险函数一般会增加一个平滑项 τ \tau τ( 0 < τ ≤ 1 0< \tau \leq 1 0<τ1):
    在这里插入图片描述
    因为当 h ( x ) h(x) h(x)为常量函数时,先前的 R ( h ) = 0 R(h)=0 R(h)=0 就没有再优化的空间了,加入平滑项就变相地转为:如果希望 x i > y i x_i > y_i xi>yi,就得有 h ( x i ) > h ( y i ) + τ h(x_i) > h(y_i) + \tau h(xi)>h(yi)+τ,也就更为严格了,多了一个gap。

    对于 R ( h ) R(h) R(h)计算 h ( x i ) h(x_i) h(xi) h ( y i ) h(y_i) h(yi)的负梯度为:
    在这里插入图片描述
    可以发现当pair对符合 < x i , y i > <xi,yi>顺序时,上述的梯度均为0,对于这一类case就没有必要去优化了,但是对于另一类,如果 h ( x ) h(x) h(x)不满足pair < x i , y i > <xi,yi> 他们对应的梯度为:

    到了这里我们就知道所谓的训练样本就是对于 x i > y i x_i > y_i xi>yi 但是 h ( y i ) > h ( x i ) h(y_i) > h(x_i) h(yi)>h(xi) 的那些样本,并且使用的是回归的方法,GBRank为其巧妙地找到了 x i x_i xi的 目标为 h ( y i ) + τ h(y_i) + \tau h(yi)+τ 以及 y i y_i yi 的目标为 h ( x i ) − τ h(x_i) - \tau h(xi)τ, 也就是在每次迭代的时候将会构建以下的训练集:
    在这里插入图片描述

    这里可以这样理解:

    h ( t ) ( x i ) + τ h_{(t)}(x_i) + \tau h(t)(xi)+τ 向着 h ( t − 1 ) ( y i ) h_{(t-1)}(y_i) h(t1)(yi) 逼近,让 h ( t ) ( y i ) + τ h_{(t)}(y_i) + \tau h(t)(yi)+τ 向着 h t − 1 ( x i ) h_{t-1}(x_i) ht1(xi) 逼近。

    这是因为在有效的训练集中,即 x i > y i x_i > y_i xi>yi 但是 h ( y i ) > h ( x i ) h(y_i) > h(x_i) h(yi)>h(xi) ,我们的目标是更新函数 h ( x ) h(x) h(x) 使得经 h ( x i ) h(x_i) h(xi) 算出来的 x i x_i xi 的分数更高,经 h ( y i ) h(y_i) h(yi) 算出来的 y i y_i yi 的分数更低。所以 h ( t ) ( x i ) + τ h_{(t)}(x_i) + \tau h(t)(xi)+τ 的目标就是更大一些的 h ( t − 1 ) ( y i ) h_{(t-1)}(y_i) h(t1)(yi) h ( t ) ( y i ) + τ h_{(t)}(y_i) + \tau h(t)(yi)+τ 的目标就是更小一些的 h t − 1 ( x i ) h_{t-1}(x_i) ht1(xi)

    (3)算法步骤

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    mysql基于ssm的自习室座位管理系统 毕业设计源码221118
    Burp Suite配置过滤忽略Ruby code injection和XML injection类型的安全问题
    【配电网重构】基于yalmip求解含sop+二阶锥配电网重构附matlab代码
    m基于中继协助的认知无线电频谱切换机制的matlab仿真分析
    计算机毕业设计Java校园疫情信息管理系统(源码+系统+mysql数据库+Lw文档)
    新手怎么使用GitHub?
    商城风格也可以很多变,DIY 了解一下
    贪吃蛇项目实践!(下)
    看完这篇JavaScript工作中的问题迎刃而解
    Jetpack结合MVVM可以开发出一个多优秀的APP?
  • 原文地址:https://blog.csdn.net/comli_cn/article/details/126198044