0. 写在前面

这篇论文讨论的是推荐系统最末端的 reranking 重排

现代推荐系统简化成三段:

召回 matching
  -> 粗/精排 ranking
  -> 重排 reranking

那么重排阶段面对的问题不是“单个 item 该不该推荐”,而是:给定一组候选 item,如何生成一个整体最优的展示列表?

这和 ranking 很不一样。Ranking 通常对 item 单独打分,再排序;reranking 要考虑位置、上下文、相邻 item 之间的互相影响、多样性、转化链路和整页收益。美团外卖这种场景尤其明显:一个店铺或商品放在第 1 位、第 3 位、第 8 位,效果完全不同;两个相似商家挨在一起,也可能互相抢点击。

Y-3EC7">论文提出的 Next-Scale Generation Reranking,核心思想是:不要从左到右一个个生成,也不要一步生成完整列表,而是用树形 coarse-to-fine 的方式,逐层把候选集合切成前半段/后半段,最后得到完整排序。

线上收益也很好:在美团 CPS 业务中,NSGR(20) 相比 baseline YOLOR(8),线上 CTR +2.89%GMV +3.15%,并且 cost 还减少 1.4ms。该方法已经部署在美团外卖平台,服务百万级用户。

与之前的 MTGR 相比:

MTGR:扩展 ranking model,让候选打分更强
NSGR:扩展 reranking model,让最终列表组合更优

1. 重排为什么是一个组合优化问题

假设 ranking 阶段给了 20 个候选,reranking 要从中排出 20 个位置。理论排列空间是:

20! ≈ 2.43e18

如果只取前 8 个重排,也有:

8! = 40320

这说明重排的难点不是单个 item 打分,而是排列组合空间巨大。

传统 point-wise ranking 只学习:

score(user, item)

然后按分数排序。它忽略了:

  1. item 之间的互相影响。
  2. 不同位置的曝光价值。
  3. 列表整体多样性和互补性。
  4. 转化目标和整页 GMV 的组合效应

因此 reranking 的目标更接近:

argmax_list Utility(user, ordered_list)

问题是,所有 permutation 都评估一遍在线不可行。NSGR 就是在这个组合空间里找一种高效生成优质列表的方法。

2. 现有生成式重排的三类范式

NSGR:生成式重排 配图 1

论文把现有 generative reranking 分成三类。

2.1 Autoregressive:从左到右一个个生成

这种方法类似语言模型:

position 1 -> position 2 -> position 3 -> ...

优点是局部依赖强。生成第 k 个位置时,可以知道前面已经放了什么。

缺点也明显:

  1. 慢,需要逐位置解码。
  2. 只能看已生成部分,缺少对未来位置的全局规划。
  3. 早期错误会传递到后面。

在重排里,这很危险。因为第 1 位选择不仅影响第 2 位,还影响整页结构。如果只按左到右贪心,很容易局部最优

2.2 One-step:一步生成完整位置概率矩阵

这种方法一次性输出所有 item 到所有 position 的概率:

\(P(item_i -> position_j)\)

优点是快,有全局视角。

缺点是太粗。一步直接从候选集合跳到完整排列,缺少逐层细化过程,复杂业务场景下建模难度很大。

2.3 Multi-step:从初始列表逐步交换

这类方法从 ranking 给出的初始列表出发,每次交换 1-2 个 item,逐步接近更优列表。

优点是比 one-step 更细,且比 autoregressive 更有全局修正空间。

缺点是容易陷入局部最优。排列空间是非单调的,有时候一个局部交换看起来不好,但连续几步之后整体变好。只做局部 swap 很容易走不出去。

3. NSGR 的基本想法:Next-Scale 生成

NSGR 提出第四种范式:next-scale generation

先决定哪些 item 在前半段、哪些在后半段;
再分别决定每个半段里的前半段和后半段;
不断二分,直到每个叶子节点对应一个最终位置。

如果列表长度是 4,生成过程可以理解为:

候选集合 {A, B, C, D}

第 1 层:
  选出应该进入前 2 位的 item
  剩下进入后 2 位

第 2 层:
  在前 2 位集合里选出第 1 位和第 2 位
  在后 2 位集合里选出第 3 位和第 4 位

最终得到完整列表

如果列表长度是 8,则是:

8 -> 4 + 4 -> 2 + 2 + 2 + 2 -> 1 + ... + 1

这就是论文说的:

