将 Pinterest 想象成一个巨大的、繁忙的图书馆,里面有数十亿本书(Pins)。当你走进这个图书馆时,它需要非常快速地完成两件事:
- 检索 (Retrieval): 扫描整个图书馆,找出几千本可能让你感兴趣的书。
- 排序 (Ranking): 仔细阅读这几千本书的摘要,并将它们按完美的顺序排列,呈现给你。
旧方法:两位不同的图书管理员
长期以来,Pinterest 使用了两个不同的“图书管理员”(AI 模型)来完成这些工作。
- 图书管理员 A(检索): 是一个速度达人。他们扫描整个图书馆的速度极快,但并不深入阅读书籍。他们只是抓取了一大堆潜在的匹配项。
- 图书管理员 B(排序): 则是一位细心的读者。他们接过那一堆书,仔细阅读每一本书,并进行完美排序。
问题所在: 这两位图书管理员都在阅读关于你过去行为的完全相同的笔记(你点击了什么、保存了什么或隐藏了什么)。他们都在分别进行“记忆”你历史记录的繁重工作。这就像雇佣了两个人去背诵同一本电话簿,仅仅是为了制作两份不同的清单。这浪费了金钱、计算能力和时间。
新方案:UniPinRec(超级图书管理员)
这篇论文介绍了一个名为 UniPinRec 的单一“超级图书管理员”,它能同时完成这两项工作,使用同一个大脑、一套笔记和一个工作流。
以下是他们如何通过三个聪明的技巧让这一切运作起来:
1. “掩码动作”技巧 (MAM)
通常,“检索”图书管理员只看你喜欢的物品列表。“排序”图书管理员则需要知道你对这些物品做了什么(你是点击了?还是保存了?还是隐藏了?)。
- 旧问题: 如果你把“你做了什么”混入列表中,会干扰检索图书管理员的速度。
- UniPinRec 的解决方法: 他们使用了一种“掩码 (Masking)”技术。想象图书管理员有一份你的历史记录。他们在标明“你做了什么”的部分上贴了一张便利贴将其遮盖。
- 图书管理员学会了根据物品来推测你做了什么。
- 这使得图书管理员既能学习如何寻找物品(检索),又能学习如何评判物品(排序),而不会让列表变得过长或过于混乱。这就像是在练习开车的同时练习停车,并且在踩着手刹的情况下进行练习。
2. “共享记忆”技巧 (KV Cache Reuse)
这是最大的加速器。
- 旧问题: 当“排序”图书管理员开始工作时,他们必须从头开始重新阅读你的整个历史记录,以了解你是谁。
- UniPinRec 的解决方法: “检索”图书管理员先完成了阅读你历史记录的重活。他们并没有把这些笔记扔掉,而是将它们交给了“排序”图书管理员。
- “排序”图书管理员不需要重新阅读历史记录;他们只需要看第一位图书管理员已经写下的笔记。
- 类比: 这就像一位厨师切好了所有的蔬菜(检索),然后将碗递给副厨师,副厨师只需添加调料(排序)。副厨师不需要重新切一遍蔬菜。这节省了大量的时间。
3. “混合训练”技巧
他们没有先训练模型成为一个“查找者”,然后再训练它成为一个“排序者”,而是训练它同时具备这两项能力。
- 他们向模型输入了既包含“你喜欢的历史记录”又包含“你看到但未点击的列表”的示例。
- 这教会了模型:因为它知道了如何评判物品,所以它成为了一个更好的“查找者”;同时也因为它知道了如何寻找合适的物品,所以它成为了一个更好的“评判者”。
结果:更快、更聪明、更便宜
当他们把这位“超级图书管理员”投入到真实的 Pinterest 应用中时,结果令人印象深刻:
- 更好的推荐: 用户保存了更多的 Pin,也打开了更多的通知。系统找到了更好的内容,因为“查找者”和“排序者”之间能够互相交流。
- 更快的速度: 因为停止了重复阅读用户的历史记录,系统的整体速度提升了 11%。
- 更大的容量: 系统可以在不减速的情况下,同时处理多出 63% 的用户。
总结
UniPinRec 就像是将两个独立的部门合并为一个高效的团队。通过共享同一个“大脑”(模型)、同一套“笔记”(用户历史记录)以及同一个“工作流”,Pinterest 节省了计算成本,让应用对用户来说变得更快,并向人们展示他们真正想要看到的内容。他们并没有更换整个图书馆系统,他们只是让现有的图书管理员完美地协同工作。
技术摘要:UniPinRec
问题陈述
现代工业级推荐系统(如 Pinterest 的系统)通常以多阶段漏斗的形式运行,其中召回(Retrieval)和排序(Ranking)被训练为独立的模型。尽管这两个阶段都越来越多地依赖大型 Transformer 主干网络来编码相同的用户行为数据,但这种分离造成了显著的冗余。当前的范式导致了参数、训练计算和推理成本的重复,因为召回和排序无法共享学习到的信号或模型权重。虽然之前的研究尝试过统一模型架构(例如 HSTU、OnePiece),但这些方法往往无法实现全链路的统一。它们在输入格式、训练流程和推理栈方面仍然是碎片化的,或者依赖于端到端的生成式方法来取代整个漏斗,这使得与现有候选源的集成以及操作控制变得困难。
方法论
作者提出了 UniPinRec,这是一个实现了召回与排序全栈统一的系统。该方法将输入格式、模型架构、训练和推理基础设施集成到一个统一的、连贯的流水线中,并部署在 Pinterest 现有的生产环境中。该方法依赖于三个核心技术创新:
掩码动作建模 (Masked Action Modeling, MAM):
为了使单个模型能够同时服务于召回(下一项预测)和排序(动作预测),且不增加上下文长度或破坏输入兼容性,作者引入了 MAM。
- 架构: 不同于将动作 Token 插入项目之间(这会增加序列长度),动作被编码为与项目表示沿特征维度拼接的稠密嵌入(Dense Embeddings)。
- 掩码机制: 在训练期间,用户历史中的动作会被以概率 pmask 进行随机掩码。在推理时,未来的动作总是被掩码。这使得模型能够在用于召回(下一项预测)的相同非交错序列上学习动作预测目标(排序)。
- 注意力模式: 系统使用了一种改进的因果掩码(M-FALCON 模式),其中候选位置可以关注过去的所有历史,但彼此之间互不关注。这使注意力复杂度从 O((n+k)2) 降低到 O(n2+nk),并实现了高效的 KV 缓存共享。
混合训练与联合损失 (Blended Training and Joint Loss):
系统构建了统一的训练样本,将用户的历史交互历史与未来的信息流视图(Feedview Impression Slate,包含负反馈结果)进行配对。
- 数据基础设施: 基于 Ray 的训练内连接(In-trainer join)合并了用户历史和信息流视图的独立 Iceberg 表,避免了数据重复,并允许灵活的采样比例。
- 目标函数: 模型使用联合损失函数进行训练:L=Litem+Laction。
- Litem:用于下一项预测(召回)的采样 Softmax 损失。
- Laction:用于预测掩码位置特定动作类型(点击、保存、隐藏)的二元交叉熵损失(排序)。
- 这种联合优化使得项目嵌入器(Item Embedder)能够同时从两个任务中学习,相比于顺序预训练和微调,提高了泛化能力。
跨阶段 KV 缓存共享 (Cross-Stage KV-Cache Sharing):
为了解决推理效率问题,UniPin-Rec 实现了用户历史编码在不同阶段的复用。
- 机制: 召回阶段对用户历史进行编码,并将生成的键值(KV)缓存存储在预分配的 GPU 内存池中。排序阶段作为一个独立的进程运行,映射这段相同的 GPU 内存,并在无需重新编码的情况下复用缓存的历史信息。
- 效率: 这将排序阶段从完整的正向传播(O(n2))转变为增量解码步骤($O(nk)),其中n是历史长度,k$ 是候选数量。
- 实现: 系统使用 NVIDIA Triton 进行推理服务,并配合 Faiss 进行近似最近邻(ANN)查找。Faiss 索引不仅返回候选 ID,还返回其预计算的嵌入,从而消除了排序阶段在获取嵌入时的额外开销。
核心贡献
- 全栈统一: UniPinRec 是首个在生产推荐系统中实现输入、模型、训练和推理基础设施全栈统一的系统。它用一个统一的生成式解码器取代了两个独立的模型。
- 高效架构: 通过引入 MAM 和非交错序列,系统实现了完全的权重共享和参数效率,且没有增加上下文长度。
- 推理优化: 跨阶段 KV 缓存共享机制通过避免重复的用户历史编码,显著降低了总 FLOPs 和延迟。
- 操作兼容性: 该设计是一个“即插即用”的替代方案,可以与现有的候选生成器(如关键词、热点)组合使用,并允许对各阶段进行独立的 A/B 测试和回滚。
结果
该系统已部署在 Pinterest 的核心页面中,取得了以下结果:
- 线下性能: UniPinRec 达到了生产级召回模型的 Recall@10 指标,同时相比于专门的生产排序模型(TransAct V2 + DCNv2),其排序 Hit@3 提升了 14.8%。它还优于 HSTU 和经过微调的 PinRec 基准模型。
- 推理效率: 与朴素的分离部署相比,统一方法降低了 11.1% 的端到端推理延迟,并将每秒查询数(QPS)提升了 63.6%。仅 KV 缓存复用一项就为排序过程带来了约 2.4 倍的加速。
- 在线参与度: 在“更多灵感板”(Board More Ideas)和“通知”(Notifications)页面的 A/B 测试中:
- 更多灵感板: 实现表面保存量(Surface Saves)+0.95% 的提升,以及全站保存量 +0.08% 的提升。
- 通知: 实现推送打开率(Push Opens)+0.91% 的提升,针对沉睡用户提升了 +1.72%,以及周活跃用户数(WAU)+0.09% 的提升。
意义
论文指出,UniPinRec 证明了在生产环境中解决“更难的问题”——即统一输入格式、训练和推理基础设施——是可行的。通过超越架构层面的统一,迈向全栈统一,该系统消除了两次编码用户历史的冗余,降低了成本,并通过信号共享提升了模型质量。作者将其定位为工业系统采用生成式检索与排序的一种务实的、增量式的路径,而无需牺牲操作灵活性或对整个推荐漏斗进行彻底重构。未来的工作包括将此统一扩展到 L2 排序阶段以及搜索和广告等其他场景。
每周获取最佳 machine learning 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。