1. 语义ID现状

生成式推荐近几年有一条很重要的路线:不再把推荐看成“从海量 item ID 中打分检索”,而是把每个物品编码成一串离散 token,也就是 Semantic ID,简称 SID。模型预测下一个物品时,不直接输出 item ID,而是像语言模型一样逐 token 生成一个 SID。

例如一个物品可以被编码为:

[21, 3, 54]

这样做有两个好处:

  1. item 空间被压缩成多级 token 空间,可以减少超大 item 表的压力。
  2. 推荐问题转变成序列生成问题,可以使用自回归解码、beam search 等生成式建模方法。

ReSID 指出了已有 SID 方案的一个根本问题:大多数方法把 SID tokenizer 当成语义压缩器,而不是推荐系统原生的预测接口

典型流程是:

物品文本/图片
-> LLM 或多模态模型提取语义 embedding
-> RQ-VAE / RQ-KMeans / Hierarchical KMeans 离散化
-> 生成式推荐模型预测 SID

这个流程看起来合理,但它隐含了一个假设:语义相似的物品在推荐中也应该相近。但很多时候这个假设并不成立。

比如“零食”和“气球”在文本语义上不相似,但它们可能在派对场景中经常被同一批用户共同购买。如果 tokenizer 只根据语义 embedding 编码,它就可能把这两个物品分得很远,从而丢掉推荐里真正重要的协同信号。

所以 ReSID 的核心问题是:

生成式推荐的 SID 应该怎样编码,才能既保留推荐任务需要的信息,又让自回归模型更容易预测?

2. ReSID 的核心观点

ReSID 的观点可以概括成一句话:

SID tokenizer 不应该围绕 LLM 语义空间设计,而应该围绕推荐任务的信息保留和序列可预测性设计。

论文把问题拆成两个阶段:

  1. E-stage:表示学习 学到一个适合推荐任务的连续 item 表示。
  2. Q-stage:量化编码 把连续表示离散化成适合自回归生成的 SID。

对应地,ReSID 提出两个组件:

FAMAE: Field-Aware Masked Auto-Encoding
GAOQ: Globally Aligned Orthogonal Quantization

整体流程是:

结构化物品特征 + 用户历史
-> FAMAE 学习推荐原生 item 表示
-> GAOQ 量化成低歧义、可预测的 SID
-> T5-style 生成模型预测下一个 SID

3. 为什么传统 SID tokenizer 不够好

论文主要指出了两类问题。

3.1 LLM 语义 embedding 和推荐目标不完全对齐

LLM 或多模态模型通常优化的是文本、图像等内容语义。它们擅长判断“两个物品描述是否相似”,但推荐系统更关心:

  • 哪些物品经常被同一用户连续交互;
  • 哪些物品处在同一个消费场景;
  • 哪些跨品类转移在行为序列中高频出现;
  • 哪些结构化属性对下一个行为有预测力。

因此,纯语义 embedding 容易出现两种错位:

语义相似,但推荐关系弱
语义不相似,但协同关系强

已有方法尝试往语义 encoder 中注入协同信号,但 ReSID 认为这会带来几何约束冲突:语义目标希望语义相近的物品靠近,协同目标希望共现或可转移的物品靠近,两者不总是一致。

3.2 传统量化没有为自回归解码优化

SID 最终是被自回归模型逐 token 预测的,所以编码本身应该“好预测”。

但常见量化方法不一定满足这个要求。

RQ-VAE / RQ-KMeans 主要优化重构误差:

连续 embedding 能不能被离散 code 还原

它们不关心:

给定前缀 code 后,下一个 code 是否容易预测

Hierarchical KMeans 虽然有层级结构,但它通常在每个父节点下局部分配 child index。于是不同父节点下的同一个 child index 可能代表完全不同的方向。

比如:

(2, 1, 5) 里的第二级 token 1
(9, 1, 7) 里的第二级 token 1

这两个 1 可能没有一致含义。对自回归模型来说,这会增加 token 的多模态歧义。

ReSID:从推荐系统视角重新设计语义ID 配图 1

4. FAMAE:推荐原生的 item 表示学习

