LTR (Learning to Rank): 排序算法 poitwise, pairwise, listwise常见方案总结

news2024/11/26 11:53:34

目录

  • 1 Learing to Rank介绍
  • 2 The Pointwise Approach
  • 3 The Pairwise Approach
    • 3.1 RankNet
  • 4 The Listwise Approach
    • 4.1 直接优化评测指标
      • 4.1.1 LambdaRank
      • 4.1.2 LambdaMART
    • 4.2 定义Listwise损失函数
      • 4.2.1 ListNet
      • 4.2.2 ListMLE
  • 5 排序评估指标
    • 5.1 Mean Reciprocal Rank (MRR)
    • 5.2 Mean Average Precision (MAP)
    • 5.3 Normalized Discounted Cumulative Gain (NDCG)
    • 5.4 Rank Correlation (RC)
  • 6 参考

1 Learing to Rank介绍

Learning to Rank (LTR)是一类技术方法,主要利用机器学习算法解决实际中的排序问题。传统的机器学习主要解决的问题是一个分类或者回归问题,比如对一个样本数据预测对应的类别或者预测一个数值分值。而LTR解决的是一个排序问题,对一个list的item进行一个排序,所以LTR并不太关注这个list的每个item具体得多少分值,更关注所有item的相对顺序。排序通常是信息检索的核心成分,所以LTR最常见的应用是搜索场景,对召回的document进行排序。对于排序算法从训练方式来看,主要分为三类:pointwise,pairwise和listwise方式,接下来对这三种方法进行介绍。

2 The Pointwise Approach

pointwise方法损失函数计算只与单个document有关,本质上是训练一个分类模型或者回归模型,判断这个document与当前的这个query相关程度,最后的排序结果就是从模型对这些document的预测的分值进行一个排序。对于pointwise方法,给定一个query的document list,对于每个document的预测与其它document是独立的。所以模型输入和对应的标签label形式如下:

  • 输入: 单个document
  • 标签label: document所属类型或者分值

pointwise方法将排序任务看做对单个文本的回归或者分类任务来做。若文档document的相关性等级有K种,则我们可以建模为一个有K个类别的 { 0 , 1 , 2 , . . . , K − 1 } \{0,1,2,..., K-1\} {0,1,2,...,K1}的Multi-class分类任务,则 y i ∈ R k y_i \in \R^k yiRk是一个k维度的one-hot表示, 我们可以用交叉熵loss作为目标损失函数:
L = − ( y i log ⁡ ( p i ) − ( 1 − y i ) log ⁡ ( 1 − p i ) ] ) L = -(y_i\log(p_i) - (1-y_i)\log(1-p_i)]) L=yilog(pi)(1yi)log(1pi)]

3 The Pairwise Approach

基于pairwise的方法,在计算目标损失函数的时候,每一次需要基于一个pair的document的预测结果进行损失函数的计算。比如给定一个pair对的document,优化器需要优化的是两个document的排序关系,与groud truth的排序顺序保持一致。目标是最小化与groud truth不一致的排序对。在实际应用中,pairwise方法比pointwise效果更好,因为预测相对的排序相比预测一个类别或者一个分值,更符合排序的性质。其中模型输入和对应的标签label形式如下:

  • 输入: 一个pair对document (A,B)
  • 输出标签: 相对顺序label (1, 0.5, 0)

其中1表示相关性等级A>B,0.5表示相关性等级A=B,0表示相关性等级A<B。目前使用较多的pairwise排序算法有RankNet,接下来对这种算法原理进行介绍。

3.1 RankNet

