为什么 Netflix 放弃了手工构建的特征

在发展的大部分时间里,Netflix 的推荐流水线依赖于数千个手动定义的属性——即描述用户、片名以及他们之间每一次交互的数值向量。工程师们需要花费数周时间,将新的内容类型(如体育直播、播客或游戏)转化为一套全新的特征,系统才能开始进行推荐。这个过程成本高昂、系统脆弱,且难以与内容库的快速扩张保持同步。

现成的 LLM 无法开箱即用。它们倾向于推荐最热门的内容,偶尔会产生不存在的项目的“幻觉”,并且难以执行确保推荐安全且相关的业务规则。因此,Netflix 构建了一套定制的基于 LLM 的流水线,在保留语言模型优势的同时,兼顾了生产环境的约束。

GenRec 详解:两阶段训练流水线

GenRec 由两个不同的阶段组成:

  1. 基座模型微调 – Netflix 从一个开放权重的语言模型开始,利用内部观看数据对其进行微调。这让模型学习内容库的词汇和用户行为模式,而无需改变其核心架构。
  2. 推荐排序 – 第二轮训练将微调后的模型转变为一个排序器,为特定用户对候选片名进行评分。Netflix 会频繁更新这一阶段,使模型能够紧跟新片发布和趋势变化。

与传统系统的关键区别在于用户历史记录是如何输入模型的。GenRec 不再将观看会话压缩为稠密向量,而是将每一次交互(播放时长、点赞或点踩、提前退出)转化为纯英文句子。随后,模型将整个会话视为一段简短的对话进行阅读,从而在无需任何显式特征工程的情况下,捕捉到用户在类型偏好或情绪上的细微变化。

性能与效率提升

在一项为期四周、针对 10% Netflix 流量进行 GenRec 测试的实验中,新系统在两类指标上都实现了统计学意义上的显著提升:

  • 短期参与度 – 驱动日常推荐的主要点击率和观看时长信号上升了 0.115%。
  • 长期核心指标 – 对业务最重要的订阅用户留存率和整体满意度评分提升了 0.006%。

在离线测试中,与生产基准相比,留出数据集上的排序质量提升了 1.6%。更令人瞩目的是数据效率:在达到相同的性能水平时,第二阶段训练所需的标注样本量仅为传统流水线的约 1/40。

为了控制计算成本,Netflix 使用 vLLM 运行模型,这是一种推理栈,它通过单次前向传播对每个候选项目进行评分,而不是生成文本。系统还采用了强力过滤机制,使只有高信号事件才会占用模型的上下文窗口,从而修剪不必要的 token 并降低延迟。

从“特征”向“上下文”转变的意义

GenRec 是更广泛趋势的一部分,即“上下文工程”正在取代手工构建的特征。工程师不再为每个推荐任务设计定制架构,而是决定将哪些信号插入文本提示词中,并让语言模型对其进行推理。这种方法加快了新内容类型的接入速度:一个播客剧集或一场直播游戏只需用一句话描述,即可立即加入推荐池,从而跳过了长达数月的特征定义周期。

剩余的障碍

基于 LLM 的推荐系统并非万能药。它们过度强调热门内容的倾向仍会导致内容库出现偏差,且对高性能 GPU 的需求推高了运营成本。即使使用了 vLLM 和强力过滤,要在 Netflix 这样的规模下部署大语言模型,仍需要精密的工程设计才能达到延迟目标。