上一篇综述文章 里我们简单介绍了L2R三种方法的一个概要,接下来将对这三种方法做详细介绍。本篇文章介绍第一种L2R方法–pointwise方法

1、原理

pointwise方法非常简单,考虑的是文档 (doc) 和查询 (query) 的绝对相关度,基于此,我们可以将排序问题转化为分类或者回归问题。我们以分类问题为例,一般来说,会根据相关度设置五个类别 {perfect ,excellent,good,fair,bad},对应数字 { 5,4,3,2,1 },然后根据查询和返回文档可以标注样本,得到这样的形式 (query, doc, label)。

因此我们准备的样本格式如下,其中 q i q_i qi​ 代表第 i i i 个query, x j ( i ) x^{(i)}_{j} xj(i)​ 表示和第 i i i 个query相关的文档集里的第 j j j 个文档, C k C_{k} Ck​ 代表所属类别。

2、常见算法

Pointwise方法主要包括以下算法:Pranking (NIPS 2002), OAP-BPM (EMCL 2003), Ranking with Large Margin Principles (NIPS 2002), Constraint Ordinal Regression (ICML 2005)。

我们详细介绍一下Pranking算法,原文地址:https://pdfs.semanticscholar.org/906f/50f545890ca81231be7cec7c59555c679dba.pdf

2.1 Prank 算法

对于给定的样本集合 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x t , y t ) } \{(x^{1}, y^{1}),(x^{2}, y^{2}),...,(x^{t}, y^{t})\} {(x1,y1),(x2,y2),...,(xt,yt)},文档特征向量 x i ∈ R n x^{i} \in \mathbb{R^{n}} xi∈Rn,对应的排序序号 y ∈ Y y\in \mathcal{Y} y∈Y,不失一般性,假设 Y = { 1 , 2 , 3 , . . . , k } \mathcal{Y}=\{1,2,3,...,k\} Y={1,2,3,...,k},并使用 " > \gt >"作为顺序关系,如果 y s > y t y^{s}\gt y^{t} ys>yt,那么我们说 x s x^{s} xs 优于 x t x^{t} xt,反之同理,但是当 y s = y t y^{s} = y^{t} ys=yt 时, x s x^{s} xs 和 x t x^{t} xt 不可比较。

假设有一个排序规则 H : R n ⟶ y \mathcal{H}: \mathbb{R^n}\longrightarrow y H:Rn⟶y,对于系数 w w w 和 k个阈值集合 b 1 ≤ b 2 ≤ . . . ≤ b k = ∞ b_1\leq b_2\leq ... \leq b_k=\infty b1​≤b2​≤...≤bk​=∞,为方便起见,令 b = ( b 1 , b 2 , . . . , b k − 1 ) b=(b_1,b_2,...,b_{k-1}) b=(b1​,b2​,...,bk−1​),然后就是要找到满足 w ⋅ x &lt; b r w\cdot x \lt b_r w⋅x<br​ 的最小的 b r b_r br​,这个规则将空间分为若干平行的等值区域:所有满足 b r − 1 &lt; w ⋅ x &lt; b r b_{r-1}\lt w\cdot x \lt b_{r} br−1​<w⋅x<br​ 的样本均属于同样的序号 r r r。因此,对于一个给定 w w w 和 b b b 的排序规则,我们可以预测一个新样本 x x x 的序号是:
H ( x ) = min ⁡ r ∈ { 1 , 2 , . . . , k } { r : w ⋅ x − b r &lt; 0 } H(x)=\min_{r\in \{1,2,...,k\}}\{r:w\cdot x -b_r\lt 0\} H(x)=r∈{1,2,...,k}min​{r:w⋅x−br​<0}

具体算法如下:

