← 返回论文列表
🏭 工业推荐系统 · 快手 · 2025

OneRec:端到端生成式推荐系统

OneRec Technical Report 深度解读 —— 以单一生成模型取代传统多阶段瀑布流(召回→粗排→精排→重排), 在快手 4 亿 DAU 的短视频推荐场景实现了系统性突破。

论文来源 arXiv 2506.13695
机构 快手 (Kuaishou)
场景规模 DAU 4 亿
A/B 提升 App Stay Time +0.54%~+1.24%
系统成本 传统系统的 10.6%
部署覆盖 ~25% QPS(短视频)
📋
论文概览

OneRec 是快手于 2025 年发布的工业级端到端生成式推荐系统, 首次在 4 亿 DAU 量级的短视频推荐场景中,以单一生成模型完整替代了传统的 多阶段瀑布流推荐系统(Cascade Pipeline),并在在线 A/B 实验中实现了 显著的业务指标提升,同时将系统 OPEX 压缩到传统架构的 10.6%

传统多阶段系统的瓶颈

❌ 传统瀑布流架构
召回(Retrieval)
粗排(Pre-ranking)
精排(Ranking)
重排(Re-ranking)
✅ OneRec 统一架构
Encoder(理解用户兴趣)
Decoder(自回归生成 Session)
RM Selection(可选 Reward 精选)

传统推荐管道存在三大核心问题,这些问题在工业实践中普遍存在、难以根治:

⚠ 问题一:局部最优(Local Optimum)
每个阶段独立优化各自目标,无法实现全局最优。精排看到的候选集已被召回和粗排严重过滤, 最终排序受制于上游决策,系统整体表现受限于最短板。
⚠ 问题二:目标不一致(Objective Misalignment)
各阶段模型结构和训练目标不同,例如精排模型的不足会被重排模型掩盖, 反之精排提升可能被重排策略抵消,形成跷跷板效应(Seesaw Effect)。 工程师不得不在不同阶段反复 patch,系统越来越臃肿。
⚠ 问题三:落后于 AI 进化(Lag Behind AI)
级联架构天然阻碍了 LLM/VLM 时代的技术红利落地: Scaling Laws、RLHF、多模态理解等技术无法直接应用于各阶段的独立模型; 新功能的上线需要在多个模型间协调改动,迭代成本极高。

OneRec 的解法

OneRec 的核心思路是:将推荐问题重新表述为条件序列生成问题。 给定用户的历史行为上下文 $u$,模型直接自回归地生成一组推荐视频的语义标识符序列, 而无需经过任何预设的候选集过滤流程。

📐 核心范式转换
传统范式: $\text{Score}(u, v) \rightarrow \text{Ranking} \rightarrow \text{Top-K}$

OneRec 范式: $p(v_1, v_2, \ldots, v_K \mid u) = \prod_{t=1}^{K} p(s_t^1, s_t^2, \ldots, s_t^{L_t} \mid u, v_1, \ldots, v_{t-1})$

其中 $(s_t^1, s_t^2, \ldots, s_t^{L_t})$ 是第 $t$ 个推荐视频 $v_t$ 的 语义标识符(Semantic IDs),由 Tokenizer 预先生成,$L_t=3$(三层粗到细分级编码)。

整个模型由三大模块构成:

1
Tokenizer(物品语义编码)
将视频的多模态特征(视觉、文本、标签)与协同过滤信号联合编码, 通过 RQ-Kmeans 生成 3 层粗到细的离散语义标识符(Semantic IDs)。
2
Encoder(用户兴趣理解)
四路并行特征工程:静态用户画像、短期行为序列(20条)、 正反馈行为序列(256条)、长期兴趣序列(最长 10 万条经层级压缩至 2000), 共同生成用户兴趣表示。
3
Decoder(Session 生成)
基于 MoE 架构的自回归 Transformer,以 Encoder 输出为条件, 逐 token 生成推荐会话的语义 ID 序列,完成从语义 ID 到实际视频的映射。 可附加 Reward Model 选择层进一步精炼推荐结果。
🏆
核心贡献

OneRec 的技术贡献可以从五个维度概括,每个维度都有明确的工程创新和实验验证:

01
端到端统一生成式推荐
首个在亿级 DAU 工业推荐系统上验证的端到端生成架构, 以 Encoder-Decoder 结构完整替代传统多阶段级联流水线, 彻底消除各阶段目标不一致问题。
02
协同信号增强的物品 Tokenizer
提出 RQ-Kmeans(残差量化 K-Means)方案,将多模态内容特征(miniCPM-V-8B 提取) 与协同过滤信号联合训练,生成兼顾语义相似性和交互模式的离散 Semantic IDs, 重建精度和码本利用率均优于 RQ-VAE。
03
长期兴趣建模(百万级行为序列)
通过两阶段压缩方案(层级 K-Means 聚类 + QFormer), 将最长 10 万条历史行为序列压缩为 128 个 Query Token 表示, 在不引入线性时间复杂度的前提下捕获用户深层长期兴趣。
04
ECPO 强化学习算法
提出 Early Clipped GRPO(ECPO):针对生成式推荐场景设计的 RL 算法, 引入早停裁剪解决负优势下的 Squeezing Effect(分布坍塌问题), 同时通过 Format Reward 维持合法生成率。
05
极致推理效率
训练 MFU 达 23.7%(较基线提升 5.2×),推理 MFU 达 28.8%(提升 2.6×), 系统 OPEX 仅为传统多阶段系统的 10.6%, 同时实现更好的推荐效果。
4亿
日活用户 DAU
+1.24%
快手 Lite App 停留时长提升
10.6%
传统系统 OPEX 占比
25%
线上 QPS 覆盖率
推理吞吐量提升
+21%
本地生活 GMV 提升
💡 为什么这很重要
工业推荐系统在过去十年中积累了大量技术债务 —— 层层叠加的策略和规则、跨阶段的 Seesaw Effect、 以及对 LLM 时代 Scaling 能力的天然排斥。 OneRec 展示了一个可行的工程路径:以单一大模型替代复杂系统, 不仅效果更好、成本更低,还为未来引入 VLM、多模态推荐打开了统一的技术框架。
🔤
Tokenizer:物品语义离散编码