FAMAE 的全称是 Field-Aware Masked Auto-Encoding,核心思想是:不要先把结构化推荐特征转成自然语言再喂给 LLM,而是直接在推荐系统的结构化字段上做 masked prediction

每个物品有多个结构化字段:

item_id
category
brand
price bucket
属性字段
其他 metadata 字段

FAMAE 把用户历史和目标物品放进 Transformer。对目标物品的一部分字段做 mask,让模型根据:

用户历史 + 目标物品未被 mask 的字段

去预测被 mask 的字段。

训练目标可以写成:

\(L_{FAMAE} = E[ sum_{k \ in \ M} alpha_k * (-log q_k(f_T^k | h_T)) ]\)

其中:

  • M 是被 mask 的字段集合;
  • f_T^k 是目标物品的第 k 个字段;
  • h_T 是 Transformer 在目标位置的上下文化表示;
  • q_k 是字段 k 上的预测分布;
  • alpha_k 控制不同字段的重要性。

直观解释:
如果一个表示能根据用户历史预测目标物品的结构化字段,它就更可能保留推荐任务需要的信息。

4.1 为什么不用 \(h_T\) 直接做 SID

论文有一个很重要的细节:FAMAE 训练时会产生上下文化表示 \(h_T\) ,但最终用于 SID 量化的不是 \(h_T\) ,而是目标物品各字段 embedding 的拼接。

原因是 \(h_T\) 混入了具体用户历史,它更像这个用户场景下的目标表示。SID 应该是物品本身的稳定编码,不能随用户上下文改变。

所以 ReSID 最终使用:

\(concat(e_1, e_2, ..., e_J)\)

作为物品表示,其中 \(e_j\) 是第 j 个结构化字段的 embedding。

4.2 FAMAE 的两个诊断指标

ReSID 还提出了两个用于评价 E-stage embedding 质量的指标。

第一个是协同建模能力:
把目标物品所有字段都 mask 掉,只根据用户历史预测目标 item,看 Recall 表现。

第二个是语义/结构区分能力:
只 mask item_id 字段,看其他字段能否识别 item。

这两个指标分别对应:

是否保留协同预测信息
是否保留细粒度语义结构

论文实验显示,这两个指标越好,下游 SID 生成推荐效果通常也越好。

4.3 FAMAE 到底在学什么

可以把 FAMAE 理解成一个目标物品字段恢复器。训练样本不是普通的:

用户历史 -> 下一个 item_id

而是更细的字段级任务:

历史 item 的完整字段序列 + 目标 item 的部分可见字段
-> 目标 item 被 mask 的字段

假设目标商品有这些字段:

item_id = i_123
cate1 = 家居
cate2 = 床上用品
brand = 某品牌
price_bucket = 中低价

一次 FAMAE 训练可以 mask 掉 cate2price_bucket,让模型根据用户历史和其他字段恢复:

cate2 = 床上用品
price_bucket = 中低价

也可以把所有目标字段都 mask 掉,迫使模型主要依赖用户历史去预测目标物品信息。这样它学到的不是标题像不像,而是:

什么样的历史行为会指向什么样的目标字段组合

这就是它比纯 LLM embedding 更推荐原生的原因。

4.4 FAMAE 的关键实现选择

第一,字段设计比模型结构更重要。FAMAE 假设结构化字段足够承载推荐所需信息,因此字段必须有预测价值。常见有用字段包括:

item_id
category 多级类目
brand / author / shop / creator
price bucket
tag
行为统计特征离散桶
内容主题簇

如果字段只是噪声,FAMAE 会学到错误的充分统计量

第二,mask 策略会影响表示偏向。如果经常 mask item_id,模型会更关注区分具体物品;如果经常 mask 类目、品牌、tag,模型会更关注语义和属性结构;如果把目标字段全 mask,模型更依赖用户历史,协同信号更强。

第三,字段权重 alpha_k 不是装饰项。item_id、类目、品牌、价格、tag 的重要性不一样。若 item_id 权重过高,模型可能退化成“记 ID”;若类目/tag 权重过高,模型可能只学粗粒度语义,丢掉细粒度推荐能力。

