Netflix Prize 和推荐系统

在这篇包含两个部分的博文中,我们将揭开 Netflix 最有价值的资产——推荐系统的面纱。在第一部分,我们将介绍 Netflix Prize 对推荐领域的贡献,Netflix 推荐服务的主要模块,以及推荐服务如何满足网站的商业需求。在第二部分,我们将介绍我们使用的数据和模型,讨论如何将离线的机器学习实验与线上的 A/B 测试相结合。

Netflix Prize 和推荐系统
在 2006 年,我们宣布举办  Netflix Prize , 这是一个旨在解决电影评分预测问题的机器学习和数据挖掘的比赛。对于那些能够将我们的推荐系统 Cinematch 的准确率提升 10% 的个人或团队,我们提供 100 万美金的奖励。我们希望通过比赛发现新的方法来改善我们提供给用户的推荐结果,这是我们商业模式的核心部分。当然,我们需要一个比较容易评测和量化的指 标:我们选择的评测指标是均方根误差(RMSE,预测评分和真实评分之间的均方根误差)。比赛的要求是打败我们系统 0.9525 的 RMSE 得分,并将其降低到 0.8572 或更低。
 

比 赛开始一年后,Korbell 的团队以 8.43% 的提升赢得了第一个阶段奖。他们付出了超过 2000 个小时的努力,融合了 107 种算法才得到了这份奖金。然后,他们将源代码交给了我们,我们分析了其中两种最有效的算法:矩阵分解(通常被叫做 SVD,奇异值分解)和局限型玻尔兹曼机(RBM)。SVD 取得 0.8914 的 RMSE,RBM 取得 0.8990 的 RMSE,将这两种方法线型融合能将 RMSE 降低到 0.88。为了将这些算法应用到我们的实际系统中,我们必须克服一些限制,例如比赛的数据集是一亿个评分,但实际的线上系统是 50 亿个,并且这些算法的设计并没有考虑用户不断产生的新评分。但最终我们克服了这些困难,并把这两种算法应用到了我们的产品中,而且作为我们推荐引擎的一部 分一直被使用到现在。

如果你关注比赛的结果,可能对两年后大奖的归属很感兴趣。这是一项令人印象深刻的工作,数百种预测模型被融合在一 起,最终突破了 0.8572 的临界线。我们评测了一些最新的离线算法,但是很遗憾,这些在比赛数据上胜出的算法,到了线上却表现不够出色。因此,我们并没有应用到我们的线上环境。与 此同时,我们的关注点也从提升 Netflix 的个性化体验转移到了下一个层级。在下文中,我们将解释为什么要转移关注点?

从美国 DVD 租赁到全球视频流媒体服务
近 几年,随着 Netflix 业务的发展,我们对推荐算法的关注点发生了变化。在 Netflix Prize 举办一年后的 2007 年,我们发布了实时流媒体服务。流媒体不仅改变了用户与系统的交互方式,也改变了推荐算法的的可用数据类型。对 DVD 租赁业务来说,目标是帮助用户找到电影,并在接下来的数天或数周内邮寄到用户邮箱。用户从选择电影到观看电影,期间有一个过程,在这个过程中收不到用户的 任何反馈。一旦用户不满意,想要更换 DVD,代价会很大,需要花费一天以上的时间,所以用户一般会仔细挑选。而对流媒体用户来说,选一部电影立马就可以观看,甚至可以在很短时间内观看多部电 影。同时,我们可以通过统计知道用户是看完了整部电影,还是只看了一部分。

另一个巨大的变化是,流媒体服务从单纯的 Web 网站扩展到了成百上千的不同设备。例如:Netflix 比赛举办后的两年,微软就发布了集成 Roku 播放器的 XBox。仅仅又过了一年,Netflix 发布了 iPhone 客户端。现在,各种 Android 和最新的 Apple TV 上都有 Netflix 的身影。

两年前,我们走向国际,推出了加拿大版本。2011 年,我们的服务扩展到了 43 个拉美国家和地区。最近,我们还登录了英国和爱尔兰。今天,Netflix 已经遍布 47 个国家,共有超过 2300 万的订阅用户。在 2011  年第一季度,这些用户通过上百种不同的设备观看了 20 亿个小时的视频。每天有 200 万部电影和电视剧被观看,并新增 400 万个用户评分。

