How Netflix Taught an LLM to Recommend Movies So That You Keep Watching

TL;DR · AI 摘要
How Netflix Taught an LLM to Recommend Movies So That You Keep Watching ByteByteGo Oct 07, 2026 Your free ticket to P99...
核心要点
- 主题聚焦:How Netflix Taught an LLM to Recommend Movies So
- 来源:ByteByteGo Newsletter,建议结合原文判断细节。
- AI 分析暂不可用,本条为保底评分与摘要。
Netflix如何训练大语言模型推荐电影,让你持续观看
ByteByteGo
2026年10月7日
你的P99 CONF免费门票已就位 —— 60+场关于性能的全虚拟工程演讲(赞助)
P99 CONF是为所有痴迷高性能、低延迟应用的技术人员举办的会议。来自当今最具变革性企业的顶尖工程师将分享60多场演讲,涵盖Rust、Go、Zig、分布式数据系统、Kubernetes和AI/ML等主题。注册即可获得完整O’Reilly图书馆及学习平台30天访问权限、免费书籍,还有机会赢取500份免费周边礼包!
与3万名同行一起,抓住难得的机会,向Chip Huyen(O’Reilly AI工程书籍作者)、Madelyn Olson(Valkey联合创始人)和Carl Lerche(Tokio创始人)等专家学习——免费,随时随地参与。
立即领取你的免费门票
额外福利:注册者可立即获得完整O’Reilly图书馆30天访问权限,参会者可参与抽奖,赢取500份免费周边礼包。
推荐系统是Netflix体验中最重要的组成部分之一。如果你看过Netflix,就会注意到首页会推荐大量电影和电视剧。大多数时候,这些推荐恰好是你可能感兴趣的。它们还会根据你观看的内容随时间变化。
最初的Netflix推荐系统基于用户、物品和互动的数千个手工构建特征。它还为各种功能设计了特殊架构,这些功能共同完成了推荐任务。
尽管多年来这个系统经历了许多变化,但仍然相当复杂。新增用例的引入成本很高。与此同时,大型语言模型(LLMs)取得了显著进展。它们在推荐能力方面有了很大提升。凭借更广泛的世界知识和语言理解能力,LLMs能够很好地理解不同事物之间的关系。它们还可以使用自然语言进行推荐,这是一个优势。然而,你不能直接选择现成的LLM为Netflix这样的公司生成推荐。
这就是为什么Netflix工程团队开发了GenRec。
GenRec的基本思路是利用LLM更好地理解用户的观看历史,从而为Netflix上播放的各类电影和电视剧分配评分。然而,你不能只是给通用LLM提供用户观看的电影或节目列表,就期望它生成有趣的推荐。Netflix必须对基础模型进行大量调整,使其适应自己的内容和用户行为。
在本文中,我们将探讨GenRec的构建过程。以下是本文内容:
- 推荐系统的基本问题
- Netflix为何需要新方法
- 语言模型如何提供帮助
- GenRec的两个训练阶段
- 用户行为如何生成训练示例
- GenRec学习的内容及其推荐生成方式
- Netflix如何评估GenRec
免责声明:本文基于来自多个来源的公开信息。文末有参考文献。如发现任何不准确之处,请在评论区指出。
推荐系统的基本问题
推荐系统必须回答一个基本问题:推荐列表中应该首先出现什么?
确定向特定用户展示哪些内容以及展示顺序的答案是关键。在 Netflix 上,这些内容可以包括电影、剧集、游戏和其他类型的内容。
推荐顺序至关重要。用户的注意力是有限的。观众可能在做出选择前只查看几个标题。如果在这么短的时间内没有找到感兴趣的内容,他们甚至可能离开平台去其他地方寻找。即使用户可能喜欢的内容存在于目录中,也无济于事。可以说推荐系统未能完成其工作。
推荐排序由一个称为排序器(ranker)的组件处理。它根据特定用户在特定情境下各项内容的匹配程度分配分数。项目得分越高,在推荐列表中的位置就越靠前。为了确定这个分数,排序器需要大量信息。以下是一些示例:
- 会员的交互历史,以了解他们喜欢或不喜欢什么。
- 内容元数据,以理解内容的性质。
- 观看设备的详细信息。时间、语言或地区。
Netflix 的 GenRec 能够对整个内容目录进行排序。它也可以处理提供给它的较小内容集。可以使用 top-K 排序,这意味着排名最高的 K 个项目。在这里,K 是你需要的项目数量。
目标不仅仅是预测用户接下来会点击或播放什么。Netflix 希望推荐能够满足用户需求的内容,使他们持续回来观看更多。这意味着用户正在观看一部电影是用户对推荐感兴趣的一个良好指标。但这并不能保证推荐本身是有价值的。
AI 的下一个瓶颈是部署。(赞助)
将新模型转化为能够在真实客户运营中运行的系统仍然具有挑战性。
这一差距正在创造对能够跨越代码、客户背景和生产结果之间转换的工程师的需求。这就是所谓的现场部署工程师(forward deployed engineer)。
免费的《2026 年现场部署工程师工作状态报告》映射了围绕这项工作的新兴劳动力市场。
[在此探索报告](#)
为什么 Netflix 想要采用新方法
Netflix 已经拥有一些非常先进的推荐模型。其生产系统使用了数千个特征、表示和专用模型组件。你可以将特征视为帮助模型进行预测的输入信号。例如,我们可以告诉推荐模型用户最近观看了多少部喜剧电影或剧集。同样,我们可以告诉模型用户多久以前看过特定内容,或者用户完成一整季剧集的频率。所有这些特征都可以帮助模型预测用户可能想看的内容。
要创建一个新特征,你需要决定哪些观察结果是重要的,以及如何计算它们的值。同时,如何使它们在训练和预测中可用。这被称为特征工程。一个成熟的系统还需要一种方法来理解用户可能执行的一系列操作。例如,如果用户按顺序观看了系列剧的几集,这与用户开始观看几部不相关剧集但之后没有继续观看的情况是不同的。
随着系统不断发展,其复杂性也在持续增加。如果要支持新的内容类型或新的产品界面,就需要添加更多功能。同时还需要调整模型架构并进行基础设施建设。此外,还需要运行多项实验以确保一切正常运行。
Netflix 工程团队希望了解一个功能强大的大型语言模型(LLM)是否能够承担更多这类解释工作。通过这种方式,系统无需构建大量独立信号,而是可以通过纯文本描述相关行为和内容。模型可以被训练来解释这些信息。
为什么语言模型能够提供帮助
在训练过程中,大型语言模型(LLM)已经学习了大量词语、概念和描述之间的关系。
这意味着 LLM 在理解电影、剧集以及用户如何与它们互动方面具有更好的起点。例如,可能存在两部属于不同类别的电影,但它们共享某些主题。LLM 可以根据描述理解这种联系。它还可以理解用户对电影的操作历史。
Netflix 将这一将信息以文本形式表达的过程称为“文本化”(verbalization)。
然而,通用型 LLM 并不适合推荐系统。存在多个问题。它可能倾向于推荐全球热门内容,可能会建议不在目录中的项目。此外,它不支持个性化推荐。这就是为什么 Netflix 没有采用现成的 LLM。相反,工程团队开发了 GenRec。
GenRec 将 LLM 的语言理解能力与专门训练相结合,使其能够与 Netflix 目录协同工作。LLM 为解释数据提供了基础。但 Netflix 仍需教导它什么构成良好推荐,并控制其可推荐的项目范围。
GenRec 的两个训练阶段
Netflix 分两个阶段对 GenRec 进行训练,每个阶段都有不同目标。让我们详细探讨这两个阶段。
第一阶段:构建对 Netflix 的认知基础
该阶段旨在让 GenRec 熟悉领域知识。团队使模型学习和解释与 Netflix 相关的信息。只有在此基础上,才会对其进行特定的推荐排序任务训练。
Netflix 工程团队从开源基础 LLM 开始,并使用专有的 Netflix 数据进行调整。可以将基础模型视为一个具有广泛适用性的模型,能够支持多种应用。完成此步骤后,模型将获得对 Netflix 内容和用户行为的知识。
这个新训练的模型成为多个工作线的起点。该模型非常稳定。Netflix 只在经过一段时间后才会更新它,而不是频繁更新。
第二阶段:训练模型进行排序
第二阶段将基础 LLM 转换为 GenRec。
在此阶段,团队在特定示例和目标上训练模型。目标是根据奖励信号正确排序,同时满足成本目标。
我们可以将此阶段称为“后训练”,即对现有模型进行额外训练以更好地完成特定任务。Netflix 更频繁地运行此阶段,因为需要随着新电影和剧集的发布持续改进系统。此外,观众的选择也在变化。即使拥有强大通用知识的模型,也需要根据最新趋势不断更新自身。
用户行为如何帮助生成训练示例
Netflix 记录了多种用户交互行为。例如,点击播放、观看时长、点赞或点踩反馈、加入观影清单以及中断的观影会话。这些记录是创建训练样本的宝贵素材。
团队将这些示例转化为对话形式。"用户消息"包含成员的历史记录、上下文、元数据和推荐任务。"助手消息"描述用户执行了什么操作。例如,输入可以描述一个用户最近完成了几集悬疑剧、给出了正面反馈,现在正在晚上观看电视。输出可以描述该用户接下来观看了什么节目、观看了多久以及是否给出了反馈。
可以看出,输出描述了特定情境下接下来发生的事情。这有助于模型将之前发生的事情与之后发生的事情联系起来。对话形式只是为了让训练更容易,这并不意味着用户必须通过聊天来获取 Netflix 的推荐。
训练和实际使用之间存在显著差异。在训练阶段,对话格式便于实现语言目标。在实际使用时,GenRec 会接收上下文,根据排序组件对电影和电视剧进行评分。
上下文工程:决定模型可读取的信息
大型语言模型以标记(token)形式处理文本。这些标记可以是单词或单词的部分。
我们发送给模型的标记数量会影响成本,并消耗上下文预算。这意味着描述用户的完整活动历史会非常昂贵。这导致了一个新的工程问题:我们需要决定在提示中包含哪些信息。
Netflix 将这一过程称为上下文工程。在构建上下文时,他们会考虑特定事件的有用性以及将其转化为文字可能需要的文本量。一些关键因素被纳入考量:
- 强证据:某些操作能提供关于用户偏好的强证据。例如,长时间观看或明确的正面反馈可能需要详细描述。而其他操作可能信息量较小。例如,非常短暂的观看或快速悬停可能反映的是偶然或随意的探索,团队会省略此类事件以避免浪费标记分析弱证据。
- 重复行为:可以更简洁地表示重复操作。例如,如果用户观看了许多相似的剧集,可以将其总结为特定系列的长时间观看。
- 选择性细节:某些项目需要比其他项目更详细的说明。例如,假设我们有一部新电影,交互历史非常有限,这类似于冷启动问题。在这种情况下,我们需要提供更丰富的元数据。
- 上下文长度:团队测试了随着包含更多历史事件,排序质量如何变化。最初,增加历史记录帮助很大。但随着时间推移,改进幅度逐渐变小。
Netflix 调整了描述事件所需的字数。通过使用清理、压缩和词汇替换等技术,他们报告称标记数量已减少到原始数量的约三分之一。
你可以将训练目标视为一种描述模型应改进方向的方式。改进过程通过数值损失值进行引导。训练会调整模型参数以降低损失值。
让我们详细探讨关键训练目标。
学习哪些项目应排名靠前
这是主要目标。它教会GenRec为目录中的每部电影或节目分配更高的分数。
Netflix通过观看时长或强烈反馈等互动行为识别正样本。他们还会应用阈值和过滤以减少标签噪声。这样做很重要,因为某些行为并不总是用户偏好的可靠指标。你不能将每部电影或节目的简短播放视为同等重要。当模型在可用选项中对相关目录项分配过低概率时,也会对其进行惩罚。
保留语言理解能力
Netflix在训练文本上也保留了语言建模目标。
这有助于模型理解用户历史记录,更深入地了解电影和节目,并执行自然语言表达的指令。换句话说,推荐训练应保留使基础模型具有实用性的语言能力。
团队还为未来文本应用保留了可能性。例如,推荐解释功能。
为重要结果赋予更多影响
你还需要确保模型不会对某些特定事件赋予过多影响。例如,重复的追剧行为会产生多个事件。但这并不意味着要赋予其过多权重。否则,系统可能会过度关注某一类内容。
Netflix通过奖励加权训练解决这个问题。
他们有独立的奖励模型,提供某些互动价值的信号。存在一些信号有助于长期结果。例如,返回行为、探索行为、持续参与等。其他信号则有助于平衡不同类型内容的行为,包括新电影上映和其他热门标题。
模型如何生成排名列表
训练完成后,GenRec可以将文本描述转换为Netflix目录中电影和电视节目的分数。
首先,一个名为verbalizer的组件会将用户的观看历史、当前上下文和相关元数据整合成一组文本。LLM处理这个文本序列并生成内部数值表示。
Netflix还会提取一个池化隐藏状态。这是推荐请求相关信息的紧凑数值表示。“池化”意味着模型处理的信息以另一种组件可用的方式被收集。不要将其视为书面摘要。
每个目录项都有一个学习到的表示形式。它还有一个学习到的嵌入向量。你可以将嵌入向量视为机器学习模型可以处理的数字列表。
因此,模型清楚了解用户的当前状况,并对需要考虑的每个项目都有其表示形式。评分头将这两者连接起来。你可以将评分头视为附加在主模型上的输出组件。GenRec的排序头将用户的上下文表示与电影或节目的嵌入向量结合,生成一个分数。
一些评分函数包含点积运算或小型神经网络。关键思想在于评分函数学习如何关联两种表示方式。GenRec通过softmax将各种评分转换为分布,并利用该分布对推荐物品进行排序。Softmax同时将评分转换为非负值。所有评分在集合中的总和为1。
Netflix工程团队联合训练主LLM、排序头部和目录项目嵌入,使它们能够协同支持相同任务。由于头部仅对Netflix目录项目进行评分,因此无法推荐目录中未包含的内容。
GenRec如何生成推荐
GenRec不是逐词生成推荐内容。要理解其工作原理,需要先了解典型文本生成LLM的运作方式。它包含两个阶段:
- 首先处理输入提示。此阶段通常称为预填充(prefill)。
- 然后依次生成输出标记。每个新标记都依赖于之前的上下文。此阶段称为自回归解码(autoregressive decoding)。
GenRec利用第一阶段理解推荐上下文,随后从排序头部获取评分。
来源:Netflix技术博客
Netflix将此称为仅预填充推理(prefill-only inference)。在此方法中,我们只需处理一次提示。模型通过单次前向传递对目录或候选集进行评分,而无需逐词生成答案标记。无需承担让LLM写出推荐列表的成本。
Netflix工程团队使用vLLM服务GenRec。vLLM是用于运行LLM工作负载的软件。同时通过小型或蒸馏模型控制成本。可以将蒸馏模型视为经过训练以学习大型模型行为的较小模型。其核心思想是用更低的计算成本获得高质量结果。
Netflix还通过结构化提示最大化共享前缀,使前缀缓存变得容易。当请求以相同文本开头时,可重用该共享开头的计算工作。在Netflix的实验中,当上下文长度减少到约1/3时,服务成本也出现了类似的下降。
Netflix如何评估GenRec
Netflix工程团队通过离线评估和在线A/B测试两种方式评估GenRec。这两种方法用于覆盖不同角度。
离线评估用于检查GenRec是否能良好排序已知相关物品。为此,团队使用历史数据在实际实验前测量排序质量。使用的指标之一是平均倒数排名(Mean Reciprocal Rank, MRR)。该指标会在模型将第一个相关物品排在列表顶部时给予奖励。
在线评估检查变更是否对使用情况产生积极影响。
在A/B测试中,不同组会获得系统不同版本,以便比较结果。Netflix进行了覆盖约10%流量的4周测试。短期首页参与度指标提升了0.115%,长期核心指标提升了0.006%。Netflix将这两个结果标记为具有统计显著性。
结论
从这个GenRec案例研究中可以得出的最佳启示,是现代推荐系统构建方式的转变。
如果你观察Netflix的实践,可以明显看出,大部分输入设计工作都涉及上下文工程。开发人员需要决定哪些用户交互是重要的,同时要确定回溯数据的范围、应使用的元数据,以及如何高效地表示所有信息。
我们也可以构建更多共享基础模型的应用。可变的部分包括数据、训练后的目标、奖励信号以及输出方式。随着模型的变化,基础设施也需要调整。像GPU服务、批处理、缓存等技术问题变得更为关键。
GenRec展示了这些理念如何在大规模企业级应用中协同工作:
- 基础模型具备语言和领域理解能力
- 上下文工程帮助模型获取相关数据
- 专业训练提升推荐质量
- 仅预填充的推理方式有效控制了主要的推理成本
参考文献:
- GenRec: Towards LLM-Native Recommendation at Netflix
- Effective context engineering for AI agents