在生成式推荐系统中,模型需要"说出"具体的视频 ID,就像语言模型生成词语一样。 但视频 ID 本身是无意义的数字,无法携带语义信息,也无法在十亿级物品空间中高效生成。 为此,OneRec 设计了一个独立的 Tokenizer 模块,将每个视频映射为 粗到细的语义标识符(Coarse-to-Fine Semantic IDs), 赋予视频可被语言模型理解和生成的"词汇"表示。

为什么不能直接用原始 ID?

核心挑战
快手视频库规模为十亿级(billion-scale)且持续增长。 如果为每个视频分配一个原子 ID(atomic identifier)进行生成, 词汇表大小将是十亿量级,导致:
  • Softmax 层参数量和计算量爆炸
  • 新上传视频(冷启动)在训练中从未见过,完全无法生成
  • 相似视频之间没有共享知识,泛化能力极差
语义 ID 方案通过将相似视频聚类到同一码字,使模型可以: 用固定大小的词汇表覆盖整个视频空间,并对新视频具有零样本泛化能力。

RQ-Kmeans:残差量化 K-Means

OneRec 的 Tokenizer 使用残差量化 K-Means(RQ-Kmeans), 这是对 RQ-VAE(常见于 TIGER 等方案)的改进,放弃了神经网络解码器, 采用更轻量、更稳定的 K-Means 聚类方案进行多层量化。

整体流程

1
多模态特征提取
使用预训练的视觉语言模型 miniCPM-V-8B 对视频内容进行特征提取, 得到 $N_M = 1280$ 个多模态 token 向量,每个维度 $d_t = 512$。
2
QFormer 压缩
$N_M = 1280$ 个 token 经过 $N_c = 4$ 层 QFormer 压缩为 $\tilde{N}_M = 4$ 个紧凑表示, 大幅降低后续量化的计算量,同时保留核心语义信息。
3
协同信号融合
将视频的协同过滤嵌入(来自用户交互矩阵分解)注入到多模态表示中, 使最终的量化码字同时编码内容相似性和行为相似性。
4
$L_t = 3$ 层残差量化
通过 3 轮 K-Means 量化,逐层消除残差误差,生成粗到细的三级语义 ID。 每层码本大小 $N_t = 8192$,总词汇空间为 $N_t^{L_t} = 8192^3 \approx 5.5 \times 10^{11}$, 但实际视频只使用其中极小一部分,保证了覆盖率。

QFormer 压缩的数学形式

QFormer 逐层更新(共 $N_c = 4$ 层)
$$Q^{(i)} = \text{CrossAttn}(Q^{(i-1)},\; M) + Q^{(i-1)}, \quad i = 1, \ldots, N_c$$ $$\tilde{M} = Q^{(N_c)} \in \mathbb{R}^{\tilde{N}_M \times d_t}$$

其中 $Q^{(0)}$ 为可学习的查询向量矩阵($\tilde{N}_M \times d_t$), $M \in \mathbb{R}^{N_M \times d_t}$ 为 miniCPM-V-8B 提取的原始多模态 token。 每层 Cross-Attention 将 1280 个 token 的信息聚合到 4 个 Query 中。

残差量化过程

RQ-Kmeans 三层残差量化
$$\text{第 1 层:} s_1^m = \arg\min_{k} \| \tilde{M} - \mathbf{c}_k^{(1)} \|^2, \quad R^{(1)} = \tilde{M} - \mathbf{c}_{s_1^m}^{(1)}$$ $$\text{第 2 层:} s_2^m = \arg\min_{k} \| R^{(1)} - \mathbf{c}_k^{(2)} \|^2, \quad R^{(2)} = R^{(1)} - \mathbf{c}_{s_2^m}^{(2)}$$ $$\text{第 3 层:} s_3^m = \arg\min_{k} \| R^{(2)} - \mathbf{c}_k^{(3)} \|^2$$

视频 $m$ 的最终 Semantic ID 为三元组 $(s_1^m, s_2^m, s_3^m)$, 其中 $s_l^m \in \{0, 1, \ldots, N_t - 1\}$,$N_t = 8192$。 $\mathbf{c}_k^{(l)}$ 是第 $l$ 层码本(codebook)的第 $k$ 个聚类中心。

多模态特征融合

miniCPM-V-8B 是快手团队选用的多模态基础模型,能够同时理解视频的:

模态 信息来源 作用
视觉帧 视频关键帧截图 捕捉视频的视觉风格、场景类型、人物形象
文本描述 视频标题、描述、字幕 理解视频的主题、语义内容、关键词
标签信息 视频类别标签、话题标签 提供高层语义分类信号

QFormer 在压缩时使用 Caption 辅助训练: 每个视频配有一段自然语言描述(caption), QFormer 训练目标除了最小化重建误差外,还需要从压缩表示中还原 caption 文本, 这一多任务目标使 QFormer 学会保留对描述视频内容最关键的语义信息。

QFormer 训练目标(论文原文 Eq.3 & Eq.4,两个可微损失)
$$\mathcal{L}_{\text{QFormer}} = \mathcal{L}_{I2I} + \mathcal{L}_{\text{caption\_gen}}$$

论文只有两个训练目标,均作用于 QFormer,均可微、可梯度反传:
$\mathcal{L}_{I2I}$:物品对比损失,直接作用在 QFormer 输出 $\tilde{M}$(4 个 token)上, 让行为相似的视频对在 QFormer 输出空间互相靠近;
$\mathcal{L}_{\text{caption\_gen}}$:以 $\tilde{M}$ 为 KV、LLaMA3 为 decoder 的 caption next-token prediction 损失, 防止 QFormer 压缩时丢失内容语义。

RQ-Kmeans 量化是独立的离线 K-Means EM 迭代,不涉及可微 loss,不反传梯度到 QFormer。 QFormer 训练收敛后固定,对全量视频的 $\mathbf{z}_m$(mean-pool $\tilde{M}$ 所得单向量) 做 K-Means 聚类更新码本中心。

协同信号注入

纯内容特征的量化存在一个关键缺陷:两个内容不同但用户行为高度相似的视频, 会被分配到完全不同的 Semantic ID,导致模型无法在训练时共享这部分行为知识。

Item-to-Item Contrastive Loss(论文 Eq.3)

