⚡TL;DR
问题:把 LLM 风格的生成式推荐(GR)直接搬到广告系统,会被 多粒度业务字段、list-level eCPM 优化、实时多候选 <100ms 服务 三件事卡住。
方案(GR4AD = 四件套 co-design):
- UA-SID:MLLM 端到端微调 + MGMR RQ-Kmeans,码本碰撞率 85% → 18%。
- LazyAR:前 K 层不依赖 $s_{t-1}$ 可并行 + 跨 beam 共享,QPS 翻倍且基本不掉点。
- VSL + RSPO:value-aware CE + LambdaLoss 风格的 list-wise RL(被证明是 NDCG 上界)。
- Dynamic Beam Serving:分层 beam + 流量自适应 + result cache + FP8。
结果:快手广告全量部署,A/B 收入 +4.2%,500+ QPS / L20,<100ms 延迟,中小广告主投放量 +17.5%,转化率 +10.17%。
📖 阅读约定:贯穿全文的一条样本
为了让抽象的模块落到具体数字,本文用一条固定样本串起所有方法模块,请记住它:
- 用户 U:30 岁男,最近 30 天点击过 12 条运动相关广告,长期广告价值高($w_{user}=1.5$)
- 广告 $i$:「李宁旗舰店篮球鞋短视频」,价格 ¥399,转化方式=直播间引流,eCPM=12(桶号 v=8/10)
- 真实标签:U 看完后 购买 了($w_{behavior}=3.0$)
- 由 MGMR 量化出的 UA-SID =
(2, 1, 387)
下文每个模块都会让你看到这条样本被怎么处理、loss 怎么算、为什么 LazyAR 不会让 ta 召不回来、为什么 RSPO 比 DPO 更能把 ta 排到第 1 位。
①背景与动机
1.1 GR 的工业潮流
过去一两年,工业界(Meta HSTU、快手 OneRec、Google PLUM、美团 MTGR…)开始把传统 DLRM(Deep Learning Recommendation Model)改造成 生成式推荐器,希望复用 LLM 的两大红利:
- Scaling Law:模型加参数就能涨点。
- 统一架构:把召回/粗排/精排/重排压进同一个 next-token-prediction 框架。
代表工作:TIGER(RQ-VAE SID)、OneRec(统一召排)、PLUM(多分辨率码本)、HSTU(千亿参数序列 transducer)等。
1.2 广告场景的三个 Gap
把 GR 直接搬进广告,会立刻撞上三堵墙:
Gap 1:Tokenization 不够用
广告短视频混合了 视频画面 + 商品信息 + 商家 B 端属性 + 转化类型 + 账户 ID。纯语义 SID(TIGER 风格)抓不住非语义业务字段——同样视频但不同转化类型,投放轨迹完全不同。
Gap 2:学习范式不对齐
广告优化的是 list-level 收益(eCPM、NDCG),而 LLM 风格的 token-level CE loss 是 point-wise 的,不能直接优化排序;同时广告样本既来自模型自产,又来自其它生产 pipeline,offline DPO/SimPO 不够用。
Gap 3:实时服务约束
广告必须 多候选(数十/上百)+ 高并发 + <100ms。这和 LLM 单次响应可以"慢慢出"完全不同,beam 数指数膨胀直接把 GR 干爆。
GR4AD 的回答:不是拼 LLM,而是在 tokenization / architecture / learning / serving 四个维度都做"recommendation-native"的 co-design。
②方法详解
2.1 整体架构
GR4AD 的整体训练-服务架构如 Figure 1 所示,由四块串联:
2.2 UA-SID:统一广告语义 ID
2.2.1 UAE:Unified Advertisement Embedding
广告 item 包含三类异质信息:Video(画面/ASR/OCR/BGM)、Product(标题/价格/卖点)、Advertiser(地域/粉丝/价值)。GR4AD 基于 Qwen3-VL-7B 做端到端微调,主要两件事:
① Instruction Tuning(IT):设计 6 种 prompt 模板覆盖快手不同广告类型,例如:
- 直播间主播 → 让 MLLM 分析 profile + 地域
- 外循环商家 → 让 MLLM 聚焦行业 + 品牌
- 短视频创意 → 让 MLLM 解构心理触发点
② Co-occurrence Learning(CL):用 Swing 算法估计 item 共现强度,在 (Video, Product, Advertiser) 三元组上构造正样本对,配合 InfoNCE:
- $z_i, z_j, z_k$:item 的 MLLM 最后一层 hidden state(即广告 embedding)
- $\mathcal{P}_i$:与 item $i$ 高共现的正样本集合(Swing 估计)
- $\tau$:温度超参,越小正负样本区分越锐
- 分母:batch 内除自身外的全部样本(in-batch negatives)
假设广告 $i$ = 「李宁旗舰店的篮球鞋短视频」,输入到 Qwen3-VL-7B 的内容是:
- Video:6 帧画面(球场+球员运球)、ASR="夏天打球,必备这双轻量篮球鞋"、OCR="满 199 减 50"、BGM=hiphop
- Product:标题="李宁䨻轻弹篮球鞋"、价格=¥399、品牌=李宁、行业=运动鞋服
- Advertiser:账号="李宁官方旗舰店"、地域=福建、粉丝=820w、广告价值=高
Step 1 — IT:选中 Prompt Template 2(聚焦品牌+行业),MLLM 生成结构化理解 → 把 hidden state $z_i \in \mathbb{R}^{4096}$ 输出。
Step 2 — CL(Swing):在历史日志里发现,看过 $i$ 的用户中有 12.3% 在 30 分钟内点击了广告 $j$ = 「安踏跑鞋直播间」 → Swing 分数 0.47,列为正样本对 $(i,j)\in \mathcal{P}_i$。
Step 3 — InfoNCE:同 batch 256 条样本里,把 $z_i^\top z_j$(高)拉大,把 $z_i^\top z_k$($k$=「某手机广告」、「某美妆广告」)压小。温度 $\tau=0.07$。
训完的效果:在 photo-to-photo recall@1 测试(同款商品的两条不同视频能否互相召回),从 Qwen3-VL-7B 的 0.769 提升到 0.896(Table 2)— 这就是 IT+CL 带来的具体收益。
2.2.2 MGMR RQ-Kmeans:多粒度多分辨率量化
传统 RQ-Kmeans 用等大码本(4096-4096-4096),实测 码本利用率仅 0.1‰,碰撞率 85%。GR4AD 提出两个关键改进:
① Multi-Resolution(MR)
浅层用大码本(16384)抓粗粒度主因子(高熵),深层用小码本(1024)建模低熵残差。+ Balanced K-means 提升利用率。
② Multi-Granularity(MG)
把最后一层换成 hash,输入是非语义业务字段(账户 ID、转化类型)。语义相同但业务不同的广告由此被精确区分。
每个 item 最终被映射成离散 SID 序列:
- $T$:UA-SID 总深度(论文中 T=3,前两层语义 + 最后一层 hash)
- $\mathcal{V}_t$:第 $t$ 层的码本(前层大、后层小)
- $s_t$:第 $t$ 层离散 token(前两层来自 RQ-Kmeans,最后一层来自非语义字段 hash)
承接上例,UAE 给出 embedding $z_i \in \mathbb{R}^{4096}$。MGMR 走三步:
Level 1(语义粗粒度,码本 16384):在 16384 个聚类中心里找最近的,比如落到聚类 #2(簇含义≈「运动+服饰+男性向」)→ $s_1 = 2$,残差 $r_1 = z_i - c_2$。
Level 2(语义中粒度,码本 4096):把 $r_1$ 再在 4096 个中心里找最近,比如 #1(簇含义≈「篮球/球类专项装备」)→ $s_2 = 1$,残差 $r_2 = r_1 - c'_1$。
Level 3(业务字段 hash,槽位 1024):注意 — 这里 不再用 K-means。直接 $s_3 = \mathrm{hash}(\text{accountID}=\text{"李宁旗舰店"},\ \text{conversion}=\text{"直播间引流"}) \bmod 1024 = 387$。
最终 UA-SID = (2, 1, 387)。
对比看 MG 的价值:同样视觉特征「篮球鞋」,但「安踏官方店 / 商品成交」的另一条广告 → $s_1=2, s_2=1$ 完全一致(因为画面+品类相同),但 hash 后 $s_3 = 819$ → SID 变成 (2, 1, 819)。
没有 MG 时这两条会被合成同一个 SID,模型完全无法区分两家品牌的转化轨迹;加了 MG 后碰撞率从 85.4% → 18.3%。
效果(Table 2):碰撞率 85.4% → 18.3%,码本利用率 0.10‰ → 0.34‰,压缩比 3.54 → 1.07。
2.3 LazyAR:懒惰自回归解码器
核心观察:在生成 SID 时,第 1 级 SID 的 loss 最大、最难学,但 beam 数 = 1(解码刚开始);后续层 loss 反而小,beam 数却指数膨胀。也就是说,"难的便宜,易的贵" — 这是推荐场景特有的 mismatch。
能否让后期层 少跑几层 AR,把算力省下来?
三种解码方式对比
| 方式 | 结构 | 优缺点 |
|---|---|---|
| Vanilla AR | 每层都喂 $s_{t-1}$,所有 SID 都跑全 $L$ 层 | 简单但慢,beam 越大越爆 |
| DeepSeek-MTP | 给每个后续 token 单独加浅 decoder | 引入额外参数,效果反而下降 |
| LazyAR (本文) | 前 K 层不依赖 $s_{t-1}$(可并行),第 K 层注入,后 L−K 层 AR | 前 K 层跨 beam 共享,省算力且不掉点 |
LazyAR 数学定义
给定 $1 \le K < L$,对每个 SID 级 $t$,先跑前 $K$ 层而不依赖 $s_{t-1}$:
然后在第 K 层用 Fuse 算子注入 $s_{t-1}$:
最后跑后 L−K 层自回归:
- $X = (x_1,\dots,x_S)$:context(用户序列 + 结构特征经线性 processor 得到)
- $p_t$:第 $t$ 级 SID 的位置 embedding
- $s_{t-1}$:上一级 SID 的 embedding($s_0$ = BOS)
- $\mathrm{Fuse}$:门控融合 — $W_g$ 投影 + 元素积 + 拼接 + $W_f$ 投影
- $K$:可调超参,$K=1$ 退化为标准 AR;论文取 $K = 2L/3$(实验 $L=9, K=6$)
- $\odot$:元素积;$[\cdot;\cdot]$:拼接
为什么不掉点
- 第 1 级 SID 仍走完整 L 层($s_0=$ BOS,没有 $s_{t-1}$ 可"晚注入")— 最难的没省。
- 引入 MTP-style 辅助 loss:训练时把 $h_t^{(K)} \triangleq m_t^{(K)}$ 直接预测目标 token,强迫前 K 层学到足够丰富的 latent 表示。
- 前 K 层 跨 beam 共享、并行计算,每个 SID 级只要算一次;只有后 L−K 层需要 beam 内 AR — 实际 beam search 的瓶颈就在后期层。
承接上例,现在线上来了一个用户请求,要为 ta 召回 ≤512 个广告 SID(每个 SID 是 3 级,如 (2,1,387))。Decoder 共 9 层。
① Vanilla AR 的算账:
- 第 1 级(s₁):beam=1,跑 9 层 → 9 次 decoder-layer 计算
- 第 2 级(s₂):beam 扩到 512,跑 9 层 → 512 × 9 = 4608
- 第 3 级(s₃):beam=512,跑 9 层 → 4608
- 合计 ≈ 9225 次 decoder-layer 计算,且 9 层必须严格串行(每层依赖 $s_{t-1}$)
② LazyAR(K=6)的算账:
- 前 6 层(不依赖 $s_{t-1}$):3 个 SID 级一次性并行算完 → 3 × 6 = 18,且可一次 GPU forward 完成
- 后 3 层(AR):第 1 级 beam=1 → 3 次;第 2 级 beam=512 → 1536;第 3 级 beam=512 → 1536
- 合计 ≈ 18 + 3075 ≈ 3093 次,约 1/3 算力,且前 6 层完全并行
③ 具体到那条「李宁篮球鞋」:
- 第 1 级用 BOS + context(用户最近看了 5 条运动相关视频)跑完整 9 层 → 输出概率最高 5 个:$s_1\in\{2, 7, 11, 3, 18\}$(top-1=2,对应"运动服饰男向")— 这里 LazyAR 不省,因为最难
- 第 2 级以 $s_1=2$ 为前缀展开 beam=512,对每条 beam,前 6 层结果其实和 $s_1$ 无关 → 直接复用;只有最后 3 层注入 $s_1$ 的 emb 后 AR 计算
- 第 3 级同理,前 6 层再次复用,最后 3 层做 hash bucket 预测
→ 实测 QPS +117%,revenue 仅从 +4.32% 跌到 +4.28%(≈无损)。对比 DeepSeek-MTP 同等 QPS 下跌到 +3.98%。
实验:LazyAR 让 QPS +117%,revenue 仅从 +4.32% → +4.28%(几乎无损);而 DeepSeek-MTP 同等 QPS 下 revenue 跌到 +3.98%。
2.4 VSL:价值感知监督学习
在标准 SID next-token-prediction loss
之外,VSL 增加三件事:
① eCPM Token Prediction
把连续 eCPM 离散化成等概率桶,作为 SID 之后的额外预测 step:
- $v$:当前样本的离散化 eCPM token(按等概率分桶)
- $y$:UA-SID 序列;$X$:context
- $\lambda_e$:eCPM loss 权重超参
- 推理时 $p(v\mid y, X)$ 可用于对生成的 SID 做 re-rank
② Value-Aware Sample Weighting
每条样本权重 $w = w_{user}\cdot w_{behavior}$:
- $w_{user}$:用户长期广告价值(高价值用户权重大)
- $w_{behavior}$:行为深度(购买 > 加购 > 点击)
③ MTP Auxiliary Loss
配合 LazyAR 的设计,强迫前 K 层 trunk 自己就能预测目标 token,形成 $\mathcal{L}_{MTP}$。
- $D$:训练样本流(在线日志)
- $w = w_{user}\cdot w_{behavior}$:sample-level 权重
- $\lambda_{mtp}$:MTP 辅助 loss 强度
VSL 的本质:把"分布拟合"和"业务价值"两件事缝进同一个 CE 框架里。
用户 U 看完一个 30 元蛋白粉广告后,购买了我们的李宁篮球鞋(target SID = (2, 1, 387),eCPM=12,桶号 v=8/10)。同时另一条样本是 U 仅点击了某条手游广告(SID=(18,5,71),eCPM=0.8,v=1/10)。
① $\mathcal{L}_{SID}$(标准 CE,3 步):
- step 1:$-\log p(s_1=2 \mid X) = -\log 0.18 \approx 1.71$(第 1 级最难,loss 最大)
- step 2:$-\log p(s_2=1 \mid s_1=2, X) = -\log 0.42 \approx 0.87$
- step 3:$-\log p(s_3=387 \mid s_{1:2}, X) = -\log 0.71 \approx 0.34$
- $\mathcal{L}_{SID} = 1.71+0.87+0.34 = 2.92$
② $\mathcal{L}_{eCPM}$(多预测一个 eCPM 桶):$-\log p(v=8 \mid y, X) = -\log 0.25 \approx 1.39$
设 $\lambda_e=0.3$ → $\mathcal{L}_{NTP} = 2.92 + 0.3\times 1.39 = 3.34$
③ Sample weight:
- 李宁鞋样本:$w = w_{user}\cdot w_{behavior} = 1.5\times 3.0 = 4.5$(高价值用户 + 购买行为)
- 手游点击样本:$w = 0.8\times 1.0 = 0.8$(低活用户 + 浅点击)
- → 李宁鞋样本贡献的最终 loss ≈ 4.5 × 3.34 = 15.0;手游样本即使 NTP loss 一样大,也只贡献 ≈ 2.7
→ 同一份训练数据下,模型会优先学好「高价值用户深度转化」的分布,而不是被海量"低活用户的浅点击"稀释。这就是 VSL 对纯 CE 的直接超越(+2.80% vs OneRec-V2 +1.68%)。
2.5 RSPO:Ranking-Guided Softmax Preference Optimization
VSL 是 point-wise 拟合 logged 分布,不直接优化 list-level NDCG。RSPO 把 LambdaLoss 思想嫁接到 DPO/SDPO 框架,用一条统一的 list-wise 目标。
- $\mathcal{Y}=\{y_1,\dots,y_n\}$:候选列表,$v_i$ 是 $y_i$ 的 reward(eCPM)
- $\mathcal{E}_i = \{y_j \mid v_j < v_i\}$:reward 比 $y_i$ 低的候选集
- $M_{ij}=\big|\,\tfrac{1}{D_{|i-j|-1}}-\tfrac{1}{D_{|i-j|+1}}\big|\cdot|G_i - G_j|$:LambdaRank 系数
- $G_i=(2^{v_i}-1)/Z$,$D_i=\log_2(1+i)$,$Z$ 是 ideal DCG
- $\beta$:偏好强度
- $C_{ij}$:reference 可用性二值 gate(公式 18 阈值 $\delta$ 控制,离 $p_{ref}$ 太远就丢掉 reference)
NDCG 上界(论文附录 A.1):
论文证明 $\mathcal{L}_{RSPO}$ 是 $\mathrm{NDCG}_{cost}$ 的上界 → 最小化 RSPO ⇒ 最大化 NDCG,提供 RL 端的排序对齐保证。
为什么需要 $C_{ij}$ 这个 gate?
- 样本来自异构源:GR4AD 自产样本可记录 $p_{ref}$;其它 pipeline 来的样本没有 $p_{ref}$。
- 即便有 $p_{ref}$,distribution drift 也可能让它失效,此时强行约束反而引入噪声。
- 实现:当 $\frac{1}{|\mathcal{E}_i \cup\{y_i\}|}\sum |\log p_\theta/p_{ref}| < \delta$ 时启用 reference,否则丢掉。
承接上例,用户请求被 GR4AD 召回了 5 条广告(取 beam top-5 简化),ground-truth reward(eCPM)排序:
| SID | 含义 | eCPM (v) | ideal rank | 模型当前 likelihood rank |
|---|---|---|---|---|
| (2,1,387) | 李宁篮球鞋(这条) | 12.0 | 1 | 3 ❌ |
| (2,1,819) | 安踏跑鞋 | 10.5 | 2 | 1 |
| (7,3,55) | 男士运动短裤 | 6.2 | 3 | 2 |
| (11,2,9) | 蛋白粉 | 3.1 | 4 | 4 |
| (18,5,71) | 手游下载 | 0.8 | 5 | 5 |
① DPO 的处理:
- 只能构造 chosen/rejected 对,最常见做法是把最高 reward 当 chosen、随机抽个低 reward 当 rejected → 比如 (李宁鞋 vs 手游)。
- 问题:模型已经把"手游"排到最后了(rank=5,对齐 reward),这对里没"难样本";而真正错的是「李宁鞋 vs 安踏鞋」(rank 1↔3 颠倒),DPO 这一对 loss 几乎为 0,错过了关键梯度。
② RSPO 的处理:以李宁鞋(i=1)为 anchor,$\mathcal{E}_1 = \{$安踏、短裤、蛋白粉、手游$\}$(reward 全部更低)。
- 对每个 $y_j\in \mathcal{E}_1$ 算 LambdaRank 系数 $M_{1j} \propto |G_1 - G_j|\cdot|1/D_{|1-j|-1} - 1/D_{|1-j|+1}|$
- 关键:模型把李宁鞋(高 reward)排到了第 3,安踏鞋(低 reward)排到了第 1 → $M_{1,2}$(rank 临近 + reward gap 较大)非常大,这条对的 softmax 项主导整个 loss → 梯度优先把这对 swap 回来。
- 而 (李宁 vs 手游) 这种 rank 已经"对的方向"的对,$M$ 自动很小,几乎不消耗梯度。
→ DPO 像随机刷题,RSPO 像哪里错重点刷哪里。Table 1 上 RSPO (+3.86%) 显著优于 DPO (+3.16%) 与 GRPO (+3.21%)。
同一条李宁鞋样本,假设:
- 场景 A(GR4AD 自产,新鲜):$p_{ref}$ 是 1 小时前的模型快照,$|\log p_\theta/p_{ref}|$ 平均 0.3 < 阈值 $\delta=1.0$ → $C_{ij}=1$,用 reference 做正则。
- 场景 B(其它 pipeline,无 ref):根本没记录 $p_{ref}$ → $C_{ij}=0$,等价于把分母里 $p_{ref}$ 设成 1,loss 退化为纯 list-wise SimPO 形式。
- 场景 C(GR4AD 自产,但模型已大改):$p_{ref}$ 是 3 天前的,$|\log p_\theta/p_{ref}|$ 平均 1.8 > $\delta$ → 强行拉回反而拖后腿,$C_{ij}=0$ 直接丢掉。
这种 gate 让 RSPO 能消化异构来源 + 漂移的训练流,是在线学习能跑稳的关键工程细节。
2.6 Unified Learning of VSL & RSPO
工业在线学习无法像 LLM 那样把 SFT / RL 分阶段做,必须 同流训练。GR4AD 借鉴 HPT 思想,引入 sample-level rank discrepancy:
- $r_p^{(i)}$:候选 $i$ 在模型 likelihood $p_\theta(y_i\mid X)$ 下的 rank
- $r_v^{(i)}$:候选 $i$ 在 reward $v_i$(eCPM)下的 rank
- $n$:候选列表长度
- $A^{(i)}$ 越大,模型偏离 reward 越远
动态分配 VSL / RL 权重:
- $w_0$:基础缩放因子
- $Z_{max}$:RL 权重上限(避免训练发散)
- $A$ 大 → VSL 权重大(先把分布对齐到 reward);$A$ 小 → RL 权重大(专注 list 级优化)
还是这条召回列表(n=5),李宁鞋 reward 排第 1,模型当前 likelihood 排第 3。我们看权重怎么算:
T₀ 时刻(模型刚冷启):
- $r_p^{(1)}=3, r_v^{(1)}=1$ → $A^{(1)} = |3-1|/(5-1) = 0.5$(偏离较大)
- $w_{VSL}^{(1)} = w_0 \cdot \exp(0.5\cdot \log(1+12)) = w_0 \cdot 13^{0.5} \approx 3.6\,w_0$ (VSL 权重大)
- $w_{RL}^{(1)} = w_0 \cdot Z_{max}^{1-0.5} = w_0 \cdot \sqrt{Z_{max}}$ (RL 权重适中)
- 👉 这条样本主要走 VSL:先让模型学到「李宁鞋这种 SID 在这个用户的 context 下概率应该更高」
T₅₀₀ 时刻(在线训练 500 步后):
- 模型已经把李宁鞋拉到 rank=2,安踏到 rank=1 → $A^{(1)} = |2-1|/4 = 0.25$(基本对齐)
- $w_{VSL}^{(1)} = w_0\cdot 13^{0.25} \approx 1.9\,w_0$ (VSL 权重下降)
- $w_{RL}^{(1)} = w_0\cdot Z_{max}^{0.75}$ (RL 权重接近上限)
- 👉 此时样本主要走 RSPO:精修「李宁 vs 安踏」这种相邻位置的 list 级 ranking 错误
→ 等价于"新样本先模仿、老样本再精调",且完全 sample-level 自适应。比固定 $\lambda_{SFT}+\lambda_{RL}$ 的 HPT 更稳,是在线学习能避免训练崩盘的关键。
③部署与服务
3.1 闭环系统
GR4AD(0.16B 参数)已在快手广告全量上线,服务 4 亿用户。系统分四块组成闭环:
3.2 Dynamic Beam Serving (DBS)
DBS 把"算力 vs 收益"做成可调度的连续函数:
① Dynamic Beam Width (DBW)
固定 beam(如 512-512-512)在前期层是浪费 — 早期 beam 决定后期算力。DBW 改成 渐进增长:128-256-512,最终候选数不变,中间算力骤降。
② Traffic-Aware Adaptive Beam Search (TABS)
请求流量有强烈的峰谷周期。设 $Q_t$ 为时刻 $t$ 的 QPS,$B_{base}$ 为基础 beam 设定:
- $Q_t$:实时 QPS
- $\mathcal{C}_{avail}$:当前可用算力余量
- $f$:根据流量与算力余量的 beam 调度函数 — 低谷期放大 60% 榨干算力换收入;高峰期保持基线
3.3 其它优化
- Reco Result Cache:1 分钟内同用户重复请求复用结果(用户意图和广告池在短窗口内基本稳定)。
- Beam-Shared KV Cache:把 beam 沿序列维组织,多 beam 共享 encoder KV,KV 读复杂度从 $\mathcal{O}(B\cdot L)$ 降到 $\mathcal{O}(L)$。
- TopK Pre-Cut:每个 beam 先选 $k$ 个候选,再做全局 top-$k$ 聚合,提升 GPU 并行度。
- FP8 量化:把 FP32 → FP8,显存与算力双省。
④实验结果
4.1 主表对比(Table 1)
| 配置 | ΔRevenue vs DLRM | ΔQPS vs GR-Base |
|---|---|---|
| DLRM (Base) | — | — |
| OneRec-V2 (GR-Base) | +1.68% | — |
| + UA-SID | +1.92% | 0% |
| + VSL | +2.80% | −25% |
| + VSL + DPO | +3.16% | −25% |
| + VSL + GRPO | +3.21% | −25% |
| + VSL + RSPO | +3.86% | −25% |
| + Unified VSL & RSPO (UVR) | +4.01% | −25% |
| + UVR + DBS | +4.32% | +20% |
| + UVR + DBS + DeepSeek-MTP | +3.98% | +117% |
| GR4AD (+ UVR + DBS + LazyAR) | +4.28% | +117% |
关键看点:
- RSPO > GRPO > DPO(list-wise > group-wise > pair-wise,符合广告 ranking 直觉)
- LazyAR 把 QPS 翻倍同时只损失 0.04% revenue,显著优于 DeepSeek-MTP(同 QPS 下后者跌 0.34%)
- 每一层优化都正向叠加,最终 +4.28% revenue + 117% QPS
4.2 Scaling Law
- Model Scaling:0.03B → 0.32B,loss 单调下降(3.36 → 2.91),revenue 单调上升(+2.13% → +4.43%)。
- Inference Scaling:beam 128 → 1024,revenue +2.33% → +4.21%,但 QPS 跌到 30% — 典型的 inference-time scaling trade-off。
4.3 UA-SID 质量(Table 2)
Embedding 优化(R@1↑)
- QARM:0.541
- Qwen3-VL-7B:0.769
- + IT + CL (UAE):0.896
量化优化(Col↓)
- RQ-Kmeans (4096³):85.4%
- + MR (16384/4096/1024):59.7%
- + MG + MR:18.3%
4.4 业务指标
- 中小广告主投放量 +17.5%(受益于冷启覆盖与 SID 索引秒级更新)
- 广告转化率 +10.17%(更精准的兴趣建模)
- 低活用户转化率 +7.28%(content-based SID 的泛化能力)
- 系统级:500+ QPS / L20,<100ms 延迟,平台、广告主、用户三方共赢
💭我的理解
5.1 亮点
- 真·全栈 co-design:从 tokenization 到 serving 每一环都为广告业务量身改造,而不是仅靠"上更大模型"涨点。
- MGMR 思路非常工程化:"语义层 + 业务 hash 层"在 SID 设计里把"看着像但本质不同"的广告解开,对碰撞率影响极大(85.4% → 18.3%)。
- LazyAR 是最有借鉴意义的架构创新:抓住了"早期 token 难学但成本低,后期 token 易学但成本高"这个推荐特有的 mismatch。L=9, K=6 让 QPS 翻倍且几乎不掉点,工业界其它 GR 系统可以直接套用。
- RSPO 的数学严谨性:被证明是 NDCG 上界,比 DPO/SimPO/GRPO 在 ranking 任务上有可证明的优势。
- Unified VSL & RSPO 的动态权重:用 rank discrepancy $A^{(i)}$ 自适应切换 SFT/RL 权重,比 HPT 的固定权重更灵活,是在线学习场景下少数能落地的设计。
5.2 不足 / 可探讨
- RSPO 公式复杂:$M_{ij}$、$C_{ij}$、$p_{ref}$、$\delta$ 都是细节,复现门槛高。
- LazyAR 的 K 选择仅经验($K=2L/3$),缺乏理论分析。
- Reward Model 训练细节几乎没讲,但 RSPO 效果严重依赖 reward 质量。
- $A^{(i)}$ 计算需要 reward 全部已知,对完全冷启样本如何处理没明说。
- 0.16B 略小:Scaling 上看 0.32B 还在涨(+4.43%),上线版本估计是被 serving 预算压回 0.16B。
5.3 启发
- 推荐 GR 不必照搬 LLM RLHF — list-wise + ranking-aware 才是推荐的本分。
- "解码成本随 beam 指数增长"是所有 GR 绕不开的问题,LazyAR / MTP 类的"早期共享 + 后期 AR"思路值得普及。
- 业务字段不要硬塞进语义 embedding,直接在 SID 末位 hash 反而干净,且对碰撞率有立竿见影的效果。
- 在线学习场景下 SFT/RL 必须同流,且需要自适应权重,否则两个目标会互相打架。
- SID 索引秒级更新 vs embedding 索引分钟级更新,对冷启与中小广告主是巨大利好(+17.5%)。
一句话总结:GR4AD 把"生成式推荐"从 LLM 移植回广告系统的工程闭环 — UA-SID 解决 token 化、LazyAR 解决服务、VSL+RSPO 解决目标对齐,是当前生产级 GR 的最完整范本之一。