OneRec-V1解读
Swift Lv6

OneRec通过端到端的生成式框架替代了传统的召回-排序的级联架构。在此系统学习下OneRec-V1。

overview

1. 背景与动机

传统推荐系统采用多阶段级联架构(召回 → 粗排 → 精排 → 重排),论文指出其三大根本性缺陷:

1.1 计算碎片化

以快手为例,服务期 超过 50% 的资源用于通信和存储而非高精度计算。精排模型在旗舰 GPU 上的 MFU 仅 4.6%(训练)/ 11.2%(推理),而 LLM 在 H100 上可达约 40%。同时 QPS > 400k、延迟 < 500ms 的约束,使模型被迫在低算力规模运行。

1.2 目标冲突

  • 多目标冲突:CTR、观看时长之外还有数百个来自用户、创作者、平台生态的目标,分散在各阶段优化,逐步破坏系统一致性;
  • 跨阶段建模冲突:召回效果受限于排序模型能力,排序又受上游次优结果影响。

1.3 落后于 AI 演进

LLM/VLM 领域的缩放定律、强化学习(RLHF/DPO/GRPO)等突破,因级联架构的结构性壁垒难以迁移到推荐场景。

1.4 OneRec 的解法

将召回与排序合并为单阶段 Encoder-Decoder 生成式框架,端到端直接优化最终目标,并严格优化训练/推理计算效率。

2. 整体架构

OneRec 是一个Encoder-Decoder生成模型:输入用户多尺度行为表示,自回归生成目标视频的语义 ID 序列。

encoder-decoder

整体流程如下:

1
2
3
4
5
6
7
8
9
10
用户特征/行为序列
│
▼
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ ┌──────────────┐
│ Tokenizer │ │ Encoder │ │ Decoder │ │ Reward System│
│ 视频→语义ID │ │ 用户兴趣压缩 │ │ MoE 逐Token生成 │ │ P-Score/格式 │
└─────────────┘ └──────────────┘ └─────────────────┘ └──────────────┘
│
▼
语义ID → 视频映射 → (可选)RM Selection

3. 核心组件详解

3.1 Tokenizer:协同感知多模态语义 ID

方案:融合多模态特征以及协同过滤信号,用 RQ-Kmeans 生成由粗到细的层次化语义 ID。

tokenizer

3.1.1 多模态表示

多模态表示:每个视频输入 caption、tag、ASR、OCR、封面图、5 帧均匀采样帧,用 miniCPM-V-8B 处理,得到 $N_M = 1280$ 个 token 向量 $\mathbf{M} \in \mathbb{R}^{N_M \times d_t}$($d_t = 512$)。再用 QFormer 以 $N_{\tilde{M}} = 4$ 个可学习 query token 压缩:

其中压缩表示 $\tilde{\mathbf{M}} = \mathbf{Q}^{(N_c+1)} \in \mathbb{R}^{N_{\tilde{M}} \times d_t}$,$N_c = 4$ 为 QFormer 层数。

3.1.2 协同过滤先验

Item 对构造 $\mathcal{D}_{pair}$:

  1. User-to-Item 检索:对每个用户,取正点击目标 item,与用户最近历史正点击中最协同相似的 item 配对;
  2. Item-to-Item 检索:使用Swing之类的I2I且大于一定分数的Item组成Pairs

双训练目标:

  1. Item-to-Item 对比学习:
  1. Caption 生成损失(防止幻觉,保留内容理解能力,用 LLaMA3 作解码器):

其中 $\tau$ 为温度系数,$\mathrm{sim}(\cdot,\cdot)$ 为相似度函数,$\mathcal{B}$ 为 $\mathcal{D}_{pair}$ 的一个 batch,$t^k$ 为第 $k$ 个 caption token。

3.1.3 RQ-Kmeans 量化

初始残差($l=1$):

每层码本由残差的 K-means 质心得到:

其中 $C^{(l)} = \{\mathbf{c}_k^{(l)}\in \mathbb{R}^{N_{\tilde{M}}\times d_t}\mid k=1,\ldots,N_t\}$,$N_t$ 为码本大小。

