Instacart 广告检索架构演进:从 BERT 打分到生成式 token-by-token 检索¶
📊 Level ⭐⭐⭐⭐ | 8.3KB
摘要¶
Instacart 详细阐述了其广告检索系统从传统 BERT 序列打分模型(Contextual Recommendations, CR)到生成式检索(token-by-token 生成产品 ID)的完整架构重构。这一迁移源于三大瓶颈:词汇表限制、冷启动偏差和结构漂移。新方案受 TIGER(Google DeepMind)启发,将产品 ID 编码为语义 token 序列,模型直接自回归生成相关产品,而非对候选集逐一打分。这是大规模生产系统中 generative retrieval 的真实工程案例,与 Spotify GLIDE/NEO、YouTube PLUM 等业界实践形成对照。
核心要点¶
旧方案:BERT 打分模型(Contextual Recommendations)¶
Instacart 的 CR 系统将杂货购物视为语言建模任务:原子产品 ID 作为 token,目录子集作为「词汇表」。用户实时会话(浏览、访问商品页、加入购物车)构成产品 token 序列,BERT 类 Transformer 在数百万真实购物会话上训练,预测序列中的下一个 token。这一单层检索同时驱动广告和有机推荐,覆盖所有主要浏览界面。
三大瓶颈¶
1. 词汇表瓶颈(Vocabulary Bottleneck)
CR 模型依赖原子产品 ID 作为独立 token,这定义了模型能理解和预测的边界。扩大词汇表虽然增强了上下文理解能力,但同时带来:模型体积和延迟增加、低频商品数据稀疏、目录非平稳性(新产品不断上架导致覆盖缺口持续扩大)。仅靠词汇表扩展无法覆盖目录全貌,特别是专业零售商的特色产品。
2. 冷启动障碍(Cold Start Hurdle)
训练数据基于历史购物会话的产品 ID 序列,导致模型倾向于记忆共现关系而非学习基于用户意图的泛化关联。结果是高频商品被过度推荐,而更符合当前上下文的新品牌被忽视。例如用户正在组建烧烤购物车(牛肉饼+汉堡包+生菜),系统倾向于推荐通用杂货(牛奶)而非更符合意图的新品牌调味品(芥末酱)。
3. 结构漂移(Structural Drift)
模型通过在整个产品 ID 词汇表上预测概率分布来生成候选集,缺乏内置层级结构来保持推荐聚焦。这导致偶尔出现不协调的商品组合——例如早餐主题购物车(牛奶+鸡蛋+麦片)的推荐中混入洗衣液。如果后续排序模型对这些异常产品校准不当,不协调推荐就会被推送到用户面前。
新方案:生成式检索¶
受 TIGER(Google DeepMind, NeurIPS 2023)启发,Instacart 转向生成式检索范式:模型不再对预定义候选集打分,而是直接生成下一个相关产品的语义 token。这一范式已被 Spotify(GLIDE、NEO)和 YouTube(PLUM)在生产环境中采用。
但 Instacart 的场景有独特挑战:
- 意图多样性:不同于音乐或视频平台的窄意图,Instacart 用户常在单次会话中管理高度多样的购物清单(从生鲜到清洁用品到宠物护理)
- 意图漂移:用户在购物过程中意图会动态变化
- 多零售商:用户跨多个零售商购物,每个零售商有独立的产品目录
这些挑战要求模型超越历史购买记录,同时考虑活跃购物会话的实时动态。
深度分析¶
从打分到生成:范式转换的本质¶
传统检索的「打分范式」本质上是一个判别式问题:给定查询和候选,输出相关性分数。其核心限制在于候选集的构建先于相关性判断——你只能从预定义的候选中选择,无法「创造」新的匹配。
生成式检索将问题翻转为生成式问题:给定上下文,直接输出目标产品的 token 序列。这带来了两个根本性变化:
- 模型参数即索引:不需要维护独立的向量索引或倒排索引,产品目录的知识编码在模型权重中。更新目录意味着微调模型,而非重建索引。
- 无候选集限制:理论上可以检索训练数据中出现过的任何产品,不受 ANN 搜索的近似约束。
权衡与工程挑战¶
| 维度 | BERT 打分 | 生成式检索 |
|---|---|---|
| 延迟特性 | 向量索引查找(O(log n) 或 O(1) ANN) | 自回归解码(O(seq_len)) |
| 索引更新 | 重建索引 | 模型微调或增量学习 |
| 可解释性 | 相对直接(相似度分数) | 需要额外机制 |
| 新产品处理 | 添加向量即可 | 需要训练数据覆盖 |
| 目录扩展性 | 索引规模线性增长 | 模型容量受限 |
Instacart 场景的特殊性¶
杂货购物的独特性在于意图的宽泛性和动态性。用户可能同时在为晚餐、早餐和家庭清洁用品购物,且意图随购物车内容动态演变。这要求检索模型具备:
- 多意图并行建模:同时理解用户当前会话中的多个购物子任务
- 实时上下文敏感性:购物车的每次变化都应影响后续推荐
- 跨零售商泛化:同一意图在不同零售商目录下应映射到不同产品
这些需求使得简单的序列到序列迁移变得复杂,需要在产品 token 编码、上下文注入和训练策略上做大量定制化工作。
与业界实践的对照¶
| 平台 | 方案 | 特点 |
|---|---|---|
| Google DeepMind | TIGER | 开创性工作,证明生成式检索可行性 |
| Spotify | GLIDE/NEO | 音乐推荐,意图相对窄 |
| YouTube | PLUM | 视频推荐,长序列挑战 |
| Instacart | CR → Generative | 杂货购物,多意图+多零售商 |
实践启示¶
- 架构迁移的触发条件:当现有方案的三个以上结构性限制同时出现时(词汇表、冷启动、结构漂移),应考虑范式级重构而非渐进优化
- 生成式检索的适用边界:在候选集动态变化、意图多样、需要上下文敏感匹配的场景下,生成式检索比传统打分模型更有优势
- 领域特化的重要性:直接照搬 TIGER 等通用方案不足以应对杂货购物的独特挑战,需要在 token 编码、训练数据构建和推理策略上做深度领域适配
- 渐进式迁移策略:Instacart 保持了与旧系统的兼容性,在生产环境中逐步验证和切换,这种策略对大规模系统重构至关重要
相关实体¶
→ 原文存档