OneRec 是首个在工业场景完全替代三级级联推荐 pipeline 的端到端生成式推荐模型:1B 参数 Encoder-Decoder + MoE 架构,一次性生成整个 session(5 个视频的 SID),Balanced K-Means 解决 codebook 不均衡问题,IPA 策略用 Reward Model 自动构造 DPO 偏好对进行迭代对齐;快手主页 A/B:总观看时长 +1.68%,人均单次观看时长 +6.56%。
📄 原文:https://arxiv.org/abs/2502.18965
🔗 前驱工作:TIGER(NeurIPS 2023)、LETTER(arXiv 2403.06361)
① 单阶段替代三级漏斗:Encoder-Decoder + MoE,一个模型统一召回与精排,彻底消除多阶段信息损失;
② Session-wise 生成:一次输出 5 个视频的完整 session,而非逐 item 生成,捕获 session 内 item 间关联性;
③ IPA 迭代偏好对齐:Reward Model 打分 → Beam Search 采样 → DPO 构造偏好对 → 迭代优化,闭环提升推荐质量。
快手的视频推荐系统日活用户超过 3 亿,传统架构采用三阶段级联排序:召回(Retrieval)→ 粗排(Pre-ranking)→ 精排(Ranking)。每个阶段独立训练、优化目标不同,上游的天花板限制了下游的性能上限。
传统级联 vs OneRec 统一架构
传统三阶段级联
- 召回:从 $10^{10}$ 个视频筛到 $10^5$(MIPS/ANN)
- 粗排:从 $10^5$ 筛到 $10^3$(轻量排序模型)
- 精排:从 $10^3$ 筛到 $10^2$(复杂重排模型)
- 各阶段独立优化,目标不一致,信息损失累积
OneRec 端到端生成
- Encoder 处理用户历史(最长 256 个视频)
- Decoder 直接生成 session(5 个目标视频的 SID)
- 一个模型 = 召回 + 精排,目标统一
- 在线 A/B:总观看时长 +1.68%,人均视频时长 +6.56%
OneRec 是快手首个在大规模工业场景中显著超越多阶段 pipeline 的端到端生成式推荐模型,具有重要的工业落地意义。
2.1 均衡 K-Means 语义 ID(Balanced Identifier Quantization)
传统 RQ-VAE 存在"沙漏现象"(hourglass phenomenon):少数 codebook 码字被频繁使用(高频 item 全都量化到几个热门码字),而大量码字闲置,导致 ID 分布极不均匀,Decoder 难以学习。OneRec 使用平衡 K-Means 解决这一问题。
量化算法:强制等分
对于每层 codebook,设总视频数为 $|V|$,codebook 大小为 $K$,则每个 cluster 强制包含 $w = |V|/K$ 个视频:
- $\mathbf{r}_i^1 = \mathbf{e}_i$:视频 $i$ 的多模态 embedding(初始残差)
- $\mathbf{c}_k^l$:第 $l$ 层第 $k$ 个 cluster 中心
- $s_i^l$:视频 $i$ 在第 $l$ 层被分配到的 cluster 编号(即该层的 ID token)
- $L$:总层数(论文中为 3 层,每层 codebook 大小 $K=8192$)
关键约束:每轮迭代中,每个 cluster 只接受距离最近的 $w$ 个未分配视频(通过优先队列顺序分配),强制保证 cluster 大小相等,从根本上消除沙漏现象。
沙漏现象(普通 RQ-VAE):快手有 100 亿个视频,但热门的"搞笑段子"类视频有 20 亿个,它们密集分布在 embedding 空间同一区域,导致第一层 8192 个 cluster 中的 5 个 cluster 就包含了大部分视频。Decoder 学到的策略就是"无论如何都输出这 5 个 cluster ID",对长尾视频几乎没有区分能力。
均衡 K-Means:每个 cluster 精确包含 100 亿 / 8192 ≈ 122 万个视频。即使"搞笑段子"有 20 亿个,它们也会被强制分散到约 1638 个 cluster(而不是 5 个)。每个 cluster 的视频数量均衡,Decoder 每次预测 token 时各 cluster 被预测的概率更加均匀,梯度更平衡,训练更稳定。
2.2 Session-wise 列表生成(Session-wise List Generation)
传统生成式推荐(如 TIGER)每次只预测"下一个 item"(Next-Item Prediction),然后再以该 item 为条件预测下下一个……这种逐点生成方式存在两个问题:
- 每次生成只看到单个 item,无法考虑 session 内视频之间的多样性和连贯性
- 需要人工设计规则来合并多次生成结果(如去重、强制多样性),非端到端优化
OneRec 定义 session 为一次刷新返回给用户的视频列表,通常包含 5-10 个视频。训练时直接以高质量 session 为学习目标(整体 session 而非单个视频),让模型自主学习 session 内的最优结构。
高质量 Session 筛选标准
- 用户在该 session 内实际观看的视频数 ≥ 5
- 用户观看总时长超过一定阈值
- 用户有明确的交互行为(点赞、收藏、分享等)
Session-wise 生成目标的形式化定义:
- $H_u$:用户历史行为序列(最近 256 个有效互动视频的 SID 序列)
- $S = \{v_1, v_2, \ldots, v_m\}$:目标 session($m=5$ 个视频)
- $s_i^j$:session 中第 $i$ 个视频第 $j$ 层的 SID token($j$ 从 1 到 $L=3$)
- $\text{BOS}$:视频分隔符 token,每个视频前插入一个 BOS
- $m$:session 中的视频数量(默认 5)
Next-Item(传统,逐点生成):Decoder 每次输出 1 个视频的 SID:[a_9, b_3, c_1]。然后把这个视频加入历史,再预测下一个:[a_4, b_5, c_4]。再加入历史再预测第三个……。生成第 3 个视频时,Decoder 只看到历史 + 第 1、2 个生成视频,不知道第 1 和第 2 个视频合在一起是否多样,也不知道加入第 3 个后 session 整体质量如何。
Session-wise(OneRec,整体生成):Decoder 一次性生成 5 个视频的完整 SID 序列:[BOS, a_9, b_3, c_1, BOS, a_4, b_5, c_4, BOS, a_6, b_1, c_5, BOS, a_2, b_7, c_2, BOS, a_9, b_1, c_3]。训练 loss 对整个 session 的每个 token 同时计算,模型能感知"整个 session 是否高质量",自然学会了 session 内的多样性和连贯性控制,无需人工规则。
2.3 Encoder-Decoder + Sparse MoE 架构
OneRec 采用 T5 风格的 Encoder-Decoder 架构,Decoder 中的 FFN 层全部替换为 Sparse Mixture-of-Experts(MoE)层:
- $N_\text{MoE} = 24$:总 expert 数量(每层 24 个 FFN)
- $K_\text{MoE} = 2$:每次前向只激活 2 个 expert(稀疏性 = 2/24 ≈ 8%)
- $g_{i,t}$:第 $i$ 个 expert 对第 $t$ 个 token 的 gate 权重(仅 top-2 非零)
- $s_{i,t} = \text{Softmax}_i(H_t^l \cdot e_i^l)$:token $t$ 对 expert $i$ 的路由分数
- 推理时仅 13% 的参数被激活,大幅降低推理延迟
2.4 奖励模型设计(Reward Model)
DPO 训练需要 preference pairs(好的 session vs 差的 session)。NLP 中可以用人工标注,但推荐系统中用户不会明确表示"我更喜欢这个 session"。OneRec 训练一个多目标奖励模型来模拟用户偏好:
- $\mathbf{h}^f$:session 内各视频 target-aware embedding 经 self-attention 融合后的序列
- $\hat{r}_{swt}$:预测的 session 观看时长(session watch time)
- $\hat{r}_{vtr}$:预测的视频观看率(view-through rate)
- 还有 $\hat{r}_{wtr}$(关注率)和 $\hat{r}_{ltr}$(点赞率)
- $\text{Sum}(\mathbf{h}^f)$:session 内所有视频 embedding 的求和池化
Reward Model 用历史真实用户行为数据预训练,使用二值交叉熵 loss 在多个目标上联合训练,输出一个综合奖励分数 $r = R(u, S)$。
OneRec 用 Beam Search 为某个用户生成了 3 个不同的候选 session:
Session A:[搞笑段子①, 搞笑段子②, 搞笑段子③, 搞笑段子④, 搞笑段子⑤] → 主题重复,用户可能看了前 2 个就滑走。Reward Model 预测:swt=0.12, ltr=0.05 → 综合分低。
Session B:[搞笑段子①, 科技评测①, 美食探店①, 搞笑段子②, 健身教程①] → 多样但用户兴趣匹配度参差不齐。Reward Model 预测:swt=0.19, ltr=0.09 → 综合分中等。
Session C:[搞笑段子①, 搞笑段子②, 科技评测①, 美食探店①, 搞笑段子③] → 主题连贯 + 适度多样。Reward Model 预测:swt=0.22, ltr=0.12 → 综合分最高。
IPA 选择 Session C 为 chosen,Session A 为 rejected,构成 DPO 训练的偏好对。
2.5 迭代偏好对齐(Iterative Preference Alignment, IPA)
标准 DPO 只用一次,IPA 通过迭代自我改进的方式持续提升质量:
- 1用当前模型 $\mathcal{M}_t$ 通过 Beam Search(beam size=128)为每个用户生成 $N$ 个不同 session
- 2用 Reward Model $R(u, S)$ 对每个 session 打分
- 3选分数最高的 session 为 chosen $S^w_u$,分数最低的为 rejected $S^l_u$
- 4混合 NTP loss 和 DPO loss 训练,DPO 采样比例 $r_\text{DPO} = 1\%$(其余 99% 仍用 NTP)
- 5得到新模型 $\mathcal{M}_{t+1}$,用新模型重新生成候选 session,回到步骤 1
- $\mathcal{M}_{t+1}$:当前更新中的模型
- $\mathcal{M}_t$:reference 模型(固定,用于计算 KL 惩罚基准)
- $S^w_u$:用户 $u$ 的 chosen session(RM 分最高)
- $S^l_u$:用户 $u$ 的 rejected session(RM 分最低)
- $\beta$:KL 惩罚系数,防止过度偏离参考模型
总训练 loss 为:
论文消融发现 1% DPO 比例在 4/5 个目标上达到 5% 比例的 95% 性能,GPU 资源节省 80%——这是 OneRec 能在工业场景实际落地的关键工程决策。
第 1 轮:模型质量较弱,Beam Search 生成的最优 session 也只能打 0.22 分(勉强好),rejected 打 0.08 分(明显差)。DPO 能学到一些偏好信号,但 chosen session 本身不够好。
第 2 轮(用第 1 轮模型):模型稍强,现在 Beam Search 的最优 session 能打 0.28 分,rejected 还是 0.09 分。DPO 能从更高质量的 chosen 学习更强的偏好信号。
第 3 轮:最优 session 打 0.31 分……如此迭代,每轮的"自我生成的 hard negative"都是当前模型能力边界上的挑战性样本,比一次性用固定负样本训练效果好得多——这就是"自我改进"的本质。
2.6 在线部署架构
OneRec 的在线服务由三个核心组件构成:
- 离线训练系统:1B 参数模型,使用 XLA + bfloat16 混合精度,支持大规模分布式训练
- 在线推理服务:KV Cache 加速 + float16 量化减少内存,Beam Search beam_size=128(平衡质量与延迟)
- DPO Sample Server:仅对 1% 请求进行 DPO 采样(用 Reward Model 打分生成偏好对),供持续在线学习使用
离线对比(vs 传统方法 + TIGER)
| 模型 | swt↑ (mean) | swt↑ (max) | ltr↑ (mean) | ltr↑ (max) |
|---|---|---|---|---|
| SASRec(传统判别式) | 0.0375 | 0.0803 | 0.0314 | 0.0604 |
| TIGER-1B(逐点生成) | 0.0873 | 0.1368 | 0.0323 | 0.0579 |
| OneRec-1B(session 生成) | 0.0991 | 0.1529 | 0.0360 | 0.0660 |
| OneRec-1B+IPA(+偏好对齐) | 0.1025 | 0.1933 | 0.0397 | 0.1203 |
OneRec-1B 在 session watch time 的 max 指标上比 TIGER-1B 提升 +41.3%,加上 IPA 后 ltr (max) 提升 +107.8%(0.0579 → 0.1203),说明 IPA 对交互类指标的提升尤其显著。
模型规模消融(Scaling Law)
从 0.05B 到 1B 持续提升性能,具有稳定的 scaling 特性:
- 0.05B → 0.1B:max swt 提升 +14.45%
- 0.1B → 0.2B:+5.09%;→ 0.5B:+5.70%;→ 1B:+5.69%
DPO 采样比例消融
在 1% 到 5% 的 DPO 采样比例范围内,1% 比例已能获得约 95% 的最优性能,而 5% 需要 5 倍 GPU 资源。论文选择 1% 作为在线部署的工程平衡点。
在线 A/B 测试(快手主页信息流,1% 流量,1 个月)
| 模型 | 总观看时长 | 人均视频时长 |
|---|---|---|
| OneRec-0.1B | +0.57% | +4.26% |
| OneRec-1B | +1.21% | +5.01% |
| OneRec-1B+IPA | +1.68% | +6.56% |
在快手这样的超大规模平台上,1.68% 的观看时长提升代表着极大的商业价值(对应数亿用户每天数百万小时的增量观看时长)。
最重要的贡献
- Session-wise 生成是核心创新:不是"生成单个推荐"而是"生成推荐列表",让模型能感知多视频之间的关系,这是 OneRec 超越 TIGER 的关键。
- IPA = 自我博弈式提升:用当前模型的 beam search 结果构造 hard negative,再 DPO 训练,形成正向循环。这是 AlphaGo 自对弈思想在推荐系统的应用。
- 1% DPO 是工程智慧:论文中仔细分析了计算资源与性能的权衡,最终选择 1% 而非更大比例,这种工程意识在工业论文中非常难得。
潜在不足
- Session-wise 生成要求训练数据中有高质量 session 标注,数据集构建成本高(需要满足 3 个以上筛选条件的真实 session)。
- Reward Model 本身的质量直接影响 IPA 的上限——如果 RM 不准,chosen/rejected 的区分就会有噪声,DPO 效果打折。
- MoE 推理需要 All-to-All 通信,分布式部署时可能成为延迟瓶颈(尤其是 expert 跨卡分布时)。
对我的启发
OneRec 给了我一个重要信号:生成式推荐的潜力不仅在于"好的 item tokenization",更在于"好的生成目标"。Session-wise 生成让模型优化的目标更接近线上真实场景(用户不是孤立地接受每个推荐,而是整体评价这一屏内容的质量),这种"任务定义的优化"往往比"模型架构的优化"带来更大的收益。
论文链接:arXiv 2502.18965
关键词:生成式推荐 · Session-wise 生成 · MoE · DPO · 偏好对齐 · 端到端推荐
对比基线:SASRec, BERT4Rec, TIGER, DPO/IPO/cDPO 等多种变体