← 返回论文列表
📄 论文解读 · 生成式推荐 · RUC · SIGIR 2025

ETEGRec

Generative Recommender with End-to-End Learnable Item Tokenization

机构
中国人民大学 (RUC) + 快手
来源
arXiv 2409.05546 · SIGIR 2025
年份
2024 / 2025
核心命题
端到端联合优化 item tokenizer 与生成式推荐模型
💡
一句话总结

ETEGRec 打破了 TIGER 以来「先冻结 tokenizer 再训练推荐器」的两阶段范式,用双 Encoder-Decoder 框架(RQ-VAE tokenizer + T5 推荐器)让两者同步训练:SIA 用 KL 散度拉近序列表示与 codebook 分布,PSA 用 InfoNCE 对齐 Decoder 偏好向量与重建语义向量,交替优化保证稳定性,在 Amazon 2023 三数据集上全面超越 TIGER/LETTER。

📄 原文:https://arxiv.org/abs/2409.05546

🔗 前驱工作:TIGER(NeurIPS 2023)、LETTER(arXiv 2403.06361)

三句话核心贡献:
① 端到端联合训练:tokenizer 在推荐训练中持续更新,不再冻结,让 SID 随推荐目标动态调整;
② 双对齐损失:SIA 对齐序列-物品语义分布;PSA 对齐偏好向量-重建语义,两者协同保证语义一致;
③ 交替优化:固定 tokenizer 更新推荐器,再固定推荐器更新 tokenizer,避免梯度干扰,保证收敛稳定。
🌐
1. 背景与动机

在生成式推荐系统中,有两个核心步骤:Item Tokenization(物品量化为 token 序列)Autoregressive Generation(自回归生成)。以 TIGER 为代表的现有方法将这两个步骤完全解耦:先用 RQ-VAE 把物品 embedding 量化为固定的 SID,然后训练自回归模型预测这些 SID。但量化完成后 tokenizer 就被冻结了,推荐训练不会再更新 tokenizer。

核心问题:解耦导致次优解。
  • Item tokenizer 独立于推荐目标训练,生成的 SID 未必最适合推荐任务
  • 生成式推荐模型无法将 tokenizer 隐含的先验知识(语义 codebook 结构)融入推荐建模
  • token 序列在训练过程中单调不变,导致过拟合风险高

ETEGRec(End-To-End Generative Recommender)通过一个双 encoder-decoder 框架将 item tokenizer 和 generative recommender 联合优化,两者互相增强:tokenizer 随推荐目标更新,recommender 融合 tokenizer 的语义先验。

与 COBRA 的对比:COBRA 通过级联方式同时给 Decoder 输入 sparse ID 和 dense vector;ETEGRec 则关注更底层的 tokenizer-recommender 联合训练问题,两个 encoder-decoder 共享梯度,tokenizer 会随推荐 loss 动态更新——这是 ETEGRec 最本质的不同。
⚙️
2. 方法详解
ETEGRec 整体框架
Figure 1(论文原图):ETEGRec 框架全图。两个 encoder-decoder 组件(Item Tokenizer 和 Generative Recommender)通过 SIA 和 PSA 两个对齐 loss 联合训练,形成端到端优化闭环。

2.1 双 Encoder-Decoder 架构

ETEGRec 由两个独立的 encoder-decoder 组成:

Item Tokenizer T(RQ-VAE)

  • 输入:item 的 256 维协同语义 embedding(SASRec 预训练)
  • Encoder:MLP(3 层),将 embedding 压缩为潜在表示 $\mathbf{r}$
  • 量化:$L$ 层 codebook 残差量化,生成 item token $[c_1, \ldots, c_L]$
  • Decoder:MLP,重建语义 embedding $\tilde{\mathbf{z}}$(用于 PSA loss)
  • 关键:tokenizer 在推荐训练时也会被更新

Generative Recommender R(T5)

  • 输入:历史序列 $S = [i_1, \ldots, i_t]$ 的 token 序列 $X$
  • Encoder:全可见自注意力,输出序列表示 $\mathbf{H}^E$(用于 SIA)
  • Decoder:自回归生成,从 $\mathbf{H}^E$ 和目标 token 预测下一个 item
  • $\mathbf{h}^D$:Decoder 第一个 hidden state(用于 PSA)
  • Beam Size = 20,在全量 item 上做 full ranking 评估

2.2 Item Tokenizer:RQ-VAE 量化细节

