Netflix最近做了一次大胆的尝试:把自己打磨多年的推荐引擎,和一套基于语言模型的新系统放在同一赛道上比拼。结果是,新系统赢了。

这套名为GenRec的系统,在离线测试中比现有生产系统提升了约1.6%的排序质量,而第二阶段训练所需的标注样本,只有旧系统的四十分之一。Netflix技术团队在官方博客中公布了这一结果。

打开网易新闻 查看精彩图片

旧系统的痛点:手工特征太贵了

Netflix当前的推荐系统,依赖数千个手工构建的特征来描述用户、标题和交互行为。这套体系经过多年调优,效果稳定,但问题也很明显:每当Netflix要接入新内容类型——比如游戏、直播节目或播客——或者把推荐扩展到界面上的新区域,都需要重新投入大量工程资源来适配这些手工特征。

直接用现成的开源语言模型也不行。Netflix团队发现,通用语言模型在推荐场景下有三个明显的毛病:过度偏向热门内容、会幻觉出目录里根本不存在的标题、以及完全无视平台自身的业务规则。

GenRec的两阶段训练方案

GenRec的设计思路,是在通用语言模型和业务需求之间搭一座桥。Netflix采用了一个未公开名称的开源权重语言模型作为底座,分两个阶段进行训练。

第一阶段,用Netflix的专有数据对基础模型做微调,让它理解平台的内容目录和用户行为模式。第二阶段,再做一轮专门的训练,把基础模型变成一个推荐排序器。这一阶段会更新得更频繁,以便及时反映新上线的内容和用户偏好的变化。

把用户行为写成"对话"

GenRec最特别的地方在于数据表示方式。传统推荐系统把用户数据编码成密集的数值向量,而GenRec直接把用户行为转换成纯文本。播放记录、观看时长、点赞或点踩、加入片单、中途退出——这些行为被组织成用户与推荐系统之间的一段"对话"。

模型自己从这些文本中学习类型偏好和兴趣变化,不再需要工程师手动设计特征来"告诉"模型该看什么。

当然,把每一次交互都完整写成文本,会远远超出模型的上下文窗口。Netflix的做法是激进地过滤:高信号事件(比如长时间的观看会话)保留完整细节,短暂点击或快速滑动直接丢弃,连续刷剧的会话则做压缩处理。为了防止模型推荐不存在的标题,Netflix还加了一个独立组件,只对真实存在的目录条目进行打分。

成本控制与线上验证

GenRec跑在vLLM上,采用一种特殊模式:模型只读取一次输入,单次遍历就完成对所有候选条目的打分,不生成任何文本。这种方式把推理成本控制在了可接受范围内。

在线上测试中,Netflix做了一个为期四周的A/B实验,覆盖约10%的流量,仅限于预计算推荐位。结果显示:衡量首页用户行为的短期指标提升了0.115%,长期核心指标提升了0.006%。Netflix表示,这两个增幅在统计上都显著,不太可能是随机波动。

一个值得关注的信号

Netflix还披露了一个细节:推荐专用的第二阶段微调,在基础模型性能之上还能带来35%到50%的提升。而当基础模型已经"老化"两周时,这个差距会扩大到约80%。换句话说,模型的新鲜度对推荐质量的影响,比想象中更大。

这次实验的意义不在于GenRec立刻取代现有系统——1.6%的离线提升和微小的线上指标增幅,还不足以让Netflix冒险换掉生产环境。但它验证了一个方向:语言模型不只能聊天和写代码,也能理解"用户喜欢什么"这件事。而且,它需要的标注数据少得多,这意味着未来接入新内容类型时,成本可能会大幅下降。

对于流媒体行业来说,这可能是推荐系统架构演进的一个信号:手工特征工程的黄金时代,或许正在走向尾声。