one-generates-two, two-generate-four

它的好处是同时有全局和局部视角:

  1. 顶层二分时看全局,决定大致哪些 item 该靠前。
  2. 底层二分时看局部,决定相近位置之间的细粒度顺序。

这比 AR 更全局,比 one-step 更细,比 multi-step 更不容易困在局部 swap。

4. NSGR 总体结构

NSGR:生成式重排 配图 2

NSGR 有两个核心模块:

NSG: Next-Scale Generator
MSE: Multi-Scale Evaluator

再加一个训练机制:

MSNL: Multi-Scale Neighbor Loss

分工如下:

  1. MSE:负责评估一个列表的 list-wise value,类似 reward model / evaluator。
  2. NSG:负责用树形 coarse-to-fine 方式生成最终排序。
  3. MSNL:用 MSE 对生成列表和邻居列表打分,构造相对训练信号,指导 NSG。

和很多生成式重排框架一样,采用 generator + evaluator 的两阶段思路。但 NSGR 的特点是:generator 和 evaluator 都是 tree-based multi-scale 结构,训练信号也在多尺度节点上构造。

5. 输入表示:用户兴趣、候选 item 和短期行为

图 2 里 NSGR 的输入主要有三块。

5.1 用户长期兴趣

论文使用用户 lifelong sequence,并用 SID 表示:User Lifelong Sequence

例如:

\(a_6 \ b_1 \ c_5 \ ... a_2 \ b_1 \ c_7\)

这和生成式推荐中的 semantic ID 思路一致。长期序列用于提取用户全局兴趣。

5.2 候选 item

候选 item 同时使用:

SID + ID

SID 提供语义结构,ID 保留具体 item 的身份记忆。

5.3 用户短期行为

短期序列也使用:

SID + ID

短期行为用于捕捉近期意图,例如用户最近正在看某类商家或商品。

这三类输入会进入 HSTU、Set Attention、Target Attention 等模块,形成候选 item 的上下文表示。

6. Multi-Scale Evaluator:评价一个列表

MSE 的目标是:给定用户 u 和有序列表 L,估计 list-wise utility

它不是只对 item 单独打分,而是要让每个位置的预测都感知多尺度上下文。

6.1 列表语义向量

对一个候选列表,MSE 先得到每个位置上的 item 表示:

\(L = {x_1, x_2, ..., x_m}\)

这里 x_i 已经融合了 item 语义、用户兴趣、短期行为等信息。

6.2 多尺度上下文

MSE 对每个位置提取不同尺度的上下文。例如列表长度为 8,对某个位置来说,可以看:

全列表尺度:positions 1-8
半列表尺度:positions 1-4 或 5-8
局部尺度:positions 1-2, 3-4, ...

论文用 multi-scale self-attention 来计算这些上下文:

scale 1: whole list context
scale 2: half-list context
...
scale log2(m): pair-level context

这样每个 item 的得分不仅看自己,也看它所在的局部组、半局部组和全局列表。

6.3 位置感知预测

最终每个位置的预测整合三类信息:

item semantics
multi-scale context
position embedding

可以理解成:

\(\[ \hat{y}_i = \operatorname{sigmoid}\left(\operatorname{MLP}\left(item_i, context_i, position_i\right)\right) \]\)

然后列表价值是各位置预测的聚合:

\(\[ \operatorname{value}(\operatorname{list}) = \sum_i \hat{y}_i \]\)

这个 value 可以根据业务目标调整,例如:

IMPR
CVR
GMV

MSE 用线上日志训练,包括曝光、点击、转化等信号。损失是典型的逐位置 BCE,但它的表示是 list-aware 的。

7. Next-Scale Generator:树形生成列表

NSG 是论文最核心的模块。它做的是:

输入一个候选子集
输出哪些 item 应该进入该子区间的前半段
递归直到得到完整排序

假设当前节点负责位置区间 [l, r],对应一个候选子集:

\(X_{l:r} = {x_l, x_{l+1}, ..., x_r}\)

NSG 要把它拆成前后两部分,判断每个 item 在当前尺度上该“靠前”还是“靠后”。

7.1 Item priority

首先,NSG 给每个 item 计算一个 individual priority:

\(p_i = MLP_p(x_i)\)

它表示 item 自身相关性。这个分数不是最终排序,只是后续关系建模的一个输入。

7.2 Pairwise relationship

然后 NSG 对每对 item 判断关系:

