【大模型周边】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

相关推荐
lisw0518 小时前
排序算法可视化工具——基于React的交互式应用
算法·react.js·排序算法
刚入门的大一新生19 小时前
排序算法3-交换排序
算法·排序算法
basketball6161 天前
C++ STL常用算法之常用排序算法
c++·算法·排序算法
程序员爱钓鱼2 天前
Go 语言邮件发送完全指南:轻松实现邮件通知功能
后端·go·排序算法
郭源潮12 天前
《八大排序算法》
数据结构·算法·排序算法·c
UP_Continue3 天前
排序--归并排序--非递归
数据结构·算法·排序算法
刚入门的大一新生3 天前
排序算法2-选择排序
算法·排序算法
日暮南城故里3 天前
排序算法------练习1
java·算法·排序算法
刚入门的大一新生3 天前
排序算法1--插入排序
算法·排序算法
LUCIAZZZ3 天前
基础排序算法
java·数据结构·算法·排序算法·力扣