我们已经在这些新的场景中添加了个性化服务,现在有 75% 的视频观看是与推荐系统有关的。我们取得这样的成绩源于我们不断优化用户体验,通过优化算法,我们改善了用户满意度。下面我们列举一些使用在推荐系统中的技术和算法。

推荐无处不在
经 过几年的实践,我们发现尽可能的集成个性化推荐到功能中,会对我们的订阅用户产生巨大的价值。我们的个性化从首页就开始了,包括按行展示的视频,每一行有 一个主题,主题揭示了这行视频的内在联系。大多数个性化都是基于挑选行视频的方法,包括哪些行该放那些视频,以及如何对视频进行排序。

以 顶部的 10 行为例:我们猜测这是你最可能喜欢的 10 个主题。当然,我们说“你”的时候也包含了你的家人。值得注意的是,Netflix 的个性化是针对每一个家庭,而一个家庭的不同成员会有不同的兴趣和口味。这也就是为什么要选 10 行的原因,你可能会发现这 10 行已经涵盖了对爸爸、妈妈、小孩或者整个家庭的推荐。即使这个家庭只有一个用户,我们也希望能兼顾到这个用户的不同兴趣和情绪。为了做到这一点,我们系统 的不仅要提高准确度,还要提高推荐结果的多样性。
 

Netflix 个性化推荐系统的另一个重要元素是认知(awareness)。我们想让用户知道我们是如何把握他们的喜好。这不仅能让用户信任我们的系统,而且还能鼓励 用户提交更多的反馈来帮助我们把推荐做得更好。提升个性化推荐信任度的另一种方法是提供推荐理由,为什么我们要推荐这部电影或电视剧?我们不是因为商业需 求给用户推荐,而是基于我们从用户那里获得的信息,包括:用户评分、观看记录、用户好友的推荐等等。
 

关 于基于好友的推荐,我们最近在 47 个服务国家中的 46 个发布了我们的 Facebook 连接组件。这第 47 个就是美国,因为受 VPPA(《录像隐私权保护法案》,1998)的影响。朋友了解的内容不仅仅为我们的推荐算法提供了另一个数据来源,也使我们能够以社交圈生成几行新的推 荐结果。
 

我 们的推荐服务中最让人印象深刻的一点便是“风格”为主题的几行推荐结果。这里既包含了像“喜剧”这样的大类,也包含了像“时空穿越”这样长尾里面的小类。 每一行的展现都考虑了三个方面:选择哪一种风格,选择这个风格里的哪些视频,这些视频如何排序。用户对这个模块的关注度是很高的,当我们把长尾里的类别放 到前面的时候,检测到用户的停留时间有明显的增长。其他的诸如新颖性和多样性也是推荐服务考虑的重要因素,以便为用户生成上千种可能的视频组合。
 

我们也为每一行的选择提供了推荐理由。有些是基于隐式反馈,如:最近观看记录、用户评分和其他交互;有些是基于显示反馈,显示反馈是通过我们邀请用户来做口味偏好调查得来的。
 

基 于相似性的推荐也是我们个性化推荐服务的一个重要部分。相似性是一个很宽泛的概念,描述的对象可以是不同的电影、用户,也可以是评分、视频元信息等。此 外,这些相似性可以混合作为其他模块的特征。相似性也可以用在多种场景之中,例如:当用户搜索一部电影或者把一部电影放到播放列表的时候,可以为用户生成 “特定风格”的推荐结果,这些结果是基于用户最近关注过的视频。如果你对相似性系统的体系结构感兴趣,想进行一些深入的了解,可以关注我们 过去的博客
 

 

上 述的场景中,包括优选的 10 行推荐、风格推荐、基于相似性的推荐,都要涉及到排序算法,即:选择什么样的顺序来排列每一行中的视频,这是提供有效推荐结果的关键一步。排序系统的目标 是在特定的场景下实时的为一组视频找到最佳的排列顺序(简单说就是把用户最感兴趣的视频排列在前)。我们将排序系统的任务分解为:评分、排序、过滤。我们 的商业目标是最大化用户的满意度和每月订阅保有量,这实际上等价于最大化用户的视频观看次数。因此,我们优化我们的算法,对那些用户最可能观看和喜欢的视 频给最高的分数。

现在我们已经明确的知道 Netflix Prize 的目标是提高电影评分预测的准确度,这只是一个有效的推荐系统众多构成的一种。我们还需要考虑像用户场景、视频流行度、用户兴趣、可解释性、新颖性、多样 新和惊喜度等方方面面。为了考虑这些因素,我们要挑选合适的算法。在本文的第二部分,我们将详细的讨论排序问题,深入探讨的我们的数据和模型,以及我们所 作的一些创新工作。

