Tokens are All You Need: Dual-purpose Semantic IDs for Achieving LLM-Level I/O Efficiency in Recommendation Systems
YouTube × Google DeepMind
把 Semantic ID 从“只当物品标识符”扩展为“双用途 token”:同一串 RQ-VAE 码既做协同过滤的可学习 ID 特征,又当作稠密内容 embedding 的压缩载体。训练日志里只存 K 个整数 token,模型图内用导出的 RQ 码本查表求和、再过一个轻量解码器 f_theta 即时重建内容向量(SiDec),从而绕开长用户历史上 L×d 浮点向量的落盘/join/传输 I/O 瓶颈。
核心思路
已有 Semantic ID(SID)工作基本只把 SID 当作“更好的 item ID”:替代原子 ID 做生成式召回,或者在排序里当作可学习的类别特征。本文的视角是:SID 本身是内容向量的一份有损压缩编码。RQ-VAE 训练 SID 时已经顺带得到码本和重建器,所以只要拿到 K 个整数 token,就可以在模型图里把内容 embedding 近似还原出来。
由此 SID 有两种用途(dual-purpose):
- 协同身份(Collaborative Identity):token 或 token 组合进入可学习 embedding 表,学习用户-物品交互,相似物品共享前缀,因此能泛化到冷启动物品。
- 内容重建(SiDec, Semantic ID Decoding):
ê_i = f_θ(φ(S_i)),φ 为码本查表+求和,f_θ 为轻量解码器,用来即时还原内容向量。
收益在 I/O 上:长用户历史中每个 item 不再需要在训练日志里落一份 d 维 float,只存 K 个整数。作者把这类比为 VQ-VAE/VQGAN 让 Transformer 能以处理文本的效率处理图像,标题里的 “LLM-level I/O efficiency” 也是这个意思。
整体实现思路
- 离线:用视频-语言/多模态模型产出 item 内容向量 e_i ∈ R^d,用 RQ-VAE 量化为
S_i = [t_i1, ..., t_iK],同时训练码本 C 和解码器 f_θ(重建 MSE)。 - 日志:训练样本中的候选、正在观看的视频、观看历史只记录 SID token,不再 join 稠密内容向量。
- 模型图内:每个历史 item 依次做 token 解析 → 码本 lookup+sum(φ)→ 解码器 f_θ → 得到 ê_j,再送入序列处理器(Transformer 编码器或 mean pooling)。候选同样经 SiDec 得到 q_cand 作为 attention query。
- 并行的 ID 流:同一串 token 另外经过 unigram/bigram/前缀 n-gram/SPM embedding 表,学习协同信号。
- 线上:基线模型本来就会取回并缓存 SID token,SiDec 在 serving 时只多一次查表和一个小网络,作者称训练和 serving 的额外开销可以忽略。
子模块实现(可复现细节)
1. SID 生成(RQ-VAE)
- 输入:预训练内容向量 e_i ∈ R^d。
- 输出:K 个 token,每个取自大小为 V 的码本,存储从
d × 32bit 降到K × log2(V)bit,论文称典型压缩比为 50–100×。 - 论文没有给出 K、V 的具体值,也没有说明 v0/v1 两版码本的构造差异,只知道 v0 解码到 64 维、v1 解码到 256 维潜空间。
2. 协同身份流:四种 token 特征化
| 方式 | 公式 | 特点 |
|---|---|---|
| Unigram | Aggregate({Emb_k(t_k)}) | 内存最省,不建模层级依赖 |
| 重叠 Bigram | Aggregate({Emb_{k,k+1}(t_k, t_{k+1})}),k=1..K-1 | 词表可控,捕捉跨子簇的“语义邻域”,对量化噪声更鲁棒 |
| 嵌套前缀 n-gram | Aggregate({Emb_{1:k}(t_1..t_k)}),k=1..D,D≤K | 同前缀物品共享上层 embedding,适合冷启动;k>2 时可随机哈希限制词表 |
| SPM | Emb({SPM(t_1..t_k)}) | 按数据分布自适应合并 token |
Aggregate 为求和或拼接。冷启动场景偏向前缀 n-gram/SPM(embedding 表更大),I/O 和内存优先时偏向 unigram/bigram。线上排序模型的 ID 流使用前缀 n-gram 或 SPM(沿用 Singh et al. 2024 的做法)。
3. SiDec 内容流
φ:静态码本查表+求和,码本直接从 SID 生成模型导出。f_θ:MLP 或浅层 Transformer,在 SID 生成阶段以L_rec = Σ_i ||e_i − f_θ(φ(S_i))||²训练。- 在推荐模型中有三种用法:冻结、以小学习率微调(与任务对齐),或取恒等映射直接使用码本潜向量。消融显示去掉 f_θ 时 CTR AUC 只降 0.01 个百分点。
- 解码器的层数、宽度和重建误差,论文都没有报告。
4. 在排序/检索模型中的集成
- 排序:用 SiDec 解码三类 SID 特征:候选视频、当前观看视频、观看历史。历史聚合方式为
u_history = Attention(q_cand, ê_j1, ..., ê_jL)。 - 检索:类 SASRec 的自回归 Transformer,使用相对位置注意力。SiDec 只用在观看历史上,解码向量与其他用户/物品特征拼接后输入。
- I/O 账:L=200、d=256 时,每条样本要摄入 51,200 个 float(FP32 约 200KB);改用 SID 后每个 item 只需 K 个整数。
5. 评测协议
离线实验采用固定 step 预算:各实验臂吞吐不同,按时间训练会让快的臂看到更多数据,固定 step 可以排除这一混杂。指标为收敛时的交叉熵 loss、HR@100(检索)、CTR AUC(排序)和训练速度 steps/s。
实验设置与结果
离线:检索模型上的质量-吞吐权衡(Table 2)
| 实验臂 | 内容表示 | Loss@收敛 ↓ | HR@100 ↑ | steps/s ↑ |
|---|---|---|---|---|
| Control | 无内容向量 | 2.766 | 0.2811 | 16.80 |
| Arm 1 | 原始 64 维稠密向量 | 2.723 | 0.2844 | 12.07 |
| Arm 2 | SID v0 码本解码(64 维) | 2.764 | 0.2816 | 15.41 |
| Arm 3 | SID v1 码本解码(256 维) | 2.758 | 0.2870 | 15.26 |
| Arm 4 | SID v1 + Transformer 扩容 | 2.681 | 0.2910 | 14.53 |
- 直接喂稠密向量使吞吐下降 28.2%(16.80 → 12.07)。
- Arm 2 吞吐恢复到 15.41(比 Arm 1 高 27.7%);Arm 3 的 HR@100 超过 Arm 1,但 loss 仍明显高于 Arm 1(2.758 vs 2.723)。
- Arm 4 加了参数仍比 Arm 1 快 20.4%,loss 和 HR 都是最优。但它对比的是未扩容的 Arm 1,论文没有 “Arm 1 + 同等扩容” 的对照。
消融:排序模型 CTR AUC 变化(绝对百分点,基线为完整双流)
| 消融(Table 3) | ΔCTR AUC |
|---|---|
| 只做 Candidate & Watch SID 的 SiDec | -0.04% |
| 只做 Watch History SID 的 SiDec | -0.03% |
| 去掉轻量解码器 f_θ | -0.01% |
| 消融(Table 4) | ΔCTR AUC |
|---|---|
| 去 SSL(watch 与 candidate 的对比损失) | -0.05% |
| 去 Cross Attention | -0.08% |
| 去多模态内容表示 | -0.06% |
作者的解读是:主要收益来自观看历史(item 多,最能体现 I/O 优势);f_θ 只锦上添花;SiDec 要和对比学习、cross attention、多模态表示配合才能发挥全部效果。
线上:YouTube 全量部署(Table 1,Online Satisfied Engagement)
| 应用 | SID 特征 | 线上提升 |
|---|---|---|
| Watchpage 排序 | 当前观看、候选、观看历史 | +0.09% sitewide,+0.80% watchpage |
| Homepage 排序 | 候选、观看历史 | +0.08% sitewide,+0.22% homepage |
| 召回模型 | 观看历史 | +0.06% sitewide,+0.13% homepage,+0.09% watchpage |
线上基线已经包含 SID token embedding(协同身份流),表中增益只来自新增的 SiDec。论文称对稀疏历史的新用户和长尾内容收益更大,但没有给出分群数字。
思考与可参考价值
值得借鉴的点
- 把 SID 当作特征传输的压缩格式。电商场景中,用户行为序列(点击、加购、成交)往往长达数百到数千,每个商品挂一份多模态向量会让样本宽表急剧膨胀。如果商品已有 RQ-VAE SID,用码本重建代替向量 join,几乎不增加工程量,是现有 SID 资产的一次“二次利用”。
- ID 流和内容流可以并存。前缀 n-gram/SPM 负责记忆,SiDec 负责内容泛化。论文证明在已有 SID ID 特征的基线上,只加 SiDec 仍有线上增益,说明两者互补。
- 优先用在长历史侧。消融显示主收益来自 watch history,落地时可以先从用户序列侧做起。
- 固定 step 预算的评测方法,对任何会改变吞吐的特征改动都适用。
采用前需要核实
- 重建保真度:论文没有给重建 MSE 或检索保持率,自己需要测量 ê 与原向量的余弦相似度、近邻 recall。Arm 3 loss 高于 Arm 1,说明确实存在信息损失。
- 码本版本一致性:SID 和码本一旦重训,历史日志中的旧 token 和新码本就对不上(作者把这一点列为 future work),需要规划版本管理。
- 细粒度信号:价格、规格这类细节在 3–4 层 RQ 之后是否还能保留(推断:电商商品同质化高,粗粒度码本可能把相似 SKU 压成同一个向量)。
- I/O 是否真的是瓶颈:如果内容向量已经在参数服务器侧缓存、按 ID 查询,收益主要体现在日志存储,而不是吞吐(推断)。
- 增益量级:YouTube 线上 sitewide 只有 +0.06%~+0.09%,离线 AUC 变化都在 0.1 个百分点以内。这更适合作为一次“降本 + 小幅提效”的改动,不宜期待大幅提升效果。
总体判断:概念上的转变(SID = 可解码的压缩特征)很有价值,工程上也近乎零成本;但论文是 4 页短文,超参、重建误差和公平对照都缺失,复现时需要自己补齐这些实验。