TIGER: Recommender Systems with Generative Retrieval
TIGER: Recommender Systems with Generative Retrieval
基本信息
| 字段 | 内容 |
|---|---|
| 标题 | Recommender Systems with Generative Retrieval |
| 作者 | Shashank Rajput, Nikhil Mehta, Anima Singh, Raghunandan H. Keshavan, Trung Vu, Lukasz Heldt, Lichan Hong, Yi Tay, Vinh Q. Tran, Jonah Samost, Maciej Kula, Ed H. Chi, Maheswaran Sathiamoorthy |
| 机构 | |
| 年份 | 2023 (NeurIPS’23) |
| 方向 | Generative Retrieval, Semantic ID, RQ-VAE, Seq2Seq Recommendation |
| 场景 | 序列推荐的召回阶段: 用生成式解码取代基于 ANN 的双塔检索 |
| arXiv | https://arxiv.org/abs/2305.05065 |
TL;DR:传统召回是"学一张 item embedding 表 + ANN 近邻搜索"。TIGER,即 Transformer Index for GEnerative Recommenders,采用另一条路线:先用 RQ-VAE 将每个 item 的内容向量量化为一串有层级语义的离散码字,即 Semantic ID,形如
(12, 24, 52),语义相近的 item 共享前缀;再训练一个 T5 式 encoder-decoder,将用户历史展平为 token 序列,自回归地生成下一个 item 的 Semantic ID,beam search 直接输出 Top-K。它是第一个"基于 Semantic ID 的生成式推荐模型"。它将 NLP 的 DSI 可微检索索引范式迁移到推荐;实验规模为 1 万多 item 的 Amazon 子集与 13M 的小模型,面向工业级十亿物料、低延迟召回时,beam search 的算力、覆盖率、物料更新仍是待解决的问题,也是后续 OneRec 一类工作的研究方向。
一、动机:召回为什么要"生成"
现代推荐是经典的两阶段:召回 从百万/十亿物料中粗筛出几百至上千个候选,精排 再做细粒度排序。召回这一环节,主流做法是基于 embedding 的检索,即 EBR:
- 双塔模型将 user / item 各编码为一个稠密向量;
- 离线将所有 item embedding 写入一个 ANN 索引,如 ScaNN、FAISS、HNSW;
- 线上用 user 向量做最大内积搜索 MIPS,取 Top-K。
这套范式较为成熟,但作者指出了几个根本性问题:
- item embedding 表随物料数线性膨胀:每个 item 一行 embedding,十亿物料就是十亿行,存储与更新开销大;长尾 item 交互稀疏,embedding 难以学好。
- 召回质量受限于 ANN 的近似:MIPS 是近似搜索,且 user/item 表示一旦固定,召回就只能在这张固定的 embedding 表内进行。
- 冷启动割裂:新 item 没有交互就缺乏可靠的 embedding,需依赖额外的冷启动机制补充。
作者的主张是:能否不要那张 embedding 表、也不要 ANN,直接让模型生成"下一个 item 是谁"? 这就是源自 NLP 的 生成式检索。它的前身是 Google 提出的 DSI,即 Differentiable Search Index:将整个文档库编码进 Transformer 参数,输入 query 直接解码出 doc id。
创新点,论文自述:
- 提出 Semantic ID: 用 RQ-VAE 将 item 内容向量量化为一串具有"从粗到细"层级的离散码字,作为 item 的新标识符;
- 训练一个 seq2seq Transformer 做 端到端生成式检索,自回归生成目标 item 的 Semantic ID,在多个数据集上超过当时 SOTA;
- 带来两个贡献:冷启动推荐 与 可控的推荐多样性。
其中最关键的一点是将"语义相似"编码为"ID 前缀相同"。一旦相似 item 在标识符空间里的表示也相近,模型在 token 级别上即获得了利于泛化的归纳偏置,这是随机 ID、哈希 ID 所不具备的。
二、问题形式化
给定用户的按时间排序的交互序列 ,序列推荐要预测下一个 item 。
TIGER 将其拆为两步:
- Tokenization 语义量化:学一个函数将每个 item 映射为长度 的离散码字元组,即 Semantic ID
其中 为第 个 item 的第 位码字,第一个下标 为 item 编号,第二个下标 为码字在元组中的位置,取值 , 为 Semantic ID 长度即码字级数; 为每一级码本所含码字个数,故每一位码字取自 。
- Generative retrieval 自回归生成:将用户历史中每个 item 替换为它的 Semantic ID 并展平为一长串 token,训练模型最大化下一个 item 的 Semantic ID 的条件似然
其中 为用户历史交互序列长度, 为待预测的第 个 item 的 位码字,竖线右侧为前 个 item 各自的码字按顺序展平拼接而成的条件 token 序列。按链式法则自回归分解。推理时对这个分布做 beam search,生成的码字元组再映射回 item,即为召回结果。
这里的关键是:item 不再是 embedding 表里的"一行",而是 一个固定小词表上 token 的组合。、 时,理论上 个组合即可编码大量 item,而词表只有 个 token,参数不再随 item 数线性增长。
三、方法
整个 pipeline 分两阶段,先量化、后生成:
1 | 内容特征(title / brand / price / category) |
3.1 Semantic ID 是什么
Semantic ID 是一串有序的离散码字,核心性质是 语义相近的 item 共享前缀:第一个码字 决定粗类目, 在 之内细分, 再细分,依此类推,可类比为一个学习得到的、从粗到细的层级"类目",前缀对应大区、后缀对应细分地址。例如论文中 Beauty 数据集上 几乎都是护发 Hair 类, 多为彩妆、护肤 Makeup / Skin 类。
要得到这种层级码字,需先获得 item 的语义向量,再做残差量化。
内容向量:作者用预训练的 Sentence-T5 把 item 的内容特征编码为 768 维 向量 ,内容特征由标题、价格、品牌、类目拼接成一段文本。这一步保证了"内容相似 → 向量相近",是后续语义层级的来源。
这条技术路线的共识是 item 的"身份"应来自内容,而非一个随机分配的 ID 整数。
3.2 RQ-VAE

