Netflix 推荐系统(Part Six)-To Be Continued

To Be Continued也就是继续播放模式,在国外比较常见。这篇文章的原文来自To Be Continued。这不是完全和完整的翻译稿,而是我个人认为的重要部分。如果发现有任何侵权行为。请联系我。

Background

我们改进Netflix推荐系统的目标是创建个性化体验,让用户更容易找到优质内容。我们的推荐系统的最终目标是了解会员的exact perfect节目,并在他们打开Netflix时开始播放。虽然我们仍有很长的路要走,但在某些方面我们可以大大缩小差距。

当会员打开Netflix网站或应用程序时,她可能正在寻找她以前从未观看过的新电影或电视节目,或者,她可能想要继续观看部分观看的电影或电视节目。如果我们能够合理地预测一个成员何时更有可能处于继续模式并且哪个节目更有可能被继续观看,那么将这些节目放在主页上的显著位置是有意义的。

大多数推荐工作都侧重于discovery,但在本文中,我们将重点放在to be continued模式上,并解释我们如何使用机器学习来改善两种模式的成员体验。特别是,我们专注于一个名为“To be Continued”(CW)的行,该行出现在大多数平台上的Netflix成员主页的主页上。此行用作查找用户最近(部分)观看并可能想要恢复的节目的简单方法。可以想象,该行的用户流量是很大的。

Continue Watching

以前,某些平台上的Netflix应用程序显示了最近观看的节目(这里我们使用术语“广泛显示”包括Netflix上的所有形式的视频内容,包括电影和电视剧),按照上次播放每个节目的新近度排序。 行放在页面上的方式取决于某些依赖于设备类型的规则。 例如,网站仅在页面的左上角显示单个延续节目。 虽然这些是合理的baseline,但我们开始统一跨平台的CW行的用户体验,并从两个方面对其进行改进:

  • 通过在用户更有可能恢复节目(续行模式)时将其放置在更高位置来改进页面上行的位置,并在成员更有可能寻找要观看的新节目时降低(发现模式)
  • 使用它们在当前会话中恢复的可能性,改进最近观看的节目的排序

直观地,有许多活动模式可能表明user可能处于继续模式。 例如,如果user有以下情况,则可能会恢复观看:

  • 正处于狂欢的中间; 即,最近花了很多时间看电视节目,但还没有看完这个节目
  • 最近部分观看了一部电影
  • 经常在当前时间或当前设备上观看同一部节目

另一方面,如果有以下行为,user更有可能进入discovery模式:

  • 刚看完电影或电视节目的所有剧集
  • 最近没有看过任何东西
  • 正在开始新服务

这些假设,以及用户在continue模式中花费的时间,促使我们构建新的机器学习模型以利用这些模式以产生更有效的CW行。

Building a Recommendation Model for Continue Watching

要为CW行构建推荐模型,我们首先需要计算一组feature,这些feature可以帮助模型预测某人何时恢复观看。 这些可能包括有关user的feature,CW行中的节目,user过去与这些节目的互动以及一些上下文信息。 然后,我们使用这些feature作为输入来构建机器学习模型。 通过变量选择,模型训练和交叉验证的迭代过程,我们可以优化和选择最相关的一组特征。

在为feature进行头脑风暴时,我们考虑了构建CW模型的许多想法,包括:

  • user-level features:
    • 有关用户订阅的数据,例如用户订阅的长度,注册国家和语言首选项
    • 该用户最近的活跃程度
    • 用户过去的评分和流派偏好
  • user和program的互动信息:
    • 该节目添加到目录中或者由用户观看的最近时点
    • 用户观看了多少电影/节目
    • 节目的元数据,例如剧集的类型,类型和数量; 例如,儿童节目可能会被重新观看
    • 可供用户观看的剩余节目
    • 该节目的受欢迎程度,和用户的相关性
    • 用户一般多久看一次这个节目
  • Contextual features:
    • 当前时间,星期几
    • 位置
    • 设备

Two applications, two models