————————————————————————————————————
这篇 blog 分两部分,内容很长。第一部分介绍的内容并没有透露任何技术细节,主要是介绍了 Netflix 推荐系统的产品形式(推荐场景)以及 Netflix Prize 带给他们的收益,感觉像是产品经理写写出来的:),但是 blog 的第二部分:排序还是透露了不少技术细节。
在 blog 的第一部分,我们详细介绍了 Netflix 个性化推荐系统的各个组成部分。我们也解释了自从我们宣布 Netflix Prize 后,Netflix 推荐系统是如何变化的。100 万美金的奖金让我们不论在算法创新,还是在品牌宣传和吸引人才加入方面都获得了丰厚的回报。不过,准确的预测电影评分仅只是我们推荐系统的一部分。在本文 中,我们将更加深入的介绍个性化推荐技术,讨论当前我们使用的模型、数据,以及我们在这方面的创新方法。

排序
推荐系统的目的是给 用户提供一些有吸引力的物品供用户选择。具体的做法是先选择一些候选物品,并对这些物品按照用户感兴趣的程度进行排序。展示推荐结果最常用的方式是组成某 种有序列表,而在 Netflix,列表就是一行行的视频。因此,我们需要一个排序模型,利用各种各样的信息,来为每一个用户生成个性化推荐列表。

如 果你正在寻找一个能够最大化用户消费的排序函数,那么最显然的基本函数就是物品的热门程度。原因很简单:用户总是倾向于观看大家都喜欢观看的视频。然而, 热门推荐是个性化推荐的反义词,它将为每个用户生成千篇一律的结果。因此,我们的目标就是找到一个比热门推荐更好的个性化排序算法,从而满足用户不断变化 的口味。

既然我们的目标是推荐用户最可能观看和喜欢的视频。最简单的方法是利用我们估计出的用户对物品的评分来代替物品的热门程度。不过 利用预测评分会给用户推荐过于冷门或用户不熟悉的视频,而且不会给用户推荐那些他们可能不会打高分但是会观看的视频。为了解决这个问题,我们并不会只用热 门推荐或者预测评分,我们希望能够设计出一个能够平衡这两种因素的排序算法。因此,我们可以将热门程度和预测评分都作为特征,在此基础上构建排序模型。

有 很多方法可以用来设计排序算法,比如评分排序方法、配对优化法方法、全局优化方法。举例说明,我们可以设计一个简单的评分排序方法,对视频的热门程度和用 户的期望评分进行线性加权:f(u, v) = w1*p(v) + w2*r(u, v) + b,其中 u 表示用户,v 表示视频,p 表示热门函数,r 表示期望评分。这个公式可以通过一个二维空间表示,如下图:
 

当 我们有了这个排序函数后,我们就可以输入一组视频,然后对它们基于评分由高到底进行排序。你可能会很好奇我们是如何选择权重 w1 和 w2 的值(偏移量 b 是一个常量,不影响最终的排序)。换句话说,也就是在我们这个简单的二维模型里面如何确定热门程度更重要?还是期望分值更重要?这个问题至少有两种解决方 案:第一种是可以对 w1 和 w2 简单的选一些候选值,然后放到线上通过 A/B Test 的方式找到最优的权重。但是这个方案比较耗时,效率不是很高。第二种是利用机器学习的方法:从历史数据中选择一些正样本和负样本,设计一个目标函数,让机 器学习算法自动地为 w1 和 w2 学习一个权重。这种机器学习的方法叫做“ Learn to rank (LTR)”,已经在搜索引擎和广告精准投放领域得到了广泛应用。但推荐系统的排序任务有一个重要的区别:排序的个性化。我们不是要获得一个全局的 w1 和 w2 权重,而是要为每个用户都找到一个个性化的值。

你们可能会猜到,除了热门程度和期望评分,我们在 Netflix 推荐系统中还尝试了很多其他的特征。有些没有效果,有些则显著的提升了排序的精度。下图展示了我们通过添加不同的特征和优化机器学习算法后对排序性能的改善效果。
 