第四,FAMAE 不是端到端推荐模型。它的产物是 item embedding,不是最终排序分数。真正用于量化的是字段 embedding 的拼接,而不是用户上下文化的 \(h_T\) 。这一点能避免 SID 随用户历史变化,但也意味着 FAMAE 学到的是“全局物品编码”,不是个性化编码。

5. GAOQ:让 SID 更适合自回归预测

FAMAE 解决连续表示的问题,GAOQ 解决离散编码的问题。

GAOQ 的目标是同时优化三件事:

  1. 完整 SID 能重构 item 表示,减少信息损失。
  2. 单个 code token 自身语义稳定,减少歧义。
  3. 给定 SID 前缀后,下一级 token 更容易预测。

论文用信息论形式表达为:

\(min H(z | C) + mu * sum_l H(z | c_l) + lambda * sum_l H(c_l | C_<l)\)

可以把三项理解为:

  • H(z | C):完整 SID 对 item 表示的重构不确定性;
  • H(z | c_l):单个层级 code 的语义歧义;
  • H(c_l | C_<l):自回归预测下一级 code 的不确定性。

另外还要保持每一层 code 使用均衡,避免某些 code 塌缩。

5.1 GAOQ 的算法流程

GAOQ 基于层级聚类,但解决了传统 Hierarchical KMeans 的局部索引混乱问题。

对某一层、某个父节点下的 item 集合,GAOQ 做:

1. Balanced KMeans
   把父节点下的 item 表示分成 b_l 个平衡子簇。

2. Residualization / Centering
   用子簇中心减去父簇中心,得到相对方向。

3. Anchor Construction
   构造一组近似正交的全局 anchor 方向。

4. Hungarian Matching
   根据余弦相似度,把子簇中心匹配到全局 anchor。

5. Code Assignment
   子簇内所有 item 使用匹配到的 anchor index 作为该层 code。

最关键的是第 3 和第 4 步。
它们让不同父节点下的同一个 child index 尽量代表一致的方向。

也就是说,GAOQ 希望:

第二层 token 3

在不同一级前缀下仍然有相对稳定的含义,而不是每个父节点内部随便编号。

这会降低自回归模型的学习难度,因为 code token 的含义更 prefix-invariant。

5.2 GAOQ 和 Hierarchical KMeans 的关键差别

普通 Hierarchical KMeans 的问题不是分层本身,而是每个父节点下面的子编号是局部随意的。

假设一级聚类有两个父节点:

父节点 A:手机、耳机、充电器
父节点 B:零食、气球、纸杯

在父节点 A 下,二级编号 1 可能表示“配件方向”;在父节点 B 下,二级编号 1 可能表示“派对装饰方向”。这对树结构本身没问题,但对生成模型有问题,因为生成模型看到的 token id 是共享的。它会困惑:

c_2 = 1 到底代表什么?

GAOQ 做的事情是:每个父节点内部聚类后,不直接给子簇编号,而是先把子簇中心减去父簇中心,得到“相对于父节点的方向”,再把这些方向匹配到全局 anchor。

所以它不是要求不同父节点下的物品绝对位置相同,而是要求:

同一个二级编号在不同父节点下,尽量代表相似的相对方向

这比全局统一聚类更灵活,也更适合自回归解码。

5.3 为什么要 Balanced KMeans

SID 每一层如果 code 分布极不均衡,会出现两个问题。

第一,热门 code 太多,模型预测时容易塌缩到少数 token,候选多样性下降。

第二,冷门 code 样本少,自回归模型学不好,长尾 item 更难生成。

Balanced KMeans 的作用是让每个分支尽量承载接近数量的 item。它不是为了提升语义纯度,而是为了让 SID token 作为训练标签更稳定、更均衡。

不过这里也有代价:强行平衡可能切开天然大簇,使某些语义/协同结构被拆散。因此 branching factor 和 balance 约束强度会明显影响效果。

5.4 分支因子怎么理解

论文使用三层 SID,不同数据集的 branching factor 不同。例如 Musical Instruments 使用 (32, 40, 19),Books 使用 (256, 256, 8)

可以粗略理解为:

前两层负责粗到中粒度分组
最后一层负责在前缀下区分具体 item

分支太小,SID 容量不够,多个 item 被挤在相近 code 里,重构损失大。分支太大,下一层 token 选择空间变大,自回归预测更难。

