Think Globally, Generate Personally: Multi-View Thinking with Adaptive Generation for Generative Recommendation

Yuxuan Hu, Yingyi Zhang, Wenlin Zhang, Chao Zhang, Haotian Nan, Ziwei Liu, Jiancheng Dong, Tongzhou Wu, Beibei Kong 等 14 人 · arXiv 2611.02463 · 发表 2026-11-02
15 分钟阅读时长 5713字 4.10综合分 第 6 名11-04 Generative 日报
目录 · 10 节1它到底在解决什么问题?2整体流程3思考 token:一个读全部,一个读最近4嵌套 adapter 路径:给不同用户不同深度的修正5训练时怎么选路径,推理时怎么选路径6训练分三段7实验:涨了多少,涨在哪里8我认为它的局限9一个推荐团队可以怎么试10结论
相关 4新颖 4实用 4证据 4时效 5

做 SID 生成式推荐的团队可以读一读,它在 TIGER 这类模型上补了两处很具体的短板,而且不改 SID 码表、共用同一个词表投影,也不加多套模型。第一处在生成之前:模型额外加两个“思考 token”,一个只读用户的全部历史,一个只读最近 5 件物品,这样最近冒出来的新兴趣不会被大量老行为盖住。第二处在生成的时候:解码器输出的向量在进入词表投影之前,先过一组深浅不同的小 adapter,每个用户只走其中一条,走哪条由模型在第一个 SID 位置的置信度决定。论文把整套方法叫 MV-Thinker。在 Amazon Instruments 数据上,以 LETTER(一种把协同信号也编进 SID 的生成式推荐模型)为底座时,H@5 从 0.0854 提到 0.0906,最强的对照方法是 0.0882。前 20 个推荐覆盖到的不同 SID,从 TIGER 的 19.56% 提到 25.50%。思考 token 管“看哪段历史”,adapter 路径管“怎么把看到的东西落到具体型号”。代价是三段式训练更繁琐。实验用的公开数据集平均历史只有 8 到 10 件物品,比线上短得多。

它到底在解决什么问题?

SID 生成式推荐有两个问题。第一个问题是最近的兴趣容易被整段历史稀释。

论文附录里有一个示意案例。一个用户早期互动的是吉他弦、背带和调音器,最近换成了电子鼓、鼓凳,又连着三次是 Zildjian 鼓槌。把整段历史放进一个序列,最近这几次容易被吉他记录稀释。TIGER 给这位用户推的第一名正是吉他调音器,真正的下一件鼓槌排在 20 名以外。完整的 MV-Thinker 推的第一名是 Zildjian 5B 木头头鼓槌,真正的下一件排第 3。

模型(论文附录表 5 的案例一)推荐的第一名真正的下一件排第几
TIGER吉他调音器20 名以外
去掉分视角读历史模块(MVT)的版本吉他弦20 名以外
去掉 adapter 路径模块(HRA)的版本Zildjian 5A 鼓槌第 6
完整 MV-ThinkerZildjian 5B 木头头鼓槌第 3

去掉 MVT(分视角读历史的模块)的版本仍然推吉他配件,这个案例提示,分视角读历史有助于认出最近转向鼓类的兴趣。去掉 HRA(adapter 路径模块)的版本找对了品类,却在相近型号里排得更靠后,这就引出第二个问题。两个模块的具体做法下面再讲。

第二个问题是所有用户共用同一套输出变换,它出在生成的最后一步。解码器在每个 SID 位置输出一个向量,再乘同一个词表投影矩阵得到下一个码的概率。所有用户共用这一套变换。可是有的用户只需要选对品类,有的用户需要在同一品类里分清细到弦的粗细这样的型号差别,共用一套变换很难同时照顾两类人。

整体流程

MV-Thinker 总览:左上是两个思考 token 分别读全部历史和最近 5 件物品;右上是 4 条嵌套的残差路径,路径越深叠的 adapter 越多,最后共用同一个词表投影;下方是三段式训练,以及推理时在第一个 SID 位置按置信度选路径
MV-Thinker 总览:左上是两个思考 token 分别读全部历史和最近 5 件物品;右上是 4 条嵌套的残差路径,路径越深叠的 adapter 越多,最后共用同一个词表投影;下方是三段式训练,以及推理时在第一个 SID 位置按置信度选路径

