【大模型周边】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 训练阶段

给定一组查询 。每个查询 关联一个文档列表 ,其中 表示第 i 个查询的第 j 个文档, 表示查询 的文档列表大小。

每个文档列表 都对应一个评价分数列表 ,其中 表示文档 相对于查询 的相关性评分。这个评分 可以是由人工显式或隐式给出的,例如,当文档 被搜索引擎检索和返回给查询 时,其点击率可以用作相关性评分的依据。假设点击率越高,文档 与查询 的相关性越强。

从每个查询-文档对中提取一个特征向量 (其中 )。对文档列表 中的所有文档提取特征后得到特征列表 。对应的分数列表为 ,它们共同构成一个"实例"。训练集可以表示为:

接着,训练一个排序函数 f,它对每个特征向量 (对应文档 )输出一个分数 。对于特征列表 ,我们可以得到一个分数列表 。学习目标被形式化为最小化训练数据的总损失: ,其中 L 是一个列表式损失函数。

2.1.2 排序阶段

在排序时,给定一个新查询和其关联的文档列表,从中提取特征列表 。利用训练好的排序函数为文档分配分数。最终按照分数从高到低对文档排序。上述学习问题即为列表式排序学习方法。

2.1.3 与pairwise方法的对比

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

2.2 Listwise LTR算法思想

以 ListNet(2007)为例:

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

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

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

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

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

Top-One 概率重写为:

对于查询 ,排名函数​ 生成的得分列表为:

此时,文档的 Top-One 概率计算为:

以交叉熵作为度量指标,对查询的损失函数定义为:

通过推导

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

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

    其中, 是第 i 个查询的真实排序。

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

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

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

相关推荐
一只小bit18 小时前
深入刨析数据结构之排序(下)
c语言·数据结构·算法·排序算法
sin22011 天前
八大排序的相关内容
数据结构·算法·排序算法
sophiaRachel1 天前
1.1.3 插入排序
数据结构·算法·排序算法
haaaaaaarry1 天前
快速排序排序方法演示及算法分析(附代码和实例)
算法·排序算法
2401_858286112 天前
122.【C语言】数据结构之快速排序(Hoare排序的优化)
c语言·开发语言·数据结构·算法·排序算法
奔跑de自由2 天前
C语言指针-冒泡排序之旅
c语言·算法·排序算法
R_.L2 天前
七大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序
数据结构·算法·排序算法
码农老起2 天前
深入解析希尔排序:原理、实现与优化
数据结构·算法·排序算法
码农老起3 天前
从零开始学桶排序:Java 示例与优化建议
java·算法·排序算法
机器视觉李小白4 天前
深入理解C#的冒泡排序、快速排序、插入排序、选择排序和归并排序
算法·c#·排序算法