OneRec: Unifying Retrieve and Rank with Generative Recommender and Preference Alignment
OneRec: Unifying Retrieve and Rank with Generative Recommender and Preference Alignment
基本信息
| 字段 | 内容 |
|---|---|
| 标题 | OneRec: Unifying Retrieve and Rank with Generative Recommender and Preference Alignment |
| 作者 | Jiaxin Deng, Shiyao Wang, Kuo Cai, Lejian Ren, Qigen Hu, Weifeng Ding, Qiang Luo, Guorui Zhou |
| 机构 | 快手 Kuaishou Inc. |
| 年份 | 2025-02,arXiv v1 |
| 方向 | 生成式推荐、语义 tokenization、session 级自回归生成、DPO 偏好对齐 |
| 场景 | 快手短视频主场景推荐,亿级 DAU |
| arXiv | https://arxiv.org/abs/2502.18965 |
TL;DR:把"召回→粗排→精排"整条级联替换为一个生成式模型。三个核心组件:①Encoder-Decoder + 稀疏 MoE,验证推荐算法领域 scaling law;②session 级自回归生成;③迭代偏好对齐 IPA——用奖励模型构造自生成困难负样本,再用 DPO 将分布推向高价值 session。线上 watch-time +1.68%。这是 OneRec 系列的奠基作 v1,后续 Technical Report、V2、V2-Think 在其基础上做工业化与强化学习深化,详见 OneRec 系列论文清单。
论文里有很多没有详细说明的问题,比如:1. 模型输入为什么只有 SID,冷启动问题怎么解决 2. 端到端如何平衡业务上的一些策略的,比如某些视频打压
一、动机:从级联到统一生成
现代工业推荐普遍是多阶段级联:
1 | 级联 (cascade): |
级联的结构性缺陷:每个孤立阶段的效果,构成了后一阶段的性能上界——前面阶段漏掉的,后面模型再强也无法推出,整体次优。已有的生成式检索 GR,例如 TIGER,虽然能自回归生成 item 的语义 ID,但目前只应用于召回场景,精度尚不及精心调优的多级排序器。
OneRec 的主张:用一个生成模型替换整条链路,做单阶段端到端推荐,并且第一个在真实工业场景中效果优于级联系统。三个核心贡献:
- Encoder-Decoder + 稀疏 MoE:借鉴 LLM 的 scaling law,扩大推荐模型规模;用 MoE 在扩容量不等比增算力的前提下扩参数。
- session 级列表生成:不再逐点预测下一个 item,而是一次生成一整个 session,让模型自行学习列表内的内容与顺序依赖。
- IPA 偏好对齐:采样一批训练样本用 DPO 做偏好对齐;针对推荐的特殊性设计了奖励模型 + 自生成困难负样本。
二、问题形式化
2.1 符号与 session 目标
- 用户侧输入:正反馈历史行为序列 , 是用户有效观看 / 点赞 / 关注 / 分享过的视频。
- 输出:一个 session ,即一次请求返回的一批短视频,通常 5~10 个。
- 每个视频都被表示成 层语义 ID,所以 和 都是SID 序列。
目标即一个序列到序列的生成:
训练样本只选择 high-value-session, 其中high-value session 的判定标准:
① session 内实际观看 个;
② 总观看时长超阈值;
③ 有点赞/收藏/分享等互动。
2.2 输入只有 SID
在模型输入层面,encoder/decoder transformer 接收的即语义 ID 序列加少量特殊 token:SEP 分隔历史视频,BOS 标记 session 与 item 边界。
由此可得一个值得注意的推论:既然没有 user ID、模型又是输入的确定性函数,beam search 解码也是确定的,那么两个历史行为序列逐位完全相同的用户,会被推荐完全相同的 session。这在逻辑上成立,但现实中两个用户具有完全相同的 256 长 SID 序列的概率趋近于 0;这正是"用户=行为序列"范式的有意设计,并非缺陷——既然已观看、点赞过完全相同的内容,便没有依据推荐不同结果;线上还有去重、业务规则、探索等模型外后处理会进一步将结果打散。
更重要的代价是:所有个性化信号被强制收敛到"正反馈 + 截断行为序列"这一单一通道中——上下文、负反馈如 skip 与快速划过、长期兴趣、个体偏好特征均无法进入。这是 v1 输入设计的上限,但多数可通过加入 context、profile、负反馈 token 等方式扩展修复,并非范式的根本局限。
三、方法与模型架构
OneRec 整体框架包含两部分:1. T5 式 Encoder-Decoder,解码器的 FFN 换成 MoE。2. IPA 偏好对齐的迭代循环。

