Towards Generalizable and Efficient Large-Scale Generative Recommenders
Netflix Research
把“生成式推荐做大”重新定义为一个生产迁移问题:规模只是其中一环,还要看任务余量、重训成本、缓存服务时延和新品泛化。用带偏移的幂律 P(N)=P0-(N/N0)^-a 拟合各任务的天花板来判断哪里值得继续加参数,再用 1% 采样 softmax + d/8 投影解码头降训练成本、用带时间衰减的多 token 监督对齐缓存服务、用语义 item 塔 + ID 掩码处理冷启动;1B 主干在 Netflix 1M 用户影子流量上全面超过 2M 基线。
核心思路
Netflix 这篇论文不是提新架构,而是总结把生成式推荐主干从 2M 扩到 1B 参数(不含 embedding 和解码层)时遇到的问题。核心观点:规模收益不会自动迁移到下游,它取决于四件事:任务还剩多少余量、能不能按周期重训、训练目标是否匹配服务方式、新品能不能被打分。
对应四个做法:
- 带偏移的幂律
P(N) = P0 - (N/N0)^(-a)拟合每类任务的天花板 P0,判断加容量是否值得; - 1% 采样 softmax + d/8 投影解码头,降低每个周期在 2 万亿 token 上重训的成本;
- 多 token 预测(MTP):用带 1 小时半衰期的未来目标集合做监督,对齐缓存服务的时延;
- 语义 item 塔 + 协同 ID 掩码:新标题没有 ID embedding 时靠知识图谱、LLM2Vec、人工标注特征打分。
整体实现思路
模型是标准的 decoder 式生成推荐器:每个用户事件(动作 + 观测上下文 + item 元数据)压成一个 token,Transformer 编码出用户表示 h_u,再与候选标题向量 v_i 做点积打分(直接 item 打分,而非 SID 逐层生成)。论文称这样保留了与已有评估、服务链路的兼容性。
基线与规模化模型的差异(论文 Table 3):
| 维度 | 基线 | 规模化模型 |
|---|---|---|
| 主干 | 2M 参数 | 1B 参数 |
| 解码 | 全 softmax | 采样 softmax + 投影头 |
| 目标 | Next-token prediction | Multi-token prediction |
| 冷启动 | 仅 ID embedding | 语义塔 + ID 掩码 |
工程上用小到大的实验漏斗:改动先在小主干和缩放测试集上检查各任务是否回退,通过后再进 1B 训练。
子模块实现(可复现细节)
1. 任务划分与偏移幂律
| 任务 | 可预测性 | 描述 |
|---|---|---|
| Task A | 低 | 长周期口味,正例稀疏 |
| Task B | 中 | 短周期互动,依赖近期上下文 |
| Task C | 高 | 由时间、上架、大众需求驱动 |
实验控制:训练数据、评测样本、测试窗、词表、embedding 维度、解码设置都固定,只改主干大小(图上约 100K 到 1B)。按时间切分,指标用 MRR(连续且有上界 1,适合拟合天花板;论文称 test loss、HR、NDCG 趋势相同)。参数只计主干,加入 embedding/解码层后任务排序和对偏移形式的偏好不变。
拟合结果:Task A 的 P0 = 0.311,绝对值低但还有相对余量;Task B 的 P0 = 0.604,已接近观测最优,继续加容量收益小;Task C 的 P0 = 1.075,接近上界 1(超出部分是估计误差)。
| 任务 | 偏移幂律 RMSE (1e-3) | 对数线性 RMSE (1e-3) | 降幅 |
|---|---|---|---|
| Task A | 2.80 | 5.43 | 48.4% |
| Task B | 8.16 | 21.34 | 61.8% |
| Task C | 9.33 | 10.97 | 14.9% |
对数线性 P = a log N + b(HSTU 用的形式)无法表示有界指标接近天花板的弯曲。
2. 高效解码
- 采样 softmax:只算正例 + 均匀采样的 1% 负例的 logits,剔除等于目标的负例,不做 LogQ 修正。
- 投影解码头:共享线性层把 h 从 d 降到 d/8 再做 item 点积;线上是 4096 → 512。主干隐层维度不变。
- 解析估计(6 层、hidden 1024、序列长 512):词表 10^6 时普通解码 1.26e10 FLOPs/token,采样 + 投影 3.56e8,降 35.5 倍;词表 10^7 时约 249 倍。论文明确说明这是输出层解析估计,不是端到端吞吐实测。
3. 多 token 预测(MTP)
问题一,缓存过期:线上常缓存用户向量、候选或预排结果。训练标签是紧接的下一个标题 A,但服务时用户可能已看完 A,真正该推的是 B。延迟回放结果如下(相对在线的 MRR 变化,数值从 Figure 4 读取):
| 延迟 | Task A | Task B | Task C |
|---|---|---|---|
| 24h | 最多变化 4% | -31% | — |
| 48h | 最多变化 4% | -41% | -18% |
问题二,目标是集合:A 后 B 和 B 后 A 都合理,NTP 只奖励一种顺序。
损失:
L = - sum_{y_i in Y} w_i * log p_theta(y_i | x)
w_i = r_i * exp( -ln(2) * (t_i - t_context) / beta ), beta = 1 hour
Y 是未来高价值目标集合,r_i 可编码观看时长、完成度、新鲜度、多样性。用与 NTP 相同的解码头一次打分、加权多标签优化;服务时仍单次前向,不需要迭代生成。窗口大小试了 2-5 个 token。
4. 语义 item 塔与 ID 掩码(冷启动)
z_i = phi_sem(e_graph_i, e_lang_i, e_ann_i)
e~ID_i = e_ID_i if i in V else e_OOV
v_i = psi_theta(e~ID_i, z_i)
s(u, i) = g_theta(h_u)^T v_i
- 语义特征三路:标题知识图谱上消息传递得到的图特征、LLM2Vec 语言向量、人工编辑标注特征。同一份元数据既增强编码器侧的事件 token,也参与解码器侧候选向量。
- 页面、位置、国家等上下文只进用户侧,不进候选标题向量,把稳定的标题证据和临时服务上下文分开。
- 掩码训练:预训练时按线上实测冷启动率,随机把输入侧或输出侧的协同 ID embedding 换成学习到的 e_OOV,让解码器在“有 ID”和“无 ID”两种情况下都见过,学会用语义塔承担标题特异信息。
实验设置与结果
数据规模:每个训练周期 2 万亿行为 token,周期性刷新。
MTP vs NTP(相对 MRR 变化,5-token 窗口):
| 服务场景 | Task A | Task B | Task C |
|---|---|---|---|
| 48h 缓存服务 | +22.1% | +27.8% | +27.9% |
| 在线服务(p95 < 1s) | +19.6% | 随窗口增大而下降 | 随窗口增大而下降 |
结论:MTP 适合缓存或集合型目标;对严格在线、依赖新鲜上下文的 B/C 类任务应保守使用。
生产影子评测:1M 用户、一周,候选模型走与生产相同的下游集成路径但不影响用户,用同期下游标签评估。
| 切片 | 1B vs 2M MRR 相对提升 |
|---|---|
| Task A | +22.5% |
| Task B | +11.3% |
| Task C | +7.4% |
| 冷启动标题(词表外) | +28.1% |
论文另称下游多个线上 A/B 结果为正,但没有给出指标。
思考与可参考价值
- 扩展律当决策工具:电商里长期兴趣/发现类场景可能类似 Task A,余量大值得加主干;大促、时效、热门类可能类似 B/C,瓶颈更可能在目标或服务链路(推断)。先在 3-5 个规模点上拟合偏移幂律,比盲目加参数省资源。
- 缓存过期问题值得自查:如果线上用的是近线/离线缓存的用户向量或召回候选,建议先做延迟回放,看短周期任务掉多少。B 类 48h 掉 41% 这个量级提醒我们,训练目标对齐服务时延可能比加参数更划算。
- MTP 零推理成本:只改监督。电商可以把未来 N 小时内的点击/加购/购买按行为价值 r_i 和时间衰减加权(推断);但电商存在复购,“已消费即不再推”的假设不一定成立,半衰期和目标集合要重调。
- 冷启动掩码:按实测新品占比随机把 ID 换成 OOV,训练与服务路径一致,实现成本很低,可与 SID 方案叠加。
- 需要警惕:影子对比同时改了规模、解码、目标、冷启动四项,+22.5% 无法归因到规模;效率数字是解析估计;1% 采样且不做 LogQ 修正对长尾的影响没有报告;任务匿名、只有相对值、无代码,复现性弱。更适合作为工业落地清单,而非严格的定量结论。