每个 item $i$ 的初始 embedding $\mathbf{z} \in \mathbb{R}^{d_s}$ 经过 MLP Encoder 压缩为潜在向量 $\mathbf{r}$,然后通过 $L$ 层残差量化:

$$c_l = \arg\max_k P(k | \mathbf{v}_l), \quad P(k|\mathbf{v}_l) = \frac{\exp(-\|\mathbf{v}_l - \mathbf{e}_k^l\|^2)}{\sum_{j=1}^K \exp(-\|\mathbf{v}_l - \mathbf{e}_j^l\|^2)}$$ $$\mathbf{v}_{l+1} = \mathbf{v}_l - \mathbf{e}_{c_l}^l \quad (\mathbf{v}_1 = \mathbf{r})$$
符号说明
  • $\mathbf{v}_l$:第 $l$ 层的残差向量(初始 $\mathbf{v}_1 = \mathbf{r}$)
  • $\mathbf{e}_k^l$:第 $l$ 层 codebook 中第 $k$ 个 code vector
  • $c_l$:item 在第 $l$ 层被分配的 code(即 token,取概率最大的 code)
  • $K = 256$:每层 codebook 大小;$L = 3$:总层数
  • 量化后的 token 序列 $[c_1, c_2, c_3]$ 作为 item 的 Semantic ID

Tokenizer 的训练损失 $\mathcal{L}_{SQ}$ 包含两部分:

$$\mathcal{L}_{SQ} = \mathcal{L}_{RECON} + \mathcal{L}_{RQ}$$ $$\mathcal{L}_{RECON} = \|\mathbf{z} - \tilde{\mathbf{z}}\|^2, \quad \mathcal{L}_{RQ} = \sum_{l=1}^L \|sg[\mathbf{v}_l] - \mathbf{e}_{c_l}^l\|^2 + \beta\|\mathbf{v}_l - sg[\mathbf{e}_{c_l}^l]\|^2$$
符号说明
  • $\mathcal{L}_{RECON}$:重建损失,确保量化后能还原原始语义 embedding
  • $\mathcal{L}_{RQ}$:量化损失,拉近残差向量与 codebook 向量的距离
  • $sg[\cdot]$:stop-gradient 操作(某方向不传梯度,防止跑飞)
  • $\beta = 0.25$:codebook 更新力度系数(commitment loss 系数)
💡 举例:RQ-VAE 量化过程

假设商品"无线蓝牙耳机"的协同 embedding 经 SASRec 训练得到 $\mathbf{z} = [0.8, -0.3, 0.5, \ldots]$(256 维)。

第 1 层:MLP Encoder 压缩为 $\mathbf{r}$(128 维),在 256 个 code 中找到最近的 code:$\mathbf{e}_{47}^1$(代表"电子音频产品"类),$c_1 = 47$。残差 $\mathbf{v}_2 = \mathbf{r} - \mathbf{e}_{47}^1$。

第 2 层:对 $\mathbf{v}_2$ 在 256 个 code 中找最近的:$\mathbf{e}_{112}^2$(代表"无线/蓝牙"子类),$c_2 = 112$。残差 $\mathbf{v}_3$。

第 3 层:$\mathbf{e}_{23}^3$(代表"头戴式/入耳式"更细分类),$c_3 = 23$。

最终 SID = [47, 112, 23]。同一品牌的不同款蓝牙耳机可能共享前两个 token [47, 112],而细节区别体现在第 3 个 token 上。

与 TIGER 的区别:TIGER 的 codebook 在推荐训练时冻结;ETEGRec 的 codebook 在推荐训练的每个 cycle 内由推荐 loss 反向传播更新,SID 本身会随推荐任务持续优化。

2.3 生成式推荐模型:T5 架构

ETEGRec 的生成式推荐器采用 T5 风格的 Encoder-Decoder 架构(6 encoder + 6 decoder 层,hidden size = 128):

  1. 1
    历史序列 $S = [i_1, i_2, \ldots, i_t]$ 中每个 item 用其 SID 展开为 token:$X = [c_1^1, c_2^1, c_3^1, c_1^2, c_2^2, c_3^2, \ldots, c_1^t, c_2^t, c_3^t]$(长度 $3t$)
  2. 2
    Token embedding 矩阵 $\mathbf{E}_X$ 送入 Encoder,输出序列表示 $\mathbf{H}^E \in \mathbb{R}^{|X| \times d_h}$
  3. 3
    Decoder 输入:在目标 item token 序列前加 [BOS],构成 $\tilde{Y} = [\text{BOS}, c_1^{t+1}, c_2^{t+1}, c_3^{t+1}]$
  4. 4
    $\mathbf{H}^D = \text{Decoder}(\mathbf{H}^E, \tilde{Y})$:Decoder 自回归生成目标 token

