本文目录导读:

我们来详细、系统地讲解一下推荐系统和信息检索领域中的 重排序模型。
这是一个非常核心且实用的概念,尤其是当你想构建一个高质量的推荐或搜索系统时。
核心思想:为什么需要重排序?
想象一下你在淘宝搜索“男士白色T恤”:
- 第一轮(召回):系统从数亿商品中,快速筛选出几千个“候选集”,这一步追求的是速度和覆盖率,模型通常比较简单(如基于向量相似度、协同过滤)。
- 第二轮(粗排):对几千个候选做一个轻量级的计算,过滤掉明显不相关的,把候选集缩小到几百个,这一步平衡效率和相关性。
- 第三轮(精排):用非常复杂、精准的模型(如DeepFM, DCN V2等)对这几百个商品进行精确打分,这一步追求准确性,目标是预测用户点击/购买的概率。
重排序在哪里?
重排序通常位于精排之后,也就是在已经得到了一个初步排序列表后,它的输入是精排模型算出的几十个(比如50个)物品及其分数,输出是一个经过重新调整后的、最终呈现给用户的列表。
为什么要多此一举? 因为精排模型存在几个关键缺陷:
- “点”预测而非“面”预测:精排模型通常是“pointwise”的,它独立地为每个物品打分,忽略了物品之间的相关性和竞争关系,精排前10名全是白色T恤,用户虽然喜欢白色,但也不想看到清一色的商品,重排序需要考虑这个列表的多样性。
- 无法建模上下文:精排模型难以捕捉用户在当前浏览会话中的即时行为,比如用户刚刚连续点击了3个圆领T恤,重排序就可以把V领T恤的排名调高,提供新鲜感。
- 无法满足业务约束:精排只优化一个目标(如CTR),而业务可能有多个约束:
- 必须插入N个广告(要保证广告收入)。
- 不能连续展示同一个品牌。
- 需要保证一定的内容多样性。
- 新发布的优质内容需要得到流量扶持。
- 全局信息缺失:精排无法看到整个列表的全局最优,两个物品单独看都不错,但放一起就同质化严重,重排序可以做全局优化。
重排序模型的目标
重排序的首要目标不是预测“用户是否会点击”,而是生成一个用户最满意的列表,这个“满意”通常体现在:
- 整体相关性:列表整体与用户意图高度相关。
- 多样性:品牌、品类、风格、价格带等多样化。
- 新鲜感:避免用户审美疲劳。
- 公平性:给小众、优质内容曝光机会。
- 业务目标:最大化GMV(商品交易总额)、时长、广告收入等。
主流的重排序算法与模型
重排序问题本质上是一个 “序列决策” 或 “集合选择” 问题,主流的解决方案可以分为几类:
基于规则和启发式的方法
核心思想:使用人工设计的规则来调整排序,简单、高效、可解释性强。
- MMR (Maximum Marginal Relevance,最大边际相关性):这是经典算法,它在“相关性”和“新颖性”之间做权衡,每次选择下一个物品时,选择那个既与用户查询相关,又与已选物品不太相同的一个。
- DPP (Determinantal Point Process,行列式点过程):这是目前工业界很流行的一种理论基础扎实的算法,它用一个行列式来度量一个物品集合的“质量”和“多样性”,好的集合(相关性高+多样性好)的行列式值大,通过最大化这个行列式值,可以一次性选出一个最优子集,而不是一步步选,DPP有贪心算法来高效求解。
- 混合策略:简单地对精排分数乘以一个多样性惩罚项,或者对同一品类的商品进行打散。
基于学习的模型(Learning to Rank for Re-ranking)—— 最主流
这类方法将重排序视为一个机器学习问题,训练一个模型来直接优化最终的列表质量。
-
特征工程:除了精排模型已有的用户、物品特征外,还要构建列表级特征。
- 上下文特征:当前物品在精排列表中的位置、与之前N个已选物品的相似度(如品牌、品类、价格差)、用户在当前session的活跃度等。
- 交互特征:待排序物品与其他候选物品的关系。
-
模型架构:
-
Listwise 模型:这是最直接的方法,模型输入是整个候选列表,输出是每个物品被选中位置的“打分”或对整个列表的评估。
- LambdaMART / LambdaRank:虽然不是专门为重排序设计,但它们本身就是优化排序列表指标的Listwise模型,可以很好地应用在重排序阶段,直接优化NDCG(归一化折损累积增益)等列表级指标。
-
基于RNN/LSTM的序列模型:将用户的历史行为序列和当前候选列表作为输入,用循环神经网络建模下一个时刻应该推荐哪一个物品,可以看作是一个“序列生成”过程。
- 例子:京东的 DeepList,它把过去点击过的物品序列和待排序的候选序列融合,用注意力机制决定下一个展示谁。
-
基于Transformer/Attention的模型(SOTA,目前最先进):得益于Transformer强大的“全局交互”能力,它能完美建模候选列表中各个物品之间的相互关系。
- SetRank:经典中的经典,将候选物品列表看作一个无序集合,用Transformer的Encoder部分来建模物品之间的相互影响,最终输出每个物品的“重排分数”,它可以轻松处理不同数量的候选。
- PRM (Personalized Re-ranking Model):阿里巴巴提出的,它结合了用户个人特征和物品间的相互关系,输入是用户embedding和候选物品序列的embedding,经过Self-Attention层和Personalized Attention层后,输出每个物品的新排序分数。
- DLCM (Deep Listwise Context Model):另一个结合了RNN和Attention的模型,核心思想是“对当前的排序结果做一个全局的视角”。
-
强化学习 (Reinforcement Learning,RL):将重排序过程视为一个MDP(马尔可夫决策过程),智能体(Agent)每一步选择一个物品展示给用户,环境(Environment)反馈“用户是否点击/购买/停留时长”作为奖励,通过RL,模型可以学习一个长期最优策略,而不只是当下一步的点击率。
- 例子:Google的 Deep Q-Network 应用到搜索结果重排序中。
-
典型的重排序流程框架
[精排模型输出] (Top N, e.g., 50 items, with score)
|
v
[候选列表构建] (可能是精排Top N + 一些规则保底项)
|
v
[特征提取] (计算列表级特征、物品间关系特征等)
|
v
[重排序模型推理] (PRM, SetRank, DPP等)
|
v
[得分融合] (将重排模型的分数与精排分数进行加权融合,或者直接使用重排分数)
|
v
[业务规则应用] (打散、去重、过滤不符合法规的内容)
|
v
[最终展示列表] (Top K, e.g., 10 items)
实际应用挑战和技巧
- 计算延迟:重排序模型必须在几十毫秒内完成推理,所以模型不能太复杂,TRANSFORMER模型通常需要模型量化、剪枝、或使用更高效的Attention变体(如Flash Attention),候选数量通常限制在50-200个。
- 线上和线下效果不一致:线上用户行为反馈(点击、购买、时长)可能与离线评估指标相关性不高,需要持续进行A/B测试。
- 冷启动:新用户或新物品没有足够的行为数据,重排序模型很难学到好的交互关系,可以用基于规则的方法或纯内容特征来兜底。
- 多目标优化:业务通常希望同时优化点击率、转化率、收藏率、加购率等多个目标,可以将多个精排模型的分数作为特征输入到重排序模型中,或者直接使用多任务学习架构的模型(如MMoE)进行重排序。
| 方面 | 精排模型 | 重排序模型 |
|---|---|---|
| 输入 | 用户、单个物品特征 | 精排后的Top N候选列表 + 列表级特征 |
| 视角 | Pointwise (点视角) | Listwise / Pairwise (整表/对视角) |
| 目标 | 最大化单个物品的CTR/CVR | 最大化整个列表的用户满意度(多样性、相关性、长期收益) |
| 方法论 | 深度学习排序模型 (DNN, DeepFM, DCN等等) | MMR/DPP, LambdaMART, SetRNN, Transformer, RL |
| 主要挑战 | 特征工程,点击偏差 | 计算延迟,列表级稀疏反馈,全局最优解 |
一句话总结: 如果说精排模型是“慧眼识珠”,那么重排序模型就是“运筹帷幄”,它不再孤立地看每一颗“珍珠”,而是思考如何把它们串成一条最吸引人的“项链”,同时还要确保项链的样式符合用户的期待和商业的要求。
希望这个讲解对你有帮助,如果你想了解某个特定模型的细节(比如PRM的论文或DPP的数学推导),可以继续提问。