← 论文沉淀 / 🎯 生成式推荐 · ·RecSys 2026

MDGR: Masked Diffusion Generative Recommendation

Lingyu Mu, Hao Deng, Haibo Xing, Jinxin Hu, Yu Zhang et al. (7 人)

Alibaba International Digital Commerce Group × Wuhan University

把 SID 生成从「固定左到右的自回归」改成「掩码扩散去噪」:在 OPQ 并行码本上,从全 [MASK] 的 8 位 SID 出发,用双向注意力解码器按置信度自由选位、多步迭代填充,生成顺序不再写死。训练侧在时间维度用余弦课程调度逐步加大掩码个数,在样本维度按「目标 token 在用户历史中出现得越少越优先 mask」分配位置;推理侧先 4 步单位置 warm-up 锁定语义锚点,再每步并行填 2 位并配合 beam search 出 Top-B。工业集上比 RPG 提升约 10%,东南亚电商广告线上替换 TIGER 收入 +1.20%、GMV +3.69%。

Masked Diffusion DecodingParallel OPQ CodebookCurriculum Noise SchedulingHistory-Aware MaskingOrder-Agnostic SID Generation
📝 我的备注
加载中…

核心思路

现有 SID 生成式推荐大致分两类。一类是 残差码本 + 自回归(TIGER),按层级从左到右逐个生成 token;另一类是 并行码本 + 单步解码(RPG),一次前向把所有位预测出来。作者认为两者都有问题:

  • 自回归只能看左侧前缀,难以保证多个语义维度的全局一致;而且所有用户共用一条固定的解码路径,相当于假设大家都按同一顺序关注品类、品牌、价格等属性,这和用户兴趣的异质性相矛盾;同时需要 L 步串行,推理慢。
  • 单步并行解码一次定终局,忽略了局部属性之间的细粒度约束,解码顺序同样与用户无关。

MDGR 的做法是把 SID 生成看成 掩码扩散的去噪过程:从全 [MASK] 的 SID 出发,双向注意力解码器每步挑置信度最高的若干位填上,多步迭代完成。这样同时满足三点:生成顺序随用户而变(顺序无关)、可以多步细化、每步可并行填多位。

直接套用通用 MDM 有两个问题:均匀随机 mask 不区分 SID 各位的难度;扩散模型只出一条序列,召回却需要 Top-B 候选。MDGR 针对这两点分别在训练和推理侧做了改造。

整体实现思路

整体分三块:

  1. 码本:用基于 OPQ 的并行码本代替残差码本。每位 token 落在独立子空间,没有层级依赖,因此可以按任意顺序 mask 和填充。
  2. 训练:encoder-decoder 架构,decoder 使用双向注意力。每个样本先由 全局课程噪声调度 决定 mask 几位(时间维度),再由 历史感知位置分配 决定 mask 哪几位(样本维度),同时加入难度 embedding d_k,只在被 mask 的位置上计算交叉熵。
  3. 推理:从全 [MASK] 开始,前 R_warm 步每步只填置信度最高的 1 位(warm-up),之后每步并行填 m_par 位,配合改造后的多位置 beam search 输出 Top-B 个 SID,再映射回商品。

整体可以看成每个语义维度独立的离散时间吸收态马尔可夫过程:每一位要么保持不变,要么以掩码率 alpha_{t,l}(u,i+) 被吸收到 [MASK]。这个掩码率没有显式参数化,而是由 P_time 和 P_pos 隐式决定。

子模块实现(可复现细节)

1. 并行码本(OPQ 式)

  • 内容编码:用 Qwen3-8B 编码商品内容(标题、描述等),得到 e_i ∈ R^d。
  • 子空间投影:e_i^l = f_l(e_i) ∈ R^{d_l},其中 f_l 是线性层,l = 1..L。
  • 量化:c_i^l = argmin_j || e_i^l - C^l[j] ||^2,每个子空间各自取最近码字。
  • 配置:L = 8 个码本,每个 300 个码字,码字维度 256,每个商品得到 8 位 SID。

2. 编码器 / 解码器骨架

  • Encoder:6 层 Transformer,hidden 256,8 头,输入用户点击序列(以 SID 表示)。
  • Decoder:把因果自注意力换成 双向自注意力,通过 cross-attention 读取 encoder 输出;输入为部分被 mask 的目标 SID 加上位置信息。
  • 训练环境:分布式 PyTorch,2 个 PS 和 10 个 worker,每个 worker 一张 A100。

