Part 1
我们今天说的是机器学习推荐系统。
做一个小实验:如果你的朋友看过《纸牌屋》,现在你要给他推荐 5 个视频,你会选择上面的列表,还是下面的列表?
我问了 20 个同事,14 个选择下面的列表,6 个选择上面的列表。
理由很多,包括色调、主题、气氛等等。其中有个同事说,下面还包括了纸牌屋,也许你没看完想继续看呢。
但实际上,无论你如何选择,本质上都是在瞎蒙。因为你不知道对方更多的信息,例如性别、年龄、身份、过去的喜好等等。
而要推荐的准,就要把同事的各种信息都采集上来,这样当他进入系统的时候,系统就可以基于他的喜好推荐不同的列表。
这背后的技术就是个性化推荐引擎。
Part 2
如果你没有个性化推荐引擎,你很可能就会对所有人推荐下面的方案,那会发生什么?
我们以 Netflix 为例,一个典型的 Netflix 会员是这样做的:
如果他在 60 秒到 90 秒内没有找到想看的视频,他会离开
如果他在 2 个屏幕内没看到想看的视频,他会离开
如果他看了 10 到 20 个标题还没找到想看的视频,他会离开
但是,在这些他浏览过的视频中,只有不多于 3 个他会详细看
换句话说,经验丰富的编辑们给用户推送了内容,但是从平均来看,他们很可能不买单。
一个典型的订阅用户是没有耐心的。
Part 3
如果使用了个性化推荐系统,结果就大大不同了。
从用户的层面来说,如果他能在短时间内获得自己想看的内容,他就不会取消订阅。
从公司的层面来说,个性化推荐能够让已有的视频变得更有价值。
以 Netflix 为例,他们追踪一个叫 ECS 的指标,全名是 Effective Catalog Size,它主要用于描述目录中各视频的播放分布。
通过优化 ECS,Netflix 可以让库里的视频变得更有价值。它可以让 Netflix 的视频观看处于良性的分布,既不会局限在少数的视频,带来很大的风险;也不会需要过多视频, 带来大量的版权购买费用。
另一个指标是 Take-Rate,它主要用于描述推荐到实际观看的比例。从 Netflix 的数据看,当 Take-Rate 提高时,用户对产品的参与度大大提高,同时也带来更低的订阅取消率。
关于这两个指标的详细介绍,可以看这篇文章:The Netflix Recommender System: Algorithms, Business Value, and Innovation,ACM
Part 4
Netflix 每年投入 1.5 亿美元做这件事情。
那么对于普通的公司来说,要想拥有自己的个性化推荐系统怎么办?例如一个有着 1000 万行数据/天的公司,他们可以使用推荐系统吗?
如果是在 5 年前,答案是很难的,因为机器学习的基础设施并不完善,大部分的事情都需要自己做,所以机器学习基本就是大公司的游戏。
但是在今天,小公司也可以拥有基于机器学习的推荐系统。这里的关键是,公司积极进入到机器学习的专业化分工链条,专注于自己的核心环节。
所以首先我们来看看机器学习的推荐系统是怎么运作的。
一般来说的架构是这样的:
它由两个部分组成,分别是召回系统(Retrieval)和排序系统(Ranking)。
1.召回系统(Retrieval)
召回系统有多种数据源,有些是简单的 Query,有些是算法计算的结果,目的是对所有的候选集做一次初选,这样就可以把更少的候选集数量输入到排序系统中,使得排序的复杂度和时间度大大降低,同时增加排序结果的多样性,例如说 CF 里的 itembase 偏重于 exploid,user based 偏重于 explore 等。
以 Netflix 为例,召回系统会定义出 Top Picks、Continue Watching 等栏目,然后把所有的候选影片按照一定规则分别放到这些栏目中。这样一个栏目的候选影片,就从过去的几百万减少到几千到几万,大大减少了计算的复杂度。同时,用户们也可以根据需求,从 Top Picks、Continue Watching 等栏目中发现想看的内容。
2.排序系统(Ranking)
有一部分召回的数据会采用个性化排序的策略,过程是通过机器学习的方法对用户数据、候选集数据进行训练,得到了每个用户的个性化推荐模型。这样当一个用户进来的时候,预测模型就会根据该用户的情况推荐个性化的列表。
以 Netflix 为例,在召回系统中,放到 Top Picks 的影片对于每个用户来说都是一样的。但是每个用户毕竟有不同的偏好,所以排序系统就需要对 Top Picks 中几千个不同的影片,针对不同的用户给出不同的推荐列表。
Part 5
召回系统
很多公司会选择自己做召回系统,因为它需要很强的业务理解能力,同时由于它在线下完成,对时间、稳定性的要求相对来说没那么高,所以小团队也可以完成召回系统。以 Netflix 为例子,他们的召回系统主要体现在产品的首页,当你打开 Netflix 首页的时候,类似于 Top Picks、Trending Now、Because You Watched 等栏目,都是属于召回系统栏目划分。
主要有以下几种:
1.Personalized Video Ranker:PVR
每个主页通常有 40 个栏目,每个栏目最多可显示 75 个视频(出于硬件和用户体验的考虑,这些数字在不同设备上有所不同)。每个栏目中的视频推荐,通常来自于一个算法。例如“悬疑电影”的类型,就由 PVR 算法驱动。它会根据每个人不同的情况,以个性化的方法给类别中的所有视频排序。这样即便是同一个类型,每个人看到的电影推荐也是不同的。
由于 PVR 应用非常广泛,它需要在各个类别中都保证比较好的推荐效果,这也会限制它能做到非常个性化。我们也可以把 PVR 和一些特征结合起来,例如当把 PVR 和流行度的特征结合,就可以用来对 Popular 栏目排序。
2.Top-N Video Ranker
这个算法主要是给 Top Picks 栏目提供推荐建议,目标是在整个视频目录中找到最好的个性化推荐。Top-N 拥有 PVR 没有的自由,因为它可以访问目录中任意一个子集。但是它也不会像 PVR 一样对一个类别的所有视频进行排名,它的专注点始终是排名最前的视频。
3.Trending Ranker
Netflix 发现短期的时间趋势(从几分钟到几天)是预测会员观看的强大预测因子,特别是和个性化数据相结合的时候。Trending Ranker 用于预测 Trending now 的栏目,在以下两种情况下它会预测的特别好:
(1)对那些几个月重复一次的节日,例如情人节的时候浪漫类视频的观看会显著上升
(2)一次性的短期事件,例如飓风即将到达某人口稠密的地区,这个事件被很多媒体报道,那么灾难片的观看也会显著上升
4.Continue Watching
这个算法服务于 Continue Watching 栏目。Continue Watching 预测的是,当用户从一个视频离开后,他会继续观看、重新观看还是放弃观看。算法使用的特征包括距离离开视频的时间,从视频跳出的节点(开始、中间还是结束时),是否在另一个标题下看过相同内容,所使用的设备等等。
5.Video-Video Similarity
Video-Video Similarity 服务于 Because You Watched 栏目。Because You Watch 主要是在用户看过一个视频后,推荐和这个视频相关的视频。在这背后主要是 Video-Video Similarity 算法,通过计算视频之间的相似性来推荐。值得注意的是,Video-Video Similarity 虽然不是个性化的算法,但是把哪一个 Because You Watched 栏目放到主页上,这个过程是个性化的。
6.Page Generation: Row Selection and Ranking
对于很多栏目中的视频选择,前面所说的算法已经能很好的做出推荐。但是把什么栏目放到主页上,这依然是个问题。
用户在不同的心情下,会选择不同的栏目。甚至很多时候“用户”背后并不是一个人,而是一个家庭,他们有着不同的偏好。所以如何在主页中构建栏目的组合,对最后的效果非常关键。
Page Generation 会使用所有算法的输出,它会考虑到栏目之间的相关性、页面之间的多样性等等。它也会对个人的数据进行个性化推荐,例如一个人的页面上完全没有 Because You Watch 栏目,而另一个人一半的篇幅都分配给了 Because You Watch。
7.Evidence
上面的这些算法构成了推荐系统,但是还有很多算法,例如 Evidence Selection 算法等,它们会配合推荐算法使用。
Evidence 算法做的事情是,当系统推荐一个视频的时候,它会选择合适的推荐理由呈现给用户。理由可能是星星评级、视频概要、演员或者得奖信息。Evidence 算法会评估每个用户最佳的信息呈现方式,例如在推荐同一部电影的时候,它对一个人的推荐理由是这部电影得过奥斯卡,对另一个人的推荐理由是和你看过的某个电影类似。它还会决定推荐电影时所选择的图片版本,以给推荐系统最好的支持。
Part 6
排序系统
当公司完成了召回系统的工作后,排序一般可以通过机器学习专家搭建的排序系统完成。
排序系统对性能的要求会非常高,因为它是个性化的。当用户进来的时候,1)排序系统要针对业务优化目标根据用户的历史行为数据训练出个性化模型。2)再结合已经训练出来的模型,对召回的候选集进行排序。对于很多业务来说,(2)这个排序过程不能超过 200 毫秒。
所以排序系统对于整个系统的架构能力有很高的要求,尤其是随着数据规模的越来越大,排序系统往往会对大量的数据和特征进行训练,得到更加复杂的模型,这里会有很大的工程挑战。
以 Netflix 为例,他们在推荐系统中大部分的精力,其实都投入到了排序系统。这包括线下调研的部分和线上预估的部分,包含了分布式的数据存储、计算、建模、预估等等。
而一个排序系统的好坏,一般可以用三个指标来衡量:
1.排序系统输出的算法效果
2.排序系统的计算性能
3.搭建排序系统的成本
我们在之前的一篇文章《企业做人工智能需要多少钱!》详细讨论了这个话题。
总的来说结果是这样的:
排序系统输出的算法效果,对于 1000 万行/天的业务,通过机器学习排序给点击率提升了 21.6%。
排序系统的计算性能:机器学习平台可以支撑上百亿的数据规模,而自建机器学习平台,在不超过 1000 万的投入下能处理的数据量就要少得多。
搭建排序系统的成本:对于一个 1000 万行的业务,一个专业化的机器学习平台的成本大概是 116 万/年,而自建团队的投入要 994 万/年。
所以我们更推荐在排序系统上采用专业的机器学习来完成。这样,公司只需要输入召回的结果,通过专业的机器学习排序服务和列表优化、去重等工作,就可以得到最后推荐列表了。
Part 7
Netflix 作为先行者,他们花费了巨额的投入和十多年的时间,探索个性化推荐系统的大方向。他们的投入也收到了回报,如今 Netflix 已经有了超过 1 亿的付费订阅用户。
那么对于后来者来说,更好的方法是学习已有的经验,同时根据当下行业发展的情况,有所为有所不为。例如推荐系统要做好,短期内把业务人员对于用户的理解建立的召回体系,直接接入机器学习平台的排序服务,就可以在现有基础上优化用户看到的排序结果,指标上也会有立竿见影的提升。将来,业务人员将继续完善丰富召回体系,甚至加上机器学习平台的召回服务,就能够从海量候选集中为用户找到更精准的推荐。
也就是说,从起步阶段到成熟阶段一般会经历这样的过程:
单一业务召回 + 不排序
多业务召回 + 机器学习排序
多业务召回 + 某些算法召回 + 机器学习排序
在这个过程中需要业务人员和机器学习平台的紧密合作。
这种方法论不仅可以用在视频推荐的领域,它在计算广告、内容分发、商品推荐、主播推荐、婚恋匹配等各种领域,都有非常广泛的应用。
CIO之家 www.ciozj.com 公众号:imciow