Initialize: Set w 1 = 0 , b 1 1 , . . . , b k − 1 1 = 0 , b k 1 = + ∞ w^{1}=0,b_{1}^{1},...,b_{k-1}^{1}=0,b_{k}^{1}=+\infty w1=0,b11​,...,bk−11​=0,bk1​=+∞
Loop: For t = 1 , 2 , . . . , T t=1,2,...,T t=1,2,...,T

  • Get a new rank-value x t ∈ R n x^{t}\in \mathbb{R^n} xt∈Rn
  • Predict y ^ t = min ⁡ r ∈ { 1 , 2 , . . . , k } { r : w ⋅ x − b r &lt; 0 } \hat{y}^{t}=\min_{r\in \{1,2,...,k\}}\{r:w\cdot x -b_r\lt 0\} y^​t=minr∈{1,2,...,k}​{r:w⋅x−br​<0}
  • Get a new label y t y^{t} yt
  • If y ^ t ≠ y t \hat{y}^{t} \neq y^{t} y^​t̸​=yt, update w t w^{t} wt (otherwise set w t + 1 = w t , ∀ r : b r t + 1 = b r t w^{t+1}=w^{t}, \forall r:b_{r}^{t+1}=b_{r}^{t} wt+1=wt,∀r:brt+1​=brt​)
    **1. ** For r = 1 , 2 , . . . , k − 1 r=1,2,...,k-1 r=1,2,...,k−1,if y t &lt; r y^{t}&lt;r yt<r Then y r t = − 1 y_{r}^{t}=-1 yrt​=−1 else y r t = 1 y_{r}^{t}=1 yrt​=1
    **2. ** For r = 1 , 2 , . . . , k − 1 r=1,2,...,k-1 r=1,2,...,k−1,if ( w t ⋅ x t − b r t ) − y r t ≤ 0 (w^{t}\cdot x^{t}-b_{r}^{t}) - y_{r}^{t}\le 0 (wt⋅xt−brt​)−yrt​≤0 Then τ r t = y r t \tau_{r}^{t}= y_{r}^{t} τrt​=yrt​ else τ r t = 1 \tau_{r}^{t}=1 τrt​=1
    **3. ** Update w t + 1 ⟵ w t + ( ∑ r τ r t ) x t w^{t+1}\longleftarrow w^{t}+(\sum_{r}\tau_{r}^{t})x^t wt+1⟵wt+(∑r​τrt​)xt
    For r = 1 , 2 , . . . , k − 1 r=1,2,...,k-1 r=1,2,...,k−1, b r t + 1 ⟵ b r t − τ r t b_{r}^{t+1}\longleftarrow b_{r}^{t}-\tau_{r}^{t} brt+1​⟵brt​−τrt​

Output: H ( x ) = min ⁡ r ∈ { 1 , 2 , . . . , k } { r : w ⋅ x − b r &lt; 0 } H(x)=\min_{r\in \{1,2,...,k\}}\{r:w\cdot x -b_r\lt 0\} H(x)=minr∈{1,2,...,k}​{r:w⋅x−br​<0}

我们希望预测的排序尽可能接近真实的排序值,因此学习算法的目标就是最小化真实排序值和预测排序值的差。经过 T T T 轮迭代之后,预测值和真实值的累计误差为 ∑ t = 1 T ∣ y ^ t − y t ∣ \sum_{t=1}^{T}\lvert \hat y^{t}- y^{t} \rvert ∑t=1T​∣y^​t−yt∣。

这个算法的更新规则灵感来源于对分类的感知算法,因此我们称为Prank (Perceptron Ranking),举个例子来说明这个算法的过程。假设rank集合 Y \mathcal{Y} Y= { 1 , 2 , 3 , 4 , 5 } \{1,2,3,4,5\} {1,2,3,4,5},可以理解为把区间分为了五段,如下所示,其中 b 5 = ∞ b_5= \infty b5​=∞

假设样本1的 y y y = 4,那么按照之前的定义 w T ⋅ x w^{T}\cdot x wT⋅x 应该落在 b 3 b_3 b3​ 和 b 4 b_4 b4​ 之间的这个区间内,但实际预测的值是落在了第一个区间, y ^ \hat{y} y^​=1,如下图所示