3. 时间维度:全局课程噪声调度

  • 训练进度:tau = min(1, n/N)。
  • 难度标量:delta = ( sqrt(1 - cos^2(pi/2 · (1 - tau))) )^gamma,gamma 控制 delta 从 1 降到 0 的快慢,默认 gamma = 2.0。
  • mask 个数打分:s(k) = (1 - delta)·f_high(k) + delta·f_low(k),k = 1..L。实际使用线性函数 f_low(k) = L + 1 - k、f_high(k) = k。
  • 归一化:P_time(k) = s(k) / Σ_j s(j),每个样本采样 k ~ P_time。
  • 效果(论文图 3b,gamma=2):k=1 的概率从训练初期的 0.22 逐渐降到 0.05,k=8 的概率从 0.04 升到 0.21,训练从易逐步过渡到难。
  • 难度 embedding:把 k 当作离散索引,从可学习表 D ∈ R^{L×D} 中取 d_k,加到 decoder 每个输入 token embedding 上,让模型知道当前噪声强度。推理时初始用 d_(L)。

4. 样本维度:历史感知 mask 位置分配

  • 对目标 SID 的每一位 l,统计用户历史中同一位 token 相同的次数:f^l = #{ j ∈ s_u | c_j^l = c_{i+}^l }。
  • 权重取频次倒数:w^l = 1 / (f^l + eps),归一化后得到 P_pos^l = w^l / Σ_m w^m。
  • 按 P_pos 采样 k 个位置构成 M,将这些位置替换为共享的 [MASK],其余位置保留原 token。
  • 直观理解:用户历史里少见的属性更难预测,就更常被遮住,监督集中在难的维度上。

5. 训练目标

L = E_{(u,i+)} E_{k~P_time} E_{M~P_pos(·|k,u,i+)} [ - Σ_{l∈M} log p_θ( c_{i+}^l | c̃_{i+}, s_u, d_k ) ]

只在被 mask 的位置上计算标准交叉熵。复杂度与同规模 AR 一样是 O(H·L^2·d),两个调度只增加 O(L) 的采样开销。

6. 推理:warm-up 两阶段位置调度

  • 第 r 步更新的位数:m = 1(r < R_warm),否则 m = m_par(m_par > 1)。
  • 总步数:R = R_warm + (L - R_warm) / m_par。默认 R_warm = 4、m_par = 2,8 位 SID 共 6 步。
  • warm-up 阶段先锁定最有把握的语义锚点,避免在全噪声状态下一次填多位导致早期出错。

7. 置信度选位

  • 对每条 beam 的未填位置 l,计算 conf(l) = max_c p_θ(x^l = c | x^(r), s_u, d^(r))。
  • 取置信度最高的 m 个位置组成 S^(r)。选位不受左到右限制,每条路径的顺序可以不同。
  • 每条 beam b 在每个被选位置 l 上保留 Top-B 候选 token 及其概率。
  • 对 m 个位置做笛卡尔组合,每条 beam 展开为 B^m 条,得分为 v + Σ_k log p̃。
  • 汇总所有候选后取 Top-B 进入下一步,B = 50。所有位置填满后停止,用离线构建的码本索引把 SID 映射回商品集合。
  • 推理复杂度:AR 为 O(B·H·L^3·d),并行 GR 为 O(B·H·L^2·d),MDGR 为 O(R·B·H·L^2·d),约为 AR 的 R/L。

实验设置与结果

数据集

数据集用户商品交互备注
Amazon Electronics~250K~90K2.1M过滤交互少于 5 的用户,序列截断 20,leave-one-out
Amazon Books~110K~180K3.1M同上
工业集(东南亚电商)18M25M>1B2025 年 5-12 月,平均序列长度 128,含点击和转化,多模态内容

基线:ID 判别式(SASRec、BERT4Rec、S3Rec、PinnerFormer、HeterRec、DiffuRec、VQ-Rec),SID 生成式(TIGER、Cobra、RPG)。

主结果(表 2,摘录)

方法Elec R@10Elec N@10Books R@10Books N@10工业 R@5工业 N@5工业 R@10工业 N@10
SASRec0.04900.03090.06970.03910.14130.09090.16950.1080
HeterRec0.05100.03190.07120.03980.15920.10140.18900.1208
DiffuRec0.05070.03170.07220.04030.15860.10130.18890.1207
TIGER0.05240.03240.07310.04080.16200.10490.19430.1244
Cobra0.05440.03380.07630.04260.16590.10590.19960.1285
RPG0.05430.03390.07620.04270.16790.10760.20180.1296
MDGR0.05830.03670.08260.04630.18560.11920.22100.1422
Improv.+7.17%+8.26%+8.26%+8.43%+10.45%+10.78%+9.54%+9.72%

