Learning to rank: from pairwise approach to listwise approach

Cao Z., Qin T., Liu T., Tsai M. and Li H. Learning to rank: from pairwise approach to listwise approach. ICML, 2007.

Xia F., Liu T., Wang J., Zhang W. and Li H. Listwise approach to learning to rank: theory and algorithm. ICML, 2008.

Listwise Ranking.

ListNet

  • 以文档检索为例, 假设我们有 query q 和一堆候选的文档 D={d1,d2,,dn}, 我们希望训练一个 score function f(), 得到 scores:

    {s1=f(d1),,sn=f(dn)}.

  • 根据这些 scores, 我们可以对检索结果进行排序,

    [r1,r2,,rn],

    其中 srk 表示所有文档中排第 k 个的文档的 score. 于是我们可以推荐一些靠前的 (因为我们认为它们是更靠谱的).

  • 本文的目的是设计一个 listwise 的损失, 促使排序结果

    [r1,r2,,rn][y1,y2,,yn],

    这里 [y1,y2,,yn] 为真实的偏好排序.

Permutation Probability

  • 假设 π=[π1,π2,,πn][n]=[1,2,,n] 的一个 permutation, 本文希望根据 scores 在空间 Ωn:={π} 上建立一个分布.

  • 概率是如此定义的:

    (1)Ps(π)=j=1nϕ(sπj)k=jnϕ(sπk),πΩn.

    这里 ϕ 常常取 exp().

  • 一个比较关键的东西是证明它满足概率的一些性质, 非负性只需取合适 ϕ() 即可. 下面证明

    (2)πΩnPs(π)=1.

  • 让我们定义位置给定候选集合 C[n], 位置 i 排在首位的概率为:

    P(i is top-1|iC)={ϕ(si)jCϕ(sj)iC0iC.

  • 设想给定一个候选集合 {n}:={1,2,,n} 和其上的 scores {s1,s2,,sn}, 我们按照如下方式不放回采样:

    1. 根据概率 P(i is top-1|{n}) 采样 π1;
    2. 根据概率 P(i is top-1|{n}{π1}) 采样 π2;
    3. 根据概率 P(i is top-1|{n}{π1,π2}) 采样 π3 ...
      n. 得到 [π1,π2,,πn].
  • 显然,

    Ps(π)=P(π1is top-1|{n})P(π1is top-1|{n}{π1})=j=1nϕ(sπj)k=jnϕ(sπk).

  • 于是我们成功构造了一个采样过程, 条件 (2) 是成立的.

  • (1) 还有一些很不错的性质, 既然这个分布是依照 scores 设计的, 我们很自然地希望 score 越大的位置靠前的考虑越大. 实际上, 可以证明, 如果 s1s2sn, 我们有

    (3)Ps([n])Ps(π)P([n,n1,,1]),πΩ.

  • 此外, 对于如下的序:

    (4)π=[,πi,,πj],

    如果交换 πi,πj 得到 πsπi>sπj, 则

    Ps(π)>Ps(π).

  • 注: 上面的只要需要证明:

    π=[πi,,πj]

    这一特殊情形即可.

Top-k Probability

  • 有些时候, 我们对于 ranking 的要求不是这么严格, 即通常我可以只要求 Top-k 的 ranking 和 target 尽量一致即可.

  • 定义:

    Gk(y1,y2,,yk)={πΩn|πj=yj,j=1,2,k}.

  • 于是, 对应的 Top-k 的概率为:

    (5)Ps(Gk(y1,y2,,yk))=πG(y1,y2,,yk)Ps(π).

  • 然而, 这种计算方式需要计算得到 n(n1)(nk+1)=n!(nk)!Ps(π) 然后求和, 过于复杂了.

  • 幸好 (5) 有一种极为方便的计算方式, 它等价于:

    Ps(Gk(y1,y2,,yk))=t=1kϕ(syt)j=tnϕ(syt).

  • 它依旧可以通过采样的方式理解, 只是这一次我们进行到第 k 次采样便停止.

ListMLE

  • 得到上面的概率估计后, ListNet 采用的是交叉熵进行优化:

    LListNet(sy,s^)=gGkPy(g)log(Ps^(g)),

    其中

    Gk={Gk(j1,,jk)|j1,j2,,jk,jujv,uv}.

  • 而 ListMLE 则是采用的似然损失, 给定目标 ranking y:

    LListMLE(y,s^)=log(Ps^(y)),

    当然了, 我们也可以只匹配 top-k:

    LListMLE(y,s^)=log(Ps^(Gk([y1,,yk]))).

  • 在文献 [2] 中, 作者证明了, ListMLE 相比 ListNet 有更好的 soundness, 即它不会对正确的排名施加过大的惩罚, 而 ListNet 则无法避免这一点.

posted @   馒头and花卷  阅读(185)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2022-11-19 Deep Variational Information Bottleneck
2020-11-19 KMM
2020-11-19 MMD
点击右上角即可分享
微信分享提示