3.1 语义 Tokenizer:均衡残差 K-means
Pipeline:视频 → 多模态 embedding → 多层残差量化 → 语义 ID 。每层有一个大小为 的码本,逐层量化残差:
其中下标 标记视频,上标 为层号,取值 至 ; 为视频 在第 层待量化的残差向量, 初始化为多模态 embedding ; 为第 层码本中第 个码字向量, 取值 至 ; 为第 层量化结果,即使残差与码字 距离最小的码字下标; 为该层被选中的码字,从残差中减去后得到下一层残差 。

为什么不用 TIGER 的 RQ-VAE? 因为 RQ-VAE 有沙漏现象 hourglass phenomenon:码字分布严重不均衡,呈"两头宽、中间窄"
- 中间层 token 过度集中:大多数语义 ID 挤在少数几个 head token 这一长尾上,其余海量码字几乎不用,即 dead code。
- 路径稀疏:总路径空间 巨大,,真实 item 只用到极小一部分还都挤在少数路径上。
- 根因是数据稀疏 + 长尾,残差结构又会逐层放大不均衡。
对生成式推荐的后果是结构性的:item 挤在同一批 token 上 → 语义 ID 无法区分 → 解码器无法分辨;码本容量浪费;token 长尾 → 自回归模型偏向 head、尾部 item 无法推出。
OneRec 的解法:Balanced K-means,对应上面算法伪代码——在每一层强制 每个码字恰好分配 个 item。其中 为 item 总数, 为每层码本大小, 为每个码字分到的 item 数。做法是贪心式分配:每个质心按距离顺序选取最近的 个未分配 item,分满即停、移出候选池。
这与普通 RQ K-means 的区别仅在每层聚类,残差结构完全一致:
| 残差/多层结构 | 每层聚类 | 簇大小约束 | 结果 | |
|---|---|---|---|---|
| RQ-VAE / TIGER | 有 | VAE 梯度学码本 | 无 | 沙漏 |
| 普通 RQ K-means | 有 | 标准 K-means | 无 | 仍不均衡 |
| OneRec | 有 | Balanced K-means | 每簇恰好 | 均衡、满利用 |
均衡是有代价的:部分 item 被迫离开其真正最近的、已满的质心,单点量化误差会增大,本质是以一定的重构保真度换取全局码本均衡与满利用率。且贪心式按质心顺序分配,结果对处理顺序敏感——标准 K-means 在给定质心下的分配是全局最优的,均衡版则是受约束的近似。
3.2 Encoder-Decoder + 稀疏 MoE
T5 式结构:Encoder 编码用户历史 ,Decoder 自回归生成 session。为在扩大模型规模的同时控制算力开销,解码器的 FFN 替换为 MoE:
其中 为第 层、第 个 token 位置的隐状态,下标 标记 token 位置,上标 标记解码器层; 为专家总数; 为第 个专家的前馈网络; 为第 个 token 对第 个专家的门控权重;末项 为残差连接。
关于 :论文正文只定义了 、、,对 未作说明。这条公式逐字沿用了 DeepSeekMoE [7] 的 gating,其中 是第 层第 个专家的可学习"质心"向量,即维度同 的 router 参数。由此:
- 是 token 隐状态与专家质心的点积,再在专家维度上 softmax,得到软路由权重;
- 顺序是 softmax-then-topk:先对全部 个专家算 softmax,再取分最高的 个,门控值 就等于它们的 且不重新归一化,其余置 0。
可将其理解为轻量检索:token 是 query, 是各专家的 key,点积选取最匹配的 个专家。训练中路由器学出这些质心,从而让专家特化到不同用户兴趣与 item 语义。
MoE 如何配合 scale up? 核心是将"容量"与"单 token 计算量"解耦:
| 随什么增长 | 含义 | |
|---|---|---|
| 总参数即容量 | 可按需扩大 | |
| 单 token FLOPs | ,与 无关 | 延迟与成本被固定 |
论文 24 选 2,整体推理仅激活约 13% 的参数。dense 模型中"参数多"与"计算慢"是强耦合的,MoE 用稀疏激活将二者解耦,这正是 “scale model capacity without proportionally increasing FLOPs” 的直接实现。
MoE 在此节省的是计算 FLOPs,消耗的是显存:所有专家均需常驻显存,按总参数计成本。它并非提升模型精度的算法,而是使 scaling law 收益在有延迟预算的线上服务中经济可达的工程前提。配合 KV-cache 与 float16 量化压缩显存,1B 模型才能满足上线要求。
3.3 session 级生成与 NTP 训练
解码器输入是加了 BOS 的目标 session 语义 ID 序列,用 next-token 交叉熵训练,下式为简写:
其中 为 next-token 预测的交叉熵损失;外层求和下标 遍历 session 内 个 item,内层下标 遍历每个 item 的 层语义 ID; 为第 个 item 的第 层语义 ID, 为其待预测的下一个 token; 为起始标记;方括号内为预测该 token 时已生成的前缀上下文; 为模型参数。
3.4 IPA:迭代偏好对齐
为什么推荐不能直接迁移 NLP 的 DPO? DPO 需要"同一上下文下,正例 负例"的偏好对。但在推荐中:一次请求只展示一个 session,无法对同一请求同时获得一个优列表和一个劣列表的真实反馈,这是反事实问题,且交互稀疏、缺乏人工偏好标注。因此 OneRec 自行构造偏好对:
奖励模型 RM 的训练:RM 记作 ,给任意 session 打分以充当"模拟用户",为缺失的真实反馈提供代理评分。它输入用户 与一个 session ,输出该用户对该 session 的偏好奖励,用于在 IPA 中为不同用户挑选偏好对。其中 为用户表示,通常由用户行为给出; 为 session 中第 个 item 的表示; 为 session 内 item 数。训练分四步。
第一步,target-aware 表示。对 session 内每个 item 取与用户相关的表示:
其中 为 target-aware 操作,例如让 item 对用户行为做 target attention,并非简单的逐元素相乘; 为第 个 item 的 target-aware 表示; 为整个 session 的 target-aware 表示序列。
第二步,session 内交互。让 session 内各 item 通过自注意力互相融合信息:
其中 、、 分别为自注意力的 query、key、value 投影矩阵; 为各 item 交互融合后的表示。
第三步,多目标打分。对 池化后用多个独立塔分别预测多个目标的奖励:
其中 为沿 item 维对 求和的池化; 为目标 的预测塔,结构为 SigmoidMLP,输出区间 的概率;、、、 分别为对 session 观看时长、view、follow、like 四个目标的预测奖励。
第四步,BCE 损失。用各目标的真实标签做二元交叉熵并求和:
其中 遍历上述四个目标; 为目标 的真实标签; 为对应预测概率; 为四个目标二元交叉熵之和。
RM 用大量真实推荐数据与真实标签预训练,在 IPA 开始前即就绪。它在 OneRec 中身兼两职:IPA 训练时作为"选择器"为每个用户挑选偏好对,离线实验时作为"评分器"给生成 session 打分。论文以 表示用于排序的总奖励,但未明确说明如何由四个目标的预测合成单一分数用于 IPA 选优选劣。
self-hard negative + IPA:
1 | 迭代自我提升循环: |
DPO 损失为:
其中 为 sigmoid 函数; 为温度系数,控制对偏好对差异的敏感程度; 为本轮待对齐的参考模型即第 轮模型, 为当前被优化的策略模型; 与 分别为用户 偏好对中的正例 chosen session 与负例 rejected session,下标 标记用户; 为模型在历史 条件下生成 session 的概率。
几个关键点:
- self 自生成 + hard 困难:负例来自模型自身 beam search 的输出,属 on-policy,是"接近正例、模型自身也会产生"的困难负样本,信息量显著高于随机负例。
- 仅采 1% 数据做 DPO,即 :beam search 生成 128 个候选加 RM 打分的开销较大,其余 99% 仅走 NTP;保留 NTP 也是为了维持基础生成能力、防止训练发散。消融显示 1% 即可获得绝大部分收益。
- 迭代: 从 初始化、用 构造的偏好对训练,再生成新对,以保持 on-policy 的时效性。
它与 S-DPO [4] 亦不同:S-DPO 的创新在损失结构,即 1 正例对多个负例的 softmax 对比,是 item 级,正例直接来自日志、无需 RM;OneRec 的创新在数据来源与选择,即训练 RM、按 RM 分数为每个用户选取个性化偏好对,是 session 级,无现成标签因此必须有 RM。两者改进的是 DPO 流程中不同的环节。
四、为什么有效:scaling 与偏好对齐的两条证据

