← 返回论文列表
📄 论文解读 · 生成式推荐 × 排序统一

OneRanker:用一个模型统一生成与排序的广告推荐新范式

Unified Generation and Ranking with One Model in Industrial Advertising Recommendation
机构
Tencent WeiXin
时间
2026 年 3 月 (v3)
arXiv
核心成果
GMV-Normal +1.34%,微信频道全量上线
🎯
背景与动机

广告推荐系统正在从传统级联架构(召回→粗排→精排)向端到端生成式范式转变。GPR(Tencent)、OneRec(Kuaishou)等工作表明,基于语义 ID 的自回归生成方式可以直接优化最终目标,同时实现高计算效率。

然而,当生成式方法深入渗透到广告系统的排序阶段时,三个核心挑战浮现:

⚠️ 三大核心挑战
  • Challenge 1 — 兴趣目标 vs 广告价值目标的矛盾
    生成模型的训练目标是"预测用户接下来会点哪个商品"(行为驱动),但广告系统真正关心的是 eCPM(广告主出价 × 预估点击率 × 预估转化率)。用户喜欢的商品,广告主出价可能很低;eCPM 极高的商品,用户未必感兴趣。两个目标天然冲突——训练时两种 loss 梯度互相拉扯,谁都没优化好。
    现有方案的两难
      ① 单阶段融合(一个模型同时学兴趣 + 价值)→ 两个目标抢梯度,两者都只能学到妥协的结果
      ② 阶段解耦(生成只管兴趣召回,排序只管价值打分)→ 生成阶段完全不知道价值,可能直接把高 eCPM 商品过滤掉,精排再好也无济于事
  • Challenge 2 — 生成过程对候选商品"视而不见"
    自回归生成的流程是:读完用户历史行为序列 → 得到一个固定的用户向量 → 用这个向量去查商品表。
    问题是:这个用户向量在整个生成过程中是静态的,它不感知当前要考虑的候选商品是什么。打个比方:推荐员只在最开始了解了用户一次,然后闭眼报商品,无法根据"这个商品是运动鞋,用户历史上买过篮球"来动态调整打分。
  • Challenge 3 — 生成模型和精排模型是两个独立系统,互相不理解对方
    传统流程:生成模型召回 Top-K 候选 → 精排模型对这 K 个候选重新打分。三个具体问题:
      ① 表示不一致:生成和精排用不同 embedding 空间,精排不知道生成为什么选了这些候选
      ② 重复计算:用户向量在生成阶段算了一遍,精排又从头算一遍
      ③ 误差无法纠正:生成阶段如果召回了一个低价值商品,精排无法意识到这是"生成的误判",更无法追溯原因进行修正
💡 OneRanker 的核心答案:不是在生成后接一个独立排序模块,而是通过 Key/Value 透传机制,将生成(Step 1)、多任务目标感知增强(Step 2)、统一排序(Step 3)三步深度耦合,形成"价值引导生成→粗细协同感知→双侧一致性保证"的完整闭环。
🔧
方法详解

2.1 整体架构:先把骨架搞清楚

OneRanker 本质上是一个用同一个模型完成召回 + 排序的端到端框架。它的输入是用户历史行为序列,最终输出是一个按 eCPM 对齐的广告商品排序列表。整个过程分三步,三步之间通过 Key/Value 透传机制串联:

📌 三步分别做什么——一句话版本

Step 1(生成召回):标准的生成式召回,就像 TIGER/GPR 那样,用 Decoder-only 自回归生成 Top-K 候选商品 SID。这一步解决"从几千万商品里找到可能相关的候选"。

Step 2(增强用户表示):不直接用于召回,而是对 Step 1 产出的用户表示做二次精化——同时解决"兴趣 vs 价值冲突"和"用户向量不感知候选商品"两个问题,输出更好的用户-商品匹配向量。这一步是 OneRanker 的核心创新,后面详细展开。

Step 3(统一排序):拿 Step 2 增强后的用户表示,对 Step 1 召回的 Top-K 候选做细粒度重排序,输出最终广告排名。这一步解决"召回出来的候选怎么按 eCPM 精准排序"。

