当前位置: 首页 > news >正文

SIGIR 2025端到端生成式推荐ETEGRec

文章目录

  • 1. 背景
  • 2. 方法
    • 2.1 框架图
    • 2.2 问题定义
    • 2.3 Item Tokenizer
    • 2.4 Generative Recommender
    • 2.5 ⭐️Sequence-Item Alignment
    • 2.6 ⭐️Preference-Semantic Alignment
    • 2.7 交替优化
  • 3. 总结

现阶段 GRM 大多是两阶段的模型,第一阶段进行内容理解-行为语义对齐,对item进行内容表征,并基于RQ-VAE或类似架构构建离散token;第二阶段通常是基于Transformer的生成式模型,是模型具备用户行为理解能力与item生成能力。本文发表于SIGIR 2025,是针对这两阶段进行融合,提出一个端到端的可学习生成式推荐框架。

论文名称:《Generative Recommender with End-to-End Learnable Item Tokenization》

论文地址:https://arxiv.org/pdf/2409.05546

1. 背景

本文是针对生成式推荐的,区别于传统的判别式推荐(先算一堆物品和用户历史行为的相似度,再挑选最相似的)。生成式推荐将推荐看做序列生成任务,逐步生成要推荐的物品标识符。这个过程涉及两个关键阶段:

  1. 物品标记化(Item Tokenization):为每个物品生成一串**有语义的 **token(不是id)。不能使用原始 ID 作为唯一编号,因为推荐领域的物品太多,并且动态增长,不像 NLP 领域中的词汇数量固定。
  2. 自回归生成(Autoregressive Generative):逐步生成用户可能喜欢的下一个物品 token 。

对于第一阶段目前的研究主要有:无参数方法(parameter-free):比如用共现矩阵、文本特征、聚类等。深度学习方法:比如用向量量化(VQ)方法来学习每个物品的语义 token(RQ-VAE)。

对于第二阶段目前大多采用 T5 这种 encoder-decoder 架构,它在文本生成类任务表现好,所以被用来推荐中的序列建模。也有decoder-only 架构。

但目前的两阶段范式中,两个阶段是分开训练的,也就是说现训练一个物品标记器 --> 然后固定不动 --> 再去训练生成推荐器。

存在问题

  • 第一阶段学出来的 token 并不一定适合用来推荐。
  • 第二阶段无法进一步优化这些 token 表示,丧失深入理解的机会。(这里应该不能强行训练 codebook 吧?)

本文尝试让物品标记器(第一阶段)与生成器(第二阶段),协同工作,一起训练,一起优化,实现”无缝集成“。【通过引入两个对齐机制】

2. 方法

2.1 框架图

在这里插入图片描述

ETEGRec 框架由两个主要组件组成:物品标记器和生成式推荐器。物品标记器采用 RQ-VAE,将每个物品编码为一组离散的 token 序列,用于输入推荐器。生成式推荐器基于 Transformer,根据用户的历史交互 token 序列自回归地生成目标物品的 token,用于预测下一个推荐项。为实现两个模块的协同优化,框架引入了两个对齐机制:序列-物品对齐(c)通过最小化推荐器生成的行为序列分布与目标物品 token 分布之间的 KL 散度,确保结构上的一致性;偏好-语义对齐(d)则通过对比学习方式,将用户偏好表示与目标物品的语义向量进行对齐,实现语义层级上的匹配。整个系统通过联合优化 token 重构损失、生成损失以及两个对齐损失,实现端到端的高效推荐。

2.2 问题定义

P ( Y ∣ X ) = ∏ l = 1 L P ( c l t + 1 ∣ X , c 1 t + 1 , … , c l − 1 t + 1 ) P(Y|X) = \prod_{l=1}^{L} P(c_l^{t+1} \mid X, c_1^{t+1}, \ldots, c_{l-1}^{t+1}) P(YX)=l=1LP(clt+1X,c1t+1,,cl1t+1)

解释:该公式表示将推荐任务建模为一个序列到序列的生成问题,即在给定用户历史交互序列的 token 表示 X X X 的基础上,模型自回归地逐个生成下一个物品 i t + 1 i_{t+1} it+1 的 token 序列 Y = [ c 1 t + 1 , … , c L t + 1 ] Y = [c_1^{t+1}, \ldots, c_L^{t+1}] Y=[c1t+1,,cLt+1],每个 token 的生成都依赖于历史输入和当前已生成的 token,codebook为 L L L 层。