底座是一个 T5 式的 encoder–decoder,隐藏维度 128,4 层。一次推荐按下面的顺序走:

  1. 编码器读入用户历史里每件物品的 SID,输出每个位置的向量。
  2. 两个思考 token 分别从全部历史和最近 5 件物品里读信息,得到两个向量,放在解码器输入的最前面。这一步叫 MVT(Multi-View Temporal Thinking),每个用户只做一次。
  3. 解码器逐个生成 SID 的码。每个位置的输出向量先过一条 adapter 路径,再乘共用的词表投影。这一步叫 HRA(Hierarchical Residual Adaptation)。
  4. 用 beam search 生成,并限制每一步只能走到目录里真实存在的 SID 前缀,最后把 SID 映射回物品。

思考 token:一个读全部,一个读最近

思考 token 是两个新加的特殊 token,记作 <think_1> 和 <think_2>。它们不对应任何物品,各自的 embedding 是一个可学习的向量,所有用户共用。它们的作用是在生成 SID 之前,先从历史里把有用的信息汇总出来。

具体做法是:<think_1> 的 embedding 作为 query,用一个单独的 cross-attention 读编码器在全部历史上的输出;<think_2> 的 embedding 用另一个单独的 cross-attention,只读最近 件物品对应的编码器输出,论文取 。读到的结果乘一个可学习的缩放系数,加回原来的 embedding(下式省略了 LayerNorm):

这里 是思考 token 原来的 embedding, 是这个视角能看到的编码器输出, 是缩放系数。直觉上,query 本身对所有用户一样,读完之后的 才带上这个用户的信息。

为什么要两个独立的读取器?如果两个 token 共用一个,它们读出来的东西容易混在一起。如果把两段历史的编码直接拼起来,全部历史更长,又会压过最近几件。最近视角按整件物品截取,所以一件物品的几个 SID 码不会被截断一半。还要注意,编码器是在整段历史上算的,最近 5 件物品的输出向量本身已经带着前面历史的上下文。“只读最近”限制的是 <think_2> 能 attend 到哪些位置,不是让编码器只看这 5 件。

得到的两个向量排在解码器输入的开头,顺序是“起始 token、全部历史向量、最近历史向量、已经生成的 SID 码”。解码器之后每生成一个码,都能 attend 到这两个向量。原来的通路也保留着:解码器照常读取整段历史的编码结果,这两个向量是额外加进来的输入。

嵌套 adapter 路径:给不同用户不同深度的修正

HRA 准备了 4 个小 adapter,每个是先降维、过 GELU、再升回来的两层网络。为了让不同用户能拿到深浅不同的修正,它们串成 4 条路径:路径 1 只用第 1 个 adapter,路径 2 用第 1、2 个,路径 4 用全部 4 个。每过一个 adapter,就把它的输出乘一个固定的小系数 加回当前向量。最后把累计修正除以路径深度,所以深路径的修正不会比浅路径大太多。

举个能心算的例子(示意,系数取论文用的 )。解码器输出某一维是 1.0,路径 2 上第 1 个 adapter 给出 0.5,第 2 个给出 0.5。第一步得到 1.0 + 0.2×0.5 = 1.1,第二步得到 1.1 + 0.2×0.5 = 1.2。累计修正 0.2 再除以深度 2,最终是 1.1。

四条路径修正后的向量都乘同一个词表投影矩阵,所以它们预测的是同一套 SID 码,只是修正的深浅不同。和多专家模型比,这里深路径复用浅路径的 adapter,HRA 这一部分只多 4 个小 adapter。

训练时怎么选路径,推理时怎么选路径

这一节要分清训练和推理两个阶段,它们选路径的依据不一样。

训练时,模型能看到目标物品的 SID。对每个样本,4 条路径都在所有受监督的位置上算一遍交叉熵,这些位置主要是目标 SID 的各个码。损失越低的路径,被抽中的概率越高,概率是对负损失做 softmax(温度 1.0)。这组抽样概率本身不回传梯度。然后按这个概率抽一条,主要的交叉熵更新只来自这条路径的损失。论文把它叫“轮盘赌训练”。抽样而不是直接选最好的那条,是为了让每条路径都有机会被训练到。