competitive suppression
complementary enhancement
neutral coexistence

这三个关系很有推荐味道。

  1. competitive suppression:两个 item 竞争强,例如两个相似商家同时出现,强者压制弱者。
  2. complementary enhancement:两个 item 互补,例如主食和饮品、套餐和小吃,组合更好。
  3. neutral coexistence:基本互不影响。

论文用 pairwise classifier 输出这三类关系的概率。

7.3 Asymmetric influence

竞争关系是非对称的:高优先级 item 可以压制低优先级 item

互补关系更接近对称:两个 item 互相增强

NSG 用这些关系计算 item 之间的影响权重,再更新每个 item 的表示。

这一点很重要。重排不是只看单点相关性,而是看组合关系。NSG 把组合关系显式分成竞争、互补、中性,比单纯 self-attention 更有结构化归纳偏置

7.4 Binary split

更新 item 表示后,NSG 会计算每个 item 和当前树节点 anchor 的匹配分数:

\(Sim_i = MLP_{scor}e(item_i, user_{context}, tree_{anchor})\)

然后取前一半进入当前区间的 front half:

Flag+ = 1 if rank(i) < half_size

剩余 item 进入 back half。

递归执行,最后每个叶子节点只剩一个 item,对应最终位置。

8. 一个直观例子:长度为 8 的列表如何生成

假设候选有 8 个:

A B C D E F G H

NSG 第一步不是选第 1 位,而是先分组:

前 4 位候选:A C F H
后 4 位候选:B D E G

第二步在两个组内继续拆:

前 4 位组:
  前 2 位候选:C H
  后 2 位候选:A F

后 4 位组:
  前 2 位候选:D G
  后 2 位候选:B E

第三步继续拆到单个位置:

pos1: H
pos2: C
pos3: F
pos4: A
pos5: D
pos6: G
pos7: E
pos8: B

最终列表:

H C F A D G E B

这个过程的特点是:高层先决定大致靠前/靠后,低层再决定局部顺序。

9. Multi-Scale Neighbor Loss

Generator + evaluator 框架有一个老问题:目标不一致

Evaluator 学的是:给一个列表,估计它的价值

Generator 学的是:在巨大排列空间里生成高价值列表

如果直接用 evaluator 的绝对分数训练 generator,信号会很稀疏,也容易让 generator 只是拟合曝光分布或局部模式。

NSGR 的解决方案是 Multi-Scale Neighbor Loss, MSNL

核心思想:

不要只看生成列表本身的绝对分数;
构造多个邻居列表,
比较生成列表和邻居列表的相对 value,
在每个 tree scale 上给 generator 训练信号。

9.1 邻居列表怎么构造

对 NSG 生成的列表 L_g,构造 neighbor lists:

  1. L_g 内部交换两个 item。
  2. L_g 中某个 item 和候选池中其他 item 交换。

这些邻居列表相当于生成列表附近的 counterfactual alternatives。

9.2 用 MSE 计算相对 reward

MSE 分别评估: \(value(L_g)、value(L_{neighbor})\)

然后计算相对差: \(r_{neighbor} = value(L_{neighbor}) - value(L_g)\)

如果某个邻居比当前生成列表更好,generator 应该被拉向那个方向;如果更差,就应该远离。

9.3 为什么是 multi-scale

因为 NSG 是树形生成,每个节点代表一个尺度:

全局二分
半局部二分
局部二分

MSNL 不只在最终列表上给信号,而是在多尺度节点上给信号。论文还说 NSG 和 MSE 有相似树结构,因此可以用 MSE 的多尺度表示来指导 NSG 的多尺度表示,并把 neighbor list 的多尺度向量缓存起来,避免重复计算。

这就是 MSNL 的价值:它把 evaluator 的 list-wise signal 转成 generator 在树形生成过程中可用的 scale-wise guidance。

10. 为什么 NSGR 比 AR/NAR/Multi-step 更合理

可以把四类方法对比如下:

范式优点缺点
Autoregressive局部依赖强慢,缺少未来全局视角,误差传播
One-step快,有全局视角太粗,缺少局部细化
Multi-step swap可逐步修正易陷入局部最优
Next-scale全局到局部逐层细化依赖树结构和训练信号设计

NSGR 的优势来自两点:

  1. 树形生成结构把排列空间分层搜索。
  2. MSE/MSNL 在多尺度上提供相对训练信号。