如上所述,我们有两个与continue mode 相关的任务:对CW行中的节目进行排名,并将CW行恰当地放在用户主页上。

Show ranking

我们需要训练一个模型来做行内视频排序。这个模型优化一个ranking loss function。我们随机选取了一些continue mode下的用户会话作为训练数据,模型为每个会话预测用户观看某一个视频的可能。在训练过程中,我们特别重视第一个位置的视频。

我们对模型进行了离线评估。Baseline是之前的系统,其中的节目只是根据每个节目上次播放的最近时间进行排序。该数据在我们的新模型中也被用作特征。比较模型与新近度排名,我们观察到各种离线指标的显着提升。下图显示了两种方案随时间的精度@ 1。可以看出,性能提升远大于日常变化。该模型在A / B测试中的表现也明显优于基于新近度的排名,并且更好地符合我们对成员行为的期望。

Row placement

为了将CW行适当地放置在成员的主页上,我们想要估计成员处于continue模式而不是discovery模式的可能性。有了这种可能性,我们可以采取不同的方法来进行row replacement。一种简单的方法是将row replacement转换为二元决策问题,其中我们只考虑CW行的两个候选位置:一个位置在页面上高,另一个位置在下面。通过应用阈值,我们可以决定放置CW行的这两个位置中的哪一个,可以调整该阈值以优化一些准确度指标。另一种方法是获取可能性,然后可能基于页面上该位置的内容将其映射到不同的位置。在任何情况下,获得continue possibility的良好估计对于确定行位置至关重要。在下文中,我们将讨论两种潜在方法。

Reusing the show-ranking model

最简单的方法是重用之前的模型。 更具体地说,我们可以校准各个节目的分数,以便估计每个节目将在给定会话中恢复的概率P(play(s)= 1)。 我们可以在CW行中的所有节目上使用这些个体概率来获得连续的总体概率; 即,将恢复来自CW行的至少一个节目的概率。 例如,在不同play互相独立的简单假设下,我们可以写出CW行中至少有一个节目将被播放的概率:

Dedicated row model

在这种方法中,我们训练binary classifier以将持续会话区分为正标签和用户第一次播放节目(发现会话)作为负标签的会话。 此模型的潜在feature可能包括user-level和contextual features,以及user interactions。

比较这两种方法,第一种方法更简单,因为只要概率得到很好的校准,它只需要一个模型。 然而,第二种方法可能提供更准确的continue估计,因为我们可以专门为它训练分类器。

Tuning the placement

在我们的实验中,我们使用分类指标评估了对continuation likelihood的估计,并实现了良好的离线度量。然而,仍然存在的挑战是找到该估计似然的最佳用途,即平衡continuation和discovery。在这种情况下,改变位置会在我们的预测中产生两种类型的错误之间的权衡:误报(我们错误地预测user想要从CW行恢复一个节目)和假阴性(我们错误地预测到该user想要发现新内容)。这两类错误对会员有不同的影响。特别是,假阴性使得user更难以继续节目。虽然有经验的user可以通过向下滚动页面或使用搜索功能来查找节目,但额外代价可能使新用户更难以使用。另一方面,误报导致浪费推荐空间。由于两种类型的错误对会员体验的影响很难在线下准确测量,我们做了A / B Test。

Serving the Row

用户希望CW行能够响应并在观看节目后动态变化。此外,模型中的某些功能依赖于时间和设备,无法提前预先计算。因此,我们需要实时计算CW行,以确保在会话开始时收到主页请求时它是新鲜的。为了保持新鲜感,我们还需要在某些用户交互后在会话中更新它,并立即将该更新推送到客户端以更新其主页。在我们的规模上即时计算行是具有挑战性的,需要仔细的工程设计。例如,对于具有较长观看历史的用户来说,某些功能的计算成本较高,但我们需要为所有成员提供合理的响应时间,因为continuation是一种非常常见的情况。我们与多个工程团队合作,创建了一个动态且可扩展的方式,为行提供服务以应对这些挑战。