RankNet将排序问题转成对候选集所有document的pair对的分类问题,对query的document list分成两两pair对,并且根据每个文本的相关性等级,确定pair对的标签label, 如下图所示:
在这里插入图片描述
模型训练的任务是,判断两两pair之间的相关性相对大小。根据pair对的相关性等级大小,我们可以得到训练过程中每个pair对的标签label:
P i j ‾ = { 1 文 本 的 相 关 性 等 级 r i > r j 1 2 文 本 的 相 关 性 等 级 r i = r j 0 文 本 的 相 关 性 等 级 r i < r j \overline{P_{ij}}=\begin{cases} 1\quad 文本的相关性等级r_i>r_j \\ \frac{1}{2} \quad 文本的相关性等级r_i=r_j \\ 0 \quad 文本的相关性等级r_i<r_j \end{cases} Pij=1ri>rj21ri=rj0ri<rj
其中:
P i j ‾ = 1 2 ( 1 + S i j )      ( 1 ) \overline{P_{ij}}=\frac{1}{2}(1+S_{ij}) \text{ } \text{ } \text{ } \text{ }(1) Pij=21(1+Sij)    (1)
S i j ∈ { 0 , + 1 , − 1 } S_{ij} \in \{0, +1, -1\} Sij{0,+1,1},对于给定一个query,若文本 i i i的相关性比文本 j j j高,则 S i j S_{ij} Sij=1, 若文本 i i i的相关性比文本 j j j高,则 S i j S_{ij} Sij=-1,文本 i i i的相关性与文本 j j j相等,则 S i j S_{ij} Sij=0。

而每个pair对模型预测的概率分值计算如下:
P i j = 1 1 + e − σ ⋅ ( s i − s j )    ( 2 ) P_{ij} =\frac{1}{1+e^{-\sigma \cdot (s_i-s_j)}} \text{ } \text{ } (2) Pij=1+eσ(sisj)1  (2)
参数 σ \sigma σ决定了sigmoid函数的形状,其中 s i s_i si表示的是第 i i i个document经过模型得到的预测分值。可以看出若 s i − s j s_i-s_j sisj越大,则 P i j P_{ij} Pij也越接近1,与pair对的标签 P i j ‾ = 1 \overline{P_{ij}}=1 Pij=1越符合。对于pair对,我们同样可以用交叉熵loss作为目标损失函数如下:
L = − P i j ‾ log ⁡ ( P i j ) − ( 1 − P i j ‾ ) log ⁡ ( 1 − P i j )    ( 3 ) L = -\overline{P_{ij}}\log(P_{ij}) - (1 - \overline{P_{ij}})\log(1-P_{ij}) \text{ } \text{ } (3) L=Pijlog(Pij)(1Pij)log(1Pij)  (3)
通过Stochastic Gradient Descent随机梯度下降算法就可以优化求解模型参数权重了。在预测的阶段,对输入的是每个document得到模型预测分值 s i s_i si,根据document对应的分值就可进行排序结果。有人基于FRank对目标损失函数进行一个改进,试验效果取得了更好的结果,新定义的损失函数如下:
L = 1 − ( P i j ‾ ⋅ P i j + ( 1 − P i j ‾ ) ⋅ ( 1 − P i j ) ) L = 1 - (\sqrt{\overline{P_{ij}}\cdot P_{ij}} + \sqrt{(1-\overline{P_{ij}}) \cdot (1 - P_{ij})}) L=1(PijPij +(1Pij)(1Pij) )
如下是loss的函数图像对比情况:
在这里插入图片描述
基于pairwise的排序算法后面还有很多工作进行了改进,并取得了不错的效果,在这里就不一一介绍了。pairwise相对pointwise,不再假设绝对的相关性,而是有了相对的关系,但是排序的性质还没有完全在模型里得到体现。比如,如下两组排序,从pairwise来看,准确率是一致的,但是从整个排序效果来看,第二组是比第一组排序效果好的:

说明理想的排序结果第一组排序结果第二组排序结果
(p: perfec), (g: good), (b: bad)p g g b b b bg p g b b b bp g b g b b b

4 The Listwise Approach

Listwise方法是直接对整个list的document的排序进行优化,目标损失函数中优化整个list的document的排序结果。所以训练样本的输入和标签label输出结果如下:

  • 输入: 整个list document
  • 标签label: 排序好的document list

目前主要有两种方法来做listwise排序:

  • 直接优化信息检索的测量指标:比如NDCG,这类型的算法主要由SoftRank, AdaRank等
  • 最小化损失函数: 计算整个list的loss,最小化损失函数,比如ListNet,ListMLE等

4.1 直接优化评测指标

通过直接优化排序结果中的评测指标来优化排序任务,但是基于评测指标比如NDCG依赖排序结果,是不连续不可导的。所以优化这些不连续不可导的目标函数面临较大的挑战,目前多数优化技术都是基于函数可导的情况。那么如何解决这个问题?常见的有如下两种方法:

  • 通过使用优化技术将目标函数转变成连续可导的函数,然后进行求解,比如SoftRank和 AdaRank等模型
  • 通过使用优化技术对非连续的不可导目标函数就行求解,比如 LambdaRank

4.1.1 LambdaRank

LambadRank
上面介绍了RankNet的原理,RankNet优化目标是最小化pair对错误,但是在信息检索领域比如NDCG这样的评测指标,这样的优化目标并不能够最大化效果,通常在信息检索中我们更关注的是topN的排序结果,且相关性越大的文本最需要排在最前面。如下图所示:
在这里插入图片描述
给定一个query,上图为排序结果展示,其中蓝色的线表示的是相关的文档,灰色的线表示不相关的文档,那么在左图,有13个pair对错误,而在右图中,有11个pair对错误,在RankNet,右图的排序结果要比左图好,但是在信息检索指标中,比如NDCG指标,左图的效果比右边更好。
我们在上面介绍RankNet中,将上述(1)(2)公式代人到(3)公式中,我们可以得到损失函数如下:
C = 1 2 ( 1 − S i j ) σ ( s i − s j ) + l o g ( 1 + e − σ ( s i − s j ) )    ( 4 ) C =\frac{1}{2}(1-S_{ij})\sigma(s_i-s_j)+log(1+e^{-\sigma(s_i-s_j)}) \text{ }\text{ }(4) C=21(1Sij)σ(sisj)+log(1+eσ(sisj))  (4)
从上面公式可以得出,当 S i j = 1 S_{ij}=1 Sij=1, 则损失函数变为如下:
C = l o g ( 1 + e − σ ( s i − s j ) )    ( 5 ) C = log(1+e^{-\sigma(s_i-s_j)}) \text{ }\text{ }(5) C=log(1+eσ(sisj))  (5)
要使得C变小,则 s i s_i si大于 s j s_j sj且差距越大,C越小,与该pair对的相对相关性强度标签label S i j = 1 S_{ij}=1 Sij=1(文本i比文本j更相关,也就是 s i > s j s_i>s_j si>sj)保持一致。
而当 S i j = − 1 S_{ij}=-1 Sij=1,则代价函数如下:
C = l o g ( 1 + e − σ ( s j − s i ) )    ( 6 ) C=log(1+e^{-\sigma(s_j-s_i)}) \text{ }\text{ }(6) C=log(1+eσ(sjsi))  (6)
同理, s j > s i s_j>s_i sj>si差距越大,损失函数C越小,与该pair对的相对相关性强度标签label S i j = − 1 S_{ij}=-1 Sij=1(文本j比文本i更相关,也就是 s j > s i s_j>s_i sj>si)保持一致。
我们来计算下损失函数对 s i s_i si求导:
∂ C ∂ s i = σ ( 1 2 ( 1 − S i j ) − 1 1 + e σ ( s i − s j ) ) = − ∂ C ∂ s j \frac{\partial C}{\partial s_i}=\sigma(\frac{1}{2}(1-S_{ij}) - \frac{1}{1+e^{\sigma(s_i-s_j)}})=-\frac{\partial C}{\partial s_j} siC=σ(21(1Sij)1+eσ(sisj)1)=sjC
那么损失函数对模型参数 w k w_k wk的导数计算如下:
∂ C ∂ w k = ∂ C ∂ s i ∂ s i ∂ w k + ∂ C ∂ s j ∂ s j ∂ w k \frac{\partial C}{\partial w_k} =\frac{\partial C}{\partial s_i}\frac{\partial s_i}{\partial w_k}+\frac{\partial C}{\partial s_j}\frac{\partial s_j}{\partial w_k} wkC=siCwksi+sjCwksj
= σ ( 1 2 ( 1 − S i j ) − 1 1 + e σ ( s i − s j ) ) ( ∂ s i ∂ w k − ∂ s j ∂ w k ) =\sigma(\frac{1}{2}(1-S_{ij})-\frac{1}{1+e^{\sigma(s_i-s_j)}})(\frac{\partial s_i}{\partial w_k} - \frac{\partial s_j}{\partial w_k}) =σ(21(1Sij)1+eσ(sisj)1)(wksiwksj)
我们定义:
λ i j = ∂ C ( s i − s j ) ∂ s i = σ ( 1 2 ( 1 − S i j ) − 1 1 + e σ ( s i − s j ) )    ( 7 ) \lambda_{ij}=\frac{\partial C(s_i-s_j)}{\partial s_i}=\sigma(\frac{1}{2}(1-S_{ij}) - \frac{1}{1+e^{\sigma(s_i-s_j)}}) \text{ }\text{ }(7) λij=siC(sisj)=σ(21(1Sij)1+eσ(sisj)1)  (7)
对于一个给定的query,我们定义 I I I表示所有pair对的索引 { i , j } \{i,j\} {i,j},其中文本 U i U_i Ui的相关性大于 U j U_j Uj,也就是说 S i j = 1 S_{ij}=1 Sij=1,则上面的公式转变形式为:
λ i j = − σ 1 + e ( s i − s j ) < 0    ( 8 ) \lambda_{ij}=-\frac{\sigma}{1+e^{(s_i -s_j)}} <0 \text{ }\text{ }(8) λij=1+e(sisj)σ<0  (8)
因为 λ i j < 0 \lambda_{ij} <0 λij<0,则由于这个pair对产生的梯度更新 s i − λ i j > s i s_i-\lambda_{ij}>s_i siλij>si s i s_i si是增加的,也就是若 U i > U j U_i >U_j Ui>Uj,模型的每次调整需要调高 s i s_i si的预测值,但是对于另外一些pair对(j, i) , U j > U i U_j>U_i Uj>Ui,对于这样的pair对,更新梯度后,需要调低 s i s_i si的分值。所以综合所有的pair对情况,对于文本 U i U_i Ui我们计算梯度 λ i \lambda_i λi公式如下:
λ i = ∑ j : { i , j } ∈ I λ i j − ∑ j : { j , i } ∈ I λ i j    ( 9 ) \lambda_i = \sum_{j:\{i,j\} \in I} \lambda_{ij} - \sum_{j:\{j,i\}\in I} \lambda_{ij} \text{ }\text{ } (9) λi=j:{i,j}Iλijj:{j,i}Iλij  (9)
对于所有的pair对,那些 { i , j } ∈ I \{i,j\} \in I {i,j}I需要调高 s i s_i si,而那些 { k , i } ∈ I \{k,i\} \in I {k,i}I的则需要调低 s i s_i si,最后,综合所有pair对,由上述公式(8)决定梯度值 λ i \lambda_i λi是小于0还是大于0,决定是调高 s i s_i si值还是调低 s i s_i si的值。RankNet就是由所有pair对错误情况去调整每个文本的 U i U_i Ui的排序位置,但是并不很适合信息检索类似NDCG这样的指标。
所以在LambdaRank算法里,定义的梯度 λ i j \lambda_{ij} λij公式如下:
λ i j = ∂ C ( s i − s j ) ∂ s i = − σ 1 + e σ ( s i − s j ) ∣ Δ N D C G ∣    ( 10 ) \lambda_{ij} = \frac{\partial C(s_i - s_j)}{\partial s_i}=\frac{-\sigma}{1+e^{\sigma^{(s_i -s_j)}}}|\Delta NDCG| \text{ }\text{ } (10) λij=siC(sisj)=1+eσ(sisj)σΔNDCG  (10)
在公式(8)的基础上再乘以 ∣ Δ N D C G ∣ |\Delta NDCG| ΔNDCG ∣ Δ N D C G ∣ |\Delta NDCG| ΔNDCG表示的是交换 U i U_i Ui U j U_j Uj两个文本 (其它文本保持不变)后对应的NDCG分数的变化
为什么要乘以这个变化后的 ∣ Δ N D C G ∣ |\Delta NDCG| ΔNDCG?
λ i \lambda_{i} λi代表了文档 U i U_i Ui下一次优化是提升还是下降,对于RankNet,根据pair对的错误数量决定调整,但是lambdarank还要考虑pair对的重要性(用变化后的NDCG表示),pair对(i,j)交换位置后,对应的 ∣ Δ N D C G ∣ |\Delta NDCG| ΔNDCG若变化很大,那说明 U i U_i Ui是个很重要的文本,这个pair对的 λ i j \lambda_{ij} λij起到的作用要增大,所以我们可以理解用 ∣ Δ N D C G ∣ |\Delta NDCG| ΔNDCG代表这个 λ i j \lambda_{ij} λij权重,防止对重要文本下调。

4.1.2 LambdaMART

LambdaMART是Lambda和MART(Multiple Additive Regression Tree)组成,上面部分我们介绍了Lambda,根据导数公式(10)可知,损失函数C定义如下:
C = ∑ { i , j } ∣ Δ Z i j ∣ l o g ( 1 + e − σ ( s i − s j ) ) C=\sum_{\{i,j\}}|\Delta Z_{ij}|log(1+e^{-\sigma(s_i-s_j)}) C={i,j}ΔZijlog(1+eσ(sisj))
这里的 ∣ Δ Z i j ∣ |\Delta Z_{ij}| ΔZij表示的信息检索指标,比如NDCG等。损失函数的一阶导数为:
∂ C ∂ s i = ∑ { i , j } − σ ∣ Δ Z i j ∣ 1 + e σ ( s i − s j ) = ∑ i , j − σ ∣ Δ Z i j ∣ p i j \frac{\partial C}{\partial s_i} = \sum_{\{i,j\}} \frac{-\sigma |\Delta Z_{ij}|}{1+e^{\sigma(s_i-s_j)}}=\sum_{i,j}-\sigma|\Delta Z_{ij}|p_{ij} siC={i,j}1+eσ(sisj)σΔZij=i,jσΔZijpij
我们定义:
p i j = 1 1 + e σ ( s i − s j ) = − λ i j σ ∣ Z i j ∣ p_{ij}=\frac{1}{1+e^{\sigma(s_i-s_j)}}=\frac{-\lambda_{ij}}{\sigma|Z_{ij}|} pij=1+eσ(sisj)1=σZijλij
那么二阶导数为:
∂ 2 C ∂ s i 2 = ∑ { i , j } σ 2 ∣ Δ Z i j ∣ p i j ( 1 − p i j ) \frac{\partial^2C}{\partial s_i^2} = \sum_{\{i,j\}} \sigma^2|\Delta Z_{ij}|p_{ij}(1-p_{ij}) si22C={i,j}σ2ΔZijpij(1pij)
LambdaMART模型是由许多棵决策树,通过Boosting思想组成,每颗决策树拟合的是损失函数的梯度,其中叶子节点的权重 w w w具体求解涉及一阶梯度和二阶梯度,大家可以先了解GBDT算法原理讲解,对一些基本原理进行熟悉。而在这里求解的梯度用lambda方式求解。LambdaMART算法求解步骤如下:
在这里插入图片描述可以看出这里求解一阶和二阶导数用lambda替代,算法的逻辑和求解boosting算法逻辑一致

4.2 定义Listwise损失函数

4.2.1 ListNet

ListNet与RankNet很相似,RankNet是用pair对文本排序顺序进行模型训练,而ListNet用的是整个list文本排序顺序进行模型训练。若训练样本中有m个query,假如对应需要排序的最多文本数量为n ,则RankNet的复杂度为 O ( m ⋅ n 2 ) O(m \cdot n^2) O(mn2),而ListNet的复杂度为 O ( m ⋅ n ) O(m \cdot n) O(mn),所以整体来说在训练过程中ListNet相比RankNet更高效。
假设对于query q i q^i qi对应排序的文本为:
d i = ( d 1 i , d 2 i , d 3 i , . . . , d n i ) d^i=(d_1^i, d_2^i, d_3^i, ...,d^i_n) di=(d1i,d2i,d3i,...,dni)
其中对应的特征为:
x i = ( x 1 i , x 2 i , x 3 i , . . . , x n i ) x^i = (x^i_1, x_2^i, x_3^i, ..., x_n^i) xi=(x1i,x2i,x3i,...,xni)
假设我们用神经网络模型作为基础的分值预测,那么对每个样本的特征输入,模型都会给出预测分值:
z i = ( f ( x 1 i ) , f ( x 2 i ) , . . . , f ( x n i ) ) z^i = (f(x_1^i), f(x_2^i), ..., f(x_n^i)) zi=(f(x1i),f(x2i),...,f(xni))
对于每个文本的实际分值记录为:
y i = ( y 1 i , y 2 i , . . . , f n i ) y^i = (y_1^i, y_2^i, ...,f_n^i) yi=(y1i,y2i,...,fni)
则我们可以定义损失函数为:
∑ i = 1 m L ( y i , z i ) \sum_{i=1}^m L(y^i, z^i) i=1mL(yi,zi)
这里的L我们可以用交叉熵损失函数定义,度量两个分布 y i , z i y^i, z^i yi,zi之间的差异:
L ( y i , z i ( f w ) ) = − ∑ j = 1 n P y i ( x j i ) l o g ( P z i ( f w ) ( x j i ) ) L(y^i, z^i(f_w)) = -\sum_{j=1}^n P_{y^i}(x_j^i)log(P_{z^i(f_w)}(x_j^i)) L(yi,zi(fw))=j=1nPyi(xji)log(Pzi(fw)(xji))
其中 P y i ( x j i ) P_{y^i}(x_j^i) Pyi(xji)表示的对于给定query i i i,对应第 j j j个文本输入特征为 x j i x^i_j xji对应的概率值,这个概率值我们可以根据每个文档的等级分值,经过一个softmax函数求出概率值,比如,对应的文本相关性等级为:
y i = { 5 , 4 , 3 , 1 } y^i=\{5, 4, 3, 1\} yi={5,4,3,1}
则第一个文本等级为5对应的概率分值为:
P ( x 1 i ) = e 5 e 5 + e 4 + e 3 + e 1 P(x_1^i)=\frac{e^5}{e^5+e^4+e^3+e^1} P(x1i)=e5+e4+e3+e1e5
而经过神经网络 f w f_w fw,每个文本对应的概率分值也是经过一个softmax函数求得:
P z i ( f w ) ( x j i ) = exp ⁡ ( f w ( x j i ) ) ∑ k = 1 n exp ⁡ ( f w ( x k i ) ) P_{z^i(f_w)(x_j^i)} = \frac{\exp(f_w(x_j^i))}{\sum_{k=1}^n \exp(f_w(x_k^i)) } Pzi(fw)(xji)=k=1nexp(fw(xki))exp(fw(xji))
这样我们就可以用交叉熵损失函数度量两个分布之间的差异,计算出loss,然后用梯度下降算法求解。

4.2.2 ListMLE

ListMLE也是基于list计算损失函数,论文对learning to rank算法从函数凸性,连续性,鲁棒性等多个维度进行了分析,提出了一种基于最大似然loss的listwise排序算法,取名为ListMLE。损失函数定义如下:
L ( g ( x ) , y ) = − l o g P ( y ∣ x ; g ) L(g(x),y) = -logP(y|x;g) L(g(x),y)=logP(yx;g)
其中 P ( y ∣ x ; g ) P(y|x;g) P(yx;g)概率计算如下:
P ( y ∣ x ; g ) = ∏ i = 1 n exp ⁡ ( g ( x y ( i ) ) ) ∑ k = i n exp ⁡ ( g ( x y ( k ) ) ) P(y|x;g) = \prod_{i=1}^n \frac{\exp(g(x_{y(i)}))}{\sum_{k=i}^n\exp(g(x_{y(k)}))} P(yx;g)=i=1nk=inexp(g(xy(k)))exp(g(xy(i)))
我们用一个具体的例子来说明上述公式,假如对给定的query,其中对应的文本相关性等级为:
D = [ 3 , 5 , 1 , 2 ] D=[3, 5, 1, 2] D=[3,5,1,2]
模型预测的logit分值对应为:
p r e d = [ 2.2 , 3.1 , 1.8 ] pred=[2.2, 3.1, 1.8] pred=[2.2,3.1,1.8]
按照D的相关性文本大小对应模型预测的分值顺序调整后为:
p r e d s = [ 3.1 , 2.2 , 1.8 ] pred^s=[3.1,2.2,1.8] preds=[3.1,2.2,1.8]
则对应的概率分值为:
P = 3.1 3.1 + 2.2 + 1.8 × 2.2 2.2 + 1.8 × 1.8 1.8 P = \frac{3.1}{3.1+2.2+1.8} \times \frac{2.2}{2.2+1.8}\times \frac{1.8}{1.8} P=3.1+2.2+1.83.1×2.2+1.82.2×1.81.8
对应的最大似然loss为:
l o s s = − log ⁡ ( P ) loss = -\log(P) loss=log(P)

5 排序评估指标

在排序任务中,模型对候选集进行打分,得到一个排序结果,再与真实的排序结果进行对比,通过一些指标来衡量排序模型的预测效果。而用的较广泛的评判标注主要分三部分:

  • Binary judgment: 判断query与document相关与不相关,两种结果
  • Multi-level ratings: 分perfect >excellent > good >fair > bad 5种相关性等级
  • pairwise preferences: 给定一个query的两个document A, B,判断A与B谁相对query更相关

那么如何衡量排序模型的效果呢?接下来会对测评指标进行简单的介绍。

5.1 Mean Reciprocal Rank (MRR)

对于给定query q q q以及与该query相关的文本 D = { d 1 , d 2 , d 3 , d 4 , d 5 } D=\{d_1,d_2,d_3,d_4,d_5\} D={d1,d2,d3,d4,d5},假设文本与query的相关性程度依次递减已经排好序,若排序模型预测的顺序是 r a n k = { d 2 , d 3 , d 1 , d 5 , d 4 } rank=\{d_2,d_3,d_1,d_5,d_4\} rank={d2,d3,d1,d5,d4},则与该query第一相关的文本 d 1 d_1 d1所在的排序位置记为 r ( q ) = 3 r(q)=3 r(q)=3,则对于这个query的MRR指标计算结果为:
MRR = 1 r ( q ) = 1 3 \text{MRR} = \frac{1}{r(q)} =\frac{1}{3} MRR=r(q)1=31
该指标对应的值越大越好,且取值范围为 [ 1 N , 1 ] [\frac{1}{N},1] [N1,1],其中 N N N表示的是排序的总文本数量。

5.2 Mean Average Precision (MAP)

MAP是排序模型效果评估的另外一个评价指标,首先我们定义在位置 k k k的精确率记为: P @ k P@k P@k,具体计算结果为:

P @ k ( q ) = # { relevant documents in the top k positions } k P@k(q) = \frac{\#\{\text{relevant documents in the top k positions}\}}{k} P@k(q)=k#{relevant documents in the top k positions}
则平均精确率AP定义如下:
A P ( q ) = ∑ k = 1 m P @ k ( q ) ⋅ l k # { relevant documents} AP(q) = \frac{\sum_{k=1}^m P@k(q) \cdot l_k}{\#\{\text{relevant documents\}}} AP(q)=#{relevant documents}k=1mP@k(q)lk
其中 m m m表示的是query q q q对应的所有文本数量, l k l_k lk取值为{0,1},判断在第 k k k个位置上的文本是否与query相关,相关为1,不相关为0。假设query对应排序的有5个document,其中红色代表不相关,绿色代表相关,则AP指标计算结果为:
在这里插入图片描述
A P = 1 3 ⋅ ( 1 1 + 2 3 + 3 5 ) AP = \frac{1}{3} \cdot(\frac{1}{1} + \frac{2}{3} + \frac{3}{5}) AP=31(11+32+53)

则最后的MAP指标表示所有query的平均AP值
MAP = 1 m ∑ i m A P ( q i ) \text{MAP} = \frac{1}{m}\sum_i^m AP(q_i) MAP=m1imAP(qi)

5.3 Normalized Discounted Cumulative Gain (NDCG)

前面的测量标准主要基于是否相关的0-1 binary决策,而DCG可以对包含多个相关性程度的类别进行测评,同时将位置衰减因子也定义到了计算公式里,假设对于query q q q,排序模型预测的相关性结果从高到低排序后记为 π \pi π,则在位置k的DCG指标定义如下:
D C G @ k ( q ) = ∑ r = 1 k G ( π ( r ) ) η ( r ) DCG@k(q) = \sum_{r=1}^kG(\pi(r))\eta(r) DCG@k(q)=r=1kG(π(r))η(r)
其中 π ( r ) \pi(r) π(r)表示的是排序 π \pi π整个list在位置为 r r r的原始文档相关性等级, G ( ⋅ ) G(\cdot) G()是对文档相关性计算出的新的等级分值,一般计算函数如下:
G ( π ( r ) ) = 2 π ( r ) − 1 G(\pi(r)) = 2^{\pi(r)} -1 G(π(r))=2π(r)1
其中 η ( r ) \eta(r) η(r)表示的是位置衰减因子,通常计算公式如下:
η ( r ) = 1 log ⁡ 2 ( r + 1 ) \eta(r) = \frac{1}{\log_2(r+1)} η(r)=log2(r+1)1
所以从DCG公式可以看出,若相关性等级越高的文档排序越靠后,则由于 η ( r ) 位 置 衰 弱 的 越 大 , \eta(r)位置衰弱的越大, η(r)DCG分值越低,且将位置信息融入到了计算公式里。则归一化的Normalized DCG (NDCG) 指标计算公式如下:
N D C G @ k ( q ) = 1 Z k ∑ r = 1 k G ( π ( r ) ) η ( r ) = ∑ r = 1 k ( 2 π ( r ) − 1 ) ⋅ ( 1 / log ⁡ 2 ( r + 1 ) ) Z k NDCG@k(q) = \frac{1}{Z_k}\sum_{r=1}^kG(\pi(r))\eta(r) = \frac{ \sum_{r=1}^k (2^{\pi(r)} -1)\cdot(1/\log_2(r+1))}{Z_k} NDCG@k(q)=Zk1r=1kG(π(r))η(r)=Zkr=1k(2π(r)1)(1/log2(r+1))
其中 Z k Z_k Zk是归一化因子,其计算值为DCG@k的最大值,也就是query对应的理想排序list (相关性等级越高,排在越靠前),可以看出NDCG@k(q)计算公式由4部分组成:归一化因子 Z k Z_k Zk, 累积求和: ∑ r = 1 k \sum_{r=1}^k r=1k,信息增益Gain: ( 2 π ( r ) − 1 ) (2^{\pi(r)} -1) (2π(r)1)以及位置衰减: 1 / log ⁡ 2 ( r + 1 ) ) 1/\log_2(r+1)) 1/log2(r+1)), NDCG的取值范围为[0,1]。若根据Relevance Rating进行打标,则信息增益Gain值如下:

Relevance RatingValue (Gain)
Perfect 31 = 2 5 − 1 31=2^5-1 31=251
Excellent 15 = 2 4 − 1 15=2^4-1 15=241
Good 7 = 2 3 − 1 7=2^3-1 7=231
Fair 3 = 2 2 − 1 3=2^2-1 3=221
Bad 0 = 2 0 − 1 0=2^0-1 0=201

5.4 Rank Correlation (RC)

RC指标是衡量模型预测的一个排序list π \pi π与groudtruth标准排序list π l \pi_l πl之间的相关性。用带权重的Kendall等级相关系数作为评估准则,评估两个排序list中两两不一样的pairwise排序一致性情况,计算公式定义如下:
R C = ∑ u < v w u , v ( 1 + s g n ( ( π ( u ) − π ( v ) ) ( π l ( u ) − π l ( v ) ) ) ) 2 ∑ u < v w u , v RC = \frac{\sum_{u<v}w_{u,v}(1+sgn((\pi(u) - \pi(v))(\pi_l(u) - \pi_l(v))))}{2\sum_{u<v}w_{u,v}} RC=2u<vwu,vu<vwu,v(1+sgn((π(u)π(v))(πl(u)πl(v))))
其中sgn是符合函数,定义如下:
s g n = { 1 x > 0 0 x = 0 − 1 x < 0 sgn=\begin{cases} 1\quad x>0 \\ 0 \quad x=0 \\ -1 \quad x<0 \end{cases} sgn=1x>00x=01x<0
从上述公式可以看出,模型预测的排序list中两两pair对相对排序顺序与真实groudtruth中两个pair相对排序顺序一致的pair对越多,则RC计算的分值越大。

6 参考

Learning to Rank wikipedia
Learning to Rank for Information Retrieval
Learning to Rank: From Pairwise Approach to Listwise Approach
earning to rank using gradient descent
Listwise approach to learning to rank: theory and algorithm
Yahoo! Learning to Rank Challenge Overview
Metric Learning to Rank

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

46-文本编辑器及文本处理

46-文本编辑器及文本处理常见文本编辑器linux文本编辑器介绍Linux文本编辑器-emacsLinux文本编辑器-nanoLinux文本编辑器- geditLinux文本编辑器- keditLinux文本编辑器- viLinux文本编辑器- vim使用vim编辑器vim基础操作-打开文件vim基础操作-移动光标vim基础操作–数据操作vi…

解决——》CommunicationsException:Communications link failure

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 解决——》CommunicationsException:Communications link failure1、操作2、现象3、原因4、解决1&…

大一新生HTML期末作业 学生个人网页设计作业 HTML5响应式个人简历网站模板 web前端网页制作课作业

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【linux】登录审计

linux登录审计 桥接模式配置互联 VMware的“虚拟网络编辑器” 输入’nm-connection-editor’&#xff0c;配置以太网 为以太网连接配置网卡 配置ipv4 互ping ssh远程登录 ssh -l 用户名 ip地址exit退出ssh远程 [alexalexw-device ~]$ ssh -l alex 1.1.1.2 The au…

数据挖掘——RFM客户价值模型及航空公司客户分析实例

引言 背景信息时代的来临使得企业营销焦点从产品转向了客户&#xff0c;客户的管理关系成为企业的核心问题。客户的关系管理问题是客户分群。通过客户分群&#xff0c;进而区分无价值客户和高价值客户。高价值客户代表他们的消费会给企业带来利益最大。企业需要针对不同类别的…

易基因|病毒抗性:全基因组DNA甲基化揭示草鱼年龄相关病毒易感性的表观遗传机制

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2022年06月02日&#xff0c;淡水生态与生物技术国家重点实验室&#xff08;中国科学院水生生物研究所&#xff09;何利波副研究员为第一作者和通讯作者&#xff0c;汪亚平研究员为共同通…

智慧市政解决方案-最新全套文件

智慧市政解决方案-最新全套文件一、建设背景二、思路架构三、建设方案四、获取 - 智慧市政全套最新解决方案合集一、建设背景 随着中国经济的快速发展&#xff0c;城市化步伐不断加快&#xff0c;为了适应城市发展与管理的需求&#xff0c;解决城市市政管理过程中的问题&#…

PDPS软件:机器人控制输送带运行虚拟仿真操作方法

目录 概述 旋转台设备运动机构介绍 旋转台设备模型导入与安装 旋转台设备操作创建 机器人控制旋转台设备离线程序命令添加 仿真运行 概述 旋转台也是工业机器人生产线中常用的外围设备&#xff0c;工件安装在旋转台的夹紧机构上&#xff0c;旋转台通过旋转实现工作位置的…

【Linux】进程地址空间

文章目录一、前言二、什么是进程地址空间三、进程地址空间如何进行管理四、为什么会存在进程地址空间五、进程地址空间区域的严格划分一、前言 学习Linux系统编程一共要翻越三座大山 – 进程地址空间、文件系统以及多线程&#xff0c;这三部分内容很难但是非常重要&#xff1b…

[附源码]Python计算机毕业设计java高校社团管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

GitCode / 1024程序员开源挑战赛(10.23-11.14)

目录 csdn也有云计算了 这个挑战赛&#xff0c;主要是向大家宣布了&#xff0c;咱们csdn也有自己的云计算了&#xff01; 比较有特色的 云容器 云IDE 猿如意 也是有个有特色的工具&#xff0c;可以试用下。​编辑 问题 csdn也有云计算了 这个挑战赛&#xff0c;主…

0097 弗洛伊德算法,马踏棋盘算法

import java.util.Arrays; /* * 弗洛伊德算法 * 1.和迪杰斯特拉算法一样&#xff0c;弗洛伊德算法也是一种用于寻找给定的加权图中顶点间最短路径的算法 * 2.迪杰斯特拉算法用于计算图中某一顶点到其他顶点的最短路径 * 弗洛伊德算法计算图中各个顶点之间的最短路径 * …

IT就业专业为什么要选择大数据技术应用?

IT就业专业为什么要选择大数据技术应用&#xff1f;目前大数据领域从业人员的薪资高涨幅空间大&#xff0c;大数据人才供不应求。各大数据开发方向&#xff0c;数据挖掘、数据分析和机器学习方向&#xff0c;大数据运维和云计算方向。 一、大数据技术应用发展前景好&#xff1…

物联网协议MQTT

物联网协议MQTT 1.MQTT简介 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上&#xff0c;是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议&#xff0c;为此&#xff0c;它需要一…

必考设计模式

文章目录一、单例模式&#xff08;创建型&#xff09;1、饿汉式2、懒汉式3、双重检验锁&#xff08;DCL&#xff09;4、sync.once实现单例二、工厂模式&#xff08;创建型&#xff09;1、简单工厂模式2、工厂方法模式3、抽象工厂模式&#xff08;暂时不写&#xff09;三、装饰模…

高通SDX12:SFE(shortcut-fe)软加速驱动效果调测

背景 USB转PHY RTL8153不支持高通IPA硬加速,所以采用SFE软加速 调试设备为基于Cat.6通信模组的整机 SFE软加速前:UXM环境实际测速100Mbps,设备内部sirq 87% SFE软加速驱动调测 SFE驱动代码路径:sdx12-ap\shortcut-fe\shortcut-fe SFE驱动编译文件路径:sdx12-ap\poky\m…

阿里云ACP考试内容是什么?考试时间是什么时候?

对于现在的人来说&#xff0c;网络就是帮助自己了解世界的好帮手、就是让自己生活得更方便的好工具&#xff0c;这样一来&#xff0c;市场就需要大量的人才来满足需求&#xff0c;相对应的岗位也逐渐增多。于是就有大批的大学生在填报志愿的时候&#xff0c;选择IT专业&#xf…

使用Docker发布部署C# .NET core WebApi到服务器

1、启用Docker支持 如果我们使用vs2022新建WebApi项目的时候需要勾选 启用Docker &#xff1a; 如果没有勾选或者使用VS019创建的项目&#xff0c;可以在项目右键 添加 docker支持 2、发布运用程序 接下来开始发布程序&#xff0c;右键点击项目 发布 提示在哪里发布内容&am…

什么?console.log打印出的数据不对?

背景 都怪我年轻不懂事&#xff0c;调试代码只会用console.log。那么&#xff0c;就在今天&#xff0c;出事儿了&#xff01; 看图说话。上面的111和222后面跟的数据竟然不一致&#xff1f; 在我的认知中&#xff0c;JSON里面的parse和stringify方法只是类型的转换啊&#xff…

深浅拷贝小整理(对象赋值请注意)

深浅拷贝小整理1. 一些基础知识 js数据类型分为基本数据类型>Number、String、Boolean、Null、Undefined和引用(对象)数据类型>Object包括有Function、Array、Date&#xff1b;基本数据类型存放在栈中&#xff0c;访问是按值访问&#xff1b;引用类型指的是对象&#xf…