Knowledge Distillation across Item and Code Spaces for Parallel Generative Recommendation

Yixuan Xu, Hailin Liu, Linxiang Peng, Can Yang · arXiv 2610.32943 · 发表 2026-10-23
11 分钟阅读时长 4355字 3.90综合分 第 4 名10-27 Generative 日报
目录 · 9 节1它到底在解决什么问题?2整体流程:一个老师,两种换算路线3路线一:把学生的预测拼回物品,再和老师比(IDM)4路线二:把老师的概率摊到每一位编号上(CMM)5为什么还要单独调蒸馏的权重?6两条路线真的有用吗?7我认为它的局限8一个推荐团队可以怎么试9结论与评价
相关 4新颖 4实用 4证据 3时效 4

做生成式推荐的团队值得读。它没有换模型结构,只回答了一个很实际的问题:手里已经有一个训练好的老式序列推荐模型,怎么把它“知道的东西”教给用 Semantic ID 做推荐的新模型。核心思想一句话:老模型给出的是“下一个是哪件物品”的概率,新模型预测的是“编号每一位是什么”,论文给了两条换算路线,把前者的概率搬到后者能直接学的形式上。效果很直接:在 Amazon Beauty 上,Recall@10 从 0.0940 提到 0.1094;三个数据集平均下来,第一条路线让 Recall@10 涨 15.39%,第二条让 NDCG@10 涨 8.28%。

它到底在解决什么问题?

先说背景。Semantic ID 推荐给每件物品编一串离散编号,比如三位的 (0, 1, 2),模型通过预测下一件物品的编号来做推荐。编号由物品的语义表示量化得到(本文用 16 个子空间、每个子空间 3 级残差量化,得到 48 位、每位 256 个取值),在蒸馏训练前就定好,训练中不变。本文研究的是其中的“并行”一类:模型一次同时预测编号的所有位,不像 TIGER 那样一位一位往后生成。排序时,把一件物品每一位编号的预测概率取对数再平均,就是这件物品的分数。

这类模型平时用“硬标签”训练:用户下一个点了哪件物品,就要求每一位都预测成那件物品的编号,其余一律算错。问题在于,这只告诉模型正确答案是什么,没有告诉它其他候选离正确答案有多近。

举个例子(示意):一个用户最近买了婴儿沐浴露和洗澡玩具,下一件实际买的是浴巾。硬标签只说“浴巾对,其余都错”。可一个训练好的 SASRec 会告诉我们:浴巾 50%,婴儿浴盆 30%,口水巾 15%,充电宝 5%。浴盆和浴巾一样合理,充电宝基本不相干,这些分寸是硬标签里没有的。

候选物品(示意)编号硬标签SASRec 概率
浴巾(实际下一件)(0, 1, 2)10.50
婴儿浴盆(0, 2, 1)00.30
口水巾(1, 1, 2)00.15
充电宝(2, 0, 0)00.05

难点是两边说的不是一种语言:SASRec 给的是一万多件物品上的概率,新模型输出的是每一位编号上的概率。知识蒸馏要做的,就是把前者换算成后者能学的目标。

整体流程:一个老师,两种换算路线

论文图 1:左边是训练,冻结的老师模型(SASRec)和要训练的编号学生模型一起看用户历史,学生同时学硬标签和老师给的软目标;中间是两条换算路线,上面一条把老师的物品概率按编号加总,交给 CMM,下面一条把学生各位的预测合成物品分数,交给 IDM;右边是上线推理,只用学生模型,不再需要老师。
论文图 1:左边是训练,冻结的老师模型(SASRec)和要训练的编号学生模型一起看用户历史,学生同时学硬标签和老师给的软目标;中间是两条换算路线,上面一条把老师的物品概率按编号加总,交给 CMM,下面一条把学生各位的预测合成物品分数,交给 IDM;右边是上线推理,只用学生模型,不再需要老师。

整个流程分三步:

  1. 训练一个普通的 SASRec 当老师,训练完冻结。它对每段用户历史给出全部物品上的概率。
  2. 学生是一个并行编号模型,照常学硬标签,同时多学一个蒸馏目标。蒸馏目标有两种选法,就是下面要讲的 IDM(物品分布对齐)和 CMM(编号边缘分布对齐),两者分开训练。
  3. 上线时只用学生,推理方式和原来完全一样,没有额外开销。

