Netflix MAPS 笔记:让推荐模型「看见」素材,冷启动就不冷了
- 约 13 分钟读完 - 全文 4861 字Netflix MAPS 笔记:让推荐模型「看见」素材,冷启动就不冷了
原文:MAPS: Netflix’s Multimodal Asset Personalization at Scale 目标读者:做推荐、搜推广或 AI 应用的工程师,尤其是被冷启动、离线线上不一致折磨过的人。 阅读目标:搞清楚 Netflix 怎么用多模态向量把素材个性化的冷启动问题「绕」过去,以及那套消融实验和代理任务的方法论为什么值得抄。
〇、问题本身:素材是个不透明的 ID
Netflix 把海报、视频预览这些视觉线索统称为素材(asset),给每个会员挑哪张海报,本身就是一个个性化问题。老模型回答「老标题挑哪张图」回答得很好,但「新标题刚上线怎么办」回答得很差:模型只从历史交互里学习,每张素材在它眼里只是一个不透明的 ID,图里画了什么人、什么色调,它一概看不见。于是新剧上线时素材没有任何历史,只能加大探索流量去「刷数据」,其余时候退回人气启发式——完全不认你的口味。这就是教科书式的冷启动。
原文的解法一句话:让模型看见并听见它要推荐的东西。新素材一到手就有向量,而向量空间已经承载了会员对相似素材的偏好,所以个性化在接近上线的那一刻就能启动,不用等交互慢慢堆出来。
一、海报个性化:让模型看图
做法直接到近乎朴素:用预训练的 CLIP 把每张海报编码成一个 768 维向量,和素材原有的可学习 ID 向量拼接,作为素材的最终表示。就这一个改动。
效果的关键在于迁移:会员对「某位喜剧演员的脸」「某种配色」的偏好,本来写在图片向量空间里而不是绑死在素材 ID 上,所以新剧海报一编码完,这些偏好立刻生效——哪怕这张图从没给任何人展示过。冷启动从盲区变成了「向量空间对此早有意见」。
二、五个模型合成一个
第二个收益更工程化。同一部剧的海报要铺到五个画布上(billboard、vertical-box、horizontal-panel、short-panel、landscape-panel),裁剪比例各不相同。ID 时代的模型不知道这些裁剪图是同一幕戏,信号无法在画布之间流动,于是历史上每个画布各训一个模型,各自承受各自的冷启动。
CLIP 向量对裁剪、缩放、宽高比基本不变,同一幕戏的五个版本映射到几乎同一个向量——壁垒没了,五个模型合成一个,高流量画布学到的偏好立刻灌溉稀疏画布。收益最大的恰恰正是数据最少的画布。
合并带来一个新问题:五个画布的曝光量天差地别,直接按原始计数混训,高流量画布和高频交互类型会淹没一切,本想帮扶的稀疏画布反而最吃亏;手工调权重又换来一堆拍脑袋超参。Netflix 的做法是奖励加权:每条训练样本按其交互类型的长期奖励分(来自 Netflix 既有的长期奖励建模)加权。交互类型在各画布分布不均,按长期价值加权之后,画布配比自动重平衡——画布按「它驱动的交互的长期价值」贡献梯度,而不是按曝光量。没有手工权重,模型优化目标从「最高频的短期动作」换成了「长期会员满意度」。
flowchart TD
IMG["新海报上线"] --> CLIP["CLIP 图像编码器<br/>输出 768 维向量"]
ID["素材 ID 向量"] --> CONCAT["拼接成素材表示"]
CLIP --> CONCAT
CONCAT --> MODEL["统一模型<br/>五个画布共享"]
HOT["高流量画布<br/>billboard 等"] -->|"交互信号沿向量空间迁移"| MODEL
MODEL -->|"长期奖励加权混训"| SPARSE["稀疏画布直接受益<br/>short-panel 等"]
style MODEL fill:#fff3cd
style SPARSE fill:#e8f5e9
三、离线评估:IPS 与探索流量
这套结果能信,前提是评估干净。用当前线上策略的日志评估新模型是有偏的:线上策略偏爱某些素材,日志记录的是「策略选了什么」,不是「会员从全集里会选什么」。和线上策略意见不合的新模型会被冤枉——它会挑的曝光在日志里几乎不存在。
Netflix 用一小股随机探索流量做 IPS(逆倾向评分):随机策略按已知分布在候选素材里采样,倾向分在服务时刻精确记录,而不是事后估计。每条观测按倾向分的倒数加权,被探索流量压稀的曝光得到相应抬升,得到候选策略的无偏奖励估计。原文有句话值得划线:倾向分由构造保证已知而非事后建模,是离线数字能跟踪线上结果的最大单一原因。 候选模型必须在 IPS(相对线上基线的比值)上先赢,才配拿 A/B 流量。
四、消融实验:两个成分缺一不可
「图片向量」和「模型合并」两个想法捆在一起,Netflix 分开消融,对照老的五模型系统:V1 只加图片向量(仍是五个画布模型),V2 只合并(统一模型但纯 ID),V3 两者都要。离线指标上 ±1% 以内不算显著,V1、V2 单独做基本都在噪声带里;线上全平台跑了至少四周的 A/B 给出更清楚的分界线:V1、V2 双双不显著,只有 V3 拿到统计显著的提升——V3 就是今天线上跑的版本。
原因也讲得透:V1 告诉单画布模型素材长什么样,但稀疏画布样本太少,教不会它怎么用这条信息;V2 数据够了,但全是 ID 信号,新素材没有。V3 两者兼有,成熟画布教会共享模型「CLIP 向量如何映射到会员偏好」,这个映射直接迁移到稀疏画布。效果是相乘不是相加——V3 在 short-panel 上的提升(5.691%)超过 V1 与 V2 之和。原文的教训写得很直白:下结论「内容特征没用」之前,先找第二个阻塞因子。
真实考验来自产品侧:Netflix 十年来最大的电视首页改版,让 short-panel 一夜之间成为主战场——即将吃下最多曝光的画布恰好历史数据最少。V3 赶在改版前上线,配合一个月的 holdback A/B,核心发现指标和播放时长双双显著增长,且增幅比稳态消融更大。
五、查询感知的海报排序
浏览时你的长期口味是对的信号,搜索时不是:搜某个演员时你要的是带他的海报,哪怕你的广义口味另有指向。搜索页的意图写在 query 里,海报应当响应它。
因为 CLIP 把文本和图像投进了同一个向量空间,这件事近乎白送:直接算 query 的文本向量与素材图像向量的余弦相似度,和原有个性化分数按权重 α(0 到 1,线上 A/B 调)混合。第一项是「我们认为你喜欢什么」,第二项是「你刚开口要什么」。没有任何额外建模——向量本来就在素材表示里,排序时加一个相似度项而已。
六、视频预览:MediaFM
视频预览比静态图难:吸引力来自运动、节奏、对白、配乐,单帧说不清。第一版内容感知方案 SeqCLIP 只取各帧的 CLIP 向量求平均——看得见长相,听不见声音,而对白和音乐恰恰扛着预览片的大半调性。
补全这块的是 MediaFM,Netflix 第一个自研多模态地基模型,在 8000 万个镜头(shot)上训练,每个镜头融合三路信号成一个向量:视觉走 SeqCLIP,音频走预训练语音音频编码器,文本是字幕经大规模文本模型编码。接入方式和 CLIP 一样:把向量拼进素材表示,不需要新基建。
离线 IPS 和五周全平台 A/B 给出一致的排序:MediaFM > SeqCLIP > 纯 ID,每加一层内容感知都有收益,TV 端收益最大。音频和定时文本是 SeqCLIP 这类纯视觉编码器够不到的,这部分增量是真的。MediaFM 已作为默认视频预览向量全平台上线。
flowchart LR
subgraph FM["MediaFM 多模态地基模型<br/>8000 万镜头训练"]
V["视觉<br/>SeqCLIP 帧向量平均"] --> FUSE["融合成镜头级向量"]
A["音频<br/>预训练语音音频编码器"] --> FUSE
T["文本<br/>字幕经大规模文本模型"] --> FUSE
end
FUSE --> STORE["Embedding Store<br/>训练与推理同源 无偏斜"]
STORE --> PROBE["线性探针代理任务<br/>仅凭向量预测去偏人气赢家"]
PROBE -->|"跑赢随机猜测才放行"| AB["离线 IPS + 线上 A/B<br/>MediaFM > SeqCLIP > 纯 ID"]
style PROBE fill:#fff3cd
七、便宜地挑向量:线性探针
新向量层出不穷,端到端试验太贵——数据工程、重训、数周 A/B 流量,不可能每个候选都走全程。Netflix 用一个便宜问题把漏斗口收窄:仅凭内容向量,能不能预测一个朴素无个性化策略下哪张素材会赢?
做法:固定一批标题,用探索数据按倾向分去偏后找出每个标题的人气赢家,打成二值标签;然后只用一个线性探针从素材向量恢复这个标签(标准二值交叉熵),不带标题、演员等任何元数据。保持线性和纯向量是刻意的——它隔离出「人气驱动因子有多少真的编码进了向量」。向量若抓住了人气的语义驱动,线性分类器就该能认出赢家;抓不住,探针就和随机猜测一样,而后者正是它的及格线。
这个探针先把一大批候选剪到两个决赛选手(SeqCLIP 和最强 MediaFM 变体),再送全程评估。三条信号——探针准确率、离线 IPS、线上 A/B——对两个选手的排序完全一致,所以现在每个 MediaFM 新版本发布前都得先过探针这一关。
八、Embedding Store:让一切成立的地基
所有向量——CLIP、SeqCLIP、MediaFM——都活在 Netflix Embedding Store 里(Netflix AI Platform 的组件)。地基模型把原始素材编码成向量只做一次,Store 用同一接口喂给所有下游;关键性质是训练时和在线推理时服务的是完全相同的向量,模型学到的和线上见到的之间没有 skew。
另一个性质是解耦:新向量(或老向量的新版本)注册、回填、验证全部独立进行,不碰任何消费方的训练和推理代码,下游靠配置即可启用。CLIP 进海报模型、同一批向量撑起查询感知排序、MediaFM 滚进视频预览模型,各自是独立变更而不是跨团队迁移。下一步目标是把 Store 推向图文视频统一的语义空间,做跨模态检索和跨界面统一排序。
工程实践联想
- 冷启动的最优解常常是换表示,不是加探索。 探索流量和人气回退都是在「ID 无知」的框架里打补丁;一旦实体有了内容向量,偏好沿向量空间迁移,问题在表示层就消掉了。做实体冷启动(新商品、新文档、新用户)时先问:这个实体有没有一个下游模型读得懂的内容表示。
- 「特征没用」往往是因为别处先堵着。 V1 的失败不是图片向量没信息,是稀疏画布样本不够教模型用;V2 的失败不是合并不对,是 ID 信号对不上新素材。多因素实验里单变量不显著,先怀疑第二个阻塞因子,别急着枪毙特征。
- 评估体系的纯度比模型重要。 IPS 能跟踪线上结果,靠的是倾向分在服务时刻由构造已知——日志里事后估出来的倾向分自带一层建模误差。值得为评估专门留一股随机探索流量,这笔钱花在刀刃上。
- 用廉价代理任务给昂贵实验把关。 线性探针 + 随机基线,成本几乎为零,却和端到端 A/B 给出了一致排序。任何「候选方案多、全量验证贵」的场景(选向量、选特征、选模型结构)都该先架一道这样的探针。
- 向量服务要当成基础设施来建。 训练推理同源、版本注册回填独立、下游配置即用——这三条让「换向量」从跨团队项目降级为一次配置变更。Embedding Store 这类组件才是多模态落地真正的护城河,模型本身反而不是。
本篇小结
- 问题:素材个性化的冷启动——老模型把素材当不透明 ID,新素材只能靠探索流量和人气启发式硬扛。
- 海报:CLIP 768 维向量拼接 ID 向量,偏好沿向量空间即时迁移;五个画布模型合并为一个,混训按交互类型的长期奖励分加权,画布按长期价值而非曝光量贡献。
- 评估:专门探索流量 + IPS,倾向分服务时刻已知,离线数字才跟得上线上。
- 消融:V1(仅向量)、V2(仅合并)线上均不显著,V3(两者兼有)显著胜出,short-panel 提升 5.691% 且超过 V1+V2 之和;电视首页改版实战中 holdback A/B 证实收益更大。
- 搜索:query 文本向量与素材图像向量的余弦相似度,按 α 与个性化分数混合,零额外建模。
- 视频:MediaFM(8000 万镜头,视觉+音频+文本三模态)> SeqCLIP > 纯 ID,TV 端收益最大,已全平台默认上线。
- 方法论:线性探针代理任务廉价筛选向量,三条信号排序一致后成为 MediaFM 发版门禁;Embedding Store 保证训练推理同源、解耦上下游。
参考资料
- MAPS: Netflix’s Multimodal Asset Personalization at Scale(原文,Netflix TechBlog)。
- Radford et al., “Learning Transferable Visual Models From Natural Language Supervision”(CLIP 原始论文,文中海报向量与图文共空间的来源)。
- Netflix TechBlog 关于长期奖励建模(long-term reward modeling)与 Netflix AI Platform / Embedding Store 的相关文章(原文内引用,用于奖励加权与向量基础设施)。