抽中深路径时,前面那些浅 adapter 的输出照常参与计算,但不回传梯度。所以就交叉熵这一项来说,这条路径的 adapter 里只更新最后一个,底座或读取器仍照常更新。这样第 3 个 adapter 被训练时,不会把第 1 个 adapter 已经学好的修正改掉。为了防止训练早期总抽中少数几条路径,作者还加了一个均衡项。它把同样的负损失 softmax 重新算一遍,这一次保留梯度,再用这组概率算:一个 batch 里各路径的平均概率偏离 1/4 越多,惩罚越大。这一项的梯度会经过所有 4 条路径的损失,没被抽中的路径也会收到。但每条路径里前面 adapter 的输出同样不回传梯度,所以它在每条路径上能改的 adapter 也只有最后一个。

推理时没有目标 SID。模型在第一个 SID 位置把 4 条路径各算一遍,看每条路径给出的最高那个码的 log 概率,选最高的那条路径。之后这个用户剩下的码、beam search 里的所有分支,都固定走这条路径。只在第一个位置选一次,是因为每个位置都换路径,前后的修正会对不上;4 条路径各跑一遍完整 beam search 又太贵。 Hoot 说

Hoot 说同样 4 条路径,训练时抽、推理时挑(示意)收起 ✕
训练时看损失按概率抽一条,推理时没有目标 SID,只看第一个码的置信度挑一条,之后整次生成都不换。
路径 1 到 4 的损失 1.2、0.8、1.0、1.5,对应抽中概率 0.22、0.33、0.27、0.17,按概率抽一条更新路径 1损失 1.2 → 概率 0.22路径 2损失 0.8 → 概率 0.33路径 3损失 1.0 → 概率 0.27路径 4损失 1.5 → 概率 0.17按概率抽一条交叉熵只用它的损失
路径 1 到 4 的损失 1.2、0.8、1.0、1.5,对应抽中概率 0.22、0.33、0.27、0.17,按概率抽一条更新路径 1损失 1.2 → 概率 0.22路径 2损失 0.8 → 概率 0.33路径 3损失 1.0 → 概率 0.27路径 4损失 1.5 → 概率 0.17按概率抽一条交叉熵只用它的损失
1/2 · 训练:看得到目标 SID,按损失抽(示意)4 条路径都对目标 SID 算交叉熵。对负损失做 softmax(温度 1.0)得到抽中概率,路径 2 损失最低,概率最高,但其他路径也有机会被抽到。
路径 1 到 4 在第一个码的最高 log 概率为 -0.9、-0.4、-0.7、-1.1,选路径 2 并固定到生成结束路径 1最高码 log 概率 -0.9路径 2最高码 log 概率 -0.4路径 3最高码 log 概率 -0.7路径 4最高码 log 概率 -1.1选路径 2剩下的码和所有 beam 都走它
路径 1 到 4 在第一个码的最高 log 概率为 -0.9、-0.4、-0.7、-1.1,选路径 2 并固定到生成结束路径 1最高码 log 概率 -0.9路径 2最高码 log 概率 -0.4路径 3最高码 log 概率 -0.7路径 4最高码 log 概率 -1.1选路径 2剩下的码和所有 beam 都走它
2/2 · 推理:没有目标 SID,只在第一个码挑一次(示意)模型只看用户历史。4 条路径各算第一个 SID 位置,比较各自最有把握的那个码的 log 概率,路径 2 最高,就选它。之后剩下的码和 beam search 的所有分支都固定走路径 2。
1/2

示意数字。训练时 4 条路径按损失抽一条;推理时在第一个码按最高 log 概率挑一条,之后不再换。 出处: 论文 §3.3.2 轮盘赌训练、§3.3.3 按置信度推理;数字为示意

推理时选路径只用用户的历史和模型自己的置信度,碰不到真实的下一件物品。真实物品只在评测时用来算命中率。

训练分三段

作者没有一次把所有部件从头训起,而是分三段:

  1. 第 0 段:只训练普通的 encoder–decoder,用标准的逐 token 交叉熵学会从历史生成合法的 SID。
  2. 第 1 段:加入两个思考 token 和 HRA。两个思考 token 是新加的特殊 token,这一段模型也要像预测 SID 码一样,在它们的位置预测出这两个 token。底座、思考 token 和 adapter 一起更新。
  3. 第 2 段:加入两个视角各自的读取器,冻结底座。思考 token 不再计入损失,只更新读取器、思考 token 和 adapter。