(1) scaling law:将模型从 0.05B 扩到 1B,各层 token 预测准确率单调上升、训练损失单调下降。具体:0.05B→0.1B 最大 +14.45%,再到 0.2B、0.5B、1B 各 +5.09%、+5.70%、+5.69%。这是模型规模增大则效果提升的实证,也是采用 MoE 扩容的理由。

(2) IPA 将分布推向高价值:每层 softmax 在 8192 个 code 上的分布中,红星是最高 reward 的 item对应的 code,蓝线为 OneRec、橙线为 OneRec+IPA。加入 IPA 后概率质量明显向红星处抬升、集中,模型对生成偏好 item 的概率显著提高。这正是 DPO 设计预期的效果,即抬高 chosen、压低 rejected。
层间熵递减:第一层熵 6.00 时最不确定,第二层 3.71,第三层 0.048 时几乎确定。直觉是由粗到细加自回归:第一层粗码预测时上下文最少、有效分支最多、难度最大;第三层细码已知前两层、残差空间被收窄,几乎确定。
(2) 的分布图证明的是 IPA 成功将模型分布拟合到了 RM 的偏好上,机制层面 DPO 确实有效;但这是否为用户真正期望的偏好,该图本身无法回答,需依赖线上 A/B。这是后文将讨论的循环性问题的体现。
五、实验
5.1 设置
- 数据:快手短视频,A800 GPU,Adam,lr 。
- 关键超参:码本每层 、层数 ;、;历史长度 、session ;DPO 采 个候选、;线上 beam size 128。
5.2 评测方式:离线全用奖励模型打分
这是阅读本文最需重点关注的地方:离线指标不是真实用户反馈,而是用预训练 RM 给生成的 session 打分、取均值。四个指标分两类:
1 | watching-time 类: swt(会话观看时长) vtr(view/完播概率) |
Table 1 里每个指标有 mean、max 两列,结合 beam 多候选:max 为最佳候选的 reward,mean 为候选平均,再对用户平均。
循环性问题在于:同一个 RM 既在 IPA 训练时作为"选择器"挑选偏好对、又在离线作为"评分器"打分。这对 OneRec+IPA 有利,它正是朝 RM 高分优化的;对未对齐该 RM 的 baseline 不利,且 baseline 多为 next-item,用 session 级 RM 评估,对 session 原生的 OneRec 还存在结构性偏向。因此离线这组数据宜关注相对趋势,绝对效果需依赖线上 A/B。
5.3 离线结果
| 模型 | 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 |
由此得出三点:① session 级生成显著优于逐点的 TIGER,OneRec-1B 比 TIGER-1B 的 max swt 高 1.78%、max ltr 高 3.36%;② 仅 1% DPO,IPA 比基座 max swt +4.04%、max ltr +5.43%;③ IPA 优于 DPO、IPO、cDPO、rDPO、CPO、simPO、S-DPO 等各种变体,部分变体效果甚至不及不对齐。
5.4 消融