两条路线的分工可以这样记:IDM 让学生迁就老师,在物品层面对齐;CMM 让老师迁就学生,在每一位编号上对齐。下面拆开讲。

路线一:把学生的预测拼回物品,再和老师比(IDM)

为什么需要这一步?老师说的是物品,学生说的是编号,最直接的办法是把学生的话翻译成物品。IDM 就是这么做的:每件物品的分数等于它各位编号预测分数的平均,再对全部物品做一次 softmax,得到学生眼中“下一件是哪件物品”的概率,然后用交叉熵把它往老师的概率上拉。

这样做有一个连带效果。很多物品会在某一位上共用同一个编号,比如浴巾和浴盆第一位都是 0。学生调高第一位编号 0 的分数,会同时抬高这两件物品。因为最后要在全部物品上做 softmax,抬高一批就意味着压低另一批,各位的预测被这一步绑在一起训练。IDM 直接优化的就是排序时用的那个分数,所以它更擅长把该召回的物品捞进前几名。

路线二:把老师的概率摊到每一位编号上(CMM)

另一条路反过来,把老师的话翻译成编号。CMM 的做法是:对编号的每一位,把这一位编号相同的物品概率加起来,得到这一位上每个编号的目标概率。公式只有一行:

这里 是用户历史, 是老师给物品 的概率, 是物品 第 位的编号, 就是第 位取编号 的目标概率。直觉上,它回答的是“按老师的看法,下一件物品第 位是 的可能性有多大”。

用上面的表算一下(示意):第一位是 0 的有浴巾和浴盆,目标概率是 0.50 + 0.30 = 0.80;第一位是 1 的只有口水巾,0.15;是 2 的只有充电宝,0.05。第二位就不同了,浴巾和口水巾第二位都是 1,加起来是 0.65;浴盆是 2,得 0.30。硬标签在第一位只会说“编号 0 是 100%”,CMM 则给出 0.80、0.15、0.05 这样有分寸的目标。

然后每一位都用 KL 散度把学生的预测往这个目标上拉。为什么只对齐每一位就够?衡量标准是“老师眼中完整编号的分布”和“学生各位预测相乘得到的完整编号分布”之间的 KL 散度。作者证明,这个散度里和学生有关的部分,正好等于各位 KL 散度之和;所以在学生各位独立预测的前提下,最优解就是让每一位的预测等于这一位的目标概率。CMM 直接校准每一位的预测,所以它更擅长把前几名的先后顺序排对。

为什么还要单独调蒸馏的权重?

学生最终的训练目标是“硬标签损失 + 权重 × 蒸馏损失”。这里有个容易忽略的问题:两种损失的梯度大小天然不一样。硬标签把全部误差压在一个正确答案上,软目标把误差摊在很多候选上,所以同样的权重下,两者对模型的推动力度可能差很多。

作者的做法是在训练初期先跑几批数据,每批分别算出硬标签损失和蒸馏损失对全部可训练参数的梯度,取各自的 L2 范数,用“硬标签梯度范数 ÷ 蒸馏梯度范数”得到一个比值。几批比值的中位数就是换算系数,再乘一个人为设定的强度,作为蒸馏损失的权重。这样“强度为 1”在不同数据集、不同目标上的含义大致相同,调参时不必从头摸索。此外,蒸馏损失在训练开始时权重从小逐步加大,避免学生一开始就被老师带偏。

两条路线真的有用吗?

学生模型沿用 AsymRec 的结构,一共 48 位编号,每位 256 个可选值。数据是 Amazon 2014 的 Beauty、Toys、Sports 三个品类,物品数在 1.2 万到 1.8 万之间。

对照组是同样结构、只用硬标签训练的 AsymRec,它也是表里最强的基线。下表是论文表 2 中 Recall@10 和 NDCG@10 两列,三次运行取平均:

方法Beauty R@10Beauty N@10Toys R@10Toys N@10Sports R@10Sports N@10
TIGER0.06480.03840.07120.04320.04000.0225
RPG0.07980.04540.08850.04850.04350.0249
AsymRec(硬标签)0.09400.05470.10020.05860.05730.0322
IDM0.10940.05900.11760.06380.06440.0333
CMM0.10690.05920.11440.06470.06390.0341