最近质心索引:

残差更新:

迭代 $L_t = 3$ 层。最终视频 $m$ 表示为粗到细的语义标识 $\{s_m^1, s_m^2, \ldots, s_m^l\}$,支持渐进式 item 生成。

3.2 Encoder:多尺度特征工程 + 用户兴趣压缩

3.2.1 四条行为通路

通路 序列长度 内容
用户静态 1 uid、age、gender 等
短期行为 $L_s = 20$ vid/sid、aid、tag、ts、playtime、dur、label
正反馈行为 $L_p = 256$ 同上,高互动序列
终身行为 原始 10 万 → 压缩 $L_l = 2000$ 层次 K-means + QFormer 压缩

用户静态通路($\mathbf{e}\in\mathbb{R}^{64}$):

其中 $\mathbf{h}_u\in \mathbb{R}^{1\times d_{\mathrm{model}}}$。

短期通路:

维度约定:video embedding 对齐 $d_{\mathrm{model}}$,author embedding 512 维,其余 128 维;$\mathbf{h}_s\in \mathbb{R}^{L_s\times d_{\mathrm{model}}}$。

正反馈通路(结构同上,序列长度 $L_p = 256$):

终身通路(最长 10 万条,两阶段层次压缩):

行为压缩:对每个用户交互序列做层次 K-means,每步簇数设为 $\lfloor \sqrt[3]{|D|} \rfloor$($|D|$ 为当前数据 item 数,经验设定),当簇内 item 数不超过阈值 $M$ 时终止,选离簇中心最近的 item 作代表。

特征聚合:稀疏类别特征(vid、aid、label)直接继承代表视频特征;连续特征(tag、ts、playtime、dur)取簇内均值。

长序列($L_l = 2000$)上每个视频被替换为对应簇代表特征:

QFormer 压缩($N_q = 128$ 个可学习 query,$N_l = 2$ 个 block):

得到压缩终身表示 $\mathbf{h}_l = \mathbf{h}_l^{(N_l)}\in \mathbb{R}^{N_q\times d_{\mathrm{model}}}$。

3.2.2 Encoder 架构

拼接四通路输出并加位置编码:

其中 $\mathbf{e}_{\mathrm{pos}}\in \mathbb{R}^{(1+L_s+L_p+N_q)\times d_{\mathrm{model}}}$ 为可学习位置编码。

经过 $L_{\mathrm{enc}}$ 层 Transformer(全可见自注意力 + FFN + RMSNorm):

最终输出 $\mathbf{z}_{\mathrm{enc}} = \mathbf{z}^{(L_{\mathrm{enc}}+1)}\in \mathbb{R}^{(1+L_s+L_p+N_q)\times d_{\mathrm{model}}}$。

3.3 Decoder:MoE + 逐点生成

点式生成范式:对每个目标视频 $m$,构造 [BOS, s¹, s², s³] 输入序列:

每个 Decoder 层($L_{\mathrm{dec}}$ 层):

MoE 层($N_{\mathrm{experts}}$ 个专家,top-$k$ 路由):

采用 DeepSeek 的无辅助损失负载均衡策略(loss-free balancing),避免干扰梯度。SwiGLU 专家隐维按 $\frac{2}{3}\times 4\times d_{\mathrm{model}}$ 计算并取 128 的倍数。

NTP 训练损失:

3.4 奖励系统与 ECPO 强化学习

预训练模型只拟合曝光 item 分布(来自传统系统),无法突破传统推荐天花板。因此引入基于奖励系统的偏好对齐,在生成 item 空间做 on-policy RL。

3.4.1 偏好对齐:P-Score

用神经网络学习个性化融合分 P-Score(基于 SIM 架构,多塔各学单目标,隐层 + user/item 表示进 MLP):

调整 $w^{\mathrm{xtr}}$ 使 P-Score 偏向各目标,最终实现全目标 AUC 提升。

