SPRINT: Single-Step Generative Recommendation via Average Probability Velocity
Zhuo Cai, Shoujin Wang, Peilin Zhou, Min Xu, Julian McAuley, Fang Chen
cs.IR
2026-09-28
SPRINT把SID生成看成概率流平均速度,一次前向打出全部token并用双层对比补一致性。8个数据集上推理比次快方法快8.39–10.04倍,精度平均高7.77%。
生成式推荐把每个物品编成一小段离散 token,叫 Semantic ID(SID,语义 ID),推荐就是根据用户历史生成下一项的 SID。一段 SID 通常 3 到 4 个 token。自回归模型从左到右解码,L 个 token 就要 L 次前向。Masked diffusion(掩码扩散:把 SID 部分位置盖住再逐步揭开)这类非自回归模型能并行,但要保住精度,实践里仍会一轮只敲定一个位置,还是 L 次。再乘 beam,延迟敏感的推荐服务很难接。
现成的 masked diffusion 压成一步会塌。LLaDA-Rec 在 Instruments 上从 4 步收到 1 步,R@10 从 0.0623 掉到 0.0023,掉 96.31%;DiffGRM 同设置掉 76.93%。已有单步方案各付各的账:RPG 一次预测全部位置,却把 SID 拉到 16–64 个 token,embedding 表胀 4–16 倍;OneGR 一次出位置分数,后面还要跑 A。
要问的就是:离散 SID 上,一次前向能不能打出全部 token,还不把一条 SID 内部的一致性弄丢。
SPRINT 把 SID 生成看成概率流。起点是全 mask,终点是目标 SID。多步模型跟瞬时速度,一步跳一点。整段过程的平均速度由每个位置的平均生成概率完全决定。连续 mean flow 靠对状态求导还原平均速度,离散 token 上没有这个导数。这边走凸插值,运输方向不随时间变,平均速度可以闭式积出来,网络直接拟合平均生成概率。
骨干是双向 Transformer:1 层 encoder 编码最长 20 的用户历史,4 层 decoder 用 L 个 mask query 一次打出每个位置在对应 codebook 上的分布。物品用 OPQ(optimized product quantization,优化乘积量化)切成 L=4 个独立子空间,每本 codebook 256 个码字。单步不拿前一个 token 当条件,残差量化那种后码依赖前残差对不上。Sports 上把 OPQ 换成 RQ-VAE 或 RQ-Kmeans,R@5 从 0.0411 掉到 0.0284 和 0.0296。
各位置概率是独立打出的,拼起来可能对不上真实物品。一致性靠双层流对比来补:
训练固定终点 t=1。起点时间 r 以概率 ρ 取 0(全 mask,对齐推理),其余从均匀分布抽,让模型也能补全已经敲定一部分的 SID。ρ 在 0.75 或 1 最好。负样本默认 100,Arts 用 1000。推理在合法 SID 的前缀树(trie)上打分,分数是 token 对数概率之和加上 SID 层相似度,取 top-K。
八个数据集,leave-one-out,全库 Recall 和 NDCG,K 取 5 和 10,五个随机种子平均。对照覆盖 SASRec、FAVE 等物品 ID 方法,TIGER、ActionPiece、COBRA、SID-MLP 等自回归生成,以及 RPG、LLaDA-Rec、DiffGRM、OneGR 等非自回归生成。
主表 R@5(次优多为 OneGR 或 DiffGRM):
| 数据集 | SPRINT | 次优 | 相对提升 |
| Sports | 0.0411 | 0.0377(OneGR) | 9.02% |
| Beauty | 0.0675 | 0.0628(OneGR) | 7.48% |
| Toys | 0.0708 | 0.0635(OneGR) | 11.50% |
| Scientific | 0.0444 | 0.0405(DiffGRM) | 9.63% |
| Instruments | 0.0462 | 0.0426(DiffGRM) | 8.45% |
| Games | 0.0636 | 0.0623(LLaDA-Rec) | 2.09% |
N@5 最大相对提升在 Scientific:0.0301 对 0.0273,高 10.26%。全数据、全指标平均相对次优 7.77%。主表展开了六个 Amazon 子集,Yelp 和 Arts 放在附录。Games 几乎贴着 LLaDA-Rec,单步的精度账在这儿最薄。R@10 上 Toys 相对提升 14.19%(0.0998),Sports 为 8.19%(0.0621 对 OneGR 的 0.0574)。
效率对比统一 batch、序列长度,用得到 beam 的方法设 beam=10。整测试集生成,SPRINT 在 Sports 到 Games 六个子集上耗时 2.65、1.52、1.28、4.08、4.62、7.55 秒。次快的 RPG 是 24.70 到 64.43 秒,加速 8.39–10.04 倍。相对 TIGER 约 25–37 倍,相对 LLaDA-Rec 可到百倍以上,Toys 上 125.94 倍。训练每 epoch 也更短,相对 RPG 只快 1.11–1.31 倍,账主要记在推理。
消融里 SID 层比 token 层更关键:Sports 上去掉 SID 层,R@5 从 0.0411 掉到 0.0297;去掉 token 层只到 0.0387。对比换成纯目标交叉熵,再掉到 0.0250。负样本加到 100 以后精度变慢,训练时间开始陡增。
生成式推荐卡在「每个物品 L 次前向再乘 beam」。SPRINT 给出一条单步路径:继续用 4-token 的紧凑 SID,不把词表拉长,解码时也不跑 A。一次前向打出 L×M 概率表和用户向量,合法 SID 的打分是查表加一次矩阵乘。
已经在跑 SID 生成的团队,这更接近换解码器和解码目标。不要直接接 TIGER 的 RQ-VAE:残差码和并行预测是拧着的,需要 OPQ 这类独立子空间量化。精度是稳定的渐进改进,Games 上只有约 2%。速度才是能进延迟预算的那一项。
实验全是 Amazon 和 Yelp 的 leave-one-out,物品数大约 1.2 万到 9 万,平均序列长度 8 到 10,最大历史 20。没有工业流量,没有线上 A/B,推理数字是整测试集墙钟,不是 p99。精度对比按各方法原论文调参,效率对比才把 batch 和 beam 对齐,两张表里的基线不一定是同一组权重。
推导里的速率系数 λ 在训练和生成中都不用。落到代码上,网络拟合区间平均后验,损失是双层对比。写成「离散 mean flow」在数学上能闭合,但没有「同样骨干和损失、去掉 flow 叙事」的对照,理论包装和工程收益拆不开。
推理分数对合法 SID 集合 T 做 softmax。物品库这个量级上,这接近全库打分。AR 基线 beam=10 只展开一小撮路径。SPRINT 可能吃到「看见全库」的便宜,正文没有把基线也改成全库打分来隔离。物品库再大一个数量级,对全库做 SID 层矩阵乘会不会重新成为瓶颈,也没有测。Arts 负样本改成 1000,超参已经和其他数据集不同。