因此就产生了一个误差,为了修正这个误差,我们把 b 1 , b 2 , b 3 b_1,b_2,b_3 b1​,b2​,b3​ 分别向左移一个单位,即令 b 1 = b 1 − 1 , b 2 = b 2 − 1 , b 3 = b 3 − 1 b_1=b_1-1,b_2=b_2-1,b_3=b_3-1 b1​=b1​−1,b2​=b2​−1,b3​=b3​−1,如下图所示

同时更新 w = w + ( 1 + 1 + 1 ) x w=w+(1+1+1)x w=w+(1+1+1)x,于是 w ⋅ x w\cdot x w⋅x相比于原来就变大了 3 ∣ ∣ x ∣ ∣ 2 3|\lvert x\rvert|^{2} 3∣∣x∣∣2,可以看到新的预测结果是3,和真实结果已经非常接近了,随着迭代次数增加,对于新样本的预测会越来越准确。

3、理论分析

以上基本就是prank算法的过程了,细心的同学可能会发现一个问题,就是一开始的时候我们假设 b 1 ≤ b 2 ≤ . . . ≤ b k = ∞ b_1\leq b_2\leq ... \leq b_k=\infty b1​≤b2​≤...≤bk​=∞,每一次迭代,其中某些 b i b_i bi​值会发生改变,那这个过程是否会发生 b i ≥ b j b_i\geq b_j bi​≥bj​,其中 i &lt; j i&lt;j i<j。也就是说是否会改变原先的阈值顺序?答案是肯定不会(前方高能~~~)

3.1 保序引理

在证明保序引理之前,先回顾一下prank算法里提到的 τ r t \tau_{r}^{t} τrt​,if ( w t ⋅ x t − b r t ) − y r t ≤ 0 (w^{t}\cdot x^{t}-b_{r}^{t}) - y_{r}^{t}\le 0 (wt⋅xt−brt​)−yrt​≤0 Then τ r t = y r t \tau_{r}^{t}= y_{r}^{t} τrt​=yrt​ else τ r t = 1 \tau_{r}^{t}=1 τrt​=1。我们先定义一个运算 ⌊ π ⌋ \lfloor \pi\rfloor ⌊π⌋,当表达式 π \pi π 成立的时候, ⌊ π ⌋ \lfloor \pi\rfloor ⌊π⌋ = 1,否则为0,于是 τ r t = y r t ⌊ ( w t ⋅ x t − b r t ) − y r t ≤ 0 ⌋ \tau_{r}^{t}=y_{r}^{t} \lfloor(w^{t}\cdot x^{t}-b_{r}^{t}) - y_{r}^{t}\le 0\rfloor τrt​=yrt​⌊(wt⋅xt−brt​)−yrt​≤0⌋。因为 b r t ∈ Z , b r 1 = 0 b_{r}^{t}\in \mathbb{Z},b_{r}^{1}=0 brt​∈Z,br1​=0,所以 b r t + 1 − b r t ∈ { − 1 , 0 , + 1 } b_{r}^{t+1}-b_{r}^{t}\in\{-1,0,+1\} brt+1​−brt​∈{−1,0,+1}

3.1.1 (保序引理 ) 令 w t , b t w^{t},b^{t} wt,bt 是当前一轮迭代的参数,其中 b 1 t ≤ b 2 t ≤ . . . ≤ b k − 1 t b_{1}^{t}\leq b_{2}^{t}\leq ... \leq b_{k-1}^{t} b1t​≤b2t​≤...≤bk−1t​, ( x t , y t ) (x^{t},y^{t}) (xt,yt) 是第 t t t 轮迭代时训练的样本,经过新一轮迭代后,prank算法的参数更新为 w t + 1 , b t + 1 w^{t+1},b^{t+1} wt+1,bt+1,且满足 b 1 t + 1 ≤ b 2 t + 1 ≤ . . . ≤ b k − 1 t + 1 b_{1}^{t+1}\leq b_{2}^{t+1}\leq ... \leq b_{k-1}^{t+1} b1t+1​≤b2t+1​≤...≤bk−1t+1​。