两种蒸馏在三个数据集上都超过硬标签训练。在 Toys 上,Recall@10 从 0.1002 提到 0.1176。这说明模型结构、编号和推理方式都不变,只是把老师的分寸加进训练目标,召回就能明显变好。

两者的分工也很稳定:三个数据集上都是 IDM 的 Recall 更高、CMM 的 NDCG 更高。这和前面讲的机制对得上,一个对齐排序分数,一个校准每一位。

消融实验回答了“到底是老师的哪部分信息有用”。只保留老师排第一的那件物品,或者把剩余概率平均摊开,效果都不如用完整分布。以 Beauty 为例,IDM 的 Recall@10 从完整分布的 0.1094 降到只用第一名的 0.1041。这说明真正起作用的是老师对各个候选的不同打分,而不只是多给了一个答案。

蒸馏强度的实验(见下方论文图 2)给了另一个信息:只要权重是正的,Recall@10 都比不蒸馏好;但 NDCG@10 在权重过大时会回落。这说明老师的信息主要帮学生找到更多合理的候选,而前几名的精确顺序仍然要靠硬标签守住,权重不能一味加大。

把两个分别训练好的学生分数各取一半相加,Beauty 上的 NDCG@10 还能到 0.0597,比单独任何一个都高。把两个目标放进同一个学生里一起训,反而没有这个效果。

论文图 2:蒸馏强度的影响。三行分别是 Beauty、Toys、Sports,左列是 Recall@10,右列是 NDCG@10,横轴是蒸馏损失的权重。Recall 在所有正权重下都比不蒸馏好;NDCG 在权重过大时会回落,Sports 上最明显。
论文图 2:蒸馏强度的影响。三行分别是 Beauty、Toys、Sports,左列是 Recall@10,右列是 NDCG@10,横轴是蒸馏损失的权重。Recall 在所有正权重下都比不蒸馏好;NDCG 在权重过大时会回落,Sports 上最明显。

我认为它的局限

第一,效果很依赖老师本身的质量。老师只用 25% 的数据训练时,Beauty 上 IDM 的 Recall@10 是 0.0934,比只用硬标签的 0.0940 还低。老师不够好,蒸馏就会帮倒忙。

第二,对老师概率的“软硬”程度敏感。用温度参数把老师概率调得更平均(温度 4,论文默认是 1)时,Beauty 上 CMM 的 Recall@10 掉到 0.0881,也低于硬标签基线。上线前要在验证集上把温度和蒸馏权重调好,不能直接照搬论文的设置。

第三,实验规模偏小。三个数据集都只有一两万件物品,IDM 每个样本都要在全部物品上算一次 softmax。物品到千万级时,这一步的成本论文没有讨论。

一个推荐团队可以怎么试

  1. 老师不必比编号模型强。论文里的 SASRec 老师单独的 Recall@10 在三个数据集上都明显低于只用硬标签训练的并行编号模型,蒸馏照样有效,所以不要用“老师单独更差”来排除蒸馏,直接拿现有序列模型试。
  2. 先试 CMM。它把老师概率按编号加总成每一位上的目标,构造目标时要遍历全部物品,但学生每一位只需在编号表上做匹配,接进现有训练比较容易。看 NDCG@10 和排序质量是否提升。
  3. 再试 IDM,重点看召回。物品很多时,可以先在一个候选子集上做 softmax,验证收益后再考虑全量。
  4. 两个都有效时,试一下分数各取一半的融合,不用重新训练,成本最低。

结论与评价

最关键的一点是:硬标签只告诉模型哪个对,老师的概率还告诉它别的候选错得有多远,而编号模型完全可以通过简单的加总或平均学到这份信息。

维度评价
问题重要性高。编号模型越来越常见,怎么复用已有序列模型的知识是很多团队都会遇到的问题
方法创新性中。知识蒸馏本身不新,新意在给出两种换算路线,并讲清了两者为什么各有所长
实验证据中。三个数据集、三次运行、显著性检验都有,但数据规模偏小,也没有线上实验
工程成本低到中。CMM 几乎不加成本,IDM 在大物品库上要处理全量 softmax
是否值得尝试值得。已经有序列推荐模型、正在上编号模型的团队,可以先用 CMM 做低成本验证

读完这篇,你觉得

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

讨论

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

正在加载讨论…