它不像 AR 那样“从左到右窄视角”,也不像 one-step 那样“一口吃完整排列”。它更像在做 coarse-to-fine 的组合优化。

11. 实验设置

论文使用两个数据集

DatasetUsersItemsRecords
Taobao Ad1,141,72999,81526,557,961
Meituan5,685,11917,264,613242,549,848

Taobao Ad 是公开广告数据,使用前 7 天训练,第 8 天测试。

Meituan 是美团外卖工业数据,来自 2025 年 8 月,包含 15 天、2.42 亿条交互记录、239 个特征、三个标签:

expose
click
conversion

注意:样本是 list-level,每条样本包含同一请求列表里的所有 item。论文还过滤掉全 0 或全 1 标签的样本。

离线指标:AUC、GAUC、Loss、HR

线上指标:CTR、CVR、GMV、Cost(ms)

NSGR:生成式重排 配图 3

12. Evaluator 离线效果

论文在 Taobao Ad 和 Meituan 上对比多类 reranking 方法。

12.1 Taobao Ad

ModelAUCGAUCLoss
PRM0.60520.81630.1842
GRN0.61010.82090.1820
NAR4Rec0.63060.82880.1786
DCDR0.62170.82880.1792
NLGR0.63440.83110.1752
YOLOR0.63510.83230.1743
NSGR0.63960.83890.1713

12.2 Meituan

ModelAUCGAUCLoss
PRM0.85950.85730.1008
GRN0.86430.85980.1001
NAR4Rec0.87110.86360.0957
DCDR0.86950.86160.0977
NLGR0.87320.86440.0946
YOLOR0.87490.86690.0932
NSGR0.89020.88290.0842

NSGR 在 Meituan 上优势尤其明显。论文说相比最强 independent baseline,NSGR 在 Taobao/Meituan 上分别带来 0.0045/0.0153 AUC0.0047/0.0160 GAUC 绝对提升。

在工业重排里,0.016 GAUC 是比较大的提升。

13. Generator 一致性:HR 指标

只看 evaluator 的 AUC/GAUC 不够。因为最终线上用的是 generator 生成列表。如果 generator 找不到 evaluator 认为好的列表,evaluator 再准也没用。

因此论文用 HR 衡量 generator 和 evaluator 的一致性:

HR = generator 产生的 permutation set 是否包含最优 list

在 Meituan 上,结果如下:

ModelHR@1%HR@10%
PRM0.5100.691
GRN0.6320.844
NAR4Rec0.6580.897
NLGR0.7840.916
YOLOR0.8220.943
NSGR0.8610.987

NSGR 的 HR@10% 达到 0.987,说明它生成的候选列表集合几乎总能覆盖 evaluator 认为很优的列表。

论文还在 8! = 40320 的完整排列空间里做了更细分析。NSGR 的 exact match rate 是 0.689;如果允许 2/3/4 个 item 的总偏差,准确率提升到:

Diff 2: 0.909
Diff 3: 0.933
Diff 4: 0.968

这说明 NSGR 即使没完全命中最优排列,生成列表也非常接近最优排列。

14. 位置变化分析:NSGR 并不是暴力打乱

论文分析了 NSGR 输出位置和初始 ranking 位置之间的关系。

观察很有意思:

  1. 每个最终位置仍然倾向保留原本靠前的 item,说明 ranking 阶段的信号仍然重要。
  2. 距离越远,迁移概率越低,说明 NSGR 不是随机打乱。
  3. 前几个位置的分布更集中,说明头部位置更稳定,也更重要。

这符合工业重排直觉:重排不是推翻 ranking,而是在 ranking 给出的强排序基础上做 listwise 修正。

15. 消融实验:哪些模块最重要

Table 6:

ModelAUCGAUCHR@1%
w/o SID0.87610.86920.834
w/o MSEU0.88350.87420.846
w/o NSGU0.89020.88290.796
w/o MSNL0.89020.88290.772
NSGR0.89020.88290.861

几个结论:

  1. 去掉 SID 后,AUC/GAUC 和 HR 都下降,说明语义 ID + HSTU 对 evaluator 和 generator 都有帮助。
  2. 去掉 MSE unit 后,AUC/GAUC 明显下降,说明 multi-scale context 对 evaluator 重要。
  3. 去掉 NSG unit 后,AUC/GAUC 不变,但 HR 大幅下降,因为 evaluator 没变,generator 变弱。
  4. 去掉 MSNL 后,AUC/GAUC 不变,但 HR 从 0.861 掉到 0.772,说明 MSNL 主要提升 generator 和 evaluator 的一致性。