证明:要证明prank算法对阈值保序,为方便起见我们沿用prank算法里对 y r t y_{r}^{t} yrt​ 的定义,当 r &lt; y t r\lt y^{t} r<yt 时, y r t = + 1 y_{r}^{t}=+1 yrt​=+1,当 r ≥ y t r\geq y^{t} r≥yt 时, y r t = − 1 y_{r}^{t}=-1 yrt​=−1,我们想要证明,对于任意的 r r r 都有 b r + 1 t + 1 ≥ b r t + 1 b_{r+1}^{t+1}\geq b_{r}^{t+1} br+1t+1​≥brt+1​,借助如下式子:

b r + 1 t − b r t ≥ y r + 1 t ⌊ ( w t ⋅ x t − b r + 1 t ) − y r + 1 t ≤ 0 ⌋ − y r t ⌊ ( w t ⋅ x t − b r t ) − y r t ≤ 0 ⌋ ( ∗ ) b_{r+1}^{t}-b_{r}^{t}\geq y_{r+1}^{t} \lfloor(w^{t}\cdot x^{t}-b_{r+1}^{t}) - y_{r+1}^{t}\le 0\rfloor-y_{r}^{t} \lfloor(w^{t}\cdot x^{t}-b_{r}^{t}) - y_{r}^{t}\le 0\rfloor (*) br+1t​−brt​≥yr+1t​⌊(wt⋅xt−br+1t​)−yr+1t​≤0⌋−yrt​⌊(wt⋅xt−brt​)−yrt​≤0⌋(∗)
对于上面的式子,如果我们可以证明对于任意 r r r,在 t t t 轮中上式右边恒小于等于0,而左边恒大于等于0,那么可以推断在 t + 1 t+1 t+1 轮中, b r + 1 t + 1 , b r + 1 t b_{r+1}^{t+1},b_{r+1}^{t} br+1t+1​,br+1t​ 要么同时增加或减少1,要么一个保持不变,另一个增加或减少1,而显然当在第 t t t 轮迭代的时候,如果 b r + 1 t − b r t &gt; 0 b_{r+1}^{t}-b_{r}^{t}\gt 0 br+1t​−brt​>0,又因为 b r + 1 t , b r t ∈ Z b_{r+1}^{t},b_{r}^{t}\in \mathbb{Z} br+1t​,brt​∈Z,所以 b r + 1 t − b r t ≥ 1 b_{r+1}^{t}-b_{r}^{t}\ge 1 br+1t​−brt​≥1,因此在下一轮迭代中,一定可以保证 b r + 1 t + 1 − b r t + 1 ≥ 0 b_{r+1}^{t+1}-b_{r}^{t+1}\ge 0 br+1t+1​−brt+1​≥0,如果 b r + 1 t − b r t = 0 b_{r+1}^{t}-b_{r}^{t}=0 br+1t​−brt​=0,则下一轮迭代中依然有, b r + 1 t + 1 − b r t + 1 = 0 b_{r+1}^{t+1}-b_{r}^{t+1}=0 br+1t+1​−brt+1​=0,仍然满足 b r + 1 t + 1 − b r t + 1 ≥ 0 b_{r+1}^{t+1}-b_{r}^{t+1}\ge0 br+1t+1​−brt+1​≥0。
根据算法可知,当 y t &gt; r y^{t}\gt r yt>r 时, y r t = 1 y_{r}^{t}=1 yrt​=1,否则 y r t = − 1 y_{r}^{t}=-1 yrt​=−1,因此 y r + 1 t ≤ y r t y_{r+1}^{t}\leq y_{r}^{t} yr+1t​≤yrt​,我们分两种情况讨论:
(1). y r + 1 t ≠ y r t y_{r+1}^{t}\neq y_{r}^{t} yr+1t​̸​=yrt​
也就是说 y r + 1 t = − 1 , y r t = 1 y_{r+1}^{t}=-1,y_{r}^{t}=1 yr+1t​=−1,yrt​=1,此时 ( ∗ ) (*) (∗) 式右边最大为0,因此 ( ∗ ) (*) (∗) 式左边大于等于0大于等于 ( ∗ ) (*) (∗) 右边
(2). y r + 1 t = y r t y_{r+1}^{t}= y_{r}^{t} yr+1t​=yrt​
此时 ( ∗ ) (*) (∗) 式左边为0,右边可以知道不会超过1,当 b r + 1 t = b r t b_{r+1}^{t}=b_{r}^{t} br+1t​=brt​ 时, ( ∗ ) (*) (∗) 式右边两项完全一样,故为0,因此 ( ∗ ) (*) (∗) 式成立;当 b r + 1 t ≠ b r t b_{r+1}^{t}\neq b_{r}^{t} br+1t​̸​=brt​ 时,由假设可知, b r + 1 t − b r t ≥ 1 b_{r+1}^{t}-b_{r}^{t}\geq 1 br+1t​−brt​≥1,因此不论 ( ∗ ) (*) (∗) 式右边是否为1, ( ∗ ) (*) (∗) 式依旧成立,故引理得证。