三步共享同一套模型参数,通过 KV 透传让每一步都能看到前一步的内部状态——这就是"深度耦合"的含义,也是和传统"生成+独立精排"两个模型串联的根本区别。

Step 1:生成召回
输入:用户行为序列
输出:Top-K 候选 SID
+ 用户多兴趣表示(KV)
→ KV →
Step 2:增强表示
输入:Step 1 的 KV
输出:精化的用户-商品向量
(兴趣+价值双通道)
→ KV →
Step 3:统一排序
输入:Step 2 的 KV + Top-K 候选
输出:最终 eCPM 排序列表
Figure 2: OneRanker 整体框架
Figure 2(论文原图):OneRanker 整体框架。注意图中三步之间的 KV 连线——这是和传统"生成模型 + 独立精排模型"的本质区别:三步共享内部状态,Step 3 排序时完全知道 Step 1/2 的决策依据,而不是面对一个黑盒的召回结果。
Figure 1: 现有方法与 OneRanker 对比
Figure 1(论文原图):现有方法 vs OneRanker 的对比。左侧展示了两种现有方案各自的缺陷:
① 「单阶段融合」把兴趣目标和价值目标塞进同一个模型同时优化 → 两个 loss 梯度互相拉扯,谁都没优化好;
② 「阶段解耦」让生成只管兴趣召回、排序只管价值打分 → 生成阶段不感知价值目标,高价值商品可能在召回阶段就被丢弃,后面排序再好也没用。
右侧 OneRanker:通过任务 Token 解耦(在同一模型内让不同 Token 各自负责兴趣/价值),同时用 KV 透传让生成和排序共享内部状态,从而绕开上面两种方案的困境。

2.2 Step 1:生成召回(基于 HSTU + MTP)

Step 1 是整个框架的基础,本质上就是一个标准的生成式召回模型,直接沿用了 GPR(Generative Pre-Training for Recommendation,腾讯此前工作)的架构,论文本身没有对 Step 1 做修改,属于"已有基座"。

输入:用户历史行为序列(点击/转化过的商品 SID 序列)

做什么:用一个 Decoder-only 自回归模型(HSTU 架构),根据用户历史序列预测用户接下来最可能交互的商品。

这里的商品不是一个单一 ID,而是经过 RQ-VAE 量化后的多层 SID 序列(比如 [level1=23, level2=7, level3=41] 表示一个商品)。所以"预测一个商品"= 逐层自回归预测这条 ID 序列。

Multi-Token Prediction(MTP) 指的是:在单次前向传播中,并行展开 $m$ 条独立的自回归路径,每条路径各自从 SID 第 1 层开始,独立逐层预测出一个完整商品的 SID:

  • 路径 1(兴趣视角 1):独立预测 [level1=23, level2=7, level3=41] → 商品 A
  • 路径 2(兴趣视角 2):独立预测 [level1=8, level2=15, level3=3] → 商品 B
  • …共 $m$ 条路径,各自产出一个候选,合并得到候选集

每条路径的打分方式:SID 是 RQ-VAE 多层量化码(如 [level1=23, level2=7, level3=41] 对应一个商品),自回归预测是逐层预测当前层 codebook 里的哪个量化中心——在每一层,用户向量 $e_{\text{user}}^{(j)}$ 和该层 codebook 的所有 entry 向量逐一算点积,再 softmax 选出编号。三层预测完,拼出完整 SID = 定位到一个商品。论文中的 $s_{j,i} = e_{\text{user}}^{(j)} \cdot e_{\text{item}}^{(i)}$ 里的 $e_{\text{item}}^{(i)}$ 指的是当前层 codebook 的第 $i$ 个量化中心向量,词表 $\mathcal{V}$ 是该层 codebook 大小(通常几百到几千),而非全量商品数量。

路径间的差异从哪里来?——来自训练时不同的 GT 标签。$\mathbf{t}_{i1}$ 在训练时对应的 GT 是用户下一个点击的商品 SID,$\mathbf{t}_{i2}$ 对应的 GT 是用户下一个购买的商品 SID。不同的梯度信号把各路径的 Query embedding 拉向不同的语义方向,自然形成差异化的兴趣视角——这与 Beam Search"运行时选择分叉"的机制完全不同,差异在训练完成后就固定在 Token embedding 里了。

