排序之损失函数List-wise loss(系列3)

Posted AI蜗牛之家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序之损失函数List-wise loss(系列3)相关的知识,希望对你有一定的参考价值。

排序系列篇:

最早的关于list-wise的文章发表在Learning to Rank: From Pairwise Approach to Listwise Approach中,后面陆陆续续出了各种变形,但是也是万变不离其宗,本文梳理重在原理。

论文链接listNet,参考的实现代码:实现代码

1. 为什么要List-wise loss

pairwise优缺点
优点:

  • 一些已经被验证的较好的分类模型可以直接拿来用。
  • 在一些特定场景下,其pairwise features 很容易就可以获得。

缺点:

  • 其学习的目标是最小化文档对的分类错误,而不是最小化文档排序的错误。学习目标和实际目标(MAE,NDCG)有所违背。
  • 训练过程可能是极其耗时的,因为生成的文档对样本数量可能会非常多。

那么本篇论文是如何解决这些问题呢?
在pointwise 中,我们将每一个<query, document> 作为一个训练样本来训练一个分类模型。这种方法没有考虑文档之间的顺序关系;而在pariwise 方法中考虑了同一个query 下的任意两个文档的相关性,但同样有上面已经讲过的缺点;在listwise 中,我们将一个<query,documents> 作为一个样本来训练,其中documents 为与这个query 相关的文件列表
论文中还提出了概率分布的方法来计算listwise 的损失函数。并提出了permutation probability 和top one probability 两种方法。下面会详述这两种方法。

2. 方法介绍

2.1. loss输入格式

假设我们有m 个 querys:
Q = ( q ( 1 ) , q ( 2 ) , q ( 3 ) , . . . , q ( m ) ) Q=(q^(1), q^(2), q^(3),...,q^(m)) Q=(q(1),q(2),q(3),...,q(m))
每个query 下面有n 个可能与之相关的文档(对于不同的query ,其n 可能不同)
d ( i ) = ( d 1 ( i ) , d 2 ( i ) , . . . , d n ( i ) ) d^(i) = (d^(i)_1, d^(i)_2, ..., d^(i)_n) d(i)=(d1(i),d2(i),...,dn(i))
对于每个query 下的所有文档,我们可以根据具体的应用场景得到每个文档与query 的真实相关度得分。
y ( i ) = ( y 1 ( i ) , y 2 ( i ) , . . . . , y n ( i ) ) y^(i) = (y^(i)_1, y^(i)_2, ...., y^(i)_n) y(i)=(y1(i),y2(i),....,yn(i))
我们可以从每一个文档对 ( q ( i ) , d j ( i ) ) (q^(i), d^(i)_j) (q(i),dj(i))得到该文档的打分, q ( i ) q^(i) q(i)与文档集合 d ( i ) d^(i) d(i)中的每个文档打分,可以得到该query 下的所有文档的特征向量:
x ( i ) = ( x 1 ( i ) , x 2 ( i ) , . . . , x n ( i ) ) x^(i) = (x^(i)_1, x^(i)_2, ..., x^(i)_n) x(i)=(x1(i),x2(i),...,xn(i))
并且在已知每个文档真实相关度得分的条件下:
y ( i ) = ( y 1 ( i ) , y 2 ( i ) , . . . , y n ( i ) ) y^(i) = (y^(i)_1, y^(i)_2, ..., y^(i)_n) y(i)=(y1(i),y2(i),...,yn(i))
我们可以构建训练样本:
T = ( x ( i ) , y ( i ) ) T=\\beginBmatrix (x^(i), y^(i)) \\endBmatrix T=(x(i),y(i))

要特别注意的是:这里面一个训练样本是 ( x ( i ) , y ( i ) ) (x^(i), y^(i)) (x(i),y(i)),而这里的 x ( i ) x^(i) x(i)是一个与query 相关的文档列表,这也是区别于pointwise 和pairwise 的一个重要特征。

关于 y ( i ) y^(i) y(i)paper里面的相关描述:

2.2. loss计算

那么有训练样本了,如何计算loss 呢?
假设我们已经有了排序函数 f ff,我们可以计算特征向量 x ( i ) x^(i) x(i)的得分情况:
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))) z(i)=(f(x1(i)),f(x2(i)),...,f(xn(i)))
显然我们学习的目标就是,最小化真实得分和预测得分的误差:
∑ i = 1 m L ( y ( i ) , z ( i ) ) \\sum_i=1^m L(y^(i), z^(i)) i=1mL(y(i),z(i))
L 为 listwise 的损失函数。

2.2.1. 概率模型

假设对于某一个query 而言,与之可能相关的文档有 1 , 2 , 3 , . . . , n \\1, 2, 3, ..., n\\ 1,2,3,...,n,假设某一种排序的结果为 π \\pi π
π = < π ( 1 ) , π ( 2 ) , . . , π ( n ) > \\pi=<\\pi(1), \\pi(2), .., \\pi(n)> π=<π(1),π(2),..,π(n)>

对于n 个文档,有n! 种排列情况。这所有的排序情况记为 Ω n \\Omega_n Ωn。假设已有排序函数,那么对于每个文档,我们都可以计算出相关性得分 s = ( s 1 , s 2 , . . . , s n ) s = (s_1, s_2, ..., s_n) s=(s1,s2,...,sn)。 显然对于每一种排序情况,都是有可能发生的,但是每一种排列都有其最大似然值。

我们可以这样定义某一种排列 π \\pi π的概率(最大似然值):
P s ( π ) = ∏ j = 1 n ϕ ( s π ( j ) ) ∑ k = j n ϕ ( s π ( k ) ) P_s(\\pi) = \\prod_j=1^n \\frac\\phi (s_\\pi(j))\\sum_k=j^n\\phi(s_\\pi(k)) Ps(π)=j=1nk=j排序之损失函数(系列2)

排序之损失函数(系列2)

排序之损失函数(系列2)

损失函数解读 之 Focal Loss

损失函数解读 之 Focal Loss

损失函数解读 之 Focal Loss