很 多监督学习方法都能被用来设计排序模型。其中代表性的有 Logistic 回归,支持向量机(SVM),神经网络或决策树类的算法(GBDT)。另一方面,近几年来许多算法被应用到“Learn to rank”中,比如 RankSVM 和 RankBoost。对于一个给定的排序问题,找到效果最好的算法并不容易。如果你的特征比较简单,那么可以选择一个简单的模型。但是值得注意的是有时候 新加的一个特征却不起作用,这是因为模型对它不友好。或者是在一个很好的模型中表现不好,因为你的特征和模型不是很匹配。

数据和模型
在前面关于排序算法的讨论中已经强调了数据和模型对于构建个性化推荐系统的重要性。在 Netflix,我们很幸运的拥有大量相关数据和很多天才工程师,他们通过算法将数据转换为产品。以下是我们在优化推荐系统中用到的一些数据源:

        * 我们有几十亿的用户评分数据,并且以每天几百万的规模在增长。
        * 我们以视频热度为算法基线,有很多方法用来计算热度。我们可以计算不同时间视频的热度,例如:一个小时、一天、或者一周。同时,我们可以将用户按地域划分,计算视频在某地用户的中的热度。
        * 我们的系统每天产生几百万的播放点击,并且包含很多特征,例如:播放时长、播放时间点和设备类型。
        * 我们的用户每天将几百万部视频添加到他们的播放列表。
        * 每个视频都有丰富的元数据:演员、导演、类型、评论、评分。
        * 视频展现方式:我们知道推荐的视频是在什么时间、什么位置展现给用户的,因而可以推断这些因素是如何影响用户的选择。我们也能够观察到用户与系统交互的细节:鼠标滚动、鼠标悬停、点击、以及在页面的停留时间。
        * 社交数据已经成为我们个性化特征中最新的数据源,我们可以知道用户已经关注或评论的好友都在看什么视频。
        * 我们的用户每天产生几百万的搜索请求。
        * 上面提到的数据都来自我们自己的系统,我们也可以挖掘外部数据改善我们的特征,例如:电影票房、影评家的评论。
        * 当然,以上并非全部,还有很多其他的特征,如:人口统计数据、地域、语言、时间上下文等都可以用于我们的预测模型中。

介 绍完数据,那什么是模型呢?我们发现,有这些高质量、类型丰富的数据,单一的模型是不够的,我们有必要对模型进行选择、训练、和测试。我们使用了许多类型 的机器学习方法:从聚类算法这样的无监督学习方法到分类算法这样的监督学习方法。如果你关注个性化推荐的机器学习算法,那么你应该知道下面这些还没有列举 全的方法:

        * 线性回归(Linear Regression)
        * 逻辑斯特回归(Logistic Regression)
        * 弹性网络(Elastic Nets)
        * 奇异值分解(SVD : Singular Value Decomposition)
        * RBM(Restricted Boltzmann Machines)
        * 马尔科夫链(Markov Chains)
        * LDA(Latent Dirichlet Allocation)
        * 关联规则(Association Rules)
        * GBDT(Gradient Boosted Decision Trees)
        * 随机森林(Random Forests)
        * 聚类方法,从最简单的k-means到图模型,例如Affinity Propagation
        * 矩阵分解(Matrix Factorization)

消费者法则
丰 富的数据来源,度量方式和相关的实验结果,使得我们能够以数据驱动的方式来组织我们的产品。从 Netflix 创立伊始,这种方法就成了公司的基因,我们称之为消费者法则。从广义上说,消费者法则的目标是通过创新让用户获得便利。真正的失败就是没有创新,就像 IBM 的创始人 Thomas Watson 先生所说“如果你想成功,那就不要畏惧失败!”。我们的创新文化要求我们能够高效地通过实验来实践我们的想法,只有这样,我们才能理解这个想法为什么成功 或者为什么失败?如此,我们能够专注于改善用户体验,而不是把时间浪费在一些无用的想法上。

那么,在实际工作中,如何贯彻实施这个理念呢?和传统的科学研究不同,我们通过线上的 A/B 测试来完成对想法的验证:
1. 提出假设
待验证的算法/特征/设计/... ,这些待验证的假设将能够提升我们的服务体验,增加用户在网站的停留时间
2. 设计实验
开发一个解决方案或原型。想法的最终效果可能是原型的 2 倍,但一般不会有 10 倍那么多。
考虑依赖和独立的变量、操作、重要性...
3. 执行测试
4. 让数据说话