2.3 Item Tokenizer

这部分就是经典的 RQ-VAE(Residual Quantization Variational AutoEncoder) 的方法实现物品标记器(item tokenizer),旨在将每个物品的语义表示编码为一组离散 token,以供生成式推荐器使用。该方法能够将连续的语义向量压缩为多级离散 token 序列,从而实现结构紧凑、语义可控的物品表示。

具体而言,给定某个物品 i i i 的原始语义表示 z ∈ R d s z \in \mathbb{R}^{d_s} zRds,item tokenizer 首先通过一个多层感知机(MLP)编码器将其映射到潜在空间中,得到潜在表示:
r = Encoder T ( z ) r = \text{Encoder}_\mathcal{T}(z) r=EncoderT(z)
接着,使用 残差量化(Residual Quantization) r r r 转化为一个由 L L L 个 token 组成的序列 [ c 1 , … , c L ] [c_1, \dots, c_L] [c1,,cL],即:
[ c 1 , … , c L ] = T ( z ) [c_1, \dots, c_L] = \mathcal{T}(z) [c1,,cL]=T(z)
残差量化的核心思想是:在每一层 l l l,我们从一个码本 C l C_l Cl 中选择最接近当前残差向量 v l v_l vl 的向量作为 token 对应的码本向量 e c l l e_{c_l}^l ecll。其中,初始残差为 v 1 = r v_1 = r v1=r,每一层的 token 通过如下方式选取:
c l = arg ⁡ max ⁡ k P ( k ∣ v l ) , P ( k ∣ v l ) = exp ⁡ ( − ∥ v l − e k l ∥ 2 ) ∑ j = 1 K exp ⁡ ( − ∥ v l − e j l ∥ 2 ) c_l = \arg\max_k P(k \mid v_l), \quad P(k \mid v_l) = \frac{\exp(-\|v_l - e_k^l\|^2)}{\sum_{j=1}^K \exp(-\|v_l - e_j^l\|^2)} cl=argkmaxP(kvl),P(kvl)=j=1Kexp(vlejl2)exp(vlekl2)
并更新残差向量为:
v l + 1 = v l − e c l l v_{l+1} = v_l - e_{c_l}^l vl+1=vlecll
通过 L 次迭代后,我们得到完整的 token 序列 [ c 1 , … , c L ] [c_1, \dots, c_L] [c1,,cL],以及对应的量化表示:
r ~ = ∑ l = 1 L e c l l \tilde{r} = \sum_{l=1}^L e_{c_l}^l r~=l=1Lecll
为了使该 token 表达能够忠实反映原始语义,作者设计了两个联合优化的损失项构成的整体量化损失:
L S Q = L R E C O N + L R Q \mathcal{L}_{SQ} = \mathcal{L}_{RECON} + \mathcal{L}_{RQ} LSQ=LRECON+LRQ
其中,重构损失 L R E C O N \mathcal{L}_{RECON} LRECON 保证解码器从量化表示 r ~ \tilde{r} r~ 恢复出的语义向量 z ~ \tilde{z} z~ 接近原始向量 z z z
L R E C O N = ∥ z − z ~ ∥ 2 , z ~ = Decoder T ( r ~ ) \mathcal{L}_{RECON} = \| z - \tilde{z} \|^2, \quad \quad \tilde{z} = \text{Decoder}_\mathcal{T}(\tilde{r}) LRECON=zz~2,z~=DecoderT(r~)

而量化损失 L R Q \mathcal{L}_{RQ} LRQ 则同时优化编码器输出和码本,使它们彼此靠近:
L R Q = ∑ l = 1 L ∥ sg ( v l ) − e c l l ∥ 2 + β ∥ v l − sg ( e c l l ) ∥ 2 \mathcal{L}_{RQ} = \sum_{l=1}^L \| \text{sg}(v_l) - e_{c_l}^l \|^2 + \beta \| v_l - \text{sg}(e_{c_l}^l) \|^2 LRQ=l=1Lsg(vl)ecll2+βvlsg(ecll)2
其中 sg [ ⋅ ] \text{sg}[\cdot] sg[] 是 stop-gradient 操作,避免反向传播干扰, β \beta β 为调节两项平衡的系数。

综上所述,该基于 RQ-VAE 的 item tokenizer 能够以端到端方式学习将物品语义向量映射为离散 token 序列,既保证表达能力,又具备良好的生成结构,对后续生成式推荐建模具有重要意义。

