先说个结论:能把多任务排序实验压到 11 天,比把这个模型本身的 AUC 再抬 0.1 个点难得多。前者是系统工程能力,后者只是算法迭代能力。今天论文速递里,YouTube 和 Spotify 这两篇恰好踩在同一个主线上——一个是把实验周期从“月级”压到“天级”,一个是把重排从“换个顺序”做成“兼顾长尾的编排”。我翻了论文里的细节,有些地方写得比较隐晦,我用自己做推荐系统的经验补了几笔,想直接抄作业的可以重点看第三章和第五章。
如果你也在做排序、召回、重排,或者正在被“实验跑两周还不出显著结果”“热门内容越推越热,长尾永远没曝光”这两个问题折磨,这篇应该能给你一些能落地的东西。
1. 两篇论文的共同信号:排序系统进入“时间战争”
1.1 为什么实验周期长短直接决定模型能跑多快
很多团队对实验周期不敏感,觉得“反正模型上线是长期收益,多跑几天无所谓”。但排序系统的迭代逻辑完全不是这样。
一个完整的排序模型迭代闭环是:离线实验 → 在线 A/B → 观察核心指标 → 决定上线或回滚 → 开始下一轮。如果一次实验需要 14 天才能拿到置信结论,一年最多迭代 26 轮;如果压到 11 天,同样是 365 天,可以跑 33 轮。看起来只差了 7 轮,但这 7 轮意味着你可以比竞争对手多试 7 个“记忆网络结构”“多任务 loss 加权方案”“用户长期兴趣表征”。在排序模型已经非常同质化的今天,谁的实验迭代快,谁就能先找到那 0.1% 的收益点。
YouTube 这篇论文没有把 11 天当成一个宣传数字,而是把它拆成了“方差缩减 + 级联实验 + 代理指标 + 实时监控”的组合拳。我读下来最大的感受是:他们不是在压缩统计需要的样本量,而是在压缩“无效等待时间”。
什么叫无效等待时间?传统 A/B 实验里,样本量是根据基线指标的方差、最小可检测效果(MDE)和显著性水平算出来的。你如果想检测 0.5% 的 CTR 提升,往往需要跑满两周才能积累足够的样本量。但这两周里,用户行为本身是有规律可循的——老用户的点击习惯、活跃时段、历史偏好,这些都是可以提前用来做方差缩减的协变量。你把这些信息利用起来,就能用更少的样本量达到同样的统计功效,本质上是把“等样本”变成了“用信息换样本”。
1.2 多任务排序为何比单目标更吃实验
多任务排序和单目标排序在实验验证上的难度完全不在一个量级。单目标排序你只需要回答一个问题:CTR 升了没有?多任务排序要回答的是:CTR 升了、时长没掉、完播率稳了、满意度没崩、长尾曝光也没恶化,这才敢上线。
YouTube 的多任务排序模型,底层是共享的 Embedding 和专家网络,上面挂着点击率、播放时长、完播率、满意度等多个任务头。共享层一动,所有任务跟着变;任务头一动,只影响对应任务。
这个结构带来的实验验证难题是:你不能只挑一个指标看。很多时候,模型改动让点击率升了 1%,但时长掉了 0.3%,这种实验你敢上线吗?大多数团队会犹豫,然后继续跑两周观察更多指标,实验周期就这么被拉长了。
YouTube 论文里给了一个很务实的解法:**把实验拆成“共享层验证”和“任务头验证”两级,每级只关注自己需要验证的任务子集,并且给每个子集设置独立的通过阈值。**共享层的改动必须看全部核心指标,但任务头的改动只需要看该任务指标 + 护栏指标。这样,很多“任务头局部优化”的实验可以在更短时间内得到明确结论,不需要等所有任务指标全部显著。
这个方法我有一个补充:任务头改动虽然不是所有任务都显著,但你不能完全不看其他任务。好的做法是设置“护栏指标”——比如时长和满意度是护栏,不要求显著提升,但绝对不能显著下降;点击率是主指标,必须显著提升。这比“所有指标都要提升”或者“只看主指标”都更务实。
2. YouTube 压缩实验周期的四条链路
2.1 不是在流量上抠门,而是在方差上抠门
这是我读这篇论文收获最大的一点。YouTube 压周期的核心不是在实验桶里塞更多流量,而是想办法让同样流量产生的指标波动更小。
他们用的就是 CUPED 的思路:用实验前一段时间的用户历史行为作为协变量,把用户之间的天然差异从实验数据里“剔除”掉。举个直观的例子:两个实验桶,A 桶里恰好分到了 30% 的高活跃用户,B 桶里只有 20%,即使模型毫不用,A 桶的 CTR 也可能天然比 B 桶高 0.3%。CUPED 就是提前告诉统计模型“这个用户本来 CTR 就高”,消除这种先验差异。
实际做的时候,CUPED 的协变量不需要很复杂。我见过很多团队拿“实验前 7 天用户的 CTR”当协变量,效果就已经很明显。更进阶一点的做法是分层:按用户活跃度分成 10 层,每层内部再算实验效应,最后按层加权汇总。论文里没细说协变量怎么选,但根据我的经验,用实验前相同行为窗口的对应指标做协变量,是性价比最高的选择,没有之一。
CUPED 带来的效果是:达到同样统计功效所需的样本量可以减少 30% 到 50%。样本量需求降下来了,同样的流量就能更快积累到足够样本,实验周期自然缩短。你也可以反着用:保持样本量不变,把 MDE 从 0.5% 缩小到 0.3%。
2.2 多任务共享塔与“先验证共享层,再验证任务头”的级联实验
我认为这是 YouTube 能把多任务实验压到 11 天的第二关键。
多任务排序的级联实验设计,简单说就是两张实验票:第一张票只改共享网络结构,比如专家网络从 8 个变 12 个、门控网络换结构,这类改动必须跑全量指标;第二张票只改某个 task tower,比如点击率任务的 loss 从 BCE 换成分桶 logloss,这类改动只验证对应任务指标加护栏指标。
级联实验的另一个好处是可以做“叠加复用”:共享层实验通过上线后,后续两个任务头实验可以同时并行,共享受控后的共享层权重。这节省的不仅是实验时间,还有模型训练的资源开销。共享层冻结、只训练任务头,训练时间能减少一半以上。
这个思路迁移到中小团队也成立。你不需要把模型做得多复杂,只需要在实验设计上区分“动底座”和“动塔尖”。动底座谨慎,动塔尖快速。
2.3 离线代理指标怎么设计才能替在线实验“背锅”
在线实验贵又慢,所以 YouTube 花了很多精力让离线代理指标变得足够可信。但这有个前提:代理指标和在线指标的相关性必须足够高,否则实验前置验证就没有意义。
他们在论文里推荐的做法是“分层验证”:离线先看 AUC、GAUC、用户满意度预测模型打分,再跑一个模拟环境(用历史日志回放模型预测结果),最后才上在线实验。在线实验的观察期也不再是傻等 11 天,而是在前两天看实时指标是否出现“异常波动”,第三天开始算主要指标,最后几天盯护栏。
我的经验是:代理指标设计最忌讳“单一指标崇拜”。比如用 GAUC 代理一切,但 GAUC 对长尾物品的曝光变化不敏感,你在离线看到 GAUC 持平,上线后发现长尾曝光崩了,这种案例我见过不止一次。多设计几个代理指标,分别对应在线核心指标和护栏指标,比追求一个“完美代理指标”靠谱得多。
2.4 11 天是“抢跑窗口”,不是传统统计意义的固定时长
论文里最容易被误读的一个点是“11 天”。很多人以为他们用了什么魔法统计公式,把实验周期强行缩短到 11 天。实际不是。
11 天是一个包含“预热 + 决策 + 确认”的完整流程。前 2 天是流量预热和实时监控,中间 5 天通过顺序检验做提前决策,最后几天是确认期,防止“显著后回落”的假阳性。他们用的是带 alpha 消耗函数的 sequential testing,而不是“到第 11 天一次性看 P 值”。顺序检验的好处是,你可以在实验进行中多次查看结果,每次查看时消耗一点显著性水平,避免传统多次查看导致的假阳性膨胀。
这个思路非常重要:你要把实验当成一个“可以中途决策的流程”,而不是一个“到点开奖的彩票”。我在自己做实验时,一般会设置三次中间检查点:实验跑满 1/4 时看一次护栏,跑满 1/2 时看主指标趋势,跑满 3/4 时做上线决策。如果提前到达显著性且护栏稳定,直接扩量上线;如果主指标趋势明显为负,提前终止,不用等满整个周期。这其实就是 YouTube 11 天的底层逻辑:实验周期不是固定的,而是“可早停、可早上”的动态流程。
3. Spotify 重排里的长尾:从“排序”到“编排”
3.1 长尾问题的本质是选择偏差,不是样本少
很多算法工程师一碰到长尾就说“样本太少,模型学不好”,然后去搞数据增强。Spotify 这篇论文给了一个不一样的视角:长尾内容的问题不只是样本少,更核心的是排序系统本身存在“马太效应”。
排序模型是在用户反馈上训练的,用户只看到被排到前面的内容,所以热门内容获得更多曝光、更多点击、更多训练样本,模型学得越来越好;长尾内容很少被排到前面,很少被看到,样本稀疏,模型学不好,于是一直排在后面。这是一个正反馈循环,而且对模型来说,它只是在完成“拟合历史反馈”的任务,并没有动机去打破这个循环。
所以单靠修改精排模型的 loss 是很难解决长尾问题的。精排模型的目标是相关性预估,把相关性分估准了,长尾内容的预估分确实可能低于热门内容——因为用户对热门内容的真实满意度可能就是更高。这时候需要重排层来做“纠偏”。
Spotify 的做法是:承认精排分数的合理性,但在重排阶段主动给长尾内容一个“曝光补贴”。这个补贴不是瞎给的,而是要回答一个问题:给长尾内容一次曝光,用户接受的概率有多高?如果用户大概率会跳过,这仍然是无效曝光。
3.2 重排层的目标空间:相关性、多样性、长尾曝光率
重排(Reranking)是排序链路里最后一道关卡。粗排和精排负责从千万级候选里筛出几百个并预估分数,重排负责在这几百个里挑选出最终展示的十几个,并且排列顺序。
为什么不让精排直接决定顺序?因为精排的目标函数通常只是“预估点击率最大化”或“预估时长最大化”,它不考虑位置之间的相互影响、不考虑内容之间的相似度冗余、不考虑一次曝光里要兼顾多少种用户兴趣。重排层就是干这个的:在精排分数的基础上,叠加多样性、长尾曝光率、位置约束等目标,最后输出一个“编排后的序列”。
Spotify 论文把重排形式化成了一个约束优化问题。目标函数大概长这样:
$$ Score(候选 i) = \alpha \cdot Rel(候选 i) + \beta \cdot Novelty(候选 i) + \gamma \cdot LongTailBonus(候选 i) $$
其中 $Rel$ 是精排模型给出的相关性分数,$Novelty$ 是候选内容与已选内容的差异度(多样性的体现),$LongTailBonus$ 是长尾补贴项,$α$、$β$、$γ$ 是权重系数。这几个系数怎么定?论文建议用离线仿真或小流量实验去搜索,而不是拍脑袋定。
3.3 MPC 思路与位置折扣下的长尾补偿
有了目标函数,怎么选择出最优序列?Spotify 用的不是全局最优解,而是贪心式序列构建:逐位选择当前最优候选,每一步都考虑“已经选了哪些内容,下一个选谁能让整体目标最大”。这本质上是最大边际相关(MMR)的变体,但加了一个很关键的改进:位置折扣的长尾补偿。
位置折扣非常好理解:第 1 位的曝光率远高于第 5 位。你给长尾内容加同样的补贴分,排在前面和排在后面效果完全不同。Spofity 的做法是,长尾补贴乘上位置衰减因子,如果长尾内容要排到第 2、3 位,需要较高的补贴额;如果只是排到第 6、7 位,补贴可以小一点。这样既给了长尾内容曝光机会,又不至于在头部位置牺牲太多用户体验。
另一个细节是“消费概率预估”。他们不是直接给所有长尾内容统一补贴,而是先预估“用户会接受这个长尾内容的条件概率”,然后补贴金额和这个条件概率挂钩。这避免了长尾内容被生硬地塞进序列头部,导致用户反感、整体指标下降。
我补充一个实操注释:如果你不想一开始就上复杂的消费概率模型,可以用一个简单规则替代——长尾内容如果与用户历史兴趣聚类有 30% 以上重叠,就允许进入重排候选池;否则只允许进入第 6 位以后的位置。等业务验证了重排层的收益,再升级成模型预估。
3.4 层次化重排:让热门内容给长尾“让路”
Spotify 这篇论文还有一个很有意思的设计:不是所有长尾内容都值得被补偿,重排层应该区分“能承担头部位置的长尾”和“只能放尾部位置的长尾”。
具体做法是两层重排:第一层保证相关性,用精排分数选出 Top 10 左右的“头部候选”;第二层做多样性编排,从剩余的长尾候选里选几个放进第 6 到第 12 的位置,并保证与头部候选的内容差异度足够大。
这样做的效果是:头部位置仍然以用户最可能点击的内容为主,尾部位置用长尾内容补齐,既满足用户体验,又增加了长尾的曝光入口。很多推荐系统的长尾曝光占比是整体曝光量的一个长尾曲线,头部长尾两极化严重——这个设计就是为了拉开中间位置的空间,而不是在头部硬塞。
实际操作中,我发现一个关键细节:长尾内容放进第 6 到第 12 位时,下一屏的曝光率会大幅下降,所以如果你想测长尾曝光收益,必须把“翻页率”也纳入护栏指标。如果长尾内容的加入让用户翻页意愿降低,那即使长尾曝光率升了,整体留存也可能受损。
4. 两套方案的横向对比与可迁移做法
4.1 实验周期优化的本质是“降低试错成本”
YouTube 和 Spotify 这两篇论文,表面上一个在做排序实验加速,一个在做重排长尾优化,但它们共享一个底层逻辑:系统能力本身就是推荐算法的杠杆。
YouTube 的 11 天实验框架,本质上把单次实验的试错成本降到了原来的三分之一以下,这让团队愿意尝试更大胆的结构改动——比如把专家网络从 8 个换成 16 个、引入新的用户行为序列建模模块,这些改动在传统 14 天实验周期下是高风险动作,因为失败一次要浪费两周;但在 11 天动态决策流程下,失败一周就能发现,团队自然更愿意冒险。
Spotify 的重排也是一样,它没有去重构精排模型,而是在精排之上加了一层“可配置的编排层”。重排层的权重调整可以快速上线、快速回滚,长尾补贴的力度可以根据实时反馈动态调节。这同样是一种降低试错成本的做法:与其重训一个精排模型来改变长尾曝光,不如在重排层加一个可调的旋钮。
我建议所有做推荐系统的团队,先盘点一下自己的“旋钮”有多少:特征开关、重排权重、多样性强约束、冷启补贴、位置折扣参数。这些旋钮越多,你的系统应对不同业务目标时的灵活性就越高,试错成本就越低,迭代速度自然越快。
4.2 重排策略的可迁移单元:约束、预算、退回机制
把 Spotify 的重排方案抽象出来,有三个可以迁移到任何系统的单元:
第一个是约束单元。长尾补贴不是对长尾内容无脑加分,而是在相关性分数之上加带权重的多样性、长尾项。你可以用规则实现,比如“每一屏最多 50% 的内容来自同一二级类目”,也可以用分数公式实现。约束的本质是给排序模型加一个“不能完全按分数排”的边界条件。
第二个是预算单元。长尾内容在最终序列里不能无限多,要有一个预算比例。比如 Spotify 论文里建议长尾内容占序列的 20% 到 30%,这个比例根据业务场景调整。预算机制的好处是防止重排层为了长尾收益把相关性完全牺牲掉。
第三个是退回机制。重排层加的长尾补贴不能是硬性的,必须设置一个“补贴上限”:如果某个长尾内容的相关性分数太低,即使补贴后进入序列,用户也不买账。你需要设定一个最低相关性阈值,低于阈值的候选不允许被补贴进入,这就是退回机制。
这三个单元单独拿出来都很容易实现,拼在一起就是一套完整的长尾重排策略。我一直觉得,重排层是推荐系统里最容易做出差异化价值的位置,因为它够轻、够灵活、够贴近最终用户体验。
4.3 中小团队能直接抄的作业有哪些
看完这两篇论文,我整理了一份可以直接抄的作业清单,按实施成本从低到高排:
- 给实验加 CUPED 协变量:用实验前 7 天的用户指标做协变量,改造量不大,但实验样本量需求能明显下降。成本:低。
- 实验加中间检查点:在实验跑到 1/3、2/3 时各设一个检查点,用护栏指标决定继续还是提前终止。成本:低。
- 设置护栏指标:一个实验只定一个主指标,同时设置两个护栏指标(比如时长、完播率或留存),护栏指标显著下降就立即终止实验。成本:低。
- 重排层加 MMR 变体:在精排结果上做贪心序列构建,加入多样性约束和长尾补贴。成本:中。
- 长尾预算控制:给重排层设置长尾内容占比预算,用规则控制头部和长尾的曝光比例。成本:中。
- 多任务级联实验:区分共享层和任务头,共享层改动全量指标验证,任务头改动子集验证。成本:高,前提是你有多任务模型架构。
这里我特别想提醒一句:不要一上来就同时做 1 到 6。前三个是“实验平台能力”,后三个是“模型策略能力”,两种能力的建设路径完全不同。先走通前三个,你会发现自己的实验迭代效率已经比同行高了半档。
5. 我的一些落地体会与提醒
5.1 别急着上复杂方案,先清点你的“评估债”
很多朋友看完论文的第一反应是:我要不要换一个更复杂的多任务结构,或者直接上一个强化学习重排模型?我的建议是,先别急。
你真正需要先做的是盘点“评估债务”:当前你的实验系统,能不能在 3 天内给你一个可信的 P 值?你有几个护栏指标的自动化监控?长尾曝光占比有没有在实验报表里体现?如果这些问题你答不上来,直接上复杂模型只会让你更痛苦——因为你不是缺一个更好的模型,你是缺一个“能快速判断模型好不好”的系统。
YouTube 能在 11 天内完成多任务排序实验,不是因为它的多任务模型结构多先进,而是它的评估体系足够完善。评估体系是地基,模型是房子。地基没打好,换再漂亮的房子结构都是空谈。
5.2 论文里的方法在自家系统上会变味的几个原因
这是我看了很多篇大厂论文后总结的:论文里给出的数字和效果,不能直接拿到自己业务里套。
第一个原因是流量规模的差距。YouTube 和 Spotify 的流量是亿级 DAU 产品,它们的模型训练样本足够多,实验桶里即便只有 1% 流量,样本量也够做显著性检验。中小团队如果只有几十万 DAU,1% 流量跑一周可能连显著性的边都摸不到。这时候你需要的不是更先进的统计方法,而是更大比例的实验流量,或者更敏感的指标设计。
第二个原因是业务目标的复杂度。YouTube 多任务排序有明确的商业目标和用户体验目标,Spotify 重排兼顾长尾有明确的产品定位。你的业务目标是什么?是提升交易额、提升播放时长还是提升内容多样性?目标不同,重排权重和实验指标设计完全不同,抄论文里的参数是没有意义的。
第三个原因是团队工程能力的差距。11 天实验周期背后是一整套自动化的实验平台:自动扩缩流量、实时监控报警、自动生成实验报告、一键回滚。如果这些你都要靠人工,不要说 11 天,11 天能跑通实验数据抽取就不错了。
5.3 最后分享一个可直接执行的压周期小技巧
如果你现在没有能力做全链路自动化,可以先做一个小改动:把实验分成“快实验”和“慢实验”两档。
快实验对应任务头级改动、重排参数调整、规则类策略改动,观察期设置为 7 天,中间设置 2 个检查点,只盯主指标和护栏指标,不要求全指标显著。慢实验对应共享层结构改动、新特征体系上线、样本采样策略调整,观察期设置为 14 天,要求全指标显著。
这样做的好处是,大部分日常实验走快通道,迭代速度直接翻倍;重要的、高风险的改动走慢通道,保证评估质量。说起来简单,但这个“分档机制”很多团队就是做不起来,因为大家习惯了所有实验一视同仁地跑两周。
我个人在实践中的体会是:实验周期从来不是一个统计问题,而是一个管理问题。只要你愿意为不同类型的改动分配不同的验证深度,并接受“快实验可能偶尔需要回滚”的代价,你的排序系统迭代速度就能肉眼可见地快起来。回滚不可怕,怕的是你在一个注定失败的方向上浪费了两周才知道自己错了。