MTGRec 解决了生成式推荐预训练数据不足、长尾 item 低频的根本问题:利用 RQ-VAE 训练过程中相邻 epoch 的多个 checkpoint 作为语义相关的多个 tokenizer,将一份用户历史扩增为 n 份不同 token 序列;通过一阶梯度近似的数据影响力估计动态调整各 tokenizer 数据采样比例(课程预训练),微调时回归单一 tokenizer;在 Amazon 四数据集上支持 T5-8 层稳定 scaling,长尾 item 提升尤其显著。
📄 原文:https://arxiv.org/abs/2504.04400
🔗 前驱工作:TIGER(NeurIPS 2023)、ETEGRec(arXiv 2409.05546)
① 多 tokenizer 数据扩增:相邻 epoch checkpoint 语义相关,同一历史序列产生多份 token 序列,训练数据量 ×n 倍;
② 数据影响力课程调度:一阶梯度近似估计各 tokenizer 对验证集的影响力,高质量数据自动获得更高采样权重;
③ 长尾 item 专项改善:低频 item 的 token 被多个 tokenizer 多次覆盖,曝光频次提升,模型对长尾 item 学习充分。
生成式推荐系统的核心是 item tokenization:将每个 item 编码为一组离散 token(Semantic ID),然后训练自回归模型预测下一个 item 的 token。现有方法(TIGER、LETTER、ETEGRec 等)都遵循一对一映射原则:每个 item 对应唯一的一个 ID 序列。但这个假设带来了两个系统性问题。
- 长尾 item 低频问题:热门 item 的 token 在训练数据中出现频率高,模型能充分学习;但长尾 item(交互次数 < 20)的 token 出现频率极低,模型对这些 token 的语义学习严重不足。
- 数据多样性不足:一对一映射导致同一批训练交互只能产生一组 token 序列,限制了模型预训练的数据量和多样性,进而限制了模型 scaling 的潜力(LLM 中更大更多样的数据是 scaling 成功的关键)。
MTGRec(Multi-identifier item Tokenization for Generative Recommender pre-training)的核心思想:给每个 item 分配多个标识符(来自多个语义相关的 tokenizer),从而让一份用户历史交互数据产生多组 token 序列,大幅增加训练数据量和多样性,实现生成式推荐模型的有效预训练。
关键洞察:相邻 Epoch Checkpoint 是天然的多 Tokenizer
如何获得"多个语义相关的 tokenizer"?最直接的方法是训练多个独立的 RQ-VAE(不同随机初始化),但这会导致各 tokenizer 语义完全不相关,产生严重的语义冲突。MTGRec 的巧妙发现:同一 RQ-VAE 训练过程中相邻 epoch 的 checkpoint 就是语义相关的多个 tokenizer——它们来自相同的初始化,通过迭代梯度更新得到,codebook 之间的差异微小但存在,各自生成的 token 序列"相关但不同"。
2.1 多标识符 Item Tokenization:核心设计
标准 RQ-VAE 量化流程:给定 item embedding $\mathbf{z}$,经过 MLP Encoder 得到 $\mathbf{r}$,然后通过 $H$ 层残差量化(每层 codebook 大小 $K$):
- $\mathbf{r}_h$:第 $h$ 层的残差向量($\mathbf{r}_1 = \mathbf{r}$)
- $\mathbf{e}_h^k$:第 $h$ 层 codebook 中第 $k$ 个 code vector(可学习)
- $c_h$:item 在第 $h$ 层被分配的 token(1-indexed,值域 $\{1, ..., K\}$)
- $H = 3$:codebook 层数;$K = 256$:每层 codebook 大小
RQ-VAE 训练完成后,选取最后 $n$ 个 epoch 的 checkpoint 作为多个 tokenizer:
- $\phi_i$:第 $i$ 个 epoch 对应的 RQ-VAE 参数
- $N$:RQ-VAE 训练的总 epoch 数(论文中为 10000)
- $n$:选取的 tokenizer 数量(调优范围 5~30,间隔 5)
- $T_{\phi_N}$:最终收敛的 tokenizer(用于微调和推理)
假设 RQ-VAE 训练了 10000 个 epoch。选取最后 10 个 epoch(epoch 9991 到 10000)的 checkpoint。
这 10 个 checkpoint 的 codebook 差异有多大?实验数据(Table 5):相邻 1 个 epoch 的 tokenizer 中,仅 0.39%(Instrument 数据集)的 item 第一个 token 发生了变化,13.58% 的 item 任意 token 发生变化。间隔越大,差异越大:间隔 30 epoch 时,54.94% 的 item 有 token 变化,但第一个 token 变化率仍只有 0.87%——说明粗粒度语义(第一个 token 代表的大类)被很好保留,只有细粒度特征有差异。
对比:随机初始化的多个 RQ-VAE:第一个 token 的变化率接近 100%(因为 codebook 完全不同),导致同一个 item 在不同 tokenizer 下被分配到完全不同的语义类别,产生严重语义冲突。消融实验(w/o Relevant tokenizers)显示这种方案性能急剧下降,在 Instrument 数据集上 Recall@10 从 0.0635 降到 0.0548(-13.7%)。
2.2 相邻 Epoch 语义相关 Tokenizer:数据扩增效果
对于用户历史序列 $S = [v_1, \ldots, v_t]$,通过 $n$ 个 tokenizer 可以生成 $n$ 组不同的 token 序列:
这样,一份原始训练数据(固定的用户行为序列)就被扩增为 $n$ 份 token 序列数据。$n=20$ 个 tokenizer 意味着训练数据量相当于增加了 20 倍(在同等计算时间内,通过采样机制等效实现)。
2.3 数据影响力估计(Data Influence Estimation)
多个 tokenizer 的数据质量不一——有些 tokenizer 的数据更有助于验证集性能,有些则帮助有限或有害。MTGRec 用一阶梯度近似来估计每个 tokenizer 数据的贡献度(data influence):
基于 Taylor 展开,验证 loss 的变化量可近似为:
由于使用 Adam 优化器,参数更新 $\theta_{t+1} - \theta_t = -\eta_t \Gamma(\mathcal{D}^i_{train};\theta_t)$,其中 $\Gamma$ 是 Adam 的"Adam-adjusted gradient"(考虑动量修正)。因此第 $i$ 个 tokenizer 在时间步 $t$ 的数据影响力为:
- $\nabla\mathcal{L}(\mathcal{D}_{val};\theta_t)$:当前参数 $\theta_t$ 在验证集上的梯度
- $\Gamma(\mathcal{D}^i_{train};\theta_t)$:第 $i$ 个 tokenizer 训练数据的 Adam 调整梯度(考虑一阶和二阶动量)
- $\eta_t$:当前学习率
- 内积为正 $\Rightarrow$ 该 tokenizer 的数据使验证 loss 下降(有益);负 $\Rightarrow$ 有害
累积影响力(跨多个 checkpoint):$\tilde{\mathcal{I}}(T_i) = \sum_{k=1}^K \mathcal{I}(T_i;\theta_k)$
假设有 5 个 tokenizer (T₁...T₅,epoch 9996~10000)。经过 60 epoch 的 warmup 后,计算每个 tokenizer 的累积影响力:
T₅(最新 epoch):$\tilde{I} = +0.85$(梯度方向一致,对验证集最有帮助)
T₄:$\tilde{I} = +0.72$;T₃:$\tilde{I} = +0.61$;T₂:$\tilde{I} = +0.45$
T₁(最早 epoch):$\tilde{I} = +0.12$(因为离最终 checkpoint 最远,语义略有偏差)
课程采样:用 Softmax($\tau \cdot \tilde{I}$) 将影响力转化为采样概率。$\tau=3$ 时,T₅ 采样比例约 35%,T₁ 约 12%。这让模型更多地从"最有帮助"的数据中学习,而不是平均分配注意力给所有 tokenizer。
2.4 课程预训练(Curriculum Pre-training)
基于累积影响力估计,动态更新每个 tokenizer 的采样概率:
- $p_i^k$:阶段 $k$ 中 tokenizer $T_i$ 的采样概率
- $\tau$:温度系数,控制采样分布的平滑度(越小越集中于高影响力 tokenizer,越大越接近均匀采样)
- 初始采样概率均等:$p_i^0 = 1/n$
- 每个 stage 结束后更新一次采样概率(每 20 epoch 更新一次)
预训练的总 loss 是每次采样到的 tokenizer 对应 token 序列的 NTP(Next Token Prediction)loss:
2.5 微调与推理
预训练完成后,为确保 item 能被精确识别(一对一映射),需要在单个 tokenizer 上微调:
- 1用每个 tokenizer $T_i$ 分别微调预训练模型,得到 $n$ 个微调后的模型
- 2在验证集上评估每个模型的性能,选择性能最优的模型作为最终部署模型
- 3推理时,用 Beam Search(beam size=50)生成 top-K token 序列,映射到对应 item
- 4论文实现中不使用前缀树约束 beam search(提升并行效率),偶尔出现的无效 ID 直接忽略
预训练阶段(200 epoch):模型同时学习 20 个 tokenizer 的 token 序列,从"多视角"理解用户行为模式。这个阶段模型看到的训练数据量相当于单 tokenizer 的 20 倍,对长尾 item 的 token 有更充分的学习。
微调阶段(对每个 tokenizer 分别微调):预训练参数作为起点,用 $T_{10000}$(最终 tokenizer)微调少量 epoch(通常 50~100 epoch),让模型专注于"T₁₀₀₀₀ 的词汇表",确保生成的 token 能确定性地映射到 item。
推理阶段:用 Beam Search 输出 beam_size=50 个 token 序列候选,映射到 item ID 后,对所有有效 item 按 beam score 排序,返回 top-K 推荐。
主要对比(Amazon 2023 三数据集)
| 方法 | Instrument R@10 | Scientific R@10 | Game R@10 |
|---|---|---|---|
| TIGER | 0.0564 | 0.0422 | 0.0868 |
| LETTER(改进 tokenizer) | 0.0580 | 0.0435 | 0.0877 |
| TIGER++(EMA + PCA) | 0.0588 | 0.0450 | 0.0914 |
| MTGRec(本文) | 0.0635 (+7.99%) | 0.0506 (+12.44%) | 0.0956 (+4.60%) |
全面超越所有 baseline,Scientific 数据集上相比最强 baseline (TIGER++) 提升 +12.44%。
Scaling Law 分析(模型规模 vs 性能)
关键发现:
- TIGER/TIGER++ 在 4-5 层时性能开始退化(数据量不足以支撑更大模型)
- MTGRec 从 1 层到 8 层持续提升,8 层模型比 4 层提升约 5%
- 最优 tokenizer 数量随模型规模增大而增大(6 层模型需要更多 tokenizer)
消融实验
| 变体 | Instrument R@10 | Scientific R@10 | 说明 |
|---|---|---|---|
| MTGRec (full) | 0.0635 | 0.0506 | 完整方法 |
| w/o Data curriculum | 0.0618 | 0.0487 | -2.7%/-3.8%,均匀采样所有 tokenizer |
| w/o Relevant tokenizers | 0.0548 | 0.0404 | -13.7%/-20.2%,独立随机初始化多 RQ-VAE(语义冲突) |
| w/o Pre-training | 0.0571 | 0.0443 | -10.1%/-12.5%,仅用单 tokenizer 训练(退化为 TIGER++) |
最关键的消融是 w/o Relevant tokenizers:使用语义无关的多个 tokenizer 性能急剧下降,证明"语义相关性"是多 tokenizer 方案成功的前提,随机多 tokenizer 反而有害。
长尾 item 分析(不同交互频次分组)
将 test item 按交互次数分为 5 组([0,20), [20,40), ..., [80,100)):
- 低频组 [0,20):MTGRec vs TIGER 改进约 +25%(Instrument),+37%(Scientific)
- 高频组 [80,100):改进约 +5%~+10%(提升较小,因为高频 token 已充分学习)
- 多 tokenizer 预训练对长尾 item 的改进效果最显著,符合设计动机
通用性验证:可无缝集成到 TIGER 和 LETTER
| 方法 | Instrument R@10 | Scientific R@10 |
|---|---|---|
| TIGER | 0.0568 | 0.0423 |
| TIGER + MTGRec | 0.0598 (+5.3%) | 0.0465 (+9.9%) |
| LETTER | 0.0580 | 0.0435 |
| LETTER + MTGRec | 0.0614 (+5.9%) | 0.0481 (+10.6%) |
MTGRec 作为预训练增强策略,可以无缝接入任何基于可学习 tokenizer 的生成式推荐方法,每次都带来 5~11% 的提升。
核心亮点
- 巧妙利用训练过程产生的"副产品":相邻 epoch 的 checkpoint 是训练过程天然产生的,不需要额外的计算开销就能获得多个语义相关的 tokenizer。这个洞察极为简洁优雅。
- 证明了 scaling 在生成式推荐中的可行性:MTGRec 的 scaling law 实验首次清晰地展示了生成式推荐也可以从模型规模增大中持续受益——前提是有足够多样的训练数据支撑。
- 数据影响力估计的轻量实现:论文用一阶 Taylor 近似替代计算昂贵的二阶方法,计算成本与普通训练几乎相同,但效果显著(消融 -2.7%)。
潜在不足
- 多 tokenizer 的数量 $n$ 需要根据数据集和模型规模调整,超参搜索成本随问题规模增加。
- 预训练 200 epoch + 微调,整体训练时间比单 tokenizer 方法(TIGER 约 186 epoch)增加约 10-15%,在工业级大规模数据集上代价更高。
- 理论上,当 tokenizer 数量超过某个阈值时,数据多样性的边际收益递减(Figure 3 验证);在大规模数据集上,这个"甜点"的 $n$ 值可能需要重新搜索。
对我的启发
MTGRec 的核心思路是将"数据增强"的视角引入生成式推荐的 tokenization 阶段。NLP 中的数据增强通过同义替换、回译等方式产生语义相近但不同表述的训练样本;MTGRec 通过多个语义相关 tokenizer 产生"相同行为序列的不同语义视角",本质上是相同的思路——通过增加语义多样性来提升模型泛化能力,尤其对低频样本(长尾 item)的改善效果显著。
论文链接:arXiv 2504.04400 · GitHub
关键词:生成式推荐 · 多标识符 · 课程预训练 · 数据增强 · Scaling Law · 长尾 item
对比基线:TIGER, TIGER++, LETTER, SASRec, BERT4Rec, HSTU, S3-Rec