冻结底座是为了不打乱第 0 段已经学好的 SID 生成能力。

实验:涨了多少,涨在哪里

评测用 Amazon 的 Instruments、Beauty、Games 三个品类和 Yelp。每个用户最后一次交互留作测试,倒数第二次做验证。评测时用真实的下一件物品算 H@K 和 N@K。对照组有两类。一类是 SASRec 这类判别式模型。另一类是在 TIGER 或 LETTER 底座上加近期的改进。其中两个改的是历史建模:CARE(生成前先对历史做几轮隐式推理)和 GEMs(把近期、中期、长期历史分成几路建模)。另外三个改的是生成过程:APAO(调整训练时对 SID 前缀的优化)、Latte(用隐 token 给每件物品多条解码路径)和 IBA(按信息量给不同 SID 位置分配计算步数)。

数据集与底座底座 H@5最强对照 H@5MV-Thinker H@5MV-Thinker N@5
Instruments,TIGER0.08530.0875(APAO)0.08820.0751
Instruments,LETTER0.08540.0882(GEMs)0.09060.0801
Beauty,LETTER0.03790.0426(GEMs)0.04360.0291
Yelp,TIGER0.02160.0247(CARE)0.02510.0163

MV-Thinker 在两个底座、四个数据集的所有指标上都最好。不过和最强的对照比,领先幅度很小,差别通常在小数点后第三位。最强的对照随数据集变化:在 Beauty 和 Games 上往往是改历史建模的 CARE、GEMs,在 Instruments 上往往是改生成过程的 APAO、Latte、IBA。MV-Thinker 对这两类改进都没输。

覆盖率的结果更有意思。作者在 Instruments 上把所有测试用户前 20 个推荐里出现过的不同 SID 合起来,TIGER 覆盖目录的 19.56%,以 TIGER 为底座的 MV-Thinker 覆盖 25.50%,同时命中率还更高。也就是说,它推荐得更散,但不是靠牺牲准确率换来的。

路径选择也确实因人而异。作者在 Beauty 上抽了 160 个测试用户,看推理时选中的深度。选最浅那条的最多,占 40.6%;选最深那条的最少,也有 15.0%。可见四条路径都被真正用上了,没有退化成所有人走同一条。

Beauty 上 160 个测试用户在推理时选中的路径:每行一个用户,每列一个深度,颜色越深表示这条路径在第一个 SID 位置的置信度相对越高;用户按选中的深度分组,四组都有不少人
Beauty 上 160 个测试用户在推理时选中的路径:每行一个用户,每列一个深度,颜色越深表示这条路径在第一个 SID 位置的置信度相对越高;用户按选中的深度分组,四组都有不少人

消融实验在 Instruments 和 Beauty 上做。去掉 MVT 或去掉 HRA,H@5 和 N@5 都会下降,但都还比 TIGER 好。去掉 HRA 时 H@5 掉得更多,去掉 MVT 时 N@5 掉得更多。只留全部历史比只留最近历史好,两者都不如合在一起。另外,作者还单独训练了只用一条固定深度路径的版本,深度 1 到 3 各训一个。在 Instruments 上,它们的 6 个指标都不如完整的嵌套路径,而且没有哪个固定深度在所有指标上都最好。

我认为它的局限

第一,绝对提升很小。Instruments 上以 TIGER 为底座,H@5 只比最强对照 APAO 多 0.0007。论文用三个随机种子取平均并做了显著性检验,但这个量级放到线上,未必能在 A/B 里看出来。

第二,数据集的历史都很短。四个数据集的平均历史长度只有 8.32 到 10.40,最近视角取 5 件物品,已经占了约一半的历史。新兴趣被老行为淹没的问题,在历史几百上千条的线上场景里才最严重,而四个数据集都远没有这么长。

第三,模型很小,训练链路变长了。底座只有 4 层、128 维,比线上常用的生成式推荐模型小得多,adapter 的收益在大模型上可能会变小。三段式训练也让训练流程更长,每一段要冻结什么、学习率多少,都要单独调。