论文在 Musical Instruments 上发现,b1 * b2 大约比 item vocabulary 小 10 到 20 倍时效果较好。这不是普适定律,但给了一个实用启发:SID 不是越细越好,它要在“容量”和“可预测性”之间找平衡。

6. 和传统方法的本质区别

可以用一张对比表理解 ReSID。

方法表示来源量化目标主要问题
TIGER文本语义 embeddingRQ-VAE 重构协同信号弱
LETTER / EAGER / UNGER语义 + 协同混合多目标 tokenization语义与协同目标可能冲突
ETEGRec端到端学习 SID推荐目标反传SID 和生成模型相互干扰,目标非平稳
ReSID结构化字段 + 用户历史信息保留 + 序列可预测更推荐原生,但依赖结构化字段质量

7. 实验设计

论文在 Amazon-2023 的 10 个子集上评估,包括:

  • Musical Instruments
  • Video Games
  • Industrial & Scientific
  • Baby Products
  • Arts, Crafts & Sewing
  • Sports & Outdoors
  • Toys & Games
  • Health & Household
  • Beauty & Personal Care
  • Books

评估指标是:

Recall@5 / Recall@10
NDCG@5 / NDCG@10

最后一个交互做测试,倒数第二个交互做验证。

很多 SID 方法用了丰富的 item metadata,而传统 SASRec 等序列模型只用 item ID,这会让 SID 方法占额外信息优势。因此 ReSID 同时比较了:

  1. 只用 item ID 的序列模型;
  2. 加入结构化 side information 的序列模型;
  3. SID-based 生成式推荐方法。

这个设置很重要,因为它试图回答:

SID 本身真的有效,还是只是因为它用了更多 side information?

8. 实验结果

ReSID:从推荐系统视角重新设计语义ID 配图 2

主实验显示,ReSID 在十个数据集上整体最强。

论文报告的平均相对提升包括:

  • 相比最好 SID baseline LETTER,Recall@5 / Recall@10 提升约 16.0% / 13.8%;
  • NDCG@5 / NDCG@10 提升约 16.2% / 14.9%;
  • 相比 TIGER、EAGER、UNGER、ETEGRec 等方法也有稳定提升;
  • 平均相对提升超过 10%;
  • 量化阶段比 LETTER 快 77 到 122 倍,比 TIGER 约快 5 倍。

消融实验也很关键:

8.1 替换 FAMAE

固定 GAOQ,把 FAMAE 换成:

  • LLM embedding;
  • SASRec representation;
  • BERT4Rec representation。

结果 ReSID 都更好。说明单纯语义表示不够,单纯协同表示也不够,关键是字段级、推荐原生、同时保留结构语义和协同预测信息的表示。

8.2 替换 GAOQ

固定 FAMAE,把 GAOQ 换成:

  • RQ-VAE;
  • Hierarchical KMeans。

结果 ReSID 仍然更好。说明有了好的连续表示还不够,量化方式必须考虑自回归解码的不确定性和 code 语义一致性。

8.3 对比

论文用 t-SNE / UMAP 比较 FAMAE、BERT4Rec、Sentence-T5 的 embedding。

观察结果是:

  • Sentence-T5 语义聚类清晰,但协同行为社区不够好;
  • BERT4Rec 能反映协同结构,但语义类别结构较弱;
  • FAMAE 同时保留语义类别结构和行为社区结构。

这支撑了论文主张:FAMAE 不是简单丢弃语义,而是把语义和协同信号放进推荐任务原生的结构化字段空间里。

9. 主要贡献

9.1 推荐 tokenizer 应该由协同预测主导

生成式推荐最终要预测用户下一个会交互的物品。因此 item 表示首先要保留协同预测信息,而不是首先服从通用语义空间。

9.2 SID 不只是压缩码,还是生成目标

SID 不是普通离散编码。它会成为下游模型的训练标签和解码目标。因此 SID 本身必须好预测。

如果量化方法只关心重构误差,而忽略 H(c_l | C_<l),就可能生成对自回归模型不友好的 code。

9.3 不依赖 LLM 反而可能更适合工业推荐

ReSID 的标题里有 “Beyond LLMs”,不是否定 LLM,而是强调:对于 SID tokenizer 来说,重型 LLM embedding 不一定是最合适、最高效的路径。