输出两样东西

  • Top-K 候选商品 SID 列表:MTP 多路预测头各自对全量商品词表打分,合并后取 Top-K,这就是后续要排序的候选集
  • 用户序列隐层表示(Key/Value cache):HSTU Decoder 在处理用户行为序列时产生的中间层表示,会被透传给 Step 2 和 Step 3 作为 Key/Value,让后两步不需要重新编码用户历史

⚠️ 注意:Step 1 本身的 MTP 预测头只感知"用户兴趣"(用行为数据训练),不感知 eCPM 等价值目标——这正是 Step 2 要解决的问题。

2.3 Step 2 详解:如何同时解决兴趣/价值冲突和目标无感知

Step 2 的定位是:在 Step 1 的生成基础上,用一个异质注意力解码器对用户表示做二次精化,输出同时包含兴趣信息和价值信息的增强用户向量,供 Step 1 的 MTP 召回打分和 Step 3 的排序使用。它解决了两个问题:

  • 问题 A(兴趣 vs 价值冲突):用"任务 Token 解耦"——让不同 Token 各自独立负责兴趣目标和价值目标,互不干扰
  • 问题 B(目标无感知):用"Fake Item Token"——在生成过程中注入候选商品的语义分布信息,让用户向量感知到"当前要召回的是哪类商品"

下面依次展开这两个机制。

2.3.1 价值感知多任务解耦:任务 Token + 因果掩码

📌 先搞清楚输入输出:这个机制是为召回服务的,但不是"兴趣和价值各走一路召回"

输入:Step 1 产出的用户多兴趣序列表示(作为 Key/Value)+ 可学习的任务 Token 序列(作为 Query)

输出(两种用途)
  ① 兴趣 Token 的输出 → 接 MTP 预测头,对全量商品词表做 softmax,产生"用户接下来会点哪个商品"的概率分布 → 这才是真正用于召回的路径,多个兴趣 Token 就是多路召回
  ② 价值 Token 的输出 → 接预测头拟合 eCPM → 不产生独立的召回候选,而是作为训练信号(loss 项),让底层共享用户表示在优化兴趣目标的同时也感受到价值目标的拉力

所以:召回靠兴趣 Token 做,价值 Token 的作用是"在训练时影响底层表示的质量",不是独立产生一路候选。

具体做法:引入可学习的任务 Token 序列 $\mathbf{T} = [\mathbf{t}_{i1}, \mathbf{t}_{i2}, \ldots, \mathbf{t}_{im}, \mathbf{t}_v]$,随机初始化后端到端优化。这组 Token 以 Step 1 的用户序列表示为 Key/Value,通过 Cross-Attention 聚合用户兴趣,然后各自走独立输出头:

  • 兴趣任务 Token $\mathbf{t}_{i1}, \ldots, \mathbf{t}_{im}$:$m$ 个 Token 对应 $m$ 路召回,每个 Token 训练时对应不同的行为标签作为 GT(如 $\mathbf{t}_{i1}$ 的 GT 是用户下一个点击商品的 SID,$\mathbf{t}_{i2}$ 的 GT 是用户下一个购买商品的 SID),不同的梯度信号把各 Token 的 Query embedding 拉向不同语义方向,从而形成差异化的召回路径。多路召回结果合并取 Top-K 得到候选集
  • 价值感知 Token $\mathbf{t}_v$:接独立预测头,拟合 eCPM 等业务价值标签,仅用于计算 loss,不直接产生召回候选。它的作用是:在训练期间通过因果掩码"感染"前面兴趣 Token 的底层表示,让整个用户向量学会价值感知

关键在于因果掩码:任务 Token 之间按"点击→转化→价值"的先验顺序单向可见。$\mathbf{t}_v$ 在 Self-Attention 中能看到所有兴趣 Token 的表示,但兴趣 Token 看不到 $\mathbf{t}_v$——也就是说,价值目标的梯度通过 $\mathbf{t}_v$ 反向传播时,会更新共享的底层用户 KV 表示,但不会直接污染兴趣 Token 的输出。两套目标梯度在输出头层面完全隔离。