当 我们执行 A/B 测试的时候,我们会跟踪多个维度的指标,但我们最信赖用户的视频播放时长和停留时间。每一次测试通常会覆盖上千名用户,并且为了验证想法的方方面面,测试 会分成 2 到 20 份进行。我们一般都是平行进行多个 A/B 测试,这使得我们可以验证一些激进的想法,并且能同时验证多个方法,但最重要的是,我们能够通过数据驱动我们的工作。关于 A/B 测试,可以参考我们 以前的技术博客和我们首席产品官 Neil Hunt   在 Quora 上的回复

另 一方面,我们面临着一个有趣的问题:如何把我们的机器学习算法整合到 Netflix 以数据为驱动的 A/B 测试文化中。我们的做法是结合离线-在线测试。在线测试之前,我们会进行离线测试,先优化并检验我们的算法。为了评测算法的性能,我们采用了机器学习领域 的很多种指标:有排序指标,例如:NDGC(Normalized Discounted Cumulative Gain)、Mean Reciprocal Rank、Fraction of Concordant Pairs。也有分类指标,例如:精准度、查准率、查全率、F-score。我们也使用了来自 Netflix Prize 著名的 RMSE(均方根误差)和其他一些独特的指标,例如:多样性指标。我们跟踪比较这些离线指标和线上效果的吻合程度,发现它们并不是完全一致的。因此,离线 指标只能作为最终决定的参考。
 

一旦离线测试验证了一个假设,我们就准备设计和发布 A/B 测试,从用户的视角证明新的特征的有效性。如果这一步通过了,我们便将其加入到我们的主要系统中,为我们的用户提供服务。下图详细说明了整个创新周期。
 

这 种创新周期是一个极端的例子,我们称之为“前十行结果的马拉松比赛(Top 10 Marathon)”。这是一个为期 10 周、高度专注、高强度的工作,旨在快速检验数十种算法,以改善我们前十行的推荐结果。可以把它看成是一项有考核指标的为期两月的黑客马拉松比赛。不同的团 队和个人被邀请到一起贡献想法并编码实现。每周我们会推 6 种不同的算法到线上进行 A/B 测试,并持续评估这些算法的离线和线上指标。最终表现优异的算法会成为我们推荐系统的一部分。
 

结语
虽 然 Netflix Prize 把推荐系统任务抽象为评分预测问题,但评分只是推荐系统众多数据来源的一种,评分预测也只是我们实际解决方案的一部分。随着时间的推移,我们已经把推荐系 统的任务重新定义为提升用户选择视频、观看视频、享受我们服务、并成为我们回头客的机率。更多的数据可以带来更好的效果,但是为了达到这样的目标,我们需 要不断优化我们的方法,进行合理的评测和迭代实验。

为了构建一个创新的个性化推荐平台,仅靠我们的这些研究是不够的,我们系统的提升空间 还很大。在 Netflix,我们都很热衷于挑选、观看电影和电视剧,我们专注于研究,并把这份激情转化为提升系统的强大直觉。我们充分利用数据,发现更好的特征、更 合理的模型和评测方法,以及弥补现有系统的不足。我们利用数据挖掘和其他的实验方法来验证我们的直觉,并按其优先级逐步实现。与科学实验一样,运气也是很 重要的,但是俗话说的好:机会留给有准备的人。最后,最重要的一点是我们需要我们的用户来评测我们最终的推荐结果,因为我们的目标就是为了提升用户在 Netflix 上的体验。

————————————————————————————————————
相比 blog 的第一部分,本文(blog 的第二部分)透露了 Netflix 推荐系统的不少技术细节。可以看到在 Netflix 推荐系统中,除了预测评分,还关注视频的热门程度、多样性等其他的特征,毕竟预测评分的 RMSE 只能说明:当用户看这部电影的时候,会打高分。但这里有个前提,即:“用户要看这部电影”,所以 blog 的最后部分才强调:“我们已经把推荐系统的任务重新定义为提升用户选择视频、观看视频、享受我们服务、并成为我们回头客的机率”。可见,Netflix 推荐算法的优化目标是:吸引用户去看电影,然后给予高的评分。

本文中介绍的排序部分是 Netfix 推荐系统的重要部分,从介绍中可以明确这部分是离线计算完成的,通过机器学习算法离线训练找到不同的特征权重,然后在线通过 A/B 测试验证哪一种特征组合最优、最有效,最终根据最优的特征组合生成用户对物品的兴趣得分(一个综合的得分)。

 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值