正样本对数据集 $\mathcal{D}_{\text{pair}}$ 通过两种方式构建:
(1) User-to-Item Retrieval:对每个用户,取一个正向点击目标视频, 与其历史正向点击中协同相似度最高的视频配对;
(2) Item-to-Item Retrieval:通过 Swing 相似度等算法挖掘相似度高的视频对。

损失直接作用在 QFormer 输出 $\tilde{M} \in \mathbb{R}^{4 \times d_t}$ 上, 梯度反传更新 QFormer 参数:

$$\mathcal{L}_{I2I} = -\frac{1}{|B|} \sum_{(i,j) \in B} \log \frac{\exp(\text{sim}(\tilde{M}_i, \tilde{M}_j) / \tau)}{\sum_{(i',j') \in B} \exp(\text{sim}(\tilde{M}_i, \tilde{M}_{j'}) / \tau)}$$

$\tau$ 为温度系数,$B$ 为 $\mathcal{D}_{\text{pair}}$ 的一个 mini-batch。 QFormer 被迫学习"将行为相似的视频对压缩到空间相近的 $\tilde{M}$"的压缩策略, 协同信号因此被融入 $\tilde{M}$,最终在 K-Means 量化时使相同行为模式的视频聚入同一码字。

这一设计使得行为相似的视频在量化码书中聚类到更近的码字, 从而使 Decoder 能够学到"推荐这类内容的用户也喜欢那类内容"的迁移知识, 大幅提升对长尾视频和冷启动视频的推荐质量。

Tokenizer 效果评估

论文使用三个互补指标评估 Tokenizer 质量:

评估指标 含义 理想值
Reconstruction Loss $\mathbf{z}_m$(QFormer mean-pool 后的单向量)与三层码本中心之和 $\sum_l \mathbf{c}^{(l)}_{s_l}$ 的 L2 距离,衡量 RQ-Kmeans 量化精度(仅用于评估对比,不反传梯度到 QFormer) 越小越好
Codebook Utilization 码本向量被实际分配到视频的比例(死码比例) 越高越好,避免码本空洞
Token Distribution Entropy 各码字分配的 Shannon 熵,衡量分布均匀性 越高越好,避免少数码字承载所有视频
实验结论
RQ-Kmeans 在上述三个指标上均优于 RQ-VAE(传统方案), 同时训练更稳定,不依赖神经网络解码器的重建损失反传, 计算开销更低,适合十亿级视频库的规模化处理。

语义 ID 案例分析

论文附录展示了 RQ-Kmeans 生成的 Semantic ID 案例, 以 $L_t = 5$(展示用)为例,相同前缀的视频具有高度语义相关性:

语义 ID 前缀视频主题层级含义
(2150, *, *, *, *) 体育类内容(Sports) 第 1 层:大类别
(2150, 3444, *, *, *) 体育 → 篮球 & 足球 第 2 层:子类别
(2150, 3444, 1522, *, *) 体育 → 篮球 & 足球 → 篮球 第 3 层:细粒度类别

前缀共享意味着同层级的视频被分配到同一码字, Decoder 在生成语义 ID 的前几个 token 时,相当于在做"类别路由", 层级越深越精确,与人类的推荐直觉完全吻合。

🧭
Encoder:多尺度用户兴趣建模

OneRec 的 Encoder 负责将用户的历史行为序列和静态画像, 转化为 Decoder 可以利用的高质量用户兴趣表示。 设计的核心挑战在于:用户行为序列长度跨越数量级 ——从最近的几次点击(秒级),到一周内的稳定偏好(天级), 再到数年积累的深层兴趣(年级,最长 10 万条记录)。

为此,Encoder 采用四路并行的多尺度特征工程架构, 分别对不同时间尺度的行为建模,最终拼接融合为统一的用户表示。

四路并行架构总览
静态路径(Static)
用户画像特征:年龄、性别、设备、地理位置等
短期路径(Short-term)
最近 $L_s = 20$ 条行为,捕捉当前会话兴趣
正反馈路径(Positive-feedback)
最近 $L_p = 256$ 条点赞/收藏/关注行为,稳定偏好信号
长期路径(Lifelong)
最多 $L_l = 2000$ 条(从 10 万中压缩),深层历史兴趣

路径一:静态用户特征

静态特征包括用户画像信息,如用户 ID($e_{\text{uid}}$)、性别($e_{\text{gender}}$)、 年龄($e_{\text{age}}$)、设备类型等。 各字段经 Embedding 查表后拼接,再经过 Dense 变换得到静态路径表示:

静态特征路径
$$\mathbf{f}_u = [e_{\text{uid}}; e_{\text{gender}}; e_{\text{age}}; \ldots]$$ $$\mathbf{h}_u = \text{MLP}(\mathbf{f}_u) \in \mathbb{R}^{1 \times d_{\text{model}}}$$

路径二:短期行为序列

短期行为序列 $\{v_1, v_2, \ldots, v_{L_s}\}$($L_s = 20$) 包含用户最近的观看、点击行为。每条记录由多字段特征构成: 视频 ID($e^s_{\text{vid}}$)、作者 ID($e^s_{\text{aid}}$)、标签($e^s_{\text{tag}}$)等, 拼接后送入 Transformer 进行序列建模:

短期序列路径
$$\mathbf{f}_s^{(t)} = [e^s_{\text{vid},t}; e^s_{\text{aid},t}; e^s_{\text{tag},t}; \ldots], \quad t = 1, \ldots, L_s$$ $$\mathbf{h}_s = \text{Transformer}(\mathbf{f}_s^{(1)}, \ldots, \mathbf{f}_s^{(L_s)}) \in \mathbb{R}^{L_s \times d_{\text{model}}}$$

Transformer 使用标准的多头自注意力,并加入相对位置编码以保留行为的时序信息。 输出的 $L_s$ 个位置向量保留用于后续 Decoder 的 Cross-Attention。

路径三:正反馈行为序列

正反馈序列仅包含用户主动表达喜好的行为(点赞、收藏、关注、分享等), 序列长度 $L_p = 256$,远多于短期序列。 这些行为信号噪声更低,能够反映用户稳定的中长期偏好。

正反馈序列路径
$$\mathbf{h}_p = \text{Transformer}(\mathbf{f}_p^{(1)}, \ldots, \mathbf{f}_p^{(L_p)}) \in \mathbb{R}^{L_p \times d_{\text{model}}}$$
设计动机:为什么要分开建模?
短期行为($L_s=20$)包含大量"随手刷"的低质量信号,当前 session 的漫游行为; 正反馈行为($L_p=256$)是用户主动操作,信噪比高,代表真实偏好。 分开建模让 Decoder 能区分"用户刚才偶然看了什么"和"用户长期真正喜欢什么"。

路径四:长期兴趣序列(核心创新)

这是 Encoder 中最具创新性的部分。快手用户的历史行为记录最多可达 10 万条, 直接用 Transformer 处理的复杂度为 $O(N^2)$,在 $N=100{,}000$ 时完全不可行。 OneRec 采用两阶段压缩方案,将其压缩到 $N_q = 128$ 个 Query Token。

第一阶段:层级 K-Means 聚类(离线)

在离线阶段,对每个用户的完整历史行为(最多 10 万条)进行层级聚类, 生成代表性的 Centroid 序列($L_l = 2000$ 个中心点)。 具体算法为:

层级 K-Means 聚类(离线预处理)
  1. 对用户的全部历史行为嵌入向量,运行第一层 K-Means,直到每个簇的大小 $\leq M$(终止阈值),保留超出阈值的大簇继续聚类
  2. 对每个大簇内部递归运行 K-Means,直到所有叶簇大小 $\leq M$
  3. 收集所有叶簇的中心点,形成 $L_l = 2000$ 个代表性行为中心

这一过程将 10 万条行为的信息损耗式压缩到 2000 个代表性中心, 计算在用户更新画像时完成,不影响在线推理延迟。

第二阶段:QFormer 在线压缩

在线阶段,将 2000 个聚类中心嵌入经过 QFormer 进一步压缩到 $N_q = 128$ 个 Query Token:

长期兴趣 QFormer($N_l = 2$ 层)
$$\mathbf{v}_l = \text{DenseTransform}(\mathbf{f}_l^{(1)}, \ldots, \mathbf{f}_l^{(L_l)}) \in \mathbb{R}^{L_l \times d_{\text{model}}}$$ $$\mathbf{h}_l^{(i)} = \text{CrossAttn}(\mathbf{h}_l^{(i-1)},\; \mathbf{v}_l) + \mathbf{h}_l^{(i-1)}, \quad i = 1, 2$$ $$\mathbf{h}_l = \mathbf{h}_l^{(N_l)} \in \mathbb{R}^{N_q \times d_{\text{model}}}$$

$\mathbf{h}_l^{(0)}$ 为 $N_q = 128$ 个可学习 Query 向量, 通过 2 层 Cross-Attention 从 2000 条中心中提取最相关的长期兴趣信号。

完整用户表示拼接

Encoder 最终输出
$$\mathbf{H}_{\text{enc}} = [\mathbf{h}_u;\; \mathbf{h}_s;\; \mathbf{h}_p;\; \mathbf{h}_l] \in \mathbb{R}^{(1 + L_s + L_p + N_q) \times d_{\text{model}}}$$

四路拼接后,总 token 数为 $1 + 20 + 256 + 128 = 405$ 个, 作为 Decoder 的 Cross-Attention KV 源,为每个生成步提供完整的用户上下文。

工程创新意义
这一设计让 OneRec 的 Encoder 能够同时感知:
  • 即时兴趣(当前会话的最近 20 条行为)
  • 稳定偏好(最近 256 条正反馈行为)
  • 深层长期兴趣(数年积累的 10 万条行为,经两阶段压缩到 128 token)
三种时间尺度的信息在 Decoder 的 Cross-Attention 中自适应地被利用, 无需人工设定权重,由模型端到端学习在不同场景下各自的重要性。
🎯
Decoder:MoE 自回归 Session 生成

OneRec 的 Decoder 是整个系统的核心生成模块。 它接收 Encoder 输出的用户兴趣表示作为条件, 通过自回归解码的方式,逐 token 生成一个完整推荐会话(Session)的语义 ID 序列。 本质上,Decoder 是一个以用户上下文为条件的语言模型, 只不过它"说"的语言是视频语义标识符而非自然语言词汇。

MoE 架构:用稀疏激活撬动大容量

Decoder 采用 Mixture-of-Experts(MoE) 架构, 这是 OneRec 能够在保持推理效率的同时大幅扩展模型容量的核心技术手段。

MoE vs 稠密模型的核心区别
稠密 Transformer
每个 token 经过所有参数(FFN), 参数量 = 推理 FLOPs 正比增长, 扩展代价高昂。
MoE Transformer
每个 token 只激活 $K$ 个专家(Expert FFN), 总参数量 $\gg$ 激活参数量, 推理成本远低于全参数计算。

Decoder 层结构

MoE Decoder 单层计算流程
$$\mathbf{x}' = \text{MultiHeadSelfAttn}(\mathbf{x}) + \mathbf{x}$$ $$\mathbf{x}'' = \text{CrossAttn}(\mathbf{x}', \mathbf{H}_{\text{enc}}) + \mathbf{x}'$$ $$\text{MoE}(\mathbf{x}'') = \sum_{i=1}^{N_e} g_i(\mathbf{x}'') \cdot \text{FFN}_i(\mathbf{x}'')$$ $$\mathbf{y} = \text{MoE}(\mathbf{x}'') + \mathbf{x}''$$

其中 $g_i(\mathbf{x}'')$ 为 Router 分配给第 $i$ 个专家的 softmax 权重, $N_e = 24$(总专家数),每次只激活 $K = 2 \sim 4$ 个专家, 其余专家的 $g_i = 0$,不参与计算。

Router 设计:无损失负载均衡

MoE 的关键工程挑战是专家负载均衡: 若所有 token 都路由到少数几个专家,其余专家空转,模型容量被严重浪费。 传统方案通过辅助损失(Auxiliary Loss)惩罚不均衡, 但这会与主任务损失产生干扰。

Loss-Free Load Balancing(无损失负载均衡)
OneRec 采用无辅助损失的负载均衡方案: 在 Router softmax 之前,为每个专家维护一个偏置参数 $b_i$(Expert Bias), 在每个训练步根据专家的实时负载动态更新 $b_i$:
  • 若专家 $i$ 当前过载(分配 token 多),增大 $b_i$(不等于降低其得分,而是在路由分配时修正)
  • 若专家 $i$ 当前闲置,减小 $b_i$
这样无需显式辅助损失,即可实现专家负载的动态自平衡,避免任务目标被污染。

论文中的模型规模配置

模型配置 激活参数量 总参数量(含 MoE) 备注
Small 0.015B 0.015B 稠密小模型(对照基线)
Medium 0.121B 0.121B 稠密中型模型
Large-MoE 0.935B (含稀疏专家) MoE 大模型
XLarge-MoE 2.633B (含稀疏专家) 线上主力模型

Session Generation:一次生成整个推荐列表

OneRec 的另一个核心设计是:Decoder 一次性生成完整的推荐 Session, 即多个视频的语义 ID 序列,而非只生成单个视频。

Session 生成的自回归分解
$$p(\text{Session} \mid u) = \prod_{t=1}^{K} \prod_{l=1}^{L_t} p\!\left(s_t^l \;\middle|\; u,\; s_1^1, \ldots, s_1^{L_t}, \ldots, s_{t-1}^{L_t}, s_t^1, \ldots, s_t^{l-1}\right)$$

每个视频的 $L_t = 3$ 个语义 ID token 逐个生成:先生成粗粒度码字 $s_t^1$(大类别), 再依条件生成 $s_t^2$(子类别),最后生成 $s_t^3$(精细码字)。 生成完第 $t$ 个视频后,继续生成第 $t+1$ 个,直到完成整个 Session($K$ 个视频)。

Session 级生成的优势在于:Decoder 可以在生成第 $t+1$ 个视频时, "看到"前 $t$ 个视频的选择,从而实现多样性与相关性的自然权衡 ——不依赖任何后处理去重策略,而是由模型端到端学习。

SFT 预训练目标

有监督微调(SFT)训练损失
$$\mathcal{L}_{\text{SFT}} = -\sum_{t=1}^{K} \sum_{l=1}^{L_t} \log p\!\left(s_t^{l,*} \;\middle|\; \text{context}\right)$$

$s_t^{l,*}$ 为标注的真实 Session 中第 $t$ 个视频第 $l$ 层语义 ID。 训练数据为用户实际完整观看的视频序列(Watch Session), 以此作为正样本监督 Decoder 学习"生成用户真正会看的视频"。

推理流程

在线推理时,OneRec 的完整执行流程如下:

1
Encoder 前向传播
读取用户的四路特征(静态画像、短期行为 20 条、正反馈 256 条、 长期聚类中心 2000 条),执行 Encoder 前向,得到 405 个 KV 表示。
2
Decoder 自回归生成
以 Encoder 输出为 Cross-Attention KV, MoE Decoder 自回归地生成 $K \times L_t = K \times 3$ 个语义 ID token, 形成 $K$ 个视频的候选语义 ID。
3
Semantic ID → 实际视频映射
将生成的 $(s^1, s^2, s^3)$ 三元组查询预构建的倒排索引, 映射到对应的实际视频 ID 列表。 如果某个三元组没有对应视频(非法生成),则丢弃该候选。
4
(可选)Reward Model 精选
对 Decoder 生成的多个候选视频,用独立的 Reward Model 打分, 选取得分最高的 Top-K 作为最终推荐结果。 论文实验表明加入 RM Selection 后,App Stay Time 进一步提升 +0.54%~+1.24%。
为什么 MoE Decoder 适合工业推荐?
  • 容量足够大: 2.633B 激活参数,但实际只有 MoE 激活比例的参数参与计算, 推理 FLOPs 与 0.935B 稠密模型相当,但模型表达能力远强于后者。
  • 生成天然稳定: 在语义 ID 空间内生成,词汇表固定($N_t = 8192$), 不存在 LLM 的 Open-ended 生成不可控问题。
  • 可直接优化业务指标: RL 后训练阶段可将 App Stay Time、多样性等指标 直接设计进 Reward,Decoder 端到端优化,无需多阶段协调。
🎁
Reward 体系:多目标对齐

OneRec 在完成 SFT 预训练后,进入强化学习(RL)后训练阶段。 RL 的核心是设计合适的 Reward 函数——它相当于 OneRec 的"总优化目标", 决定了模型最终的推荐行为取向。 OneRec 的 Reward 体系由三类 Reward 组成,分别对应不同的优化目的。

Reward 体系总览
$$r(v, u) = r_{\text{P-Score}}(v, u) + r_{\text{Format}}(v) + r_{\text{Industrial}}(v, u)$$

三类 Reward 以加法形式组合(实际工程中可加权), 覆盖用户满意度、生成合法性、业务生态三个维度。

Reward 一:P-Score(用户偏好对齐)

P-Score 是 OneRec RL 训练的主要 Reward 信号,来自独立训练的偏好分数模型, 综合评估用户对某个推荐视频的满意度。 P-Score 是一个综合多个交互信号的加权分数, 考虑了视频观看完成率、点赞、收藏、评论、分享、关注等多种用户行为:

P-Score 计算(概念性形式)
$$r_{\text{P-Score}}(v, u) = \sum_{k} w_k \cdot \mathbb{E}[\text{action}_k(u, v)]$$

其中 $\text{action}_k$ 表示用户 $u$ 对视频 $v$ 执行的第 $k$ 种互动行为(如观看完整视频), $w_k$ 为对应的业务权重。P-Score 实际上是由独立的 Reward Model(RM)预测, 并非基于实时用户行为,因此可以在生成时离线计算。

P-Score 在 Session 级别的计算
由于 OneRec 一次生成 $K$ 个视频的 Session,P-Score 需要在 Session 粒度上聚合: $$R_{\text{P-Score}}(\text{Session}, u) = \frac{1}{K} \sum_{t=1}^{K} r_{\text{P-Score}}(v_t, u)$$ 即取 Session 内所有视频 P-Score 的均值,鼓励生成质量均匀的推荐列表, 而非只优化头部视频的得分。

Reward 二:Format Reward(生成合法性)

生成式推荐系统面临一个独特挑战:模型可能生成语义 ID 空间中存在但没有对应视频的组合, 即"非法生成(Illegal Generation)"。 这是因为语义 ID 的笛卡尔积空间($N_t^{L_t} = 8192^3$)远大于实际视频数量, 大量 $(s^1, s^2, s^3)$ 三元组并不对应任何真实视频。

论文分析发现,在引入 RL(ECPO)后,非法生成率显著上升。 原因在于负优势样本(Advantage $A < 0$)导致的"挤压效应"(Squeezing Effect)。 Format Reward 通过直接奖励合法生成来对抗这一问题:

Format Reward 定义
$$A_{\text{format},i} = \begin{cases} 1 & \text{if } v_i \in \mathcal{I}_{\text{legal}} \\ 0 & \text{if } v_i \notin \mathcal{I}_{\text{legal}} \end{cases}$$

$\mathcal{I}_{\text{legal}}$ 为所有合法视频 ID 的集合。 合法样本 Advantage 设为 1(正向奖励),非法样本直接丢弃(不纳入梯度计算), 以避免非法样本的负优势进一步触发 Squeezing Effect。

⚠ 为什么不用 Advantage = -1 惩罚非法生成?
直觉上,给非法生成赋予负 Advantage(-1)似乎更直接。 但这正是 Squeezing Effect 的来源! 负 Advantage 会压缩模型对其他 token 的概率分布, 使合法 token 的概率跌至与非法 token 相当的水平, 反而制造更多非法生成。 因此直接丢弃非法样本是更安全的策略。

Reward 三:Industrial Reward(生态与商业化)

工业推荐系统不仅要优化用户体验,还需要兼顾平台生态健康、商业化需求、 以及冷启动/长尾视频的流量分配。 OneRec 通过 Industrial Reward 将这些业务约束直接融入 RL 训练目标。

案例:病毒式内容(Viral Content)控制

快手平台上存在大量"病毒式内容农场"(Viral Content Farms)—— 以搬运、剪辑为主、内容质量参差不齐的账号。 OneRec 上线后,若没有控制策略,此类内容的曝光比例会显著上升, 对平台生态产生负面影响。

病毒式内容比例控制 Reward
$$r_{\text{viral}}(v, u) = \begin{cases} r_{\text{P-Score}}(v, u) & \text{if ratio}_{\text{viral}} \leq f \\ \alpha \cdot r_{\text{P-Score}}(v, u) & \text{if ratio}_{\text{viral}} > f \;\text{and}\; v \in \text{viral} \end{cases}$$

$f$ 为允许的病毒式内容比例上限, 当实际比例超过 $f$ 时,对病毒式内容的 P-Score Reward 按比例 $\alpha < 1$ 进行折扣, 使模型主动降低病毒式内容推荐频率。

Industrial Reward 的系统价值
传统系统的生态控制是在重排阶段通过硬规则实现的(例如每 5 条插入 1 条冷启动视频), 这与排序目标天然冲突,产生 Seesaw Effect。 OneRec 将生态目标直接写进 Reward, 让模型自适应学习"在满足用户体验的前提下兼顾生态约束"的推荐策略, 是从补丁驱动到目标驱动的根本性转变。
🔬
ECPO:早停裁剪强化学习

OneRec 的强化学习后训练采用自研的 ECPO(Early Clipped GRPO) 算法, 这是对 DeepSeek-R1 中使用的 GRPO 算法的针对性改进, 专门解决生成式推荐场景中出现的分布坍塌(Squeezing Effect)问题。

GRPO 基础算法

GRPO 是 PPO 的一个变种,核心思想是: 对同一个输入,采样 $G$ 个输出,用组内相对优势(Relative Advantage)替代绝对价值函数, 消除对 Critic 网络的依赖。

GRPO 相对优势计算
$$A_i = \frac{r_i - \text{mean}(\{r_1, \ldots, r_G\})}{\text{std}(\{r_1, \ldots, r_G\})}$$

对用户 $u$ 采样 $G$ 个生成 Session, 用组内均值和标准差标准化,得到每个样本的相对优势 $A_i$。 $A_i > 0$ 表示该样本比平均水平好,$A_i < 0$ 表示比平均水平差。

GRPO 目标函数
$$\mathcal{J}_{\text{GRPO}}(\theta) = \mathbb{E}\!\left[\frac{1}{G} \sum_{i=1}^{G} \frac{1}{|o_i|} \sum_{t=1}^{|o_i|} \min\!\left(\rho_{i,t} A_i,\; \text{clip}(\rho_{i,t}, 1-\varepsilon, 1+\varepsilon) A_i \right)\right]$$ $$\rho_{i,t} = \frac{\pi_\theta(o_{i,t} \mid q, o_{i,<t})}{\pi_{\text{ref}}(o_{i,t} \mid q, o_{i,<t})}$$

$\rho_{i,t}$ 为当前策略与参考策略在第 $t$ 个 token 上的概率比, $\varepsilon$ 为 PPO clip 参数,$q$ 为用户上下文。

ECPO:早停裁剪机制

ECPO 目标函数(关键区别在第三行)
$$\hat{r}_{i,t} = \begin{cases} \min(\rho_{i,t} A_i,\; \text{clip}(\rho_{i,t}, 1-\varepsilon, 1+\varepsilon) A_i) & A_i \geq 0 \\ \text{clip}(\rho_{i,t}, 1-\varepsilon, 1+\varepsilon) A_i & A_i < 0 \;\text{and}\; \rho_{i,t} \leq 1+\varepsilon \\ 0 & A_i < 0 \;\text{and}\; \rho_{i,t} > 1+\varepsilon \end{cases}$$

关键区别:当负优势样本的概率比 $\rho_{i,t} > 1 + \varepsilon$ 时, 梯度直接置零(Early Stop),不再施加负梯度, 保护合法 token 的概率不被 Squeezing。

Squeezing Effect:分布坍塌机制详解

Squeezing Effect 的三步成因
1
SFT 后的分布状态
模型经过 SFT 后已学会给绝大多数合法 token 分配较高概率, 非法 token 的概率极低(接近 0)。
2
负优势样本($A_i < 0$)的梯度效应
RL 目标要降低 $A_i < 0$ 样本的概率。 梯度会将概率质量"挤压"到模型认为最优的少数 token 上($o^*$)。
3
分布坍塌,非法生成率上升
大量概率集中到少数几个"绝对优势" token, 其他合法 token 的概率跌到与非法 token 相当的水平, 非法生成率显著上升,推荐多样性崩溃。
ECPO 总损失(SFT + RL 联合训练)
$$\mathcal{L}_{\text{total}} = \mathcal{L}_{\text{SFT}} - \beta \cdot \mathcal{J}_{\text{ECPO}}$$

SFT 损失和 ECPO RL 目标同时优化,前者保持模型稳定(替代 KL 正则), 后者提升推荐质量与业务指标对齐。 一个关键工程决策:移除 KL 散度正则项, 因为 SFT 损失已足够稳定策略更新。

算法 负优势样本处理 KL 正则 非法生成率
标准 GRPO 继续施加负梯度 显著上升
ECPO(OneRec) $\rho > 1+\varepsilon$ 时早停,梯度=0 无(SFT 代替) 受控(Format Reward 辅助)
⚙️
训练基础设施

OneRec 的训练规模和工程复杂度与主流 LLM 预训练相当, 需要在分布式计算、内存优化、数据流水线等多个维度进行深度定制。

硬件规模与计算配置

90
训练服务器总数
18B
每日训练样本数
540B
每日训练 token 数
~100B
收敛所需总样本数
23.7%
训练 MFU(5.2× 提升)
5.6天
从零到收敛时间估算

模型配置与规模梯度

论文设计了四档模型配置,用于 Scaling Law 研究和线上实验:

模型 激活参数 架构类型 专家数 $N_e$ 激活专家数 $K$ 用途
OneRec-S 0.015B 稠密 Transformer Scaling 对照基线
OneRec-M 0.121B 稠密 Transformer 中型对照
OneRec-L 0.935B MoE Transformer 24 2 MoE 验证
OneRec-XL 2.633B MoE Transformer 24 4 线上主力模型

训练效率优化

为达到 23.7% 的 MFU(较工程初始状态提升 5.2 倍),OneRec 团队进行了以下优化:

张量并行与流水线并行

并行策略
  • 张量并行(Tensor Parallelism):将 MoE 的专家 FFN 按列/行切分到多 GPU, 减少单卡内存压力,适用于专家参数量大的情况。
  • 数据并行(Data Parallelism):多节点同步梯度, 利用 RDMA 高速互联(最大带宽 200Gb)减少 AllReduce 通信瓶颈。
  • 序列并行(Sequence Parallelism): 对长序列(用户行为 2000 条 + Decoder 生成序列)进行序列维度切分, 突破单卡的序列长度上限。

混合精度训练

使用 BF16 混合精度训练,主参数使用 FP32 状态, 前向/反向计算使用 BF16,在保持数值稳定的同时将显存占用和计算量减半。 MoE 的专家路由 Router 保持 FP32 精度以避免数值溢出。

Gradient Checkpointing

对 Encoder 的长序列路径(Lifelong QFormer,输入序列长度 2000) 使用 Activation Checkpointing,以计算换内存, 使长序列建模在有限 GPU 内存下可行。

在线数据流水线

实时数据更新
OneRec 每日训练 18B 新样本(对应用户当天的实际观看 Session), 实现"模型每天见到当天发生的用户行为", 保持推荐策略与用户兴趣漂移的同步。 数据流水线需要支持:
  • 用户新行为的实时 Tokenization(将新行为的视频 ID 映射到最新 Semantic ID)
  • 用户画像的增量更新(Lifelong 聚类中心的在线更新)
  • 训练数据与 Reward Label 的对齐(P-Score 来自 RM,需要离线计算后对齐)
🚀
在线推理 Serving

将一个 2.633B 参数的 MoE 生成模型部署到每秒百万 QPS 量级的工业推荐系统, 是 OneRec 最具挑战的工程模块之一。

硬件配置

组件 配置 说明
推理 GPU NVIDIA L20(每台 4 卡) 推理专用卡,显存/计算比高
CPU 每台 2 颗 负责预处理、用户特征拼接
GPU-CPU 互联 PCIe Host-Device 数据传输
机器间网络 200Gb RDMA / RoCE Embedding 服务与推理服务间高速通信
最大机间带宽 800Gb AllReduce、KV Cache 同步

TensorRT 计算图优化

线上模型使用 TensorRT 编译和优化,主要优化手段包括:

  • 算子融合(Operator Fusion): 将 LayerNorm + Linear、Softmax + TopK 等连续算子融合为单个 CUDA Kernel, 减少显存读写次数。
  • MoE 专家并行执行: 通过自定义 CUDA Plugin 实现 Expert 的并行分发(Token 按路由结果派发到对应 Expert), 避免了 CPU 端的序列化控制流。
  • Cross-Attention 优化: Encoder 的 KV(共 405 个 token)在 Decoder 每步 Cross-Attention 中重复使用, 通过 KV Cache 避免重复计算,并使用 Flash-Attention 降低显存和计算量。
  • INT8/FP8 量化(部分层): 对计算密集的 FFN 层应用 INT8 量化,在可接受的精度损失下将吞吐提升约 1.5×。
TensorRT 优化吞吐提升
28.8%
推理 MFU
2.6×
较工程初始推理效率提升

Batching 与 MPS

Dynamic Batching + MPS
  • Dynamic Batching: 对推理请求进行动态批处理,将多个用户的请求合并为一个 Batch, 提高 GPU 利用率,降低平均请求延迟。 Batch Size 根据当前请求量自适应调整。
  • NVIDIA MPS(Multi-Process Service): 允许多个推理进程共享同一块 GPU 的 CUDA Context, 减少 GPU 上下文切换开销,进一步提升吞吐。 结合 Dynamic Batching,使推理吞吐再提升约 1.3×。

UniPredict 推理平台

OneRec 部署在快手自研的 UniPredict 预测平台上, 该平台统一管理推荐系统中的模型推理服务,支持:

  • 模型版本管理与灰度发布(支持 OneRec 与传统系统的流量切分)
  • Embedding 服务与生成服务的解耦部署(降低 Encoder 特征更新延迟)
  • 推理延迟 SLA 监控与自动扩缩容
  • A/B 实验框架集成(论文中的 5% 流量实验组精确控制)
📊
实验与结果

Scaling Law 分析

OneRec 在四档模型规模上进行了系统性的 Scaling Law 研究, 验证了推荐系统中生成模型的参数效率规律。

主要 Scaling Law 发现
  • 模型规模 vs 推荐质量: 在相同训练计算量下,OneRec 的推荐指标(NDCG、Hit Rate 等) 随激活参数量的增加呈幂律提升,与 LLM 的 Scaling Law 形式类似。
  • MoE 的 Scaling 优势: 相同激活参数量下,MoE 架构(OneRec-L/XL)显著优于稠密架构(OneRec-S/M), 说明稀疏专家机制在推荐场景下有效提升了参数利用效率。
  • 训练数据量 vs 模型大小的最优配比: 论文发现训练 ~100B 样本后模型趋于收敛, 在此规模下 XLarge-MoE 的性能增益最为显著。

消融实验

消融配置 相对于完整 OneRec 的变化 推荐质量影响
去掉 Lifelong 路径 移除长期兴趣序列(2000 token) 显著下降(-X%),表明长期兴趣建模不可替代
去掉协同信号($\mathcal{L}_{\text{i2i}}$) Tokenizer 仅用内容特征 下降,尤其对长尾和冷启动视频影响大
GRPO → ECPO 改用标准 GRPO 非法生成率上升,最终 Session 质量下降
去掉 Format Reward 仅用 P-Score + Industrial Reward 非法生成率显著上升,影响可用性
去掉 RM Selection 纯生成模型,无 Reward 精选 App Stay Time 下降约 0.5%(仍优于传统系统)
稠密模型(无 MoE) 相同激活参数量的稠密 Transformer 推理成本相同但推荐质量下降,参数效率较低

在线 A/B 实验(主场景)

在快手主 Feed 和快手极速版两个日活亿级最高流量场景进行了 A/B 实验, 实验组使用 5% 流量,观测周期为一周。 以 App Stay Time(用户在 App 内的总停留时长,反映总体参与度) 和 LT7(7 天 Lifetime,反映用户留存)为主指标。

场景 在线指标 OneRec(纯生成) OneRec + RM Selection
快手主 App App Stay Time +0.01% +0.54%
Watch Time +0.07% +1.98%
Video View +1.98% +2.52%
Like -2.00% +2.43%
Follow -2.88% +3.24%
Comment -1.56% +5.27%
Collect -0.61% +2.93%
Forward +0.27% +5.90%
快手极速版 App Stay Time +0.06% +1.24%
Watch Time +0.05% +3.28%
Video View +2.40% +3.39%
Like -2.64% +1.49%
Follow -2.75% +2.28%
Comment -2.23% +3.20%
Collect -1.76% +1.91%
Forward -1.86% +3.48%
关键洞察:Seesaw Effect 消除

传统多任务推荐系统中,提升观看时长往往以牺牲互动指标(点赞、评论、关注)为代价, 这就是著名的 Seesaw Effect

OneRec + RM Selection 在 所有指标上同时提升, 完全消除了 Seesaw Effect。这是因为 RL 的 P-Score Reward 综合了所有交互行为的加权分, 模型被迫学习一个真正符合用户全面满意度的推荐策略, 而非在各个子目标之间做取舍。

统计显著性说明: 在快手量级下,App Stay Time +0.1%、LT7 +0.01% 即为统计显著。 OneRec + RM Selection 的提升幅度远超这一门槛。

本地生活服务场景

除短视频推荐外,OneRec 还在快手本地生活服务(Local Life Service)场景进行了部署实验, 验证架构的跨场景泛化能力:

+21.01%
GMV(交易总额)
+17.89%
订单量
+18.58%
买家数
+23.02%
新买家获取数
本地生活部署结论
本地生活服务场景的业务逻辑与短视频完全不同(商业转化 vs 内容消费), OneRec 无需任何结构性修改,仅通过调整 Industrial Reward(加入 GMV 相关奖励) 即实现了 GMV +21%、新买家 +23% 的显著增长。 该场景目前已接管 100% 的 QPS,证明了 OneRec 架构的强大跨场景泛化能力。
🔭
总结与展望

核心成就总结

OneRec 是工业推荐系统领域的一个里程碑式工作, 其意义不仅在于技术指标的提升,更在于它证明了一条完全不同的系统设计路径是可行的:

系统设计范式的转变
用单一生成模型替代复杂的多阶段瀑布流系统, 消除了跨阶段目标不一致和 Seesaw Effect 这两个困扰工业推荐系统十年的核心难题。
LLM 时代技术的成功迁移
Scaling Law、MoE、RLHF/GRPO、多模态基础模型等 LLM 核心技术, 在 OneRec 中得到了系统性的验证和工业级落地, 为推荐系统与 LLM 技术的深度融合开辟了可复制的路径。
极致的工程效率
在推荐效果超越传统系统的同时,将系统 OPEX 压缩到原来的 10.6%, 说明"大模型推荐"并不必然意味着更高成本,正确的工程设计可以两全其美。

当前局限性

论文承认的主要局限
  • 冷启动物品覆盖: 虽然 RQ-Kmeans 通过语义聚类具备一定的冷启动泛化能力, 但对于刚上传的全新视频(无任何交互历史), 协同信号部分的 Semantic ID 质量仍有待提升。
  • 实时性约束: Encoder 的长期兴趣路径(Lifelong K-Means 聚类)是离线预计算的, 无法实时响应用户兴趣的快速变化(如突发事件引发的兴趣爆发)。
  • 生成多样性控制: Session 级自回归生成在保证相关性的同时, 有时会陷入局部最优(连续生成过于相似的视频), 需要额外的 Diversity Reward 或 Temperature 控制策略。

未来方向

多模态推荐 Tokenizer
将视频的音频、文字(OCR)等模态更深度融入 Tokenizer, 使 Semantic ID 更全面地编码视频内容。
更大规模的 Scaling
2.633B 激活参数的 MoE 模型仍处于相对保守的规模, 探索更大参数量(如 10B+ 激活)对推荐质量的进一步 Scaling 效益。
对话式/交互式推荐
基于 OneRec 的统一生成框架,扩展到用户可以用自然语言表达偏好 ("给我推荐今晚适合全家一起看的视频")的交互式推荐场景, 进一步发挥生成模型的语言理解能力。
跨业务线统一推荐大模型
目前短视频和本地生活分别部署了独立的 OneRec 实例, 未来探索单一超大规模生成模型覆盖快手全业务线推荐场景, 在多个任务之间实现知识迁移。
论文最后的观点
"OneRec demonstrates that a unified generative model can not only match but exceed the performance of complex multi-stage recommendation systems, while dramatically reducing operational costs. We believe this work opens a new paradigm for industrial recommendation systems in the LLM era."

——快手 OneRec 团队