如果平台已经有丰富结构化字段和行为日志,那么推荐原生的表示学习可能更便宜、更稳定,也更贴近下游目标。

10. 未来工作

ReSID 的思路很清楚,但仍有一些值得继续追问的地方。

10.1 对结构化字段的依赖很强

ReSID 的前提是:结构化字段 F 在给定用户历史 H 时足以承载推荐所需信息。论文中这个假设可以写成:

\(Y ⊥ X | (F, H)\)

也就是原始内容 X 对目标 Y 的额外信息,可以被结构化字段和用户历史吸收。

这个假设在 Amazon 这类字段较规整的数据集上比较合理,但在真实工业场景里未必总成立。很多平台的物品信息可能存在:

字段缺失
类目体系粗糙
tag 噪声大
新物品冷启动字段稀疏
多模态内容没有被充分结构化

如果结构化字段质量不高,FAMAE 就可能学到不完整甚至有偏的 item 表示。论文没有系统分析字段质量下降时 ReSID 的鲁棒性

10.2 对多模态原始内容利用不足

论文标题强调 Beyond LLMs,这是亮点,但也带来一个问题:它主要证明“不依赖 LLM embedding 也能做好 SID”,还需要充分探索:结构化字段 + 多模态内容 + 行为信号三者如何融合。

在短视频、直播、广告推荐中,画面、音频、OCR、ASR、商品图等原始内容很重要。完全依赖结构化字段可能会损失内容细节。更合理的方向可能不是“抛开 LLM/多模态模型”,而是让它们退到辅助位置:行为信号主导、结构化字段约束、多模态语义补充。

10.3 GAOQ 缺少可独立诊断指标

FAMAE 有两个 task-aware 指标,可以在不完整训练下游生成模型的情况下判断 embedding 好不好。但 GAOQ 没有同等级别的诊断工具。

论文证明和实验说明 GAOQ 有效,但如果实际落地时想快速比较两个 tokenizer,还不够方便。我们仍然需要训练下游 G-stage 才能准确知道量化是否好。

更理想的情况是有一组 tokenizer 级别指标,例如:

每层 code 使用熵
prefix-conditional entropy
同 code 内 embedding 方差
同 code 内行为共现一致性
不同前缀下同 index 的方向一致性
目标 item 与历史 item 的 SID prefix overlap

这些指标可以帮助我们不训练完整生成模型就初筛 tokenizer。

10.4 G-stage 收敛慢的问题还没有解决

SID-based generative models 收敛速度比 SASRec 这类 item-ID 模型慢很多。对于工业系统来说,这是生成式推荐很现实的问题。

一个 item 要拆成多 token 预测
beam search 训练/推理成本高
错误会沿 SID 层级累积
长尾 code 学习信号稀疏

ReSID 改善了 tokenizer,但没有从根本上解决生成模型训练慢、解码慢的问题。

10.5 对动态更新不够友好

工业推荐里的 item 集合不断变化。如果每天都有大量新增物品,SID tokenizer 需要支持增量更新。

但 GAOQ 是全局聚类 + 全局对齐。如果新增 item 很多,可能面临:

是否重新训练 FAMAE
是否重新聚类
旧 item 的 SID 是否变化
生成模型是否需要重新训练
新旧 SID 如何兼容

论文没有详细讨论 incremental tokenization。这是落地时很关键的问题,因为线上系统通常不能频繁改变所有物品的 token。

11. 总结

ReSID 的核心思想可以压缩成一句话:

用推荐任务原生的结构化字段和用户行为来学习 item 表示,再用全局对齐的层级量化生成更稳定、更可预测的 Semantic ID。

FAMAE 解决“连续表示是否保留推荐信息”的问题,GAOQ 解决“离散 SID 是否适合自回归预测”的问题。两者合在一起,使 ReSID 不依赖 LLM embedding,也能在多个公开数据集上超过强序列推荐和已有 SID 生成式推荐方法。

这篇论文的价值在于,它把生成式推荐 tokenizer 从“语义压缩工程”提升成了一个有信息论目标、有推荐任务对齐、有解码友好性约束的系统设计问题。