推荐训练的生成 loss(序列预测的负对数似然):

$$\mathcal{L}_{REC} = -\sum_{j=1}^L \log P(Y_j | X, Y_{

2.4 序列-物品对齐(Sequence-Item Alignment, SIA)

SIA 的核心假设:给定用户历史序列,Encoder 的输出表示应该与目标 item 的 codebook 分布相似(因为 Encoder 要预测下一个 item,它的表示应该和目标 item 的量化分布对齐)。

具体做法:对 Encoder 输出做 mean pooling 再过 MLP 得到 $\mathbf{z}^E$,然后用 item tokenizer 分别对 $\mathbf{z}$(item 的协同 embedding)和 $\mathbf{z}^E$(Encoder 的序列表示)计算 codebook 分布,用 KL 散度拉近两者:

$$\mathbf{z}^E = \text{MLP}(\text{mean\_pool}(\mathbf{H}^E))$$ $$\mathcal{L}_{SIA} = -\sum_{l=1}^L \left( D_{KL}(P_\mathbf{z}^l \| P_{\mathbf{z}^E}^l) + D_{KL}(P_{\mathbf{z}^E}^l \| P_\mathbf{z}^l) \right)$$
符号说明
  • $P_\mathbf{z}^l$:item 协同 embedding $\mathbf{z}$ 在第 $l$ 层 codebook 上的分布(式 (6) 中的 softmax 概率)
  • $P_{\mathbf{z}^E}^l$:Encoder 序列表示 $\mathbf{z}^E$ 在第 $l$ 层 codebook 上的分布
  • 对称 KL 散度:既要 item 分布→序列分布,也要序列分布→item 分布,双向拉近
SIA 的额外好处:防止 Decoder 绕过 Encoder(Encoder shortcut 问题)。文献发现 seq2seq 模型中 Decoder 有时倾向于忽略 Encoder 输出而直接基于自身记忆生成,导致 Encoder 梯度更新不充分。SIA loss 强迫 Encoder 的输出必须与 item codebook 分布对齐,从而迫使 Encoder 认真学习序列信息。
💡 举例:SIA 的对齐过程

用户历史序列:[无线耳机 (SID=[47,112,23]), 充电宝 (SID=[31,88,6]), 手机壳 (SID=[31,66,19])]。

Encoder 处理完这个序列后,mean pooling 得到 $\mathbf{z}^E$。将 $\mathbf{z}^E$ 送入 item tokenizer 得到其在每层 codebook 上的概率分布:第 1 层 P($\mathbf{z}^E$) 中 code 31 概率最高(因为序列里两个 item 都是手机配件类),第 2 层 code 66 或 88 概率较高。

同时,目标 item"手机支架"(SID=[31,66,14])的协同 embedding $\mathbf{z}$ 送入 tokenizer 得到的分布 P($\mathbf{z}$) 中 code 31 概率最高,第 2 层 code 66 概率最高。

SIA loss 用 KL 散度拉近这两个分布,让 Encoder 的序列表示在 codebook 空间内和真实目标 item 对齐,相当于告诉 Encoder:"你的输出要能预测下一个 item 的 codebook 分布,不要学偏了。"

2.5 偏好-语义对齐(Preference-Semantic Alignment, PSA)

PSA 的核心假设:Decoder 的第一个 hidden state($\mathbf{h}^D$)代表了用户对下一个 item 的偏好向量;item tokenizer 重建的语义 embedding($\tilde{\mathbf{z}}$)代表了 item 的语义内容。两者应该在表示空间中对齐。

$$\mathcal{L}_{PSA} = -\left(\log\frac{\exp(s(\tilde{\mathbf{z}}, \mathbf{h}^D)/\tau)}{\sum_{\hat{\mathbf{h}} \in \mathcal{B}}\exp(s(\tilde{\mathbf{z}}, \hat{\mathbf{h}})/\tau)} + \log\frac{\exp(s(\mathbf{h}^D, \tilde{\mathbf{z}})/\tau)}{\sum_{\hat{\mathbf{z}} \in \mathcal{B}}\exp(s(\mathbf{h}^D, \hat{\mathbf{z}})/\tau)}\right)$$
符号说明
  • $\mathbf{h}^D$:Decoder 处理完 [BOS] 后输出的第一个 hidden state(代表用户偏好向量)
  • $\tilde{\mathbf{z}}$:RQ-VAE Decoder 重建的目标 item 语义 embedding
  • $s(\cdot, \cdot)$:余弦相似度
  • $\tau$:温度系数;$\mathcal{B}$:mini-batch 内的所有样本(负样本来自 batch 内其他样本)
  • 双向 InfoNCE:既要偏好→语义对齐,也要语义→偏好对齐
PSA 的关键作用:通过使用重建语义 $\tilde{\mathbf{z}}$(而非原始 $\mathbf{z}$),PSA 的梯度会同时反传到 item tokenizer 的 Decoder(更新 codebook),让 tokenizer 的重建能力也被推荐目标优化——这就是"端到端"的关键所在。
💡 举例:PSA 对齐如何促进互相增强

用户历史:[无线耳机, 充电宝, 手机壳]。目标 item:"手机支架"。

Decoder 读完 [BOS] 后输出 $\mathbf{h}^D$(用户想买手机配件的偏好向量)。Item tokenizer Decoder 重建"手机支架"的语义向量 $\tilde{\mathbf{z}}$。

PSA 告诉两者:$\mathbf{h}^D$ 和 $\tilde{\mathbf{z}}$ 要更近,而 $\mathbf{h}^D$ 和 batch 内其他 item(比如"厨房刀具")的语义 $\tilde{\mathbf{z}}_{其他}$ 要更远。

对 Recommender 的影响:Decoder 被迫让 $\mathbf{h}^D$ 捕捉更好的用户偏好(而不只是看 token 序列规律)。

对 Tokenizer 的影响:$\tilde{\mathbf{z}}$ 的梯度反传到 tokenizer Decoder,tokenizer 会让重建向量更贴近推荐场景下"用户偏好空间"的分布,而不只是最小化重建误差。

2.6 交替优化策略(Alternating Optimization)

如果同时优化 tokenizer 和 recommender,tokenizer 频繁更新会导致 item token 快速变化,让 recommender 的 embedding table 产生剧烈震荡,训练不稳定。ETEGRec 提出交替优化

  1. 1
    Cycle 第 1 个 epoch:固定 Recommender,只更新 Tokenizer。目标函数:$\mathcal{L}_{IT} = \mathcal{L}_{SQ} + \mu \mathcal{L}_{SIA} + \lambda \mathcal{L}_{PSA}$
  2. 2
    Cycle 第 2 到 C 个 epoch:固定 Tokenizer(item token 序列固定),只更新 Recommender。目标函数:$\mathcal{L}_{GR} = \mathcal{L}_{REC} + \mu \mathcal{L}_{SIA} + \lambda \mathcal{L}_{PSA}$
  3. 3
    重复上述 cycle,直到 Tokenizer 收敛(在 validation 上的 loss 不再降低)。此后永久冻结 Tokenizer,完全训练 Recommender 至收敛。
$$\mathcal{L}_{IT} = \mathcal{L}_{SQ} + \mu \mathcal{L}_{SIA} + \lambda \mathcal{L}_{PSA}$$ $$\mathcal{L}_{GR} = \mathcal{L}_{REC} + \mu \mathcal{L}_{SIA} + \lambda \mathcal{L}_{PSA}$$
符号说明
  • $\mu, \lambda$:SIA 和 PSA 的权重系数(通过超参搜索确定,典型值 $\mu = 3\times10^{-4}, \lambda = 1\times10^{-4}$)
  • $C$:每个 cycle 的 epoch 数($C \in \{2, 4\}$)
  • Tokenizer 学习率范围:{5e-4, 1e-4, 5e-5};Recommender 学习率:{5e-3, 3e-3, 1e-3}
💡 举例:交替优化的直觉

比喻:想象 tokenizer 是"地图绘制员",recommender 是"导航员"。如果两者同时优化,地图每天都在变,导航员根本没法学会根据地图导航(embedding 不稳定)。

交替优化的逻辑:每个 cycle 先让地图绘制员(tokenizer)改进一次地图(利用导航员已学到的知识反馈),然后让导航员(recommender)基于稳定的地图充分训练($C-1$ epoch)。这样地图和导航技能交替提升,效率更高、训练更稳定。

关键发现(消融实验):去掉交替优化(直接联合训练)后性能急剧下降(Recall@10 在 Instrument 上从 0.0624 降到 0.0529)。这说明训练稳定性对端到端联合优化至关重要。

📊
3. 实验结果

数据集(Amazon 2023 Review)

数据集#用户#物品#交互稀疏度
Musical Instruments57,43924,587511,83699.964%
Industrial Scientific50,98525,848412,94799.969%
Video Games94,76225,612814,58699.966%

主要对比结果(Recall@10, NDCG@10)

模型Instrument R@10Scientific R@10Game R@10
SASRec(判别式)0.05300.04060.0821
TIGER(生成式,固定 tokenizer)0.05740.04310.0895
LETTER(改进 tokenizer)0.05810.04330.0901
ETEGRec(端到端)0.0624 (+7.4%)0.0455 (+5.1%)0.0947 (+5.1%)

在所有三个数据集上,ETEGRec 对 TIGER 的提升幅度约为 +5%~+8%,对 LETTER 的提升约为 +3%~+5%,所有提升均在 $p < 0.01$ 下统计显著。

消融实验(Recall@10, Instrument)

变体R@10相比 ETEGRec
ETEGRec (full)0.0624
w/o SIA(去掉序列-物品对齐)0.0614-1.6%
w/o PSA(去掉偏好-语义对齐)0.0609-2.4%
w/o SIA & PSA(去掉所有对齐)0.0601-3.7%
w/o AT(去掉交替优化,直接联合训练)0.0529-15.2%
w/o ETE(只用 ETEGRec 生成的 token 但不联合训练)0.0600-3.8%

消融结果的关键发现:

  • 去掉交替优化(w/o AT)损失最大(-15.2%):稳定的训练策略是端到端优化成功的前提
  • PSA 比 SIA 更重要(-2.4% vs -1.6%):将用户偏好和语义 embedding 对齐比对齐 codebook 分布更有效
  • w/o ETE 仍有提升(比 TIGER 好),说明 ETEGRec 生成的更高质量 token 本身就有帮助;但完整的端到端训练(融合 tokenizer 先验)还能带来额外 3.8% 提升

t-SNE 可视化(Figure 3)

ETEGRec PSA 可视化
Figure 3(论文原图):t-SNE 可视化。圆形是 Decoder 输出的用户偏好向量,星形是 item 语义向量。ETEGRec 中两者紧密对齐且组间分离,直接印证了 PSA 的有效性。
💡
4. 个人理解与启发

核心亮点

  • 发现了"解耦"的本质问题:TIGER 等方法隐含假设"预训练的 tokenizer 对推荐任务是最优的",但这个假设显然不成立。ETEGRec 用实验清晰地证明了这个 gap,并给出了系统性的解决方案。
  • 双对齐机制设计精妙:SIA 是"粗粒度对齐"(codebook 分布层面),PSA 是"细粒度对齐"(表示空间层面),两者互补,从不同角度促进 tokenizer 和 recommender 的协作。
  • 交替优化是真正的工程贡献:直接联合训练失效(-15.2%),交替优化成功——这种训练稳定性的处理方式在后续端到端推荐工作中有很高的参考价值。

潜在不足

  • 训练复杂度增加:需要管理两个 encoder-decoder 的独立优化、学习率调度和 cycle 设计,超参数更多。
  • 在大规模工业数据集上的验证仍缺失(只在 Amazon 小数据集上验证),工业落地的额外挑战(如物品冷启动、item token 更新策略)未深入讨论。
  • Tokenizer 的 codebook 更新频率和 Recommender 训练的 token 稳定性之间存在微妙权衡,cycle 数 $C$ 的设置对不同业务场景可能需要重新搜索。

对我的启发

ETEGRec 给了我一个重要提醒:推荐系统中的表示学习(representation learning)和任务学习(task learning)在预训练-微调范式下是解耦的,但解耦带来了目标不一致的问题。端到端联合训练是解决这一问题的方向,但需要精心设计训练策略(如交替优化)来保证稳定性。这个思路不只适用于 tokenizer-recommender,也可以推广到 embedding 模型与下游任务模型的联合训练场景。

论文链接:arXiv 2409.05546 · GitHub

关键词:端到端生成式推荐 · Item Tokenization · RQ-VAE · SIA · PSA · 交替优化

对比基线:TIGER, TIGER-SAS, LETTER, SASRec, BERT4Rec, CID