【大模型周边】Learn to Rank排序算法(Listwise Learning-to-Rank)

1. 大模型应用背景下的LTR算法介绍   

        大模型在信息检索、推荐系统和自然语言处理等领域展现出很强能力。但是大模型在to C或者to B的场景中,其有效性不仅依赖于强大的生成能力,还需要精准的排序机制,来优化内容的呈现顺序并提升用户体验。在这个背景下,Learn to Rank(LTR)排序算法【1,2,3】作为连接大模型和具体应用场景的重要桥梁,通过学习如何根据特定任务或用户需求对结果进行精准排序,依然相当关键。

        Learn to Rank 有三种主流的方法,Pointwise、Pairwise 和 Listwise。它们的核心区别在于处理训练数据的粒度和优化目标。

        Pointwise 方法是将排序问题转化为回归或分类问题,针对每个单独的文档/结果预测一个分数或类别。其训练目标是最小化单个文档与目标值(如点击率或评分)之间的误差。Pairwise方法是比较文档对的相关性,训练模型预测文档 A 是否比文档 B 更相关,训练目标是最小化排序对的误分类率或错序率。Listwise方法直接以文档列表为输入,并以全局排序指标(如 NDCG、MRR)为优化目标。训练目标是优化整组文档的排序性能。

        Pointwise方法很常见,比如xgboost、lr这类机器学习算法。 Pairwise方法,比如BPR,在《ToB的大模型系统非常有必要引入搜索推荐算法能力(回顾BPR、W&D、DeepFM、ALS等经典算法)》中已经做过原理介绍。  因此,本文重点关注Listwise的LTR算法的介绍。在大模型驱动的应用场景中,任务通常包含复杂的多文档排序问题(如检索生成式问答的候选答案、推荐系统的结果优化)。Listwise Ranking 提供了以下关键能力:

  1. 全局优化:直接对排序指标进行优化,提升大模型生成结果的用户满意度。
  2. 上下文感知:通过考虑完整文档列表,帮助大模型更好地理解文档间的语义关系。
  3. 高效学习:结合大模型的特征表示能力,能高效处理复杂、高维度的排序任务。

        通过结合大模型强大的表示能力和 Listwise Ranking 全局优化特性,LTR 算法能为检索和生成任务提供更精准的排序支持。

2. Listwise Learning to Rank

        我们以文档检索为例,对列表式方法进行介绍,使用上标表示查询的索引,使用下标表示特定查询对应的文档索引【1】。

2.1 一般化算法原理描述

2.1.1 训练阶段

        给定一组查询 Q = \{q^{(1)}, q^{(2)}, \dots, q^{(m)}\}。每个查询 q^{(i)} 关联一个文档列表 d^{(i)} = \{d^{(i)}_1, d^{(i)}_2, \dots, d^{(i)}_{n^{(i)}}\},其中 d^{(i)}_j 表示第 i 个查询的第 j 个文档,n^{(i)} 表示查询 q^{(i)} 的文档列表大小。

        每个文档列表 d^{(i)} 都对应一个评价分数列表 y^{(i)} = \{y^{(i)}_1, y^{(i)}_2, \dots, y^{(i)}_{n^{(i)}}\},其中 y^{(i)}_j表示文档 d^{(i)}_j 相对于查询 q^{(i)} 的相关性评分。这个评分 y^{(i)}_j 可以是由人工显式或隐式给出的,例如,当文档 d^{(i)}_j被搜索引擎检索和返回给查询 q^{(i)} 时,其点击率可以用作相关性评分的依据。假设点击率越高,文档 d^{(i)}_j与查询 q^{(i)} 的相关性越强。

        从每个查询-文档对(q^{(i)}, d^{(i)}_j)中提取一个特征向量 x^{(i)}_j = \Psi(q^{(i)}, d^{(i)}_j)(其中 i = 1, 2, \dots, m; j = 1, 2, \dots, n^{(i)})。对文档列表 d^{(i)} 中的所有文档提取特征后得到特征列表 x^{(i)} = \{x^{(i)}_1, x^{(i)}_2, \dots, x^{(i)}_{n^{(i)}}\}。对应的分数列表为 y^{(i)} = \{y^{(i)}_1, y^{(i)}_2, \dots, y^{(i)}_{n^{(i)}}\},它们共同构成一个“实例”。训练集可以表示为:  T = \{(x^{(i)}, y^{(i)})\}_{i=1}^m

        接着,训练一个排序函数 f,它对每个特征向量 x^{(i)}_j(对应文档 d^{(i)}_j)输出一个分数 f(x^{(i)}_j)。对于特征列表 x^{(i)},我们可以得到一个分数列表 z^{(i)} = \{f(x^{(i)}_1), f(x^{(i)}_2), \dots, f(x^{(i)}_{n^{(i)}})\}。学习目标被形式化为最小化训练数据的总损失:  \sum_{i=1}^m L(y^{(i)}, z^{(i)}),其中 L 是一个列表式损失函数。