RQ-VAE 即 Residual-Quantized VAE,思想是 用多级码本做逐层逼近:先用一个码字粗略近似向量,再用下一级码本对"未被近似掉的残差"继续近似,逐级降低误差。其过程类似逐次逼近:第一级给出粗略近似,第二级补偿其残差,第三级再继续补偿。
具体流程如下,编码器记为 、解码器记为 , 级,每级码本 ,,码字维度 32:
- 编码:,其中 是 接 ReLU、输出 32 维的 MLP;
- 初始残差 ;
- 对每一级 :找最近码字、记下标、更新残差
其中 为进入第 级时待量化的残差向量, 为第 级码本中第 个码字,上标 表示码本所属级数,下标 为该级码本内的码字编号; 在第 级码本上取与残差最近的码字,所得下标 即该级选中的码字编号、也是 Semantic ID 的第 位, 为按该下标选出的码字; 为减去本级码字后留给下一级的新残差。
- 量化后的表示是各级码字之和,再解码重建:
这串下标 就是这个 item 的 Semantic ID。
损失函数 采用 VQ 系列的标准形式,由重建项与量化项构成,量化项用 stop-gradient 让码本和编码器交替更新:
其中 是 stop-gradient,。第一项把码本 拉向残差以更新码本,第二项是 commitment loss,把编码器输出拉向码本以更新编码器, 不可导的部分靠 straight-through 估计回传。
之所以采用"残差"量化,而非单级量化 VQ,是因为残差量化天然给出层级结构:第一级码字承载最多能量,对应粗类,后续各级为修正项,对应细分。这正是 Semantic ID "前缀=粗类、后缀=细分"性质的来源。若将其换成 LSH 这类无层级的哈希,实验中指标会明显下降,见后文。
3.3 RQ-VAE 的训练稳定性与设计选择
VQ 系列量化器有一个常见失效模式——码本坍缩(codebook collapse):训练中绝大多数输入只被映射到少数几个码字,其余码字始终不被选中(dead codeword),码本的有效容量远小于名义大小 ,量化与重建精度随之劣化。TIGER 针对量化器训练做了几点处理:
- 用 k-means 初始化码本,以防止码本坍缩。 论文不对码本做随机初始化,而是在第一个训练 batch 上运行 k-means,将聚类中心作为各级码本的初始码字,使码字初始即落在数据的真实分布上,避免训练初期就退化到少数码字。这是论文明确给出的、针对码本坍缩的主要手段。
- 每级使用独立码本,而非共享单个 大小的码本。 论文为 级各配置一个大小为 的独立码本。理由是残差范数随级数增加而减小:靠后的级处理的残差更小、更精细,需要与靠前的级不同的码字粒度,独立码本才能让每一级各自适配自身的数值尺度。
- 以码本使用率作为收敛判据。 量化器用 Adagrad 优化器,学习率 0.4、batch size 1024,训练约 20k 个 epoch,直至码本使用率达到 ,即至少八成码字被实际选用,以此作为"码本未坍缩、容量被充分利用"的标志。
两点补充:其一,重建损失对 选码操作不可导,按 VQ-VAE 惯例用 straight-through estimator 将梯度从量化结果 直接复制回编码器输出 ;其二,论文未给出"有/无 k-means 初始化"的消融,故 k-means 对最终指标的具体增益只是定性结论。
3.4 去重位:SID 第四个 Token
RQ-VAE 只有 3 级码字,难免发生碰撞:两个不同 item 量化出同一个 。TIGER 的处理较为直接:在末尾追加一位用于去重。例如两个 item 都落在 (12,24,52),则分别记为 (12,24,52,0) 和 (12,24,52,1)。
因此最终 Semantic ID 长度为 4:前 3 位来自 RQ-VAE,含语义;第 4 位是纯计数器,无语义。词表大小 ,每一位用各自独立的 256 段 token,使模型能区分"这是第几位"。
3.5 生成式检索:T5 将语料编码进参数
有了 Semantic ID,第二阶段即为一个纯序列到序列任务。模型用 T5X 框架的 encoder-decoder:
- 输入序列 = 一个 user token + 用户历史中每个 item 展平后的 Semantic ID token。user token 用 哈希方法 将原始 user ID 映射到 2000 个 user token 之一,既控制词表规模,又引入有限的个性化信息(实际作用很小,见 §5.3 消融);
- decoder 自回归生成下一个 item 的 4 个码字 。
架构超参:encoder、decoder 各 4 层,每层 6 个 attention head,head 维度 64,FFN 维度 1024,模型与输入维度 128,dropout 0.1,ReLU 激活,整模型约 13M 参数。词表 = 1024 个 item token + 2000 个 user token。
训练:Amazon Review Dataset Beauty、Sports 训 200k step,更小的 Toys 训 100k step;batch 256;学习率前 10k step 固定 0.01,之后 inverse-square-root 衰减;训练时每个用户的历史最多截取最近 20 个 item。
推理:对 decoder 做 beam search,生成的码字元组映射回 item 即 Top-K 召回。由于是在 -叉、深度 4 的码字树上搜索,beam search 直接给出排好序的候选,不需要 ANN 索引,也不需要 item embedding 表。
四、为什么有效
综合来看,TIGER 的收益来自三个层面:
-
归纳偏置:语义相似 → 前缀相同。 随机、哈希 ID 下,item 标识符之间没有任何关系,模型只能依赖记忆;Semantic ID 让相似 item 在 token 空间中共享前缀,参数在相似 item 间被共享,长尾和稀疏 item 因此能借助同前缀热门 item 学到的模式。消融实验中将 RQ-VAE 换成 LSH 或随机 ID 后指标大幅下降,说明收益来自"语义层级"而非"生成"这一动作本身。
-
参数不再随 item 数线性膨胀。 item 由固定 1024 词表的 4-token 组合表示,理论容量 亿,而需要学习的 token embedding 仅约一千个。相比"一个 item 一行 embedding",存储与更新负担得以解耦。
-
冷启动可自然支持。 新 item 不需要任何交互,仅凭内容经过 Sentence-T5 与 RQ-VAE 即可得到 Semantic ID;只要它与已知 item 共享 前缀,模型在生成该前缀时就有机会召回它,召回与冷启动被统一进同一套机制。
反过来看,这套范式的不足也正源于这三点:收益高度依赖 Sentence-T5 内容向量的质量,内容质量低则语义层级差;十亿物料下 beam search 的延迟与覆盖率未在本文验证;去重位与"生成不存在的 ID"说明 ID 空间和真实物料并非一一对齐。
五、实验
5.1 设置
- 数据集:Amazon Product Reviews 三个子类目,过滤掉交互少于 5 的用户,按时间排序。
| 数据集 | #用户 | #item | 平均序列长度 |
|---|---|---|---|
| Beauty | 22,363 | 12,101 | 8.87 |
| Sports and Outdoors | 35,598 | 18,357 | 8.32 |
| Toys and Games | 19,412 | 11,924 | 8.63 |
- 协议:leave-one-out,每条序列最后一个 item 测试、倒数第二个验证、其余训练。
- 指标:Recall@5、Recall@10、NDCG@5、NDCG@10。
- Baseline:GRU4Rec、Caser、HGN、SASRec、BERT4Rec、FDSA、S³-Rec、P5。
5.2 主结果
TIGER 在三个数据集、四个指标上均取得最优,下表中加粗为最优。表中 Improv. 为相对当时最强 baseline 的提升,最强 baseline 多为 SASRec 或 S³-Rec:
Beauty
| Method | Recall@5 | NDCG@5 | Recall@10 | NDCG@10 |
|---|---|---|---|---|
| P5 | 0.0163 | 0.0107 | 0.0254 | 0.0136 |
| Caser | 0.0205 | 0.0131 | 0.0347 | 0.0176 |
| HGN | 0.0325 | 0.0206 | 0.0512 | 0.0266 |
| GRU4Rec | 0.0164 | 0.0099 | 0.0283 | 0.0137 |
| BERT4Rec | 0.0203 | 0.0124 | 0.0347 | 0.0170 |
| FDSA | 0.0267 | 0.0163 | 0.0407 | 0.0208 |
| SASRec | 0.0387 | 0.0249 | 0.0605 | 0.0318 |
| S³-Rec | 0.0387 | 0.0244 | 0.0647 | 0.0327 |
| TIGER | 0.0454 | 0.0321 | 0.0648 | 0.0384 |
| Improv. | +17.31% | +29.04% | +0.15% | +17.43% |
Sports and Outdoors
| Method | Recall@5 | NDCG@5 | Recall@10 | NDCG@10 |
|---|---|---|---|---|
| SASRec | 0.0233 | 0.0154 | 0.0350 | 0.0192 |
| S³-Rec | 0.0251 | 0.0161 | 0.0385 | 0.0204 |
| TIGER | 0.0264 | 0.0181 | 0.0400 | 0.0225 |
| Improv. | +5.22% | +12.55% | +3.90% | +10.29% |
Toys and Games
| Method | Recall@5 | NDCG@5 | Recall@10 | NDCG@10 |
|---|---|---|---|---|
| SASRec | 0.0463 | 0.0306 | 0.0675 | 0.0374 |
| S³-Rec | 0.0443 | 0.0294 | 0.0700 | 0.0376 |
| TIGER | 0.0521 | 0.0371 | 0.0712 | 0.0432 |
| Improv. | +12.53% | +21.24% | +1.71% | +14.97% |
实验发现:
- 优势在于头部排序质量,而非召回数量。 提升集中在 Recall@5 与 NDCG,如 Beauty NDCG@5 +29%、Toys NDCG@5 +21%,而 Recall@10 的提升通常较小,Beauty 仅 +0.15%。这与生成式模型的特性一致:beam search 在头部给出数量少但置信度高的候选,靠前位置的排序质量高;放宽到 @10 时与强 baseline 的差距缩小。
- 数据集语义可分性越强,收益越大。 Beauty 上语义层级清晰,分为护发、彩妆、护肤,TIGER 领先幅度最大;Sports 类目更混杂,提升相对较小。
5.3 消融:Semantic ID 的"语义"是关键
将 item 标识符的生成方式替换,其余不变,数据集为 Beauty、指标为 Recall@5:
| Item ID 方案 | Recall@5 | 相对 RQ-VAE |
|---|---|---|
| RQ-VAE Semantic ID | 0.0454 | — |
| LSH 局部敏感哈希 SID | 0.0379 | −16.6% |
| Random ID 随机分配 | 0.0296 | −34.8% |
随机 ID 下降约三成、无层级的 LSH 也下降一成多,收益主要来自 RQ-VAE 给出的语义层级,而非"使用生成模型"本身。
user ID 的作用: ** 另一组消融对比是否加入 hash 后的 user token:去掉时 Beauty Recall@5 为 0.04458,加入后为 0.0454,几乎持平。这说明模型效果几乎全部来自内容语义与行为序列**,user ID 的贡献可忽略——也与它通过哈希把所有 user 压到仅 2000 个 token、只保留很粗的身份信息相符。
5.4 两个额外获得的新能力
冷启动推荐。 将测试集中 5% 的 item 从训练中完全移除,作为"新 item",RQ-VAE 量化器和 seq2seq 均未见过这些 item。做法是只用生成的前 3 位语义前缀 去匹配——把所有共享该前缀的 item(含未见过的新 item)一并纳入候选,再用一个超参数 限制候选中未见 item 的最大占比。论文取 (且 时结论均成立),TIGER 在各档 Recall@K 上稳定超过 Semantic_KNN(在语义向量空间中做最近邻的基线),说明召回与冷启动被统一进同一套机制。
可控多样性。 调高 decoder 的采样温度 ,可直接增大推荐结果的类目多样性,下表用 Entropy@K 衡量(即对 top-K 预测 item 的真实类目分布求熵),越高越分散:
| 温度 | Entropy@10 | Entropy@20 | Entropy@50 |
|---|---|---|---|
| 1.0 | 0.76 | 1.14 | 1.70 |
| 1.5 | 1.14 | 1.52 | 2.06 |
| 2.0 | 1.38 | 1.76 | 2.28 |
多样性调控在生成式框架中即为"调节采样温度",几乎零成本;在双塔加 ANN 中要做到这点往往需额外加入重排或打散策略。
5.5 生成式检索的固有代价:invalid ID
自回归生成可能产生一个语料中不存在的码字组合,即 invalid ID。论文实测:top-10 预测中 invalid 占比约 0.1%–1.6%,top-20 约 0.3%–6%。比例不算高,但确实是这条范式相比"在固定候选集中选取"的固有代价,值得强调的是,TIGER 本身并未做受限解码,而是直接自由解码、仅观测到 invalid 占比可忽略;若工程上要彻底杜绝,可改用受限解码,即仅在由合法 Semantic ID 构成的前缀树上做 beam search。
六、总结
TIGER 的核心贡献,不是"用大模型做推荐",而是给出了一套自洽的生成式召回范式:用 RQ-VAE 将 item 内容编码为具有从粗到细层级的 Semantic ID,再训练 seq2seq Transformer 自回归地生成下一个 item 的 ID。它将"召回质量、参数随物料膨胀、冷启动、多样性"四个问题纳入同一套框架,并在 Amazon 三个数据集上验证了语义层级而非生成动作本身是收益来源。
它的局限同样清晰:实验规模小,仅万级 item、13M 模型,去重位无语义、invalid ID,以及十亿物料下 beam search 的延迟与覆盖率未被回答。但作为"生成式推荐"这一方向的开创性工作,它带动了后续一批研究,如语义 ID 的更优量化、工业级生成式召回 OneRec,这是它的重要价值所在。
此外,作者自己明确列出的局限与未来方向也值得一并记住:
- 依赖内容特征:框架假设每个 item 都有内容特征、且有可用的预训练内容编码器,纯 ID、无内容的场景不适用;
- 物料更新代价高:新增 item 需要重训 RQ-VAE 并重新生成所有 item 的 Semantic ID,不像 ANN 那样增量加一行即可;
- 推理成本:作者明确承认 beam search 自回归解码比 ANN / MIPS 更昂贵,并说明"优化推理效率不是本文目标";
- 前缀匹配召回:把冷启动中用到的"前缀匹配"推广到常规召回有望进一步提升 recall/NDCG,作者将其列为 future work。
相关论文清单
| 论文 | 时间 | 链接 | 一句话核心 |
|---|---|---|---|
| VQ-VAE | 2017 | https://arxiv.org/abs/1711.00937 | 离散码本量化的鼻祖,Semantic ID 的远祖 |
| Sentence-T5 | 2021 | https://arxiv.org/abs/2108.08877 | TIGER 用来抽 item 内容向量的文本编码器 |
| DSI | 2022 | https://arxiv.org/abs/2202.06991 | 生成式检索范式:把语料背进参数、直接生成 doc id |
| RQ-VAE (Image) | 2022 | https://arxiv.org/abs/2203.01941 | 残差量化的 VAE,TIGER 的量化器原型 |
| P5 | 2022 | https://arxiv.org/abs/2203.13366 | 把推荐统一成 text-to-text 语言任务 |
| VQ-Rec | 2022 | https://arxiv.org/abs/2210.12316 | 推荐中用乘积量化 PQ 做 item 离散码的前作,可与 TIGER 的 RQ-VAE 对照 |










