UniRec: 用贝叶斯定理弥合生成式与判别式推荐的表达力鸿沟
论文: UniRec: Bridging the Expressive Gap between Generative and Discriminative Recommendation via Chain-of-Attribute
链接: https://arxiv.org/abs/2604.12234
机构: Shopee
时间: 2026年4月
1. 问题背景
生成式推荐(Generative Recommendation, GR)将召回和排序重新定义为对 Semantic ID(SID)的自回归解码,用一个模型统一了多阶段推荐链路。然而,GR 相比传统判别式模型存在一个架构层面的表达力缺口:
- 判别式模型通过 $p(y \mid \mathbf{f}, u)$ 打分,能直接访问 item 侧特征 $\mathbf{f}$(品类、品牌、卖家等),天然具备 user-item feature crossing 能力;
- 生成式模型只在紧凑的 SID token 上做自回归解码 $\prod_{l} p(s_l \mid s_{<l}, u)$,解码过程中完全看不到 item 侧特征。
这导致了一个普遍现象:即使 GR 模型在召回阶段表现优秀,但在精排场景下,其推荐质量(尤其是高价值订单)仍然落后于判别式模型。UniRec 的核心目标就是从理论和工程两个层面,系统性地弥合这个表达力差距。
2. 核心方法
2.1 理论基础:贝叶斯等价性
UniRec 首先从理论上回答了一个关键问题:生成式模型的表达力上限到底在哪里?
通过贝叶斯定理,判别式得分 $p(y \mid \mathbf{f}, u)$ 可以被改写为:
\[p(y \mid \mathbf{f}, u) \propto p(\mathbf{f} \mid y, u) \cdot p(y \mid u)\]右侧 $p(\mathbf{f} \mid y, u)$ 可以对 item 特征做自回归分解:
\[p(\mathbf{f} \mid y, u) = \prod_{j=1}^{m} p(f_j \mid f_{<j}, y, u)\]这意味着:如果一个生成式模型能够自回归地生成 item 的完整特征序列,那么它在排序上与判别式模型是等价的。 当前 GR 的表达力差距,本质上来自于解码序列中缺失了 item 侧特征——不是架构缺陷,而是特征覆盖不完整。
这个理论结果直接指导了 CoA 的设计。
2.2 Chain-of-Attribute(CoA)
CoA 是 UniRec 的核心机制。其思想非常直觉:在解码 SID 之前,先自回归地生成 item 的结构化属性 token。
具体来说,对于目标 item,解码序列被构造为:
\[[\text{category}] \to [\text{seller}] \to [\text{brand}] \to [s_0, s_1, \dots, s_{L-1}]\]即属性 token 作为 SID 的前缀。这个设计带来了两个关键好处:
1. 恢复 feature crossing 能力
在生成属性 token 的过程中,模型隐式地执行了 user-item feature crossing——例如在预测 “seller” 时,模型已经结合了用户历史偏好和已生成的 “category” 信息。这正是判别式模型通过显式特征交叉实现的能力。
2. 降低 SID 解码熵
由于共享相同属性组合的 item 在语义空间中聚集,属性 token 的条件化效果等价于在 SID 码本中预先圈定了一个子区域。论文证明了:
\[H(s_k \mid s_{<k}, \mathbf{a}) < H(s_k \mid s_{<k})\]即属性条件化后每步解码的熵降低。这意味着 beam search 的搜索空间被有效收窄,搜索更稳定,效果更好。
2.3 容量约束的 SID 构建(Capacity-Constrained RQ)
传统 RQ-VAE 在构建 SID 时,高曝光 item 会主导码字分配,导致马太效应——热门 item 占据大部分码本容量,长尾 item 被压缩到少数码字中,token 坍塌严重。
UniRec 提出容量约束残差量化。核心思路是:为每个聚类设置曝光负载上限 $\tau C_{cap}$,其中 $C_{cap}$ 是平均曝光负载。量化过程分两阶段:
- 正常分配:每个 item 分配到最近的聚类中心;
- 超载修复:对超过容量上限的聚类,将多余 item 重分配到最近的未满聚类。
这有效缓解了 token 坍塌问题,使长尾 item 获得更好的语义表示。
2.4 模型架构:互信息 Prefill + 多任务生成
UniRec 的完整架构分为两个模块:
Prefill 模块:将用户历史行为序列编码为上下文表示。每个历史 item 由其 SID token + 属性 token + side info 组成。通过 Mutual Information Gating(MIG)机制,对信息量大的 token 赋予更高权重。为了处理超长序列,采用分块 Prefill + 跨块 KV Cache 传递。
Generation 模块:基于 Prefill 输出的 KV Cache,自回归地生成 $[\text{属性 token}] \to [\text{SID token}]$ 序列。关键设计包括:
- 属性解码:多个独立分类头并行预测属性 token(品类、品牌、卖家),不做自回归依赖(属性间独立性假设),避免引入额外延迟;
- SID 解码:标准自回归解码,条件于用户上下文 + 已生成的属性 token;
- Conditional Decoding Context(CDC):通过 Task-Conditioned BOS token 和基于哈希的 Content Summary 注入场景信号(如推荐类型、当前上下文摘要),使同一个模型适配多个业务场景。
2.5 训练:NTP + RFT + DPO 三阶段
阶段一:NTP(Next-Token Prediction)
标准自回归训练,目标序列为属性 token + SID token。属性 token 的 loss 权重 $\alpha$ 设为较小值(论文中 $\alpha_{\text{attr}} < \alpha_{\text{SID}}$),因为属性预测主要起辅助作用。
阶段二:RFT(Rejection-Fine-Tuning)
在 NTP 基础上引入强化信号。通过 Advantage Reweighting 机制,对高价值交互(高 GMV)赋予更大的训练权重,抑制低质量样本:
\[\mathcal{L}_{\text{RFT}} = -\sum_i \tilde{A}_i \cdot \log p_\theta(\mathbf{s}_i^* \mid u_i)\]其中 $\tilde{A}_i$ 基于 GMV 计算的归一化优势值。
阶段三:DPO(Direct Preference Optimization)
构建偏好对来直接优化排序质量。偏好等级定义为:购买 > 点击 > 仅曝光。关键技巧是逐层 Stop Gradient——仅对最后一层 SID token 的 logit 计算 DPO 梯度,前面的属性和 SID prefix token 冻结梯度,防止偏好优化破坏已学到的条件上下文。
3. 实验
3.1 离线实验
在 Shopee 内部数据集上,UniRec 相比多个强基线的提升:
| 方法 | HR@50 | HR@50(高价值订单) |
|---|---|---|
| TIGER | 基线 | 基线 |
| OneRec-V2 | 基线+X | 基线+X |
| UniRec | +22.6%(相对最强基线) | +15.5% |
几个关键发现:
- CoA 贡献最大:消融实验显示,去掉 CoA 后 HR@50 下降最为显著,验证了属性条件化是核心创新;
- 容量约束 SID 对长尾 item 效果显著:在高价值订单(通常更长尾)上的提升(+15.5%)比总体提升(+22.6%)更能说明问题的本质;
- RFT + DPO 提供额外增益:三阶段训练中,每个阶段都带来正向提升,但 CoA 是基础。
3.2 线上 A/B 实验
已在 Shopee 电商平台部署,线上 A/B 测试结果:
| 指标 | 提升 |
|---|---|
| PVCTR(页面浏览点击率) | +5.37% |
| 订单量 | +4.76% |
| GMV(成交总额) | +5.60% |
这是一个非常实打实的线上效果——在 Shopee 这样的大规模电商平台上,GMV +5.6% 是极其显著的提升。
4. 总结与思考
UniRec 最有价值的贡献是将生成式与判别式推荐的差距从直觉抱怨提升到了理论刻画。通过贝叶斯等价性定理,论文清楚地指出:GR 的表达力上限等于判别式模型,差距完全来自于 item 特征覆盖不足。CoA 正是对这个理论洞察的直接工程实现。
CoA 的设计哲学值得思考。它本质上是在自回归解码中引入了”思维链”——模型先思考 item 应该具有什么属性,再确定具体是哪个 item。这与 LLM 中 Chain-of-Thought 的思路异曲同工:通过增加中间推理步骤来提升最终预测质量。区别在于,CoA 的”推理步骤”是有明确语义结构的(品类 → 卖家 → 品牌),而不是自由形式的文本推理。
容量约束 SID 解决了一个被广泛忽视的问题。大多数 SID 工作都聚焦于量化质量(重构误差),而忽略了曝光分布导致的 token 坍塌。这在工业场景中是一个很实际的问题——20% 的热门 item 可能占据 80% 的曝光,如果 SID 码本被它们主导,长尾 item 的推荐质量就会严重下降。
DPO 的逐层 Stop Gradient 是一个重要的工程细节。在多步自回归模型中做 DPO 时,如果梯度不加限制地回传到所有层,容易破坏前面 token 的生成分布(类似于 reward hacking)。UniRec 通过冻结前层梯度、只优化最后一层 SID token,巧妙地平衡了偏好优化与分布稳定性。这个技巧对其他 GR + RL 的工作也有参考价值。
值得进一步探讨的问题:CoA 的属性选择(品类、卖家、品牌)目前是人工设定的,不同业务场景下最优属性组合可能不同。是否可以自动学习 CoA 的属性顺序和组合?另外,属性 token 之间的独立性假设(并行解码)在某些场景下可能不成立——例如特定品类下只有特定卖家,此时品类和卖家之间有强依赖。如何在效率和精度之间做更好的权衡,是一个开放问题。