这组消融把 evaluator 和 generator 的贡献分开了。

MSEU 影响 evaluator 能不能评估好列表
NSGU/MSNL 影响 generator 能不能生成好列表

16. 参数敏感性

论文分析了两个超参数:

tau:MSNL 中的温度参数
beta:neighbor list 构造强度/采样比例

结果显示:

  1. tau=0.1 时 HR 最好,过大或过小都会下降。
  2. beta 从 0.1 增加到 1 或 2 时,HR 快速提升,然后趋于稳定。
  3. 继续增大 beta 训练成本上升,但收益不明显。

这说明 neighbor list 的覆盖很重要,但不需要无限增加。适量 counterfactual neighbors 就能给 generator 足够信号。

17. 线上 A/B:为什么 NSGR(20) 才有效

线上实验部署在美团 CPS 业务,从 2025 年 8 月到 10 月做了 8 周 A/B。

Baseline 是:

YOLOR(8), A_8^8 permutation space

NSGR 做了两个版本:

NSGR(8):8 个候选的排列空间
NSGR(20):20 个候选的排列空间

结果:

MethodCTRCVRGMVCost(ms)
NSGR(8)-0.42%-0.18%-1.02%-2.1
NSGR(20)+2.89%+0.58%+3.15%-1.4

NSGR(8) 比 YOLOR(8) 略差,说明在 8 个候选的小排列空间里,YOLOR 这种 evaluator-based exhaustive/near-exhaustive 方法已经很强,NSGR 的生成优势不明显。

但当候选数扩大到 20 时:

20! 空间太大,YOLOR 无法穷举;
NSGR 的树形 next-scale 生成优势开始显现。

18. NSGR 的贡献

第一,它明确指出现有生成式重排的三类生成范式各有缺陷:AR 慢且缺少未来视角,one-step 粗,multi-step 易局部最优。

第二,它提出 next-scale generation,把列表生成变成树形二分过程,从全局到局部逐层确定顺序。

第三,它用 Multi-Scale Evaluator 和 Multi-Scale Neighbor Loss 解决 generator/evaluator 目标不一致的问题,让训练信号能在树的多个尺度上传递。

第四,它在线上证明,当候选空间从 8 扩到 20 时,NSGR 的优势显著释放,GMV +3.15%,这说明它确实适合更大的工业重排空间。

19. 局限和问题

19.1 树形二分是否是最优归纳偏置

NSGR 假设排序可以通过不断二分来构造。这很高效,但不一定适合所有列表结构。有些业务里位置之间不是天然二叉层级关系。

19.2 Candidate 数最好是 2 的幂?

论文方法天然适合长度为 4、8、16、20 这类可处理的候选集合,但二叉树结构在任意长度上如何设计,论文没有展开太多。工业上 20 个候选如何具体补齐、截断或非均匀切分,是实现细节。

19.3 MSE 的准确性仍是地基

NSG 依赖 MSE 作为 reward model。如果 MSE 对 GMV、CVR、长期用户体验估计有偏,generator 会继承这种偏差。

19.4 线上目标复杂

论文线上报告 CTR、CVR、GMV,但重排还可能影响配送效率、商家公平、用户长期留存、广告自然流量平衡等目标。NSGR 本身没有完全解决多目标冲突。

19.5 与上游 ranking 的耦合

NSGR 能复用 ranking 表示是优点,但也意味着它依赖上游 ranking 模型的表示质量。如果 ranking 模型升级或候选分布变化,NSGR 可能需要同步适配。

20. 总结

NSGR 是一篇非常有工业味的生成式重排论文。它不讨论如何召回,也不讨论如何做单 item ranking,而是盯住最终列表生成这个最难的组合优化问题。

技术路线可以一句话概括:

用树形 next-scale generator 从全局到局部逐层生成排序,用 multi-scale evaluator 评估列表价值,再用 multi-scale neighbor loss 把 evaluator 的相对价值信号传给 generator。

这篇论文最有价值的地方是,它把 reranking 的排列空间搜索问题讲得很具体。AR、one-step、multi-step 都有明显短板,NSGR 用 coarse-to-fine tree generation 给了一个很自然的第四种范式。