老谢的自留地 2020-01-06
原文链接:http://techblog.netflix.com/2012/04/netflix-recommendations-beyond-5-stars.html
在这篇包含两个部分的博文中,我们将揭开 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 的第二部分:排序还是透露了不少技术细节。详见:
> bornhe‘s blog Netflix 推荐系统:第二部分