Electronics 上 R@5/N@5 为 0.0394/0.0258(+9.75%/+8.86%),Books 上为 0.0631/0.0361(+8.61%/+8.73%)。

效率与效果权衡(表 3,工业集)

R_warmm_par总步数R@10QPSQPS 提升
0180.22192.212基线(逐位解码)
0240.21273.015+36.30%
2250.21992.741+23.92%
4260.22102.527+14.24%
6270.22132.365+6.92%
4360.22052.526+14.19%
4450.22042.739+23.82%

不做 warm-up 时 R@10 掉 4.15%;R_warm 取 4 到 6 时基本追平逐位解码。

消融(表 4,工业集)

设置R@5变化N@5变化
MDGR0.1856–0.1192–
码本换 RQ-VAE0.1829-1.46%0.1175-1.43%
码本换 RQ-KMeans0.1830-1.40%0.1176-1.34%
Random quantity(去课程调度)0.1831-1.35%0.1179-1.09%
Random positions(随机位置)0.1822-1.83%0.1168-2.01%
Vanilla mask(标准 MDM)0.1792-3.45%0.1154-3.19%
w/o d_k0.1837-1.02%0.1179-1.09%
w/o confidence(随机选位)0.1820-1.94%0.1170-1.85%

gamma 敏感性:gamma 取 0.5 到 1.0 时课程过激,取 2.5 到 3.0 时过缓,两端都变差,gamma=2 在四个指标上都最好。

线上 A/B

东南亚头部电商的广告推荐平台,2026-01-05 至 01-12,对照组为线上的 TIGER,实验组和对照组各占 20% 用户:广告收入 +1.20%,GMV +3.69%,CTR +2.36%(双侧检验 p<0.05)。

思考与可参考价值

值得借鉴的地方

  • 历史频次反比 mask 是这篇最容易迁移的技巧。它对目标 SID 中「与历史重复的属性」降权、对「新属性」加权,等于在训练信号上对抗模型抄写历史。任何多位 SID 的 MTP 或多头训练都可以试,几乎没有成本。
  • 课程式 mask 数量 + 难度 embedding 是很便宜的稳定化手段。消融中标准 MDM 比完整版低 3.45%,说明做离散扩散 GR 时,面向推荐的噪声设计比扩散框架本身更关键。
  • 置信度选位 + warm-up 的思路不依赖扩散:即使用 RQ 码本,也可以考虑先串行解码前几层锁定粗类目,再并行解码剩余层(推断)。

需要保留意见的地方

  • 速度卖点偏弱:默认配置只比逐位解码快 14.24%,且没有和 TIGER/RPG 直接比时延。AR 的 O(L^3) 复杂度没有考虑 KV cache。B=50 时每步每条 beam 展开 B^m 个组合,GPU 上的 top-k 开销不可忽略。
  • 表 3 有疑点:m_par=3 与 m_par=2 在 R_warm=4 下总步数都是 6,QPS 几乎相同(2.526 对 2.527),文中却说 QPS 随 m_par 单调上升。
  • 增益来源不清:MDGR 用 Qwen3-8B embedding 配 8×300 的 OPQ 码本,基线的码本和内容编码器是否对齐没有说明。码本消融只做了「MDGR 换 RQ」(掉约 1.4%),缺少「同一并行码本 + AR 解码」的对照,所以约 10% 的提升里有多少来自扩散本身无法判断。
  • 对比不完整:没有和点名的并发工作 LLaDA-Rec、DiffuGR 比较;图 2 画了 ReMask,但正文没有说明是否使用重新 mask。
  • 公开集上的绝对提升约 0.004,没有方差或多次运行;Improv. 列有小的算术不一致(工业 R@5 按表算约为 +10.54%,文中写 +10.45%)。非法 SID 比例和 SID 冲突率都没有报告。

落地前建议核对:(1) 在自有码本上跑「AR 解码」与「掩码扩散解码」的同码本对照;(2) 实测 B=50、m_par=2 下端到端时延与显存;(3) 统计 8 位并行码本下的非法 SID 率和碰撞率;(4) 如果线上 SID 是 RQ 层级结构,迁移到并行码本需要重建码本和下游索引,这部分成本要单独评估。