2.4 Generative Recommender

在 ETEGRec 中,生成式推荐器(generative recommender)负责根据用户的历史交互行为序列预测下一个用户可能感兴趣的物品,其核心采用类 T5 的 Transformer 编码器-解码器结构。整个任务被建模为一个 token-level 的 sequence-to-sequence 生成问题。具体来说,首先将用户历史交互序列 S = [ i 1 , . . . , i t ] S = [i_1, ..., i_t] S=[i1,...,it] 中的每个物品通过 item tokenizer 映射为固定长度为 L L L 的 token 序列,从而得到输入 token 序列 X = [ c 1 1 , c 2 1 , . . . , c L t ] X = [c_1^1, c_2^1, ..., c_L^t] X=[c11,c21,...,cLt]。同样,目标物品 i t + 1 i_{t+1} it+1 被映射为目标 token 序列 Y = [ c 1 t + 1 , . . . , c L t + 1 ] Y = [c_1^{t+1}, ..., c_L^{t+1}] Y=[c1t+1,...,cLt+1]

在建模过程中,首先将输入 token 嵌入为向量表示 E X E^X EX 并送入编码器,得到历史行为的编码结果:
H E = Encoder R ( E X ) H^E = \text{Encoder}_\mathcal{R}(E^X) HE=EncoderR(EX)

其中 H E ∈ R ∣ X ∣ × d h H^E \in \mathbb{R}^{|X| \times d_h} HERX×dh 是编码后的隐藏表示, d h d_h dh 是隐藏维度。在解码阶段,为了生成目标 token 序列,解码器以 H E H^E HE 和一个以特殊起始符 “[BOS]” 开头的目标序列作为输入:
Y ~ = [ [BOS] , c 1 t + 1 , . . . , c L − 1 t + 1 ] \tilde{Y} = [\text{[BOS]}, c_1^{t+1}, ..., c_{L-1}^{t+1}] Y~=[[BOS],c1t+1,...,cL1t+1]
并生成输出表示:
H D = Decoder R ( H E , Y ~ ) H^D = \text{Decoder}_\mathcal{R}(H^E, \tilde{Y}) HD=DecoderR(HE,Y~)

其中 H D ∈ R ( L + 1 ) × d h H^D \in \mathbb{R}^{(L+1) \times d_h} HDR(L+1)×dh 是解码器每一步的隐藏状态,表示对目标 token 的逐步生成。

训练目标是最大化生成的目标 token 序列的对数似然概率,也即最小化如下的推荐损失:
L R E C = − ∑ j = 1 L log ⁡ P ( Y j ∣ X , Y < j ) \mathcal{L}_{REC} = -\sum_{j=1}^{L} \log P(Y_j \mid X, Y_{<j}) LREC=j=1LlogP(YjX,Y<j)
其中 Y j Y_j Yj 表示目标 token 序列的第 j j j 个 token, Y < j Y_{<j} Y<j 表示之前已生成的 tokens,整个生成过程是自回归(autoregressive)的,每一步的预测依赖于之前所有的生成结果。

通过这种 token-level 生成建模方式,ETEGRec 能够直接生成未来推荐物品的 token 表达,实现了从用户行为到物品 token 的高效预测,且自然支持开放词表与泛化能力。

2.5 ⭐️Sequence-Item Alignment

在这里插入图片描述

如图红色的框,上面的就是用户的历史行为所表达出来的偏好,左下方的就是用户即将交互的目标物品的真实表示,这个对齐模块的核心就是:这两者在 tokenizer 看来表达应该是一致的。也就是说,虽然 z E z^E zE z z z 来自不同的路径(一个是行为序列推理出来的,一个是目标物品embedding),但是他们在结构上具有一致的token概率分布,因为他们实际上指向的是同一个推荐目标。

SIA整体流程

  1. H E H^E HE 是用户历史行为序列(即 token 序列 X X X)经过推荐器的 Transformer 编码器后得到的隐藏状态;
  2. 这个 H E H^E HE 表示整个序列的信息;
  3. 通过 mean pooling + MLP 得到一个紧凑的向量 z E z^E zE,可以看作是“用户的偏好表示”。

z E = MLP ( mean_pool ( H E ) ) z^E = \text{MLP}(\text{mean\_pool}(H^E)) zE=MLP(mean_pool(HE))

  1. z z z 是目标物品本身的语义表示(embedding);

  2. 两者都输入相同的 item tokenizer(基于 RQ-VAE)

  3. 在每一层 l l l,两者都会被映射为同一个 codebook 的概率分布(即 soft assignment):

