你看到哪版电影海报,由算法决定:揭秘Netflix个性化推荐系统
大数据文摘作品
作者: Ashok Chandrashekar, Fernando Amat, Justin Basilico and Tony Jebara
编译:Niki、Katherine Hou、吴双、Yawei Xia
一直以来Netflix都致力于通过个性化推荐系统为每位用户及时推荐最符合他们口味的影片。一个类别下往往有成千上万的影片,同时我们又有来自不同用户的超过一亿个账户,这样的情况下,为每位用户推荐最对胃口的影片就十分关键。
但其实我们所做的推荐影片的工作不单单止步于此。为什么你会关注我们所推荐的某部影片?如何能让你对一个陌生、全新的影片名感兴趣?如何说服你让你觉得某部影片值得去看?解答这些问题对于帮助我们的用户在一堆陌生的影片名中发现好的、他们所喜欢的内容来说至关重要。
要解决这一挑战,其中一种方式是在描绘影片的配图上花心思。当一部影片的配图有某些吸引你的地方时,这张图片就是让你了解片名背后故事的最直接途径,也是你会喜欢这部影片的视觉“证据”。这张配图中也许有一个你认识的演员,也许描绘了像是汽车追捕这样紧张激动的画面,抑或是包含一个传达着电影或是电视剧核心的戏剧性画面。如果我们把这张精彩绝伦的配图展现在你的主页(就像常说的那样:一张图胜过千行字),那么也许,仅仅只是也许,你会打开看一看。这就是Netflix和其他传统媒体在提供影视资讯上的另一个不同: 我们没有一个通用的影片推荐列表,而是为全球过亿的用户提供他们每个人自己的个性化影片推荐和视觉资料。
没有配图的Netflix主页。这是之前我们推荐系统的算法所生成的主页。
在之前的文章中,我们探讨了针对所有用户如何为每部影片配置最合适的图片。通过多臂赌博机问题(Multi-armed bandit problem)的算法,我们为一部影片,比如《怪奇物语》(Stranger Things)寻找可以覆盖最大范围用户获取最多播放量的最佳配图。然而,在知道不同用户之间品位和喜好存在着巨大差异的情况下,如果能够为每位用户找到最吸引他们的配图去放大影片中最可能让他们感兴趣的元素,我们是否会收获更高的播放量?
《怪奇物语》在我们个性化算法中超过5%展现次数的配图。不同配图包含着剧情发展中的不同主题,这些信息无法通过任何单独一张图片去呈现。
把这个问题作为一个启发,让我们来探究一下在什么情境下配图的个性化设置会有意义。假设每位用户有自己的观影记录,左侧是某个用户过去曾看过的三部影片,而箭头指向的右侧是我们针对这位用户推荐某个影片所使用的配图。
设想一下为《心灵捕手》(Good Will Hunting)配图时,应如何选择不同的图片为不同用户去描绘这部影片。我们可以根据用户对电影主题和种类的喜好去选择图片。如果我们给一个看过很多爱情片的人展示包含马特•达蒙(Matt Damon)和明妮•德里弗(Minnie Driver)一起的剧照也许会让他对《心灵捕手》感兴趣。而一个看过很多喜剧片的人如果看到包含罗宾•威廉姆斯(Robin Williams,著名喜剧演员)的剧照也许会想去看这部电影。
再举个例子,设想当我们为《低俗小说》(Pulp Fiction)这部电影设置个性化配图时,不同用户对于影片主演的喜好会如何影响我们对于图片的选择?一个用户看了很多乌玛•瑟曼(Uma Thurman)主演的电影,那么为他推荐《低俗小说》时如果配上乌玛的剧照,他就很可能选择点开去看。同理,对于一个约翰•特拉沃尔塔(John Travolta)的粉丝,《低俗小说》这部电影配上约翰的剧照就会更有吸引力。
当然,并非所有情境下个性化配图的选择都如此清晰明确。所以与其一一列举这些人为制定的规则,倒不如让数据说话,告诉我们如何去选择配图。总的来说,配图的个性化设计使每部影片在不同用户前呈现出最好的第一印象,从而提升用户的使用体验。
挑战
在Netflix,我们崇尚个性化服务,并在算法上收纳了用户体验的各方面信息,包括主界面影片推荐列表的行数,每行不同的标题,陈列的宣传照片和我们所发放的信息等等。每个个性化方面的新尝试都有各自的挑战,配图的个性化设置也不例外且其表现出了多种挑战。其中一个是我们只能为每部电影选择一张配图去诠释它。然而传统的推荐系统可以让我们为每位用户展示多个选项,从而根据每个人的最终选择来了解他们的喜好。这意味着个性化配图的选择是一个死循环的“鸡和蛋”的问题: 当一个用户选择播放某部影片时,他只看到了我们选择展示给他的那一张配图。而我们想要知道的是:什么时候用户对影片的选择(看或不看)会受配图的影响,而什么时候又不会受影响(不论展示什么配图,用户都会选择看或不看)。因此个性化配图的选择问题是在传统推荐系统问题的顶端,这中间的算法必须协同解决这个问题。当然,要明白究竟如何个性化配图,我们需要收集大量的数据去找寻对用户来说一张配图明显好于其他配图的信号。
另一个挑战是去了解当我们给一个用户推荐某部影片时变换展示多张配图会有怎样的影响。配图的变换是否会使影片的辨识度降低,从而使用户很难再次从视觉上认出这部影片,比如,用户之前看到某张配图觉得有意思,但还没来得及去看。或是,变换成另一张更有吸引力的配图使得用户重新考虑了这部影片。显然,当我们找到更好的配图时肯定要更换之前的配图,但是持续的变换配图也可能会使用户产生疑惑。变化的配图也给问题的归因带来挑战,因为我们不知道究竟是哪张配图使得用户对影片产生了兴趣。
接下来的挑战就是去理解同一页或同一板块所展示的不同影片配图之间会相互产生怎样的影响。也许用主角英勇的特写镜头作为影片配图很合适是因为其在众多图片中格外引人注目。但是如果所有的电影都是这样的配图,那整个页面可能就不会很吸引人。所以把每张配图孤立地去挑选还远远不够,我们需要考虑如何使同一次展现在一个页面上的配图变得多种多样。除了同一页面上其他影片的配图可能存在的影响,一张影片配图的有效性也可能取决于其他对影片的介绍(比如故事梗概、预告片等)。因此,我们需要做出多样化的选择,强调用户对于影片的不同兴趣点,使其效果互补。
为了达到有效的个性化设置,我们还需要为每部影片准备一个图片集。这意味着图片集中的每张图片都是能够吸引人的、有一定信息量的,并有代表性的而不是“标题党”。每部影片的图片之间也需要有足够大的差异去吸引有着不同喜好兴趣的潜在观众。归根结底,一张配图的有效性和信息量其实取决于看到的不同的人。因此我们不仅需要配图突出同一电影中的不同主题,还需要突出不同的审美。我们的画家和设计师团队努力地去创造在不同维度风格迥异的配图。他们在创作过程中也把个性化配图挑选的算法考虑其中。
最后的难题是在技术上进行大规模个性化配图。一个挑战是用户体验是通过视觉的,所以需要大量的图像。对每个作品进行个性配图,服务器要处理峰值每秒超两千万的低延时请求。这样的系统一定要是稳定的:不能快速完整地显示出这些配图会很大程度上降低了用户体验。我们的个性化算法也需要在新片上映时快速响应,即便是在一无所知的情况下也能快速学习。在此之后,算法需要不断适应,因为配图的效果可能随影片的生命周期和观众口味的变化而不断变化。
“上下文老虎机”方法
Netflix大部分的推荐机制都是采用机器学习的算法。传统方式上,我们会收集一组用户如何使用我们服务的数据,然后在这组数据上采用一种新的机器学习算法。接下来我们会通过A/B测试的方式测试这个算法与当前的系统进行比较。A/B 测试通过一组随机的用户数据去测试新的算法是否比当前的系统更好。A组的成员会得到通过现在的系统生成的图片而B组会得到新的算法所生成的图片。如果B组的用户在Netflix有更高的转化率,那我们就会把这个新的算法推广到整个客户群。但有一点不好的是,这种方式会产生损失(Regret):许多用户在很长一段时间内无法得到这种更好的用户体验。下图展示了这一过程:
为了降低损失(Regret),我们不再采用批量机器学习的方式,而是考虑在线机器学习。针对配图的个性化定制,我们采用的线上学习框架是“上下文老虎机”(contextual bandits)。相比于以前等着收集一整批次的数据,等着学习一个模型,然后等着一个A/B测试来得出结论,“上下文老虎机”能针对每个用户和情境快速找出最优的个性化配图选择。简要地说,“上下文老虎机”是一类在线学习算法,这类算法通过在一个变化的情况下不断将所学模型应用于每个用户情景的好处来平衡收集足够的数据去学习一个无偏模型的代价。在我们之前非个性化的图片筛选框架中,我们用的是“非上下文情境的老虎机”(non-contextual bandits),这种方法在寻找最佳配图时不考虑上下文情境。而对于个性化来说,用户就是上下文情境,因为我们期望不同的用户对配图有不同的回应。
“上下文老虎机”的一个重要属性是它们天生就能将损失(Regret)最小化。“上下文老虎机”的训练数据是通过在学习模型的预测中注入受控的随机化变量获得的。随机化方案的复杂程度可以变化,从具有均匀随机性的简单ε贪婪公式(epsilon-greedy formulations)到能够根据模型的不确定性自适应地改变闭环方案。我们笼统地称之为数据探索(data exploration)。一个影片的所有备选配图数量和系统部署到的用户总体大小决定了数据探索策略的选择。有了这样的探索,我们需要记录关于每个配图选择的随机化的信息。这个记录允许我们修正偏斜的选择倾向,从而如下所述,用不偏倚的方式执行离线模型评估。
由于实际上有的用户的配图呈现选择可能并不会用那次预测中最好的图像,所以“上下文老虎机”里的数据探索一般都是有一定代价的(Regret)。这一随机化对于用户体验(进而对于我们的指标)有怎样的影响呢?对于超过一亿用户来说,数据探索导致的损失(Regret)一般都很小,而且被隐式地分摊到了我们庞大用户群的每个用户,来帮助提供目录中的一小部分配图的反馈。这使得平均每个用户的数据探索代价微不足道,这对于选择“上下文老虎机”来运转我们用户体验中的关键部分,是一个非常重要的考量。如果数据探索的代价很高,那用“上下文老虎机”做随机化和数据探索就会不太合适。
在我们的线上探索方案中,我们获得的训练数据集记录了对于每个(用户,影片名,图片)元组,其对应的影片是否被播放。此外,我们还能够控制数据探索使得配图筛选结果不要改变得太过频繁。这使得特定的配图与用户是否播放影片之间的归因变得清晰。我们还通过关注用户参与的质量来仔细地确定每个观察值的标签,从而避免学习的模型推荐了“标题党”图片:那些诱使用户开始播放,但最终导致低质量参与(很快就关掉)的图片。
模型训练
在这个线上学习的设置中,我们训练“上下文老虎机”以基于用户的上下文情境为每个用户选择最好的配图。我们一般对每个影片有几十个备选图片。为了学习一个筛选模型,我们可以考虑这个问题的一个简化情况,就是为一个用户对各个影片所有的备选图片进行排序。即使是用这个简化版本,我们依然可以学习到用户不同影片下的图片偏好,因为对于每张备选图片,我们都有一些用户是被展示了图片且选择播放了影片,也有一些用户是被展示了图片但并没有选择播放影片。这些偏好可以用于建模来预测对于每个(用户,影片名,图片)元组,用户会成为高质量参与者的概率。这些可以是有监督的学习模型,或者是“上下文老虎机”结合Thompson抽样,LinUCB或贝叶斯方法,来智能地平衡,使数据探索做出最好的预测。
潜在的信号
在“上下文老虎机中”,上下文情境通常作为一个特征向量输入到模型中。对于这个问题,我们可以用许多信号来作为特征。通常,我们可以考虑许多用户的属性:他们已经播放过的影片名,影片的类型,用户对于特定影片名的互动,他们的国家,语言偏好,用户使用的设备,登录的时间段和星期几。既然我们的算法在选择图片时结合了我们的个性化影片推荐引擎,我们就也可以用其多种算法推荐的影片(并不考虑到底用什么图片来代表)来作为信号。
一个重要的考量是在备选池中,有些图片本身就比其他一些要更好。我们观察了在数据探索中所有图片的采纳频率,就是有效播放次数除以图片出现的次数。我们之前的非个性化配图筛选模型就是用图片的采纳率差异来选择一个对于整个用户群最优的图片。在我们新的上下文个性化模型中,采纳率仍然很重要,而且个性化模型依旧会重获那些在非个性化模型排序中处于平均水平的选择。
图片筛选
对一个用户最佳配图的设置问题其实是在一个影片的可选图片池中找到最佳图片的筛选问题。一旦模型像上面说的那样训练完成了,我们要用它对每个上下文情境中的图片进行排序。模型预测了在情境中一个给定用户看到一张给定图片后的影片播放概率。我们用这些概率对这套备选图片进行排序,然后选出概率最高的那个。那就是我们展示给那个特定用户的配图。
模型表现评估
线下
在模型上线部署于真正的用户之前我们需要对“上下文老虎机”算法(contextual bandit algorithms)进行评估,我们可以用一个叫做重播(replay)的线下评估方法[1]。这个方法允许我们根据记录的探索数据回答反事实问题(图表1)。换句话说,我们能够在线下比较:如果我们无偏地使用不同的算法,在不同情况下的历史场景中会发生什么。
图表1:一个简单的例子,根据记录的数据计算了重播测试的指标。对于每一个用户,出现了一张随机的图片(第一行)。系统记录了该次展示以及用户是否播放了这个影片(绿色圈代表播放,红色圈代表没有播放)。一个新模型的重播测试指标是通过匹配找到随机安排和模型安排一致的用户(黑色方块)并计算这些用户中的图片采纳率得来的。
重播测试(Replay)使我们能够看到,如果我们假设展示的图片是用新的算法而不是已使用的算法得出时,用户是如何反馈的。对于图片来说,我们对几个指标感兴趣,尤其是之前描述的采纳率。图表2展示了“上下文老虎机”方法相对于随机选择或非“上下文老虎机”如何帮助提高目录中的平均采纳率。
图表2:对于不同算法,基于重播记录的图片探索数据的平均图片采纳率(越高越好)。随机方法(绿色)随机选择一张图片。简单老虎机算法(黄色)选择最高采纳率的图片。“上下文老虎机算法”(蓝色和粉色)根据上下文为不同用户选择不同的图片。
图表3:基于用户类型做的上下文图片筛选案例。“喜剧”针对的是大多看喜剧的用户。相类似地,“浪漫”用户大多看浪漫爱情主题,“上下文老虎机”为倾向于喜剧的用户选择了Robin Williams(一个著名的喜剧演员)的图片,同时为倾向于浪漫爱情剧的用户选择了一张在接吻的情侣的图片。
线上
在线下实验了这么多不同的模型,并且发现了一些在重播测试(Replay)时有明显提升的模型之后,我们最终进行了一个A/B测试来比较最可靠的个性化上下文老虎机和非个性化老虎机算法的效果。正如我们猜想的,个性化起作用了,并且在我们的核心指标上表现出了显著的提升。我们还看到在线下重播测试时监测的数据和在线上模型观测到的数据间有合理的相关性。线上的结果还产生了一些有趣的发现。比如说,在那些对影片名没有过先前互动的用户身上,个性化的提升效果更大。这是合理的,因为我们会期望配图的展示对于那些不太熟悉这个影片名的用户来说更为重要。
结论
利用这个方法,我们已经在针对影片推荐和各项服务的个性化配图筛选上迈出了第一步。这为我们的用户发现新内容带来了一个有意义的进步,所以我们已经将这一服务开放给了每一个人!这个项目是不仅关注推荐内容还关注推荐给用户的方式的第一个案例。但是实际上还有许多机会可以去拓展和提升这个还处于初级阶段的方法。这些机会包括:开发尽可能快速启动的进行新图片和新影片的个性化处理算法,例如通过使用计算机视觉技术;扩展模型应用于其他类型的配图或其他影片描述上(比如影片梗概,诠释资料和预告片)。还有一个更加宽泛的问题:帮助艺术家和设计师找到应该加入什么样的元素以使得一个影片描述更加吸引人和个性化。
如果你对这类的挑战感兴趣,可以在文末留言讨论!对于这类项目,具有机器学习和/或计算机视觉的专业知识的讨论尤其令我们感到兴奋。
原文链接:https://medium.com/netflix-techblog/artwork-personalization-c589f074ad76
大数据文摘编辑部招人啦!!!
地处宇宙之心
和最聪明的脑袋一起玩耍
择个黄道吉日点击下方二维码加入我们~
志愿者介绍
回复“志愿者”加入我们
往期精彩文章
点击图片阅读
Kaggle大神带你上榜单Top2%:点击预测大赛纪实(上)