2.1.2 排序阶段

        在排序时,给定一个新查询q^{(i')}和其关联的文档列表d^{(i')},从中提取特征列表 x^{(i')}。利用训练好的排序函数为文档分配分数z^{(i')} = \{f(x^{(i')}_1), \dots, f(x^{(i')}_{n^{(i')}})\}。最终按照分数从高到低对文档d^{(i')}排序。上述学习问题即为列表式排序学习方法。

2.1.3 与pairwise方法的对比

        在pairwise方法中,训练数据 T 被转换为新数据集 T'。在 T' 中,特征向量对x^{(i)}_jx^{(i)}_k​ 构成一个实例,其中j \neq k。如果 y^{(i)}_j > y^{(i)}_k​,则为该对赋值 +1,否则赋值 −1。此时,训练数据 T′变成一个二分类数据集,可以使用分类模型进行训练。当然也可以采用BPR等类似算法,引入矩阵分解的思想学习出用户和商品的表征信息。

2.2 Listwise LTR算法思想

以 ListNet(2007)为例:

        ListNet采用基于Top-One 概率优化列表损失函数,使用神经网络作为模型,并利用梯度下降作为优化算法。        

        以文档检索为例进行说明,用神经网络模型的排名函数f_\omega​ 表示,给定特征向量 x_j^{(i)}f_\omega(x_j^{(i)}) 会为其分配一个得分。将 \phi 定义为指数函数。首先我们需要理解一下排列概率。

        对于一个长度为 n 的列表,其特定排列\pi 的概率可表示为:

P_r(\pi) = \prod_{i=1}^n \frac{\phi(s_i)}{\sum_{k=i}^n \phi(s_k)}

        例如,给定一个包含 3 个项目的列表,返回排列 s_1, s_2, s_3 的概率为:

P_r(\pi = \{s_1, s_2, s_3\}) = \frac{\phi(s_1)}{\phi(s_1) + \phi(s_2) + \phi(s_3)} \cdot \frac{\phi(s_2)}{\phi(s_2) + \phi(s_3)} \cdot \frac{\phi(s_3)}{\phi(s_3)}

        显然这样做的话,排列组合需要执行n的阶层,采用Plackett-Luce模型,过于耗时。所以listnet采用只计算top-one来简化,也就是将各个项目作为排列第一位产生的概率值作为ground truth,这样就可以获得一个概率分布,我们的目标就是去学习出这个分布。

        Top-One 概率重写为:

P_s(j) = \frac{\phi(s_j)}{\sum_{k=1}^n \phi(s_k)} = \frac{\exp(s_j)}{\sum_{k=1}^n \exp(s_k)}

        对于查询 q^{(i)},排名函数f_\omega​ 生成的得分列表为:

z^{(i)}(f_\omega) = [f_\omega(x_1^{(i)}), f_\omega(x_2^{(i)}), \dots, f_\omega(x_{n^{(i)}}^{(i)})]

        此时,文档d_j^{(i)}的 Top-One 概率计算为:

P_{z^{(i)}(f_\omega)}(x_j^{(i)}) = \frac{\exp(f_\omega(x_j^{(i)}))}{\sum_{k=1}^{n^{(i)}} \exp(f_\omega(x_k^{(i)}))}

        以交叉熵作为度量指标,对查询q^{(i)}的损失函数定义为:

L(y^{(i)}, z^{(i)}(f_\omega)) = -\sum_{j=1}^{n^{(i)}} P_{y^{(i)}}(x_j^{(i)}) \log(P_{z^{(i)}(f_\omega)}(x_j^{(i)}))

        通过推导

        此外,ListMLE(Listwise Maximum Likelihood Estimation)也是一种经典的列表式学习排序算法。前序思路采用的依然是排列概率表示,但与ListNet不同的是:

  • 最大化排列概率的似然函数: 排列概率 P(\pi)可以表示预测模型得分序列与实际排序之间的关系。目标是最大化真实排序对应的排列概率,转化为对数似然形式:

    \mathcal{L}(\omega) = \sum_{i=1}^{m} \log P(\pi^{(i)} | \omega)

    其中,\pi^{(i)} 是第 i 个查询的真实排序。

  • 优化目标: 损失函数定义为负对数似然:

    L(\omega) = -\sum_{i=1}^{m} \log P(\pi^{(i)} | \omega)

    使用梯度下降法更新参数\omega,训练模型。

3. 参考材料

【1】Learning to Rank: From Pairwise Approach to Listwise Approach

【2】Learning To Rank

【3】Learning to Rank Algorithms

【4】Introduction to Learning to Rank

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源泉的小广场

感谢大佬的支持和鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值