P z l 与 P z E l P_z^l \quad \text{与} \quad P_{z^E}^l PzlPzEl

  1. 然后对每一层的两个分布做对称的 KL 散度计算,构成序列-物品对齐的损失函数:

L S I A = − ∑ l = 1 L ( D K L ( P z l ∥ P z E l ) + D K L ( P z E l ∥ P z l ) ) \mathcal{L}_{SIA} = -\sum_{l=1}^L \left( D_{KL}(P_z^l \| P_{z^E}^l) + D_{KL}(P_{z^E}^l \| P_z^l) \right) LSIA=l=1L(DKL(PzlPzEl)+DKL(PzElPzl))

2.6 ⭐️Preference-Semantic Alignment

在这里插入图片描述

如图红色的框,上面推荐器Decoder输出的 H D H^D HD表示用户历史行为序列经过模型生成的表示,经过pooling获得其第一列向量 h D h^D hD(图中是 h E h^E hE 但是论文文字写的 h D h^D hD) ,就表示当前用户的行为偏好摘要表示,它体现了用户会喜欢什么。下面的红色框就是目标物品经过 item tokenizer之后得到的离散 token 然后将离散 token 送入 tokenizer 的 Decoder 重构出原始语义向量 z ~ \tilde{z} z~ z ~ \tilde{z} z~ 代表目标物品的重建语义表示,并天然包含了 tokenizer 学习到的结构信息。核心在于: h D h^D hD 是用户想要的, z ~ \tilde{z} z~ 是物品的真实语义。如果推荐器真的理解用户,那它生成的 h D h^D hD 应该“指向”目标物品的语义表示。

PSA整体流程:

  1. H D H^D HD 是用户历史行为序列经过推荐器的 Transformer 解码器后得到的隐藏状态;
  2. H D H^D HD 的第一列 hidden state,并通过 pooling 操作(如 mean 或取第一位)获得用户偏好的最终表示 h D h^D hD
  3. 此时 h D h^D hD 代表用户的“语义偏好向量”,用于表示“用户想要什么”;
  4. 同时,目标物品的表示 z z z 先通过 item tokenizer 进行残差量化,得到 token 序列 [ c 1 , . . . , c L ] [c_1, ..., c_L] [c1,...,cL]
  5. 然后这个 token 序列会被送入 tokenizer 的解码器中进行重构,得到重建语义表示 z ~ \tilde{z} z~

z ~ = Decoder T ( ∑ l = 1 L e c l l ) \tilde{z} = \text{Decoder}_\mathcal{T}\left( \sum_{l=1}^L e_{c_l}^l \right) z~=DecoderT(l=1Lecll)

其中 e c l l e_{c_l}^l ecll 是第 l l l 层 codebook 中选出的 token 向量;

  1. h D h^D hD z ~ \tilde{z} z~ 分别代表“用户偏好语义”与“物品语义”,应当在语义空间中靠近;

  2. 使用 InfoNCE 对比学习 进行对齐,在一个训练 batch 中最大化 h D h^D hD 与对应 z ~ \tilde{z} z~ 的相似度,同时区分其他负样本,最终损失为:

L P S A = − ( log ⁡ exp ⁡ ( s ( z ~ , h D ) / τ ) ∑ h ^ ∈ B exp ⁡ ( s ( z ~ , h ^ ) / τ ) + log ⁡ exp ⁡ ( s ( h D , z ~ ) / τ ) ∑ z ^ ∈ B exp ⁡ ( s ( h D , z ^ ) / τ ) ) \mathcal{L}_{PSA} = -\left( \log \frac{\exp(s(\tilde{z}, h^D)/\tau)}{\sum_{\hat{h} \in \mathcal{B}} \exp(s(\tilde{z}, \hat{h})/\tau)} + \log \frac{\exp(s(h^D, \tilde{z})/\tau)}{\sum_{\hat{z} \in \mathcal{B}} \exp(s(h^D, \hat{z})/\tau)} \right) LPSA=(logh^Bexp(s(z~,h^)/τ)exp(s(z~,hD)/τ)+logz^Bexp(s(hD,z^)/τ)exp(s(hD,z~)/τ))