3.2 有界误差定理
3.2 (有界误差定理) 令 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x T , y T ) (x^{1},y^{1}),(x^{2},y^{2}),...,(x^{T},y^{T}) (x1,y1),(x2,y2),...,(xT,yT) 是PRank算法的输入序列,其中 x t ∈ R n , y ∈ { 1 , 2 , . . , k } x^{t} \in\mathbb{R^{n}},y\in\{1,2,..,k\} xt∈Rn,y∈{1,2,..,k},记 R 2 = max ⁡ t ∣ ∣ x t ∣ ∣ 2 R^{2}=\max_{t}||x^{t}||^{2} R2=maxt​∣∣xt∣∣2,假设有一组标准化后的参数(一个排序规则) v ∗ = ( w ∗ , b ∗ ) , b 1 ∗ ≤ b 2 ∗ ≤ . . . ≤ b k − 1 ∗ v^{*}=(w^{*},b^{*}),b_{1}^{*}\leq b_{2}^{*}\leq ... \leq b_{k-1}^{*} v∗=(w∗,b∗),b1∗​≤b2∗​≤...≤bk−1∗​ 在边界 γ = min ⁡ r , t { ( w ∗ ⋅ x t − b r ∗ ) y r t &gt; 0 } \gamma=\min_{r,t}\{(w^{*}\cdot x^{t}-b_{r}^{*})y_{r}^{t}\gt 0\} γ=minr,t​{(w∗⋅xt−br∗​)yrt​>0} 条件下,将整个序列正确分类,那么这个算法的排序误差 ∑ t = 1 T ∣ y ^ t − y t ∣ \sum_{t=1}^{T}|\hat y^{t}-y^{t}| ∑t=1T​∣y^​t−yt∣ 不会超过 ( k − 1 ) ( R 2 + 1 ) / γ 2 (k-1)(R^2+1)/{\gamma^{2}} (k−1)(R2+1)/γ2.

证明思路是利用数学归纳法和柯西-施瓦尔兹方法进行放缩来推导,具体过程不再赘述,可以直接参考论文证明过程,也可以后续留言交流。

