1 研究动机与核心贡献¶
1.1 问题背景¶
现代推荐系统的检索阶段通常采用 retrieve-and-rank 范式:将查询 (query) 和候选物品编码到同一向量空间,通过近似最近邻搜索 (ANN) 检索候选集,再由排序模型精排。这种方法依赖双塔结构 (dual-encoder),需要为所有物品维护一个高维嵌入索引,存在以下问题:
- 嵌入表规模线性增长:物品库规模可达数十亿,每个物品需独立嵌入向量,内存开销巨大
- 原子 ID 缺乏语义:传统方法使用随机或哈希生成的 atomic item ID,相似物品的 ID 之间无关联
- 冷启动困难:新物品缺乏交互历史,其嵌入无法有效学习
1.2 核心思路¶
TIGER (Transformer Index for GEnerative Recommenders) 提出一种全新的 生成式检索 (Generative Retrieval) 范式用于推荐系统:
- 不再通过 ANN 在嵌入空间中搜索候选物品
- 而是让模型 直接自回归生成目标物品的标识符 (Semantic ID)
- Transformer 的参数记忆 (memory) 本身充当物品索引
1.3 主要贡献¶
- 提出 TIGER,首个基于生成式检索的推荐框架,为每个物品分配 Semantic ID,训练检索模型直接预测目标物品的 Semantic ID
- 在多个数据集上显著超越现有 SOTA 序列推荐模型(Recall 和 NDCG 指标)
- 生成式检索范式带来两项新能力:(a) 冷启动推荐——能推荐训练时未见过的新物品;(b) 推荐多样性——通过温度采样控制推荐结果的多样性
2 方法框架¶
TIGER 框架分为两个阶段:
2.1 Semantic ID 生成¶
目标:将每个物品的内容特征编码为一个离散语义码元组 (tuple of codewords),即 Semantic ID。
流程: 1. 内容编码:使用预训练文本编码器(如 Sentence-T5)将物品的文本特征(标题、价格、品牌、类别等)拼接为句子,编码为 768 维语义嵌入向量 $\boldsymbol{x} \in \mathbb{R}^d$ 2. 量化:通过 RQ-VAE 将嵌入向量量化为 $m$ 个码字的元组 $(c_0, c_1, \ldots, c_{m-1})$,即 Semantic ID
RQ-VAE 详解¶
Residual-Quantized Variational AutoEncoder (RQ-VAE) 是一种多级向量量化器,通过对残差进行迭代量化来生成码字序列。
结构:
- DNN 编码器:输入语义嵌入 $\boldsymbol{x}$,输出潜在表示 $\boldsymbol{z} := \mathcal{E}(\boldsymbol{x})$
- 残差量化器:$m$ 级量化,每级使用独立码本 $C_d := \{e_k\}_{k=1}^K$
- DNN 解码器:从量化表示重建输入
量化过程:
初始残差 $\boldsymbol{r}_0 := \boldsymbol{z}$。在每一级 $d$:
$$c_d = \arg\min_i \|\boldsymbol{r}_d - \boldsymbol{e}_i\|$$
$$\boldsymbol{r}_{d+1} := \boldsymbol{r}_d - \boldsymbol{e}_{c_d}$$
最终得到 Semantic ID $(c_0, c_1, \ldots, c_{m-1})$,量化表示为:
$$\hat{\boldsymbol{z}} := \sum_{d=0}^{m-1} \boldsymbol{e}_{c_d}$$
损失函数:
$$\mathcal{L}(\boldsymbol{x}) := \mathcal{L}_{\text{recon}} + \mathcal{L}_{\text{rqvae}}$$
其中:
$$\mathcal{L}_{\text{recon}} := \|\boldsymbol{x} - \hat{\boldsymbol{x}}\|^2$$
$$\mathcal{L}_{\text{rqvae}} := \sum_{d=0}^{m-1} \|\text{sg}[\boldsymbol{r}_d] - \boldsymbol{e}_{c_d}\|^2 + \beta \|\boldsymbol{r}_d - \text{sg}[\boldsymbol{e}_{c_d}]\|^2$$
其中 $\hat{\boldsymbol{x}}$ 是解码器输出,sg 为 stop-gradient 操作。
层次化语义性质:RQ-VAE 生成的 Semantic ID 具有自然的层次结构——第一个码字 $c_1$ 对应粗粒度类别(如 "Hair"、"Makeup"),后续码字 $c_2, c_3$ 对应细粒度子类别。Figure 4 的定性分析清楚展示了这一点。
碰撞处理:当多个物品映射到同一 Semantic ID 时,在末尾追加额外码字以消歧。例如两个物品都映射到 $(12, 24, 52)$,则分别表示为 $(12, 24, 52, 0)$ 和 $(12, 24, 52, 1)$。通过查找表维护映射关系。
RQ-VAE 实现细节:
- 编码器:3 层中间层,大小为 512、256、128,ReLU 激活,最终潜在维度 32
- 量化:3 级残差量化,每级码本大小 $K = 256$,每个码向量维度 32
- 训练:Adagrad 优化器,学习率 0.4,batch size 1024,训练 20k epochs
- $\beta = 0.25$,目标码本使用率 $\geq 80\%$
- 第 4 个码字用于碰撞消歧,最终 Semantic ID 长度为 4
2.2 基于 Semantic ID 的生成式检索¶
序列构建:对每个用户,按时间顺序排列其交互物品序列 $(\text{item}_1, \ldots, \text{item}_n)$。将每个物品替换为其 $m$ 长度的 Semantic ID,得到展平后的码字序列:
$$(c_{1,0}, \ldots, c_{1,m-1}, c_{2,0}, \ldots, c_{2,m-1}, \ldots, c_{n,0}, \ldots, c_{n,m-1})$$
模型:使用 Transformer 编码器-解码器架构(基于 T5X 框架实现),训练目标是预测 $\text{item}_{n+1}$ 的 Semantic ID $(c_{n+1,0}, \ldots, c_{n+1,m-1})$。
词表设计:
- 物品语义码字:$256 \times 4 = 1024$ 个 token
- 用户 ID token:2000 个(通过 Hashing Trick 将原始用户 ID 映射到 2000 个 token 之一)
- 输入序列格式:用户 ID token + 物品交互历史的 Semantic ID token 序列
模型配置:
- 编码器和解码器均为 4 层 Transformer
- 每层 6 个自注意力头,维度 64
- MLP 输入维度 1024,嵌入维度 128
- Dropout 0.1
- 总参数量约 1300 万
- 学习率:前 10k 步为 0.01,之后使用 inverse square root decay
- Batch size 256
- Beauty 和 Sports 数据集训练 200k 步,Toys 数据集训练 100k 步
3 实验¶
3.1 数据集¶
使用 Amazon Product Reviews 数据集的三个类别:
| 数据集 | 用户数 | 物品数 | 平均序列长度 | 中位序列长度 |
|---|---|---|---|---|
| Beauty | 22,363 | 12,101 | 8.87 | 6 |
| Sports and Outdoors | 35,598 | 18,357 | 8.32 | 6 |
| Toys and Games | 19,412 | 11,924 | 8.63 | 6 |
预处理:使用用户评论历史按时间戳排序构建物品序列,过滤少于 5 条评论的用户。评估采用 leave-one-out 策略:最后一个物品用于测试,倒数第二个用于验证,其余用于训练。用户历史限制为最近 20 个物品。
评估指标:Recall@K 和 NDCG@K,$K = 5, 10$。
3.2 序列推荐性能(Table 1)¶
Baselines:P5, Caser, HGN, GRU4Rec, BERT4Rec, FDSA, SASRec, S$^3$-Rec
| Methods | Sports R@5 | Sports N@5 | Sports R@10 | Sports N@10 | Beauty R@5 | Beauty N@5 | Beauty R@10 | Beauty N@10 | Toys R@5 | Toys N@5 | Toys R@10 | Toys N@10 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| P5 | 0.0061 | 0.0041 | 0.0095 | 0.0052 | 0.0163 | 0.0107 | 0.0254 | 0.0136 | 0.0070 | 0.0050 | 0.0121 | 0.0066 |
| Caser | 0.0116 | 0.0072 | 0.0194 | 0.0097 | 0.0205 | 0.0131 | 0.0347 | 0.0176 | 0.0166 | 0.0107 | 0.0270 | 0.0141 |
| HGN | 0.0189 | 0.0120 | 0.0313 | 0.0159 | 0.0325 | 0.0206 | 0.0512 | 0.0266 | 0.0321 | 0.0221 | 0.0497 | 0.0277 |
| GRU4Rec | 0.0129 | 0.0086 | 0.0204 | 0.0110 | 0.0164 | 0.0099 | 0.0283 | 0.0137 | 0.0097 | 0.0059 | 0.0176 | 0.0084 |
| BERT4Rec | 0.0115 | 0.0075 | 0.0191 | 0.0099 | 0.0203 | 0.0124 | 0.0347 | 0.0170 | 0.0116 | 0.0071 | 0.0203 | 0.0099 |
| FDSA | 0.0182 | 0.0122 | 0.0288 | 0.0156 | 0.0267 | 0.0163 | 0.0407 | 0.0208 | 0.0228 | 0.0140 | 0.0306 | 0.0189 |
| SASRec | 0.0233 | 0.0154 | 0.0350 | 0.0192 | 0.0387 | 0.0249 | 0.0605 | 0.0318 | 0.0463 | 0.0306 | 0.0675 | 0.0374 |
| S$^3$-Rec | 0.0251 | 0.0161 | 0.0385 | 0.0204 | 0.0387 | 0.0244 | 0.0647 | 0.0327 | 0.0443 | 0.0294 | 0.0700 | 0.0376 |
| TIGER | 0.0264 | 0.0181 | 0.0400 | 0.0225 | 0.0454 | 0.0321 | 0.0648 | 0.0384 | 0.0521 | 0.0371 | 0.0712 | 0.0432 |
| 提升 (vs 次优) | +5.22% | +12.55% | +3.90% | +10.29% | +17.31% | +29.04% | +0.15% | +17.43% | +12.53% | +21.24% | +1.71% | +14.97% |
结论:
- TIGER 在所有三个数据集的所有指标上均超越现有 SOTA 方法
- 在 Beauty 数据集上提升最为显著:NDCG@5 比 SASRec 高 29%,Recall@5 比 S$^3$-Rec 高 17.3%
- 在 Toys and Games 上 NDCG@5 和 NDCG@10 分别提升 21% 和 15%
- P5(使用随机 token 化的 LLM 方法)表现最差,凸显了语义 ID 的重要性
3.3 ID 生成方法对比(Table 2)¶
| Methods | Sports R@5 | Sports N@5 | Sports R@10 | Sports N@10 | Beauty R@5 | Beauty N@5 | Beauty R@10 | Beauty N@10 | Toys R@5 | Toys N@5 | Toys R@10 | Toys N@10 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Random ID | 0.007 | 0.005 | 0.0116 | 0.0063 | 0.0296 | 0.0205 | 0.0434 | 0.0250 | 0.0362 | 0.0270 | 0.0448 | 0.0298 |
| LSH SID | 0.0215 | 0.0146 | 0.0321 | 0.0180 | 0.0379 | 0.0259 | 0.0533 | 0.0309 | 0.0412 | 0.0299 | 0.0566 | 0.0349 |
| RQ-VAE SID | 0.0264 | 0.0181 | 0.0400 | 0.0225 | 0.0454 | 0.0321 | 0.0648 | 0.0384 | 0.0521 | 0.0371 | 0.0712 | 0.0432 |
结论:
- RQ-VAE Semantic ID 在所有数据集和指标上均大幅优于 Random ID 和 LSH Semantic ID
- Random ID 表现最差,说明基于内容的语义信息至关重要
- LSH 优于 Random ID 但不如 RQ-VAE,证明通过非线性 DNN 学习量化优于基于随机投影的哈希方法
3.4 冷启动推荐(Figure 5)¶
实验设置:从 Beauty 数据集中移除 5% 的测试物品作为 "unseen items",仅在训练集中训练 RQ-VAE 和推荐模型,然后为所有物品(含 unseen)生成 Semantic ID。
方法:给定模型预测的 Semantic ID $(c_1, c_2, c_3, c_4)$:
- 若完全匹配某 seen item,直接检索
- 若不匹配但前 3 个码字 $(c_1, c_2, c_3)$ 与某 unseen item 匹配,将其加入候选
- 超参数 $\epsilon$ 控制 top-K 候选中 unseen items 的最大比例
对比基线:Semantic_KNN,使用语义表示空间做最近邻搜索。
结果:
- Figure 5a:在 $\epsilon = 0.1$ 下,TIGER 在所有 Recall@K 值上均优于 Semantic_KNN(包括 overall、item split 和 unseen 三种评估方式)
- Figure 5b:在不同 $\epsilon$ 值下($\epsilon \geq 0.1$),TIGER 的 Recall@10 始终优于 Semantic_KNN
分析:TIGER 天然适合冷启动场景,因为 Semantic ID 的层次结构使得即使不精确匹配,前缀匹配也能找到语义相似的新物品。传统使用 atomic ID 的模型完全无法推荐训练时未见过的物品。
3.5 推荐多样性(Table 3 & Table 4)¶
通过调节解码时的温度参数 (temperature) 控制推荐多样性:
| Temperature | Entropy@10 | Entropy@20 | Entropy@50 |
|---|---|---|---|
| T = 1.0 | 0.76 | 1.14 | 1.70 |
| T = 1.5 | 1.14 | 1.52 | 2.06 |
| T = 2.0 | 1.38 | 1.76 | 2.28 |
结论:温度越高,推荐结果的类别多样性越强。由于 Semantic ID 的层次结构,温度采样可以在不同层级上实现多样性——第一个 token 的采样对应粗粒度类别间的探索,后续 token 对应类别内的探索。
Table 4 的定性分析进一步证实:T=2.0 时推荐结果涵盖更多不同类别(如 "Hair Styling Products" 的目标类别在 T=2.0 时还会推荐 "Hair Styling Tools"、"Skin Face" 等相关类别)。
3.6 消融实验¶
层数消融(Table 5,Beauty 数据集):
| 层数 | Recall@5 | NDCG@5 | Recall@10 | NDCG@10 |
|---|---|---|---|---|
| 3 | 0.04499 | 0.03062 | 0.06699 | 0.03768 |
| 4 | 0.0454 | 0.0321 | 0.0648 | 0.0384 |
| 5 | 0.04633 | 0.03206 | 0.06596 | 0.03834 |
结论:增加层数有微小提升,4 层是性能和效率的良好平衡点。
用户信息的影响(Table 8,Beauty 数据集):
| 配置 | Recall@5 | NDCG@5 | Recall@10 | NDCG@10 |
|---|---|---|---|---|
| 无用户信息 | 0.04458 | 0.0302 | 0.06479 | 0.0367 |
| 有用户 ID | 0.0454 | 0.0321 | 0.0648 | 0.0384 |
结论:加入用户 ID token 对性能有小幅提升。
标准差分析(Table 9,3 次随机种子):
| 数据集 | Recall@5 | NDCG@5 | Recall@10 | NDCG@10 |
|---|---|---|---|---|
| Beauty | 0.0441 $\pm$ 0.00069 | 0.0309 $\pm$ 0.00062 | 0.0642 $\pm$ 0.00092 | 0.0374 $\pm$ 0.00061 |
| Sports | 0.0278 $\pm$ 0.00069 | 0.0189 $\pm$ 0.00043 | 0.0419 $\pm$ 0.0010 | 0.0234 $\pm$ 0.00048 |
| Toys | 0.0518 $\pm$ 0.00064 | 0.0375 $\pm$ 0.00039 | 0.0698 $\pm$ 0.0013 | 0.0433 $\pm$ 0.00047 |
结论:标准差非常小,说明 TIGER 的性能稳定。
3.7 Invalid ID 分析¶
由于模型自回归生成 Semantic ID,可能产生不在语料库中的无效 ID。Figure 6 显示:
- 对 top-10 预测,无效 ID 比例在 0.1%~1.6% 之间
- 可通过增大 beam size 过滤无效 ID 来保证 top-K 均为有效结果
3.8 可扩展性(Table 10)¶
| 配置 | Recall@5 | NDCG@5 | Recall@10 | NDCG@10 |
|---|---|---|---|---|
| 合并三个数据集生成 SID | 0.04355 | 0.3047 | 0.06314 | 0.03676 |
| 仅 Beauty 数据集生成 SID | 0.0454 | 0.0321 | 0.0648 | 0.0384 |
结论:合并三个数据集生成 Semantic ID 后在 Beauty 上评估,性能仅有轻微下降,表明 Semantic ID 方案具有良好的可扩展性。
3.9 内存效率¶
TIGER 的嵌入表大小为 $1024d$($256 \times 4$ 个码字,每个维度 $d$),而传统推荐系统需要 $Nd$ 大小的嵌入表($N$ 为物品数,10K~20K)。TIGER 的内存占用与物品数量无关,仅与码本大小线性相关。
4 与其他量化方法的对比¶
| 方法 | 原理 | 语义保持 | 层次性 |
|---|---|---|---|
| Random ID | 随机分配码字 | 无 | 无 |
| LSH (SimHash) | 随机超平面投影 + 二值化 | 部分 | 无 |
| VQ-VAE | 向量量化自编码器 | 有 | 无(平坦结构) |
| RQ-VAE | 残差量化自编码器 | 有 | 有(从粗到细) |
RQ-VAE 的关键优势在于层次化:第一级码字捕获粗粒度语义,后续级别逐步细化,形成自然的类别树结构。这不仅有助于推荐准确性,还为冷启动和多样性控制提供了结构化基础。
5 关键设计决策与讨论¶
- 为何用 Semantic ID 而非 atomic ID? 语义码字使相似物品共享前缀,Transformer 可以在相似物品间迁移知识,且新物品只需通过 RQ-VAE 获取 Semantic ID 即可被推荐
- 为何用编码器-解码器而非仅解码器? 编码器处理用户历史序列,解码器自回归生成目标 Semantic ID,这种分离更适合序列到序列的生成任务
- Inference 成本:beam search 解码比 ANN 搜索更耗时,这是当前的主要局限,论文将其留作未来工作
- P5 预处理修复:论文发现 P5 原始代码的预处理存在信息泄露问题(连续整数 ID + SentencePiece tokenizer 导致测试集和训练集共享子词),修复后 P5 性能进一步下降
6 总结¶
TIGER 是推荐系统领域的里程碑式工作,首次将生成式检索范式成功应用于推荐系统。其核心创新在于:(1) 用 RQ-VAE 将物品内容特征编码为层次化 Semantic ID;(2) 用 Transformer 编码器-解码器直接自回归生成目标物品的 Semantic ID。这一范式不仅在传统指标上超越 SOTA,还天然支持冷启动推荐和多样性控制,为后续大量生成式推荐工作奠定了基础。发表于 NeurIPS 2023。