- 采样比例:从 1% 增至 5%,效果仅小幅提升但算力线性增长,5% 需 5× GPU。1% 即可获得约 95% 的最大效果、仅消耗约 20% 算力,因此定为 1%。
- 模型规模:0.05B→1B 单调涨。
5.5 线上 A/B
Table 2 是真实线上指标。
| 模型 | Total Watch Time | Average View Duration |
|---|---|---|
| OneRec-0.1B | +0.57% | +4.26% |
| OneRec-1B | +1.21% | +5.01% |
| OneRec-1B+IPA | +1.68% | +6.56% |
六、讨论与辨析
6.1 为什么优化器是统一的 Adam,而不是 dense/sparse 分开?
工业推荐主流做法是 dense 网络与 sparse embedding 使用不同优化器:dense 用 Adam,sparse 用 Adagrad、FTRL 或 SparseAdam。这一两部分不同优化器的代表出处是 Google 于 2016 年提出的 Wide & Deep——wide/sparse 侧用 FTRL+L1、deep/dense 侧 AdaGrad,而 AdaGrad、FTRL 本就是为稀疏数据设计的。
分开的实际理由有三:稀疏梯度支持、Adagrad 适配长尾稀疏特征、Adam 双倍状态难以承受十亿级 embedding 的显存开销。
而 OneRec 不含该巨型稀疏 ID embedding 表,而是用空间更小的 SID 统一了 ID 表征,因此统一使用 Adam 反而是与其 LLM 式架构一致的选择。
6.2 为什么只使用 SID 作为输入?
模型输入没有包含任何的 Side Info,我认为会导致几个问题:
- 新用户冷启动没行为序列,纯靠 SID 完全推荐不起来。
- 相同 SID 序列下,不同 User 的推荐内容完全一样,无法做到个性化“千人千面”,被热门视频主导的现象可能也会更严重。
- 非常非常依赖 SID 的 Tokenizer 质量。
6.3 纯端到端生成式推荐如何兼容业务策略
比如对某些 tag 的视频进行打压,如何让模型显式感知这个意图,我理解可以从 Reward Model 角度去实现,但是实现效果上感觉远不如 在传统集联链路上的某些环节增加 Filter 或者 Value Tree 显示控制分数 力度更大。
七、总结
OneRec 的核心贡献不是某个新算子,而是首次让一个生成式模型在工业级推荐中端到端地超过了级联排序:用 Encoder-Decoder + MoE 将推荐模型 LLM 化并获得 scaling law 收益、用 session 级生成捕捉列表内依赖、用 IPA 以 RM 加自生成困难负样本加 DPO 做偏好对齐。线上 watch-time +1.68% 是可靠的实证结果。
它有两点在阅读时需注意:这篇论文设计的 OneRec Model 的输入只有 SID 构成的 Item 序列;离线实验是基于自己设计的 Reward Model 做的。前者是范式取舍、后者以线上 A/B 作为最终依据。后续 OneRec Technical Report、V2 正是在算力、强化学习、奖励体系上将这套方法进一步深化。
相关论文清单
| 论文 | 关系 | 链接 |
|---|---|---|
| TIGER, NeurIPS’23 | 生成式检索 + RQ-VAE 语义 ID,OneRec 的直接前身 | arXiv:2305.05065 |
| DeepSeekMoE, 2024 | OneRec 的 MoE gating,即 与专家质心的出处 | arXiv:2401.06066 |
| DPO, NeurIPS’23 | 偏好对齐损失基础 | arXiv:2305.18290 |
| S-DPO, NeurIPS’24 | 推荐用多负例 DPO,对照组 | openreview |
| Breaking the Hourglass, EMNLP’24 | "沙漏现象"出处 | arXiv:2407.21488 |
| Wide & Deep, 2016 | dense/sparse 不同优化器的源头 | arXiv:1606.07792 |
| QARM | OneRec 的多模态对齐 + 残差 K-means 来源 | arXiv:2411.11739 |
注意点
- 注意:
- 中的 论文未定义,是 DeepSeekMoE 的专家质心。
- 论文中设计的 OneRec 输入仅为 SID 表征的 Item 序列,没有其它 Side Info。
- 离线实验全为 OneRec 自己训的 Reward Model 打分、非真实指标。
- wtr 在正文标为 “follow probability”,缩写与命名不一致,此处按原文记录。










