1. 研究背景与动机¶
传统推荐系统依赖 per-user/per-item 的原子 ID(atomic IDs),每个用户或物品分配一个唯一离散 token 并映射到一个可学习的 dense embedding。这种方式面临三大挑战:
- 参数爆炸:用户和物品数量巨大,embedding table 规模庞大
- 冷启动问题:新用户/新物品没有 embedding table 入口,无法生成表示
- 长尾泛化困难:热门 ID 获得大量梯度更新,embedding 学习充分;尾部 entity 的 embedding 因稀疏监督而欠训练
Semantic IDs(SIDs)作为替代方案被提出:SID 是一个有序离散 token 序列,由 tokenizer(如 RQ-VAE)通过残差量化从 foundation model 或协同信号的语义表示中生成。SID 具有远小于原子 ID 的基数,并在 ID 空间中诱导语义聚类。
本文聚焦 Snapchat 大规模应用 SID 的工业实践,涵盖 SID 作为排序模型辅助特征、作为生成式检索目标两大场景,详述遇到的技术挑战和设计选择。
2. 预备知识:RQ-VAE Tokenizer¶
论文以 RQ-VAE 为核心 tokenizer 进行介绍。给定物品 $i$ 的语义特征 $x_i$,使用模态编码器 $\phi(\cdot): x \to \mathcal{R}^d$ 得到隐表示 $\mathbf{h}_i \in \mathcal{R}^d$。
RQ-VAE 表示为 $\text{RQ-VAE}(\cdot; \theta): \mathcal{R}^d \to \{0, 1, \ldots, K-1\}^L$,其中 $K$ 为每层 codebook 的 code 数,$L$ 为 codebook 层数,$\theta$ 为模型参数(编码器、解码器)。
编码过程:编码器 $\text{Enc}(\cdot): \mathcal{R}^d \to \mathcal{R}^n$ 将 $\mathbf{h}_i$ 转换为中间 embedding $\mathbf{h}_i^0$(即第 0 层残差之前的表示),$n$ 为 RQ-VAE 隐维度。
第一个 SID code:
$$\text{sid}_0 = \mathop{\arg\max}_{c \in \{0,1,\ldots,K-1\}} \|\mathbf{h}_i^0 \cdot \mathbf{C}_0[c]\|_F, \quad \text{with } \mathbf{h}_i^0 = \text{Enc}(\phi(x_i))$$
后续层通过残差量化获取:
$$\text{sid}_l = \mathop{\arg\max}_{c \in \{0,1,\ldots,K-1\}} \|\mathbf{h}_i^l \cdot \mathbf{C}_l[c]\|_F$$
其中残差 $\mathbf{h}_i^l = \mathbf{h}_i^{l-1} - \mathbf{C}_{l-1}[\text{sid}_{l-1}]$。
解码/重建:
$$\hat{\mathbf{h}}_i = \text{Dec}\Big(\sum_{l \in \{0,\ldots,L-1\}} \mathbf{C}_l[\text{sid}_l]\Big)$$
RQ-VAE 使用重建损失 + commitment loss 联合训练。
3. 技术挑战与设计选择¶
3.1 Challenge 1: Codebook Collapse¶
问题:训练 RQ-VAE tokenizer 时,模型仅使用 codebook 中少数几个 code,大部分 centroid 成为"死"节点永远不被选中。原因:
- 标准 RQ-VAE 中量化使用 arg max 操作,梯度仅回传到被选中的 centroid
- 稀疏更新导致对初始化状态高度依赖,频繁导致大量 centroid 从未被选中
- 单一 embedding 来源(如仅用文本)产生的输入方差较低,加剧 collapse
解决方案一:Straight-Through Estimator (STE) 优化
修改重建公式(Equation 3),通过 STE 使梯度回传到整个 codebook:
$$\hat{\mathbf{h}}_i = \text{Dec}\Big(\sum_{l \in \{0,\ldots,L-1\}} \mathbf{C}_l[\text{sid}_l] + \text{sim}(\mathbf{h}_i^l, C_l) \cdot C_l - \text{sg}[\text{sim}(\mathbf{h}_i^l, C_l) \cdot C_l]\Big)$$
其中 $\text{sim}(\mathbf{h}_i^l, C_l) \in \mathcal{R}^K$ 为残差与第 $l$ 层 codebook 所有 centroid 的余弦相似度,$\text{sg}(\cdot)$ 为 stop-gradient 操作。这样 loss 可以通过赋值机制反传到所有 code,促进整个 codebook 的持续更新,显著降低 collapse 风险。
解决方案二:多模态 Embedding 融合
工业 RecSys 中物品通常具有丰富异构特征(文本描述、视觉内容、类别元数据等)。仅依赖单一 embedding 源产生的方差较低,使 RQ-VAE 需要更少的 centroid 即可重建,加剧 collapse。
融合方式:汇聚多个预训练 embedding 为统一连续表示,再输入 tokenizer:
$$\mathbf{h}_i = \sum_{m \in M} \text{Enc}_m(x_m), \quad \hat{\mathbf{h}}_{i,m} = \text{Dec}_m\Big(\sum_{l \in \{0,\ldots,L-1\}} \mathbf{C}_l[\text{sid}_l]\Big)$$
多模态信号的高方差和拓扑复杂性迫使量化过程覆盖更宽的流形,最小化重建损失。
3.2 Challenge 2: SID-to-Item Resolution¶
在生成式检索(GR)场景中,SID 将语义相似的物品映射到相同离散 token 序列(collision),需要解决从 SID 到具体单个物品的"落地"问题。
方案一:Heuristic-based Intra-code Disambiguation
当一个 SID 对应多个物品时,不将所有物品视为等权,而是利用 item-level 元数据进行二次排序:
- 在视频检索场景中,利用历史相关性指标(累计播放时长)或时间新鲜度来优先排序
- 这种两阶段方法让生成模型负责语义类别识别,轻量启发式方法负责精确定位
方案二:Retrieval Depth over Breadth
GR 模型推理时通过 beam search 或采样输出一组候选 SID。实际发现:集中从少数 top-ranked SID 中取出更多物品(depth)显著优于从大量候选 SID 中各取少量物品(breadth)。这说明模型对其 top-ranked 预测具有高置信度和准确性。
4. 实验¶
4.1 SID 作为辅助特征¶
将 SID 作为辅助分类特征融入标准排序和检索架构。在 Snapchat 多个业务中测试:
Table 1: SID 作为辅助特征对不同 Ranker 离线 AUC 的提升¶
| Metrics | Improvements |
|---|---|
| Ads Ranking | |
| Swipe up (goal-based bidding) | +0.028% |
| Landing page view (goal-based bidding) | +0.035% |
| Dynamic Product Ads Ranking | |
| Add to cart | +0.67% |
| Average improv. cross all heads | +0.24% |
结论:在 Ads Ranking 中,SID 辅助特征在 Swipe Up 和 Landing Page View 指标上分别带来 +0.028% 和 +0.035% 的 AUC 提升(0.01% 即被视为显著)。在动态商品广告(DPA)中提升更大,Add to Cart 提升 +0.67%,这归因于 DPA 面临广告主商品快速流转的冷启动问题,SID 的语义泛化能力在此场景优势更明显。
Table 2: GraphHash SID 在 Friending 场景的在线提升¶
| Ranker Models | metrics | online improv. |
|---|---|---|
| Find Friends | relevance | +1.77%, +4.90% |
| Friending Registration | neg. action | -5.13%, -3.17% |
| Display Name Search | feature use | +1.55%, +12.43% |
结论:GraphHash 将超过 9 亿原始用户 ID 压缩为 SID 表示,使模型能更好地外推协同过滤信号。在 Find Friends 中 relevance 显著提升(+1.77%、+4.90%),负面行为(如屏蔽/删除)显著下降,Display Name Search 的功能使用率大幅上升(+12.43%)。
4.2 SID 在生成式检索中的表现¶
将短视频推荐中的原子 ID 替换为 SID,训练序列推荐模型自回归生成 SID 序列。
Table 3: 短视频生成式检索的离线指标(Recall/NDCG)¶
| Model Variant | R@5 | R@10 | N@5 | N@10 |
|---|---|---|---|---|
| Seq. Length = 120 | Baseline | Baseline | Baseline | Baseline |
| Seq. Length = 240 | +13.7% | +8.3% | +8.2% | +6.5% |
| Seq. Length = 480 | +31.5% | +16.7% | +26.5% | +22.2% |
结论:更长的用户行为序列(从 120 增至 480)带来巨大的检索精度提升,R@5 提升 +31.5%,N@5 提升 +26.5%。这表明 SID 的层次化共享结构使得序列模型能更好地利用长历史。
Table 4: 短视频在线 A/B 测试(序列长度 480)¶
| Metrics | Improvements (%) |
|---|---|
| Random Item Mapping (10 per SID) from Top 100 SIDs | |
| Short-form video view | Neutral |
| Random Item Mapping (100 per SID) from Top 10 SIDs | |
| Short-form video view | +0.13% |
| Relevance-guided Mapping (100 per SID) from Top 10 SIDs | |
| Short-form video view | +0.57% |
| Short-form video send | +2.54% |
| Short-form video share | +4.39% |
| Short-form video re-post | +3.55% |
结论:在线实验验证了 depth-over-breadth 和 relevance-guided disambiguation 的有效性。Random mapping 从 top 100 SID 各取 10 个物品效果中性;改为 top 10 SID 各取 100 个则 video view +0.13%。引入 relevance-guided mapping 后效果显著提升:video view +0.57%、send +2.54%、share +4.39%、re-post +3.55%,说明 intra-bucket 消歧策略对高意图用户行为(分享、转发)提升尤为明显。
4.3 SID 质量评估:Uniqueness 是否为金标准?¶
Table 5: Amazon Beauty 数据集上 SID Uniqueness 与 GR 性能¶
| Codebook Shape | Uniqueness | Recall@10 |
|---|---|---|
| 1024 × 1024 × 1024 | 92.95% | 6.1 |
| 512 × 512 × 512 | 91.79% | 6.2 |
| 256 × 256 × 256 | 81.65% | 6.1 |
| 128 × 128 × 128 | 70.58% | 6.0 |
| 64 × 64 × 64 | 65.40% | 5.8 |
结论:Uniqueness(唯一使用的 SID 占总物品数的比例)是业界广泛采用的 SID 质量指标。然而实验揭示了非线性关系:当 uniqueness 极低时(趋向 collapse),提升 uniqueness 确实有助于 GR 性能;但超过约 70% 的阈值后,性能增益趋于饱和。因此 uniqueness 不应被视为质量的金标准,而应作为 collapse 的健康度检查。
Table 6: 不同处理对内部数据 SID Uniqueness 的提升¶
| Treatment | Uniqueness Improvement |
|---|---|
| Clip embedding with RQ-VAE | Baseline |
| + RQ-VAE with STE | +83.4% |
| + Multi-modal embedding | +23.7% |
| + Audio embedding | +11.2% |
| + Transcript embedding | +4.7% |
结论:STE 优化贡献最大(+83.4%),多模态 embedding 融合进一步叠加提升。每增加一种模态(多模态 → 音频 → 转录文本),uniqueness 持续增长但边际递减,符合预期——更多模态增加输入方差,迫使 codebook 利用更多 centroid。
5. 核心贡献总结¶
- 工业规模验证:在 Snapchat 多个场景(广告、内容、社交、搜索)大规模部署 SID,离线和在线均取得显著提升
- 技术改进:提出 STE 优化和多模态 embedding 融合有效缓解 codebook collapse
- SID-to-Item Resolution:提出 heuristic intra-bucket disambiguation + depth-over-breadth 策略解决 GR 中的 collision 问题
- 质量评估反思:揭示 uniqueness 与下游性能的非线性关系,挑战了将 uniqueness 作为 SID 质量金标准的普遍假设
- 开源:发布优化后的模型架构和训练实现(github.com/snap-research/GRID)