Learning to Rank系列之Pointwise方法
上一篇综述文章 里我们简单介绍了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 < b r w\cdot x \lt b_r w⋅x<br 的最小的 b r b_r br,这个规则将空间分为若干平行的等值区域:所有满足 b r − 1 < w ⋅ x < 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 < 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 < 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 < r y^{t}<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 < 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 < j i<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 < 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 > 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 > 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 > 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方法相关推荐
- 学习排序 Learning to Rank:从 pointwise 和 pairwise 到 listwise,经典模型与优缺点
Ranking 是信息检索领域的基本问题,也是搜索引擎背后的重要组成模块.本文将对结合机器学习的 ranking 技术--learning2rank--做个系统整理,包括 pointwise.pair ...
- Learning to Rank系列之概述
背景 排序问题是信息检索.新闻推荐.自然语言处理等领域中一个非常热门的研究问题.以google搜索为例,比如你在搜索框内输入"machine learning",回车之后googl ...
- Learning to Rank基于pairwise的算法(一)——Ranking SVM、MHR、IRSVM
1.概述 对于搜索任务来说,系统接收到用户查询之后,返回相关文档列表.所以问题的关键是确定文档之间的先后顺序,而pairwise则将重点转向对文档关系是否合理的判断. 在pairwise中,排序算法通 ...
- Learning to rank的讲解,单文档方法(Pointwise),文档对方法(Pairwise),文档列表方法(Listwise)
学习排序(Learning to Rank) LTR(Learning torank)学习排序是一种监督学习(SupervisedLearning)的排序方法.LTR已经被广泛应用到文本挖掘的很多领域 ...
- Learning to Rank中Pointwise关于PRank算法源码实现
[学习排序] Learning to Rank中Pointwise关于PRank算法源码实现 标签: 学习排序PRankPointwiseLearning to Rank代码实现 2015-01-28 ...
- 【学习排序】 Learning to Rank中Pointwise关于PRank算法源码实现
最近终于忙完了Learning to Rank的作业,同时也学到了很多东西.我准备写几篇相关的文章简单讲述自己对它的理解和认识.第一篇准备讲述的就是Learning to Rank中Pointwise ...
- lightGBM用于排序(Learning to Rank )
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx Learning to Rank 简介 去年实习时,因为项目需要,接触了一下Learning ...
- Learning to Rank : ListNet与ListMLE
目录 前言 ListNet Methodology Probability Construction ListMLE Methodology Probability Construction 前言 在 ...
- 排序学习(Learning to rank)综述
本文收录在推荐系统专栏,专栏系统化的整理推荐系统相关的算法和框架,并记录了相关实践经验,所有代码都已整理至推荐算法实战集合(hub-recsys). 一:背景介绍 在互联网搜索诞生之初,检索模型所依赖 ...
最新文章
- android layerlist bitmap,android – 在LayerListDrawable中更改Bitmap Drawable
- android:layout_with=,android – 难以理解layout_alignWithParentIfMissing
- hdu 6112 今夕何夕
- jmeter linux安装,Linux下安装Jmeter
- Flink从入门到精通100篇(十八)-CentOS环境中搭建Flink分布式集群
- ASP.NET Core MVC+EF Core从开发到部署
- 微小宝公众号排行榜_排行榜 | 山西省高校、高职中专微信公众号周数据排行榜...
- 太残忍!麦当劳用毒气室杀鸡
- flutter能开发游戏吗_不用 H5,闲鱼 Flutter 如何玩转小游戏?-阿里云开发者社区...
- 如何快速解决或避免EDI系统磁盘空间不足?
- python倒数切片_python切片
- Programming Ruby 读书笔记(四)
- DSL 领域特定语言
- 《人工智能》课程习题
- JAVA面试系列:你了解系统可用性吗?
- locust之安装(3)
- oracle餐厅网络点餐系统_点餐外卖小程序值得搞吗?
- Java计算1+2+...+n
- 阿语python美多商城-商品-商品详情页之第6.6.1节商品详情页分析和准备
- Linux紧急救援模式
热门文章
- 尚硅谷_佟刚_SpringMVC_工程实例与代码(自己敲的)
- 新C++(5):异常
- 高数-数列极限与函数极限
- python关键词生成文章_如何生成关键词云图?
- 更改echarts中盒须图横坐标
- 引入 JPEGCodec;JPEGImageEncoder; 图片处理
- 华为主题 主题兑换券活动高端操作
- ブランドは、同社とその製品、サービス
- JavaScript中的scrollTop(js中的scrollTop,滚动到顶部,javascript滚动到顶部)
- neo4j 图数据库初步调研 三元组、属性图、图模型、超图、RDF-f