其中 s ( ⋅ , ⋅ ) s(\cdot, \cdot) s(,) 是余弦相似度函数, τ \tau τ 是温度系数, B \mathcal{B} B 是当前 batch 样本集合。

2.7 交替优化

ETEGRec由两个独立模块组成 Item Tokenizer 与 Generative Recommender,这两个模块通过两个对齐损失 L S I A L_{SIA} LSIA L P S A L_{PSA} LPSA连接,但如果一开始就联合训练两个部分,容易出现:参数震荡、不收敛、tokenizer质量低影响推荐,或 recommender 太强导致 tokenizer 学不到东西。作者采用交替优化的方式避免问题。

训练被分为多个周期(cycle),每个周期包含若干个 epoch。

  • 每个周期的第一个 epoch:只优化 Item Tokenizer,冻结推荐器,让 tokenizer 更新得更适合当前 recommender。采用:
    L I T = L S Q + μ L S I A + λ L P S A \mathcal{L}_{IT} = \mathcal{L}_{SQ} + \mu \mathcal{L}_{SIA} + \lambda \mathcal{L}_{PSA} LIT=LSQ+μLSIA+λLPSA

    • L S Q \mathcal{L}_{SQ} LSQ:tokenizer 本身的重构损失(token 生成 + embedding 重建);
    • L S I A \mathcal{L}_{SIA} LSIA:结构对齐(序列→物品分布);
    • L P S A \mathcal{L}_{PSA} LPSA:语义对齐(偏好→语义);
    • μ , λ \mu, \lambda μ,λ:超参数,用来平衡三项损失的权重。
  • 周期的剩余 epoch:只优化 Generative Recommender,冻结 tokenizer。保证在稳定 token 编码下训练 recommender,不被扰动,采用:
    L G R = L R E C + μ L S I A + λ L P S A (18) \mathcal{L}_{GR} = \mathcal{L}_{REC} + \mu \mathcal{L}_{SIA} + \lambda \mathcal{L}_{PSA} \tag{18} LGR=LREC+μLSIA+λLPSA(18)

    • L R E C \mathcal{L}_{REC} LREC:推荐器生成 token 的序列建模损失(负 log-likelihood);
    • 同样包含两项对齐损失;
    • 但此时冻结 tokenizer,只训练 recommender。

3. 总结

最近也在看生成式推荐,这篇文章主要就是提出了两个对齐模块以及一个交替优化的训练方式,去解决传统的解耦问题,但是这样也就限制了生成式推荐模块必须是encoder-decoder架构,不能是decoder-only了吧。有一定的借鉴之处,整体看起来比较简单,就是 h D h^D hD 部分不是那么理解。

相关文章:

  • vue3源代码装包,启动服务
  • 支付宝 SEO 优化:提升小程序曝光与流量的完整指南
  • Go语言的宕机恢复,如何防止程序奔溃
  • 污水处理厂逆袭:Ethernet/IP 转 CANopen 开启“智净”时代
  • 从 JMS 到 ActiveMQ:API 设计与扩展机制分析(一)
  • Uniapp app 安卓手机(红米)自定义基座进行真机调试
  • 什么是供应链关键业务指标体系,如何利用指标驱动管理闭环
  • 解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题
  • 数据库插入数据时自动生成
  • 智能排产破解制造业效率困局
  • React 中 useMemo 和 useEffect 的区别(计算与监听方面)
  • (三)毛子整洁架构(Infrastructure层/DapperHelper/乐观锁)
  • 分布式处理架构
  • 地图、图表的制作要领
  • 明远智睿SSD2351开发板:仪器仪表与智慧农业的创新利器
  • Unity基础学习(九)输入系统全解析:鼠标、键盘与轴控制
  • Vibe Coding: 优点与缺点
  • 通信协议选型篇:如何根据项目需求选择合适的通信协议?
  • 韩媒聚焦Lazarus攻击手段升级,CertiK联创顾荣辉详解应对之道
  • Mysql数据库进阶
  • 远离军事前线的另一面暗斗:除了“断水”,印度还试图牵制对巴国际援助
  • 奥利弗·斯通回顾越战50周年:我们不善于总结历史教训
  • 港理大研究揭示:塑胶废物潜藏微生物群落或引发生态危机
  • 新华时评:任凭风云变幻,中俄关系从容前行
  • 上海营商环境的“分寸”感:底线之上不断拓宽自由,底线之下雷霆制止
  • 汪海涛评《线索与痕迹》丨就虚而近实