3.4.2 ECPO(Early Clipped GRPO)

对用户 $u$,旧策略生成 $G$ 个 item,每个 item 与 user 输入偏好奖励模型得 $r_i$:

优势估计(组内归一化):

改进的旧策略(提前裁剪):

其中 $\mathrm{sg}$ 为 stop gradient,OneRec 设 $\delta = 0.1$。

关键改进动机:原 GRPO 对负优势允许大策略比,易梯度爆炸。ECPO 对负优势样本提前 clip 最大 ratio,保证训练稳定同时保留负优势效果;因 RL 与 SFT 联合训练,移除 KL 散度损失(SFT loss 保证稳定性)。

3.4.3 格式奖励(Generation Format Regularization)

挤压效应(Squeezing Effect):加入 RL 后,负优势样本使模型把概率质量压缩到当前最优输出 $o^*$,导致合法 token 概率被挤到与非法 token 相当,合法率跌破 50%。

解法:从 $G$ 个样本随机选 $K$ 个做合法性 RL:

优化目标同 ECPO 公式,直接用 $A_i$ 作优势。实验显示 Top-k 选择会让模型只在 top 子集学合法(整体合法率先升后降),随机选择更稳健,最终达 95% 合法率,且带来 App 停留 +0.13%、观看时长 +0.30%。

5. 评估结果

5.1 强化学习消融

采样效率(不同 Pass@K 下 RL 影响):

方法 vtr Watch time App Stay Time Video View
Pass@32 w/o RL 0.1978 +1.62% -0.10% -4.18%
Pass@32 w/ RL 0.2138 +3.17% +0.39% -9.87%
相对提升 +8.08% +1.55% +0.49% -3.69%
Pass@128 相对提升 +6.61% +1.53% +0.38% -2.65%
Pass@512 相对提升 +2.05% -0.41% +0.09% +1.97%

RL 在 Pass@32 提升最大,说明 top 排序精度显著增强,利于降低采样开销。

搜索空间(group size,Pass@128 下):

Group Size vtr Watch time App Stay Time Video View
0 (w/o RL) 0.2198 +4.61% +1.11% -12.75%
128 0.2303 +5.22% +1.49% -15.06%
512 0.2350 +5.73% +1.82% -15.49%
2048 0.2352 +5.84% +1.78% -15.49%

128 → 512 显著提升,2048 无额外收益。建议 ECPO group size ≈ 推理输出量的 4 倍。

搜索策略:

策略 vtr Watch time App Stay Time Video View
Top-k + Top-p 0.2131 +4.45% +1.16% -13.61%
Beam Search 0.2162 +5.35% +1.76% -13.30%
相对提升 +1.45% +0.87% +0.60% +0.36%

语义 ID 的前缀树编码结构与 Beam Search 系统性探索高度契合。

参考模型:on-policy(当前策略模型)离线奖励更优(vtr 0.2389 vs 0.2262),但线上提升不显著(存在轻微 reward hacking),是未来重点方向。

P-Score 奖励效果:

场景 Watch time App Stay Time Video View
快手 +0.21% +0.26% +0.17%
快手极速版 +0.71% +0.22% +0.35%

5.5 线上 A/B 测试

A/B

看上去OneRec还是负向效果,加了RL才做正,是否意味着端到端架构并没有带来收益?

FAQ

1. 每天大量产生的新视频如何冷启?

  • 论文中没有明确提出
  • 咨询了参与者,也没有针对该问题解决
  • 视频tokenize生成的sid具有一定的泛化性,相似的视频具有相同的前缀sid,对新品友好

2. 有无替代重排,那打分从哪儿获取

听说只是一路召回

3. 如果没有替代重排,那么精排直接生成sid,重排如何利用pctr?

4. p-score是否来源于老汤模型推出的item,那天花板是否还是老汤模型?

5. 预训练和后训练的样本有何异同?曝光空间,还是点击空间


参考

Powered by Hexo & Theme Keep
This site is deployed on
Unique Visitor Page View