排序之损失函数List-wise loss(系列3)
Posted AI蜗牛之家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序之损失函数List-wise loss(系列3)相关的知识,希望对你有一定的参考价值。
排序系列篇:
最早的关于list-wise的文章发表在Learning to Rank: From Pairwise Approach to Listwise Approach中,后面陆陆续续出了各种变形,但是也是万变不离其宗,本文梳理重在原理。
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=1∑mL(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=1∏n∑k=j排序之损失函数(系列2)