小红书精读:Generative Search and Recommendation at Shopify
搜索推荐合成一个模型,Shopify跑通了
各位算法同学们,双塔召回先把用户历史压缩成一个固定向量,再用内积打分;Shopify 在十亿级商品目录上直接换掉了这套做法,让 LLM 生成语义ID,而且线上 A/B 有数据。它更值得看的地方在于:把搜索和推荐放进同一个生成模型之后,还能接进生产环境、满足延迟要求,而不只是“生成式检索”这个概念本身。
📄 Generative Search and Recommendation at Shopify
🔧 统一成生成语义ID:每个产品的内容 embedding 用 RQ-KMeans 量化成 3 个离散 token,码本为 8192-8192-8192。搜索 query 和推荐历史都变成“给定上下文生成目标 SID”,上下文全程留在 prompt 里,不再被压成一个向量。
🧩 训练方案更值得关注:先用目录和行为数据联合预训练得到共享表征,再用 RL 提升人工判定的搜索相关性,最后从任务专家蒸馏到统一 student;推荐变好了,而搜索没有统计上可检测的损失。
⚙️ 服务侧用多 token 预测加一个轻量 ranker,召回比自回归基线更好、延迟更低;这对做线上系统的人比模型结构更有参考价值。
📊 分词器对比:RQ-KMeans 的 OneDCG@10 是 0.3945,RQ-VAE 是 0.3518;但 RQ-KMeans 的 SID 唯一率只有 30.4%,RQ-VAE 是 69.1%。这说明唯一率不是选择 tokenizer 的硬指标,按搜索意图聚类才更关键。
📈 码本大小:32768-8192-8192 分数更高,但 100 QPS 下 p95 延迟到 50ms,最后选 8192-8192-8192 留延迟余量。
✅ 作为独立检索器,质量与 Shopify 现有多模型搜索栈相当,且满足生产延迟;接入搜索和推荐栈后,离线评估和线上 A/B 都显著提升。
我的判断:做生成式检索、统一召回,或者想把搜索和推荐合并的同学可以细看。要盯的指标是 OneDCG@10、搜索购买 Recall@10、推荐 Recall@50 和 p95 延迟,对照的是双塔召回和多模型搜索栈。风险点在于它依赖已有的高质量产品 embedding 和 LLM judge 评估协议;换业务后,需要重新验证 SID 碰撞率和 tokenizer 取舍。如果延迟预算紧,多 token 预测加 ranker 这套组合要先做压测再上线。
原文:AlphaXiv