← 返回论文列表
📄 论文解读 · 生成式推荐 · 快手 · 2025

OneRec

Unifying Retrieve and Rank with Generative Recommender and Preference Alignment

机构
Kuaishou Inc. (快手)
来源
arXiv 2502.18965
年份
2025
核心命题
统一召回+排序的端到端生成式推荐
💡
一句话总结

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 构造偏好对 → 迭代优化,闭环提升推荐质量。
🌐
1. 背景与动机

快手的视频推荐系统日活用户超过 3 亿,传统架构采用三阶段级联排序:召回(Retrieval)→ 粗排(Pre-ranking)→ 精排(Ranking)。每个阶段独立训练、优化目标不同,上游的天花板限制了下游的性能上限。

根本问题:现有生成式推荐模型(如 TIGER)只能替代三阶段中的"召回"环节,其推荐精度远不及精排模型,因此无法真正替代完整的推荐 pipeline。OneRec 的目标是用一个统一的生成模型直接替代整个三阶段系统,输入用户历史,直接输出最终推荐 session。

传统级联 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. 方法详解
OneRec 整体框架
Figure 2(论文原图):OneRec 完整框架。左上:平衡 K-Means 语义 ID 生成;右上:Encoder-Decoder + MoE Decoder;左下/右下:IPA 流程,基于 Reward Model 的迭代 DPO 训练。

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$ 个视频:

$$s_i^l = \arg\min_k \| \mathbf{r}_i^l - \mathbf{c}_k^l \|_2^2, \quad \mathbf{r}_i^{l+1} = \mathbf{r}_i^l - \mathbf{c}_{s_i^l}^l$$
符号说明
  • $\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 大小相等,从根本上消除沙漏现象。

💡 举例:沙漏现象 vs 均衡 K-Means

沙漏现象(普通 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 生成目标的形式化定义:

$$S := \mathcal{M}(H_u)$$ $$\mathcal{L}_\text{NTP} = -\sum_{i=1}^{m}\sum_{j=1}^{L} \log P(s_i^{j+1} | [\text{BOS}, s_1^1, \ldots, s_m^j]; \Theta)$$
符号说明
  • $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 vs Session-wise 生成

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)层:

$$H_t^{l+1} = \sum_{i=1}^{N_\text{MoE}} g_{i,t} \cdot \text{FFN}_i(H_t^l) + H_t^l$$ $$g_{i,t} = \begin{cases} s_{i,t}, & s_{i,t} \in \text{TopK}(\{s_{j,t}\}_{j=1}^{N}, K_\text{MoE}) \\ 0, & \text{otherwise} \end{cases}$$
符号说明
  • $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% 的参数被激活,大幅降低推理延迟
参数效率:OneRec-1B 部署到线上时,虽然总参数量达 10 亿,但每次前向传播仅激活约 13%(~1.3亿个参数的计算量),实际 FLOPs 等价于约 0.13B 的 dense 模型。MoE 让 OneRec 在不显著增加推理成本的前提下显著提升模型容量。

2.4 奖励模型设计(Reward Model)

DPO 训练需要 preference pairs(好的 session vs 差的 session)。NLP 中可以用人工标注,但推荐系统中用户不会明确表示"我更喜欢这个 session"。OneRec 训练一个多目标奖励模型来模拟用户偏好:

$$\hat{r}_{swt} = \text{Tower}_{swt}(\text{Sum}(\mathbf{h}^f))$$ $$\hat{r}_{vtr} = \text{Tower}_{vtr}(\text{Sum}(\mathbf{h}^f))$$ $$\text{Tower}(\cdot) = \text{Sigmoid}(\text{MLP}(\cdot))$$
符号说明
  • $\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)$。

💡 举例:奖励模型给 Session 打分

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. 1
    用当前模型 $\mathcal{M}_t$ 通过 Beam Search(beam size=128)为每个用户生成 $N$ 个不同 session
  2. 2
    用 Reward Model $R(u, S)$ 对每个 session 打分
  3. 3
    选分数最高的 session 为 chosen $S^w_u$,分数最低的为 rejected $S^l_u$
  4. 4
    混合 NTP loss 和 DPO loss 训练,DPO 采样比例 $r_\text{DPO} = 1\%$(其余 99% 仍用 NTP)
  5. 5
    得到新模型 $\mathcal{M}_{t+1}$,用新模型重新生成候选 session,回到步骤 1
$$\mathcal{L}_\text{DPO} = -\log\sigma\left(\beta\log\frac{\mathcal{M}_{t+1}(S^w_u|H_u)}{\mathcal{M}_t(S^w_u|H_u)} - \beta\log\frac{\mathcal{M}_{t+1}(S^l_u|H_u)}{\mathcal{M}_t(S^l_u|H_u)}\right)$$
符号说明
  • $\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 为:

$$\mathcal{L} = \mathcal{L}_\text{NTP} + \lambda \cdot \mathcal{L}_\text{DPO}$$

论文消融发现 1% DPO 比例在 4/5 个目标上达到 5% 比例的 95% 性能,GPU 资源节省 80%——这是 OneRec 能在工业场景实际落地的关键工程决策。

💡 举例:为什么要"迭代"而非一次 DPO

第 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 的在线服务由三个核心组件构成:

OneRec 在线部署架构
Figure 3(论文原图):OneRec 在线部署全景。离线训练 → 参数同步 → 在线推理;同时 DPO Sample Server 从在线流量中采样偏好数据,反馈给训练系统形成持续学习闭环。
  • 离线训练系统:1B 参数模型,使用 XLA + bfloat16 混合精度,支持大规模分布式训练
  • 在线推理服务:KV Cache 加速 + float16 量化减少内存,Beam Search beam_size=128(平衡质量与延迟)
  • DPO Sample Server:仅对 1% 请求进行 DPO 采样(用 Reward Model 打分生成偏好对),供持续在线学习使用
📊
3. 实验结果

离线对比(vs 传统方法 + TIGER)

模型swt↑ (mean)swt↑ (max)ltr↑ (mean)ltr↑ (max)
SASRec(传统判别式)0.03750.08030.03140.0604
TIGER-1B(逐点生成)0.08730.13680.03230.0579
OneRec-1B(session 生成)0.09910.15290.03600.0660
OneRec-1B+IPA(+偏好对齐)0.10250.19330.03970.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% 的观看时长提升代表着极大的商业价值(对应数亿用户每天数百万小时的增量观看时长)。

💡
4. 个人理解与启发

最重要的贡献

  • 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 等多种变体