一个推荐团队可以怎么试

  1. 先只加最近视角的思考 token:在现有 SID 生成模型的解码器开头加一个只读最近 N 件物品的 query,看兴趣刚转移的那批用户命中率有没有变化。这一步最便宜,也最能检验问题在你的数据上是否存在。
  2. 再加 HRA,但先离线统计路径分布。如果几乎所有用户都选同一条路径,说明你的场景不需要因人而异的修正,可以停在第 1 步。
  3. 两者都有收益时,再上三段式训练,并在冻结底座前后各存一个检查点,方便回滚。
  4. 线上同时看命中和覆盖。论文里覆盖率的提升比命中率明显,覆盖更广对冷门物品的曝光可能更有价值。

结论

把全部历史和最近几件物品分开读、再一起交给解码器,比只用其中一个视角更准。

维度评价
问题重要性中高。兴趣转移和同品类细分在推荐里很常见
方法创新性中。两个部件分别借鉴了 latent thinking(先用可学习的查询向量读一遍历史、再生成,思考 token 就属于这一类)和 adapter,组合方式和路径选择规则是新的
实验证据中。四个数据集、两个底座都赢,但领先幅度小,历史很短,都是离线公开数据
工程成本中。加两个思考 token、两个 cross-attention 读取器和 4 个小 adapter,推理时在第一个位置多算 4 条路径;训练变成三段
是否值得尝试值得先试最近视角那一半,成本低、可解释

读完这篇,你觉得

点一下即可,无需登录;再点一次撤回。只统计匿名次数,不记录你是谁。

相关论文RELATED

  1. Generative · 2026-07-13OneRec-Think: In-Text Reasoning for Generative Recommendation快手把 Semantic ID 加进 LLM 词表,先对齐物品 token,再教模型先写理由再给 ID,用束搜索里最好候选对上几位作 GRPO 奖励。线上离线生成推理和 ID 前两位,实时模型补最后一位,在 1.29% 的流量上,一周停留时长提高 0.159%。Beauty 上只微调 ID 的 Base 已在 R@5 上超过全部基线,公开数据上的推理是人工类目模板。
  2. Generative · 2026-11-02RoFiGR: Coarse Routing, Fine Refinement via Level-Adaptive Distillation in Multimodal Generative Recommendation生成式推荐逐个码地生成物品的 SID,前两层码一旦选错大分支,后面再准也找不回相关物品;而多模态推荐里的 SID 多按图文语义构建,前几个码未必反映哪些物品常被同一批用户购买。这篇论文的 RoFiGR 因此把协同信息集中用在前两层码上。建 SID 时,它让每个物品前两层码向量之和,去贴近一个冻结的序列推荐模型(MISSRec)从用户行为里学到的同一物品的 embedding;生成时再用这个模型当老师:它给每个物品打分,一个分支下所有物品的概率加起来,就是这个分支该有的概率,学生每一步向它学。在三个亚马逊数据集上,五个排序指标(HR@10、NDCG@10 等)共 15 组比较全部领先,这 15 组相对最强基线的提升平均约 9.4%。
  3. Generative · 2026-10-19Gryphon-v2: One Model in Place of a Cascade - Generate-and-Rank Recommender with Rollout Distillation推荐系统可以把召回与排序合并到一个模型里。Gryphon-v2 只编码一次用户历史,先生成 Semantic ID(物品的短编码),再用轻量排序头打分;教师只参与训练。Yandex Music 线上实验中,活跃用户数提升 1.41%。
  4. Generative · 2026-10-27Unifying Behavior Modeling and Semantic Generation for Generative Recommendation用 Semantic ID 逐位生成下一个物品编号的生成式推荐,有一个系统性的偏向:华南理工大学这篇 KDD 2026 论文发现,用户历史里和目标物品同类的东西越少,它就越不如只看行为的老式序列推荐模型,最差的一组里 TIGER 的 NDCG@10 比 SASRec 低 30%。原因是编码器学的是下一个物品是谁,解码器要生成的却是编号。OMG 在两者之间加一个两层小网络,每一步把上一步的状态和编码器的最终状态相加再过一遍网络。每一步同时预测下一个物品和编号首位,后者的权重逐步加大,所有中间状态再一起交给解码器。只加这一个部件,各项指标平均涨 14.5%,计算量只多 0.16%。

讨论

欢迎补充实验细节、复现经验或不同看法。需 GitHub 登录。

正在加载讨论…