Learning to Rank系列之Pointwise方法相关推荐

  1. 学习排序 Learning to Rank:从 pointwise 和 pairwise 到 listwise,经典模型与优缺点

    Ranking 是信息检索领域的基本问题,也是搜索引擎背后的重要组成模块.本文将对结合机器学习的 ranking 技术--learning2rank--做个系统整理,包括 pointwise.pair ...

  2. Learning to Rank系列之概述

    背景 排序问题是信息检索.新闻推荐.自然语言处理等领域中一个非常热门的研究问题.以google搜索为例,比如你在搜索框内输入"machine learning",回车之后googl ...

  3. Learning to Rank基于pairwise的算法(一)——Ranking SVM、MHR、IRSVM

    1.概述 对于搜索任务来说,系统接收到用户查询之后,返回相关文档列表.所以问题的关键是确定文档之间的先后顺序,而pairwise则将重点转向对文档关系是否合理的判断. 在pairwise中,排序算法通 ...

  4. Learning to rank的讲解,单文档方法(Pointwise),文档对方法(Pairwise),文档列表方法(Listwise)

    学习排序(Learning to Rank) LTR(Learning torank)学习排序是一种监督学习(SupervisedLearning)的排序方法.LTR已经被广泛应用到文本挖掘的很多领域 ...

  5. Learning to Rank中Pointwise关于PRank算法源码实现

    [学习排序] Learning to Rank中Pointwise关于PRank算法源码实现 标签: 学习排序PRankPointwiseLearning to Rank代码实现 2015-01-28 ...

  6. 【学习排序】 Learning to Rank中Pointwise关于PRank算法源码实现

    最近终于忙完了Learning to Rank的作业,同时也学到了很多东西.我准备写几篇相关的文章简单讲述自己对它的理解和认识.第一篇准备讲述的就是Learning to Rank中Pointwise ...

  7. lightGBM用于排序(Learning to Rank )

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx Learning to Rank 简介 去年实习时,因为项目需要,接触了一下Learning ...

  8. Learning to Rank : ListNet与ListMLE

    目录 前言 ListNet Methodology Probability Construction ListMLE Methodology Probability Construction 前言 在 ...

  9. 排序学习(Learning to rank)综述

    本文收录在推荐系统专栏,专栏系统化的整理推荐系统相关的算法和框架,并记录了相关实践经验,所有代码都已整理至推荐算法实战集合(hub-recsys). 一:背景介绍 在互联网搜索诞生之初,检索模型所依赖 ...

最新文章

  1. android layerlist bitmap,android – 在LayerListDrawable中更改Bitmap Drawable
  2. android:layout_with=,android – 难以理解layout_alignWithParentIfMissing
  3. hdu 6112 今夕何夕
  4. jmeter linux安装,Linux下安装Jmeter
  5. Flink从入门到精通100篇(十八)-CentOS环境中搭建Flink分布式集群
  6. ASP.NET Core MVC+EF Core从开发到部署
  7. 微小宝公众号排行榜_排行榜 | 山西省高校、高职中专微信公众号周数据排行榜...
  8. 太残忍!麦当劳用毒气室杀鸡
  9. flutter能开发游戏吗_不用 H5,闲鱼 Flutter 如何玩转小游戏?-阿里云开发者社区...
  10. 如何快速解决或避免EDI系统磁盘空间不足?
  11. python倒数切片_python切片
  12. Programming Ruby 读书笔记(四)
  13. DSL 领域特定语言
  14. 《人工智能》课程习题
  15. JAVA面试系列:你了解系统可用性吗?
  16. locust之安装(3)
  17. oracle餐厅网络点餐系统_点餐外卖小程序值得搞吗?
  18. Java计算1+2+...+n
  19. 阿语python美多商城-商品-商品详情页之第6.6.1节商品详情页分析和准备
  20. Linux紧急救援模式

热门文章

  1. 尚硅谷_佟刚_SpringMVC_工程实例与代码(自己敲的)
  2. 新C++(5):异常
  3. 高数-数列极限与函数极限
  4. python关键词生成文章_如何生成关键词云图?
  5. 更改echarts中盒须图横坐标
  6. 引入 JPEGCodec;JPEGImageEncoder; 图片处理
  7. 华为主题 主题兑换券活动高端操作
  8. ブランドは、同社とその製品、サービス
  9. JavaScript中的scrollTop(js中的scrollTop,滚动到顶部,javascript滚动到顶部)
  10. neo4j 图数据库初步调研 三元组、属性图、图模型、超图、RDF-f