💡 举例:为什么需要多任务解耦,解耦后有什么不同

场景:微信视频号广告,候选商品有两个——

商品 A:运动鞋,用户历史行为显示对运动非常感兴趣(兴趣高),但广告主出价低(eCPM = 20

商品 B:保险产品,用户从未主动搜索过(兴趣低),但广告主出价极高(eCPM = 200

❌ 不解耦(兴趣和价值混在同一个 loss + 同一个输出头里):模型既要学"运动鞋对这个用户更匹配",又要学"保险 eCPM 更高",两种梯度互相抵消,最终召回路径既不够准确(兴趣被 eCPM 目标拉偏),也没充分学好价值(eCPM 被兴趣目标稀释)。

✅ 解耦后:兴趣 Token $\mathbf{t}_{i}$ 专注优化"点击/转化预测",运动鞋在这路召回中排名高;价值 Token $\mathbf{t}_v$ 专注优化"eCPM 拟合",它的梯度更新的是底层共享用户表示,让整个模型逐渐学会"在生成表示时也要考虑价值"。两个输出头梯度不互扰,底层表示同时被两个目标形塑——兴趣路召回准,价值信号也被编码进了用户向量,为后续排序 Step 3 提供更好的基础表示。

2.3.2 Fake Item Token:粗粒度目标感知

Fake Item Tokens $\mathbf{F} = [\mathbf{f}_1, \ldots, \mathbf{f}_k]$ 是通过 K-means 聚类整个 item 空间得到的 $k$ 个聚类中心向量,代表 item 语义空间中的核心锚点。

Query 序列 $\mathbf{Q} = [\mathbf{T}; \mathbf{F}]$ 将任务 Token 和 Fake Item Token 拼接,以 Step 1 的输出作为 Key/Value 进行 Cross-Attention,使模型在生成过程中能够动态感知 item 语义分布,实现粗粒度隐式目标感知。

💡 举例:Fake Item Token 如何实现目标感知

假设商品空间通过 K-means(k=32)聚类,形成 32 个语义中心,分别代表"运动装备"、"家居用品"、"美妆护肤"等类目。

传统生成(目标无感知):用户表示在整个生成过程中固定不变,对"运动鞋"和"口红"候选 item 使用完全相同的用户向量打分,无法区分用户对不同类目的偏好强度。

OneRanker(Fake Item Token):32 个 Fake Item Token(聚类中心)和任务 Token 一起参与 Cross-Attention。"运动装备"中心向量会与用户的运动行为序列产生更高的 attention 权重,使得兴趣任务 Token 在运动品类上的表示更强,生成阶段就会倾向召回运动类商品而不是美妆类——即使两者的传统 eCPM 相近。

2.3.3 异质注意力解码器(Heterogeneous Attention Decoder)

在标准 Transformer Decoder 的基础上做了两个关键改进:

改进 1:Cross-Attention 优先化

传统解码器先 Self-Attention 后 Cross-Attention;本架构反转顺序:先 Cross-Attention 从 Step 1 聚合用户多兴趣表示,再 Self-Attention 精炼 Query 内部的任务协同。

认知逻辑:先理解用户意图,再精炼任务表示。

改进 2:异质掩码策略

任务 Token 之间:因果掩码(时序建模)

任务 Token ↔ Fake Item Token:双向可见(目标感知交互)

Fake Item Token 之间:互不可见(避免聚类中心间干扰)

2.3.4 双通道表示构造

异质注意力解码器的输出经过 MTP 模块,通过双通道融合机制构造精化的多兴趣表示:

$$\mathbf{s}^{(i)}_{\text{target}} = \sum_{j=1}^{k} \mathbf{s}^{(i)}_j \in \mathbb{R}^k$$
符号说明
  • $k$:Fake Item Token 的数量(实验中 $k = 32$)
  • $\mathbf{s}^{(i)}_j$:第 $i$ 个任务 Token 与第 $j$ 个 Fake Item Token 拼接后经 MLP 映射得到的 $k$ 维偏好分向量
  • $\mathbf{s}^{(i)}_{\text{target}}$:第 $i$ 个 MTP head 的 Target Aware 通道向量,综合了所有 Fake Item Token 的感知结果

每个 MTP head $i$ 的最终用户表示为:

$$\mathbf{e}^{(i)}_{\text{user}} = \text{Concat}(\mathbf{e}^{(i)}_{\text{task}},\ \mathbf{s}^{(i)}_{\text{target}}) \in \mathbb{R}^{d_{\text{task}}+k}$$
符号说明
  • $\mathbf{e}^{(i)}_{\text{task}} \in \mathbb{R}^{d_{\text{task}}}$:第 $i$ 个任务 Token 的语义向量(Task Semantic Channel)
  • $\mathbf{s}^{(i)}_{\text{target}} \in \mathbb{R}^k$:Target Aware Channel,来自 $k$ 个 Fake Item Token 的聚合感知分
  • $d_{\text{task}} + k$:最终用户向量维度,兼顾语义匹配和目标感知

在 item 侧,计算商品与全部 $k$ 个聚类中心的余弦相似度,构建增强的 item 表示:

$$\mathbf{e}^{\text{enhanced}}_{\text{item}} = \text{Concat}(\mathbf{e}_{\text{item}},\ [c_1, c_2, \ldots, c_k]) \in \mathbb{R}^{d_{\text{item}}+k}$$
符号说明
  • $\mathbf{e}_{\text{item}}$:原始 item 语义向量
  • $c_l$:item 与第 $l$ 个聚类中心的余弦相似度分数

内积打分自然融合了语义匹配与目标感知匹配:

$$\text{score}(\text{user}, \text{item}) = \mathbf{e}^{(i)}_{\text{user}} \cdot \mathbf{e}^{\text{enhanced}}_{\text{item}} = \mathbf{e}^{(i)}_{\text{task}} \cdot \mathbf{e}_{\text{item}} + \sum_{l=1}^{k} s^{(i)}_l \cdot c_l$$
符号说明
  • 第一项 $\mathbf{e}^{(i)}_{\text{task}} \cdot \mathbf{e}_{\text{item}}$:传统语义匹配分数
  • 第二项 $\sum_{l=1}^{k} s^{(i)}_l \cdot c_l$:用户对各类目的偏好分($s^{(i)}_l$)与 item 属于各类目的相似度($c_l$)的内积,即 target-aware 匹配分数

2.4 Step 3:统一排序(Unified Ranking)

2.4.1 细粒度目标感知

Step 3 引入专用排序解码器(R-Decoder Block),将排序内化为生成流水线的自然延伸。

输入设计:Query 由(1)排序任务 Token $\mathbf{T}_r \in \mathbb{R}^{d_{\text{task}}}$ 和(2)$n$ 个候选 item Token $\mathbf{I} = [\mathbf{i}_1, \ldots, \mathbf{i}_n]$(来自 MTP 生成结果)组成;Key/Value 融合了 Step 1 的原始多兴趣表示和 Step 2 的精化表示。

掩码策略:候选 item Token 之间互不可见(对角掩码),所有候选 item 可访问排序任务 Token。

输出:每个候选 item Token 位置的输出向量经轻量级 MLP 映射为标量分数 $\mathbf{S} = [s_1, \ldots, s_n]$,直接用于最终排序。R-Decoder 仅使用单层,且结构与 Step 2 的异质注意力解码器相同(Cross-Attention 优先化)。

2.4.2 输入侧一致性

Step 3 的排序解码器直接复用 Step 1 和 Step 2 的输出作为 Key/Value:

  • Step 1 → Step 3:传递用户的基础兴趣分布(广度覆盖)
  • Step 2 → Step 3:传递生成过程的隐性决策依据,使排序器能够完全理解生成逻辑

这缓解了传统"外挂排序"中的表示碎片化问题——排序器可以感知生成过程的内部状态,而不是面对"黑盒"生成结果。

💡 举例:KV 透传如何解决三重脱节

传统"生成-再排序"架构:生成模型用自己的 embedding 空间产出候选,然后交给一个独立的排序模型(用另一套 embedding 初始化)重新打分。两个模型完全异质,排序模型完全不知道为什么生成模型选了这些候选而不是其他候选。

OneRanker(KV 透传):假设 Step 1 生成了 [运动鞋 A, 运动鞋 B, 口红 C] 三个候选。Step 2 在生成这些候选时,其内部状态(KV cache)记录了「用户运动兴趣很强,但当前活动期可能需要互补品」这样的决策依据。Step 3 的 R-Decoder 直接读取这份 KV cache,在对三个候选打分时,其实是在「读懂了生成逻辑」的基础上做精化打分,而非从头开始评估。这消除了生成→排序的信息断层。

2.5 损失函数体系

总损失函数为三部分的加权组合:

$$\mathcal{L}_{\text{total}} = \alpha \cdot \mathcal{L}_{\text{MTP}} + \beta \cdot \mathcal{L}_{\text{rank}} + \gamma \cdot \mathcal{L}_{\text{DC}}$$
符号说明
  • $\alpha, \beta, \gamma$:各损失的平衡系数(超参数)
  • $\mathcal{L}_{\text{MTP}}$:生成损失,负对数似然
  • $\mathcal{L}_{\text{rank}}$:排序损失,BPR Pairwise 损失
  • $\mathcal{L}_{\text{DC}}$:分布一致性约束损失(核心创新)

生成损失 $\mathcal{L}_{\text{MTP}}$

$$\mathcal{L}_{\text{MTP}} = -\sum_{j=1}^{m} \sum_{l=1}^{L} \log P(\mathbf{e}^{\text{gt}}_{\text{item}} \mid \mathbf{e}^{(j)}_{\text{user}})$$
符号说明
  • $m$:MTP head 数量(对应兴趣 + 价值任务 Token 总数)
  • $L$:SID 序列长度(每个 item 的语义 ID 有多少个 token)
  • $\mathbf{e}^{\text{gt}}_{\text{item}}$:ground truth item 的 embedding
  • $\mathbf{e}^{(j)}_{\text{user}}$:第 $j$ 个 MTP head 的用户表示

价值感知 head 采用价值加权采样策略,将生成分布向高价值 item 偏移。

排序损失 $\mathcal{L}_{\text{rank}}$(BPR Pairwise Loss)

$$\mathcal{L}_{\text{rank}} = -\mathbb{E}_{(i,j) \sim \mathcal{D}} \left[ \mathbf{1}(y_i > y_j) \cdot \log \sigma(s_i - s_j) \right]$$
符号说明
  • $(i, j)$:来自数据集 $\mathcal{D}$ 的候选 item 对
  • $y_i, y_j$:真实业务价值标签(eCPM)
  • $s_i, s_j$:R-Decoder 为候选 item 输出的标量分数
  • $\sigma(\cdot)$:Sigmoid 函数

分布一致性损失 $\mathcal{L}_{\text{DC}}$(核心创新)

将排序器视为教师模型,最小化生成分布与排序偏好分布之间的 KL 散度,推导得到有监督代理损失:

$$\mathcal{L}_{\text{DC}} = -\mathbb{E}_{i \sim \mathcal{C}} \left[ p^{\text{target}}_i \cdot \log \pi_\theta(i \mid \mathbf{u}) \right]$$
符号说明
  • $\mathcal{C}$:候选 item 集合(MTP 生成结果)
  • $p^{\text{target}}_i = \text{softmax}(s_i / \tau)$:以排序分数归一化得到的目标概率分布,$\tau$ 为温度参数
  • $\pi_\theta(i \mid \mathbf{u})$:生成模型对候选 item $i$ 的生成概率
  • $\mathbf{u}$:用户表示
$\mathcal{L}_{\text{DC}}$ 的关键作用:与 $\mathcal{L}_{\text{rank}}$ 的局部 Pairwise 优化不同,$\mathcal{L}_{\text{DC}}$ 在候选集级别约束全局分布一致性,建立了从排序到生成的反向梯度通路。这使得排序器的偏好(高 eCPM item 获得高 $p^{\text{target}}_i$)能够直接指导生成模型调整其输出概率分布,从而在生成阶段就减少低价值 item 的召回概率。
💡 举例:DC Loss 如何打通生成和排序的反向梯度

假设 MTP 生成了候选集 $\mathcal{C} = \{$运动鞋 A (eCPM=100), 运动鞋 B (eCPM=50), 低价白牌鞋 C (eCPM=5)$\}$

R-Decoder 打分后,$s_A=0.9, s_B=0.7, s_C=0.1$,经 softmax 得 $p^{\text{target}} \approx [0.56, 0.37, 0.07]$

DC Loss 要求生成模型 $\pi_\theta$ 输出的概率尽量接近 $[0.56, 0.37, 0.07]$。若当前生成模型对 C 的生成概率是 0.30(过高),则 DC Loss 会产生较大梯度,推动模型降低 C 的生成概率。

这样即使下一次推理生成阶段不做排序,生成模型本身就已经学会了「更倾向于生成高 eCPM 的 item」。这就是从排序到生成的知识蒸馏,实现全局分布对齐。

📊
实验结果

3.1 离线实验(RQ1)

实验遵循 GPR 的实验设置,使用腾讯内部大规模真实数据集,涵盖广告和有机内容场景下的多样化用户交互。

Baselines:HSTU(Meta,万亿参数生成推荐架构)、GPR(腾讯,MTP 版本端到端生成推荐框架)

模型 HR@1 HR@3 HR@5 HR@10 NDCG@5 NDCG@10 NDCG@15
HSTU 0.1741 0.3508 0.4648 0.6604 0.6763 0.7025 0.7396
GPR 0.1824 0.3703 0.4935 0.6957 0.6818 0.7070 0.7445
OneRanker 0.2639 0.4959 0.6213 0.7945 0.7904 0.7970 0.8206
核心数字:OneRanker 的 HR@1 达到 0.2639,相比 GPR 的相对提升 +44.7%;NDCG@15 从 0.7445 提升到 0.8206,提升 +10.2%。

3.2 在线 A/B 实验(RQ5)

在腾讯微信频道(数亿活跃用户,千万级动态广告池)的生产广告系统上进行分阶段灰度测试:

流量阶段 GMV 提升 GMV-Normal 提升 Costs 提升
5% 灰度 +0.407% +1.343% +0.719%
20% 灰度 +0.780% +0.645% +1.146%
80% 灰度 +0.084% +0.350% +0.449%

OneRanker 最终全量上线(100% 流量)成为微信频道广告推荐系统的生产主干模型,综合 GMV-Normal 指标提升 +1.34%,Costs 提升 +0.72%。

🔬
消融研究

4.1 关键结构组件消融(RQ2)

消融变体 HR@1 HR@5 NDCG@5 说明
OneRanker(完整) 0.2639 0.6213 0.7904 完整三步架构
w/o DC Loss 0.2629 0.6173 0.7865 去掉分布一致性损失
w/o S2 token injection 0.2610 0.6161 0.7858 Step 3 不复用 Step 2 KV
with S3 ranker only 0.2601 0.6157 0.7849 Step 3 仅复用 Step 1 KV
OneRanker S2 0.2214 0.5448 0.7440 仅 Step 1+2,无 Step 3 排序
w/o Target 0.2080 0.5203 0.7285 去掉 Fake Item Token
w/o Target & MDA 0.2035 0.5066 0.7275 去掉目标感知 + 多任务解耦

关键发现:

  • Step 3(统一排序)贡献最大:从 OneRanker S2(HR@5=0.5448)到完整 OneRanker(HR@5=0.6213),提升 +14%
  • Fake Item Token 不可或缺:去掉后 HR@5 下降 -4.5%,NDCG@5 下降 -2.1%
  • DC Loss 提供额外增益:去掉后 HR@5 下降 -0.6%
  • KV 透传的输入侧一致性关键:Step 2 → Step 3 的 KV 注入比仅 Step 1 KV 还多贡献 +0.14% HR@5

4.2 Step 2 专项设计消融(RQ3)

消融变体 HR@1 HR@3 HR@5
OneRanker S2(基线) 0.2214 0.4257 0.5448
w/o CA-Pri(去掉 Cross-Attention 优先化) 0.2117 0.4100 0.5277
w/o H-Mask(去掉异质掩码) 0.2149 0.4151 0.5335

Cross-Attention 优先化(-3.1% HR@1)和异质掩码策略(-2.9% HR@1)都是必要设计,缺一不可。

📈
DC Loss 一致性分析(RQ4)
Figure 3a: Absolute Rank Difference
Figure 3(a)(论文原图):有/无 DC Loss 时,生成排序与精排排序的绝对排名差异箱线图。DC Loss 显著压缩 IQR,提升决策一致性。
Figure 3b: Top-K Item Overlap Ratio
Figure 3(b)(论文原图):有/无 DC Loss 时在 30 个候选 item 上的 Top-K 物品重叠率曲线。优化后曲线在所有 K 值处均保持领先,验证了 DC Loss 对全局分布一致性的约束效果。

DC Loss 的效果验证:

  • 排名差异 IQR 压缩:说明单次排名方差减小,决策更稳定
  • Top-K 重叠率持续领先:在 K=1 处起点更高,且全程不低于对照组,说明全局分布级别的一致性得到保证
理论意义:$\mathcal{L}_{\text{rank}}$ 是 Pairwise 局部优化,只保证相邻 item 对的相对顺序;$\mathcal{L}_{\text{DC}}$ 是分布级全局约束,通过 KL 散度最小化将排序器的「全局偏好分布」蒸馏到生成器,从根本上解决了两个模块分布不一致的问题。两者互补,不能相互替代。
💡
总结与个人理解

核心贡献梳理

1
价值感知多任务解耦

首次在生成式推荐框架内,通过任务 Token 序列 + 因果掩码,将兴趣覆盖(CTR/CVR)和价值优化(eCPM)解耦到独立子空间。消除了单任务融合的梯度冲突,也避免了阶段解耦的信息损失。

2
由粗到细的协同目标感知

Step 2 用 Fake Item Token(K-means 聚类中心)实现粗粒度类目级别的目标感知;Step 3 用 R-Decoder 对实际候选 item 进行细粒度 cross-attention 打分。粗细两级感知相互配合,生成阶段就开始考虑候选 item 的语义分布,排序阶段进一步精化。

3
输入-输出双侧一致性保证

输入侧:KV 透传机制让 Step 3 复用 Step 1+2 的内部状态,解决表示碎片化。输出侧:DC Loss 通过 KL 散度将排序器的全局偏好分布反向蒸馏到生成器,解决优化目标不对齐。双侧一致性共同建立了生成与排序的端到端协同优化通道。

亮点

✅ 工程实用性强:三步架构在单次前向传播中完成,生成和排序共享参数,无需额外存储独立排序模型。KV cache 复用不增加额外的存储开销,适合工业部署。
✅ DC Loss 设计优雅:将排序→生成的知识传递抽象为 KL 散度最小化,并推导为软标签交叉熵形式。这本质上是把排序器当 teacher,生成器当 student 的知识蒸馏,但蒸馏目标是候选集上的全局概率分布而非单个 item 的硬标签,避免了正负样本稀疏的问题。

不足与思考

  • K-means 聚类的动态性:Fake Item Token 的聚类中心是静态预计算的,无法随 item 空间的实时变化更新。在 item 高频更新的广告场景中,这可能引入一定的滞后性。
  • 三步深度耦合带来训练复杂性:Step 2 需要来自 Step 1 的 KV,Step 3 需要来自 Step 1+2 的 KV,且三步共享反向梯度。梯度流向复杂,对调参和稳定性有更高要求。
  • R-Decoder 的延迟开销:Step 3 虽然只用单层 R-Decoder,但在推理时需要对 $n$ 个候选 item 进行 cross-attention,实际延迟影响未在论文中详细分析。

📄 论文OneRanker: Unified Generation and Ranking with One Model in Industrial Advertising Recommendation

👥 作者:Dekai Sun, Yiming Liu, Jiafan Zhou, Xun Liu, Chenchen Yu, Yi Li, Jun Zhang, Huan Yu, Jie Jiang

🏢 机构:腾讯微信频道广告系统团队

📅 发布时间:2026 年 3 月(arXiv 2603.02999 v3)