什么是推荐系统?
最早的视频推荐系统,我们可以追溯到街角的「录像店」——在那里你可以租赁到自己喜欢看的碟。但是有了视频网站后,用户便可以在家通过 APP 打开智能电视,或者直接上网,找到他要看的视频、电影。所以推荐系统首先要让用户「能够」找到他想看的内容,其次,在找的过程中,还要让用户找的更爽。比如有个用户进来看了一堆内容,那么我们把他看的所有的历史行为,嵌入到推荐引擎当中去。这个推荐引擎就会生成个性化的频道,下次这个用户再登录,或者都不用下一次,过 5 分钟之后,他看到的内容就会根据他最近发生的历史行为发生变化,这就是推荐系统的基本逻辑。
基于用户行为的推荐的局限性
刚刚说的这种方法叫基于用户行为的推荐,当然是有一定局限性的。比如你只有一个用户行为的时候,你就不知道他会不会看一个从来没人看过的内容,这其实就是长尾问题。当你可以积累越来越多的用户,用户的历史行为会有助于你对长尾内容的理解。
基于用户行为的三代推荐系统模型推荐系统最终可以抽象成一个优化目标的问题。
我们要想一想,这个推荐系统到底在为谁服务?实际上它在为三类不同的利益相关方在服务:
第一个:用户。用户是为了能够更方便找到他想看的东西。
第二个:平台本身。平台希望连接服务提供商、内容提供商和用户,他希望赚钱。
第三个:内容提供商。
因为内容提供商如果能有更多露出,他在这个渠道上,就会获得点击量或者/和品牌效应,那么他就可以通过一些方法变现,无论是广告的方法还是在一些离线渠道收买的方法。
所以一个推荐算法要同时服务三个利益各不相同的相关方,这本身导致了一个矛盾性。
协同滤波
最早的算法其实比较简单,叫协同滤波。就是相似的人,我会给他相似的内容,那么怎么定义相似的人呢?那就是他们之前具有相同的行为,但这个地方就变成了一个死循环。
后来有人想到一个方法,就叫协同滤波,就是用一个 interactive 的方法去 train,两边互相学,然后收链,这是一个比较标准的方法。那么在我们的系统里面用了大概接近 7、8 年吧,也比较成功。
我们每一个展示叫一个 train,比如 Top picks for you 这是一个最标准的 record train,就是推荐 train.
第二个是 you may also like,你可能也会喜欢,这也是一个推荐的 train。
第三个就是一个子类别。一般大的类别就是言情、动作片,其实这个类别我们还分了一些小类别,比如说这个叫做法庭判案,实际上是动作片下面的一个主类别,这个也可以用推荐算法来产生。
这个叫 auto play,现在国内大多数网站都会有的功能,你看完了一个就自动播下一个,这个也是根据推荐算法来产生的
矩阵分解
现在的产品中我们使用的是矩阵分解的方法。
其实从 Netflix 以后大家就已经意识到矩阵分解是一种很有效的建模方式,它的基本原理就是把用户作为一个维度,内容作为一个维度,然后建一个二维的矩阵,把这个二维的矩阵找到一个低维的表示,这可能只有 50 或者 100 维,这个个数还是跟内容一样,所以每个内容有一个 100 维的小的表示,每个用户也有一个 100 维的小的表示。这两个作为一个点击,可以恢复出原来的东西。
Nade - 深度学习推荐引擎
我们下一代的推荐引擎是用深度学习的方法,具体的方法叫做 Nade,它其实原来是在文本的 top model 里面的一种方法。我们有一个专家是跟着 Nade 的发明人做博士毕业的,所以他对 Nade 特了解,他来到我们公司之后,就发明了 CF-NADE。这是我们 Hulu 自己发明的一种方法。
其实这个原理也不是很难,就是我们把这个 Nade 看成一个黑箱,基本的想法就是用 Nade 来训练一个用户的表示和一个内容的表示,但是这个表示可以不像矩阵分解那么死,因为它结合的时候不再是一个代数的点程,而是基于一个神经网络的,实际上带来了更多的自由度。
基于内容的推荐
我们现在在做的一个事,是去了解一个视频里每一帧他大概的情感是什么?你要说很复杂的情感现在也很难准确辨别,所以我们做的方法是先做一个 Face Detector,然后再把脸上的表情识别出来,现在也有一些很多现成做表情识别的东西。我们认为表情代表的场景的情感,大家可以看到下面有一些结果。
我们还会借助视频和音频相融合的方式。它有三套方法,一套是基于 CNN 的,一套是基于 RNN 的,还有一套是基于 SVM 的,一共是三套方法,我们会在三套方法中做一些融合。
如何说服用户?
刚刚讲的所有模型,其实最后归根结底是「做展示」,无论是用货架的方法来展示,还是用自动播放的方法来展示。但是这个展示的有效性很大程度上是取决于你有没有打动用户,你要给她一个很好的理由。我们试图给出一些推荐的理由,比如我们给这个用户推了这个剧,我们会说是因为你看过他的前传,这样的话用户会觉得,你确实是有道理的。还有一个是增强用户对系统的信任,如果你的系统是黑盒,扔出来一堆剧说看吧,那估计很难说服用户。
大家可以回想一下,在录像店的体验,如果是那种小店的话,你跟那个店主特别熟,他给你推一个张媛又拍了一个新片你可以看。你会知道,他真的知道你了解你,给你推这个东西,我们想达到的就是让计算机能够被用户所信任。
当然大家可能觉得这个跟人编辑还是有很大的差距,所以我们还在继续努力。这里面也用到一些基本 CNN 的东西。所以深度学习在我看来就是一个工具,你可以用来做很多的事,掌握好这个工具,灵活性更大。
Hulu 的直播新尝试
刚才大部分讲视频点播的场景,其实 HuLu 今年 6 月会做一个新功能:直播,这是一个很大的 feature,我们和美国四大电视台都有合作,直接把直播内容拿过来。每一个都是电视台正在播的节目,它跟歌华有很大的区别,你可以做搜索,你可以根据类别来分,已经完全把频道的概念淡化了,但你还是可以根据频道做一些浏览,并且可直接浏览,比如我想看现在所有的动作片,不管是哪个台播的,都可以直接看到。
我们的愿景是说,到了互联网时代,我们想要把电视台的概念完全透明化。它只是这个时间在播这个内容,对于这些内容应该怎样重新组合,完全应该是我们个性化推荐算法的责任,我们来给每个用户定制一个电视台,这是我们的愿景。
关于冷启动
讲到冷启动,我们思路是在点播里,SVOD 是对点播的缩写,LIVE 是直播的缩写。在点播里我们有用户行为,那么根据一定的原数据,我们把用户行为 push 到一个直播的库里。
具体的方法,我们会拿到每个剧的一些描述,包括 title、actor 是谁,我们会把这种描述用 NLP 的方法,也是用词向量的方法,把它变成一个这叫 description embedding,然后可以度量相似度。有了相似度之后,我们可以把一个点播剧和一个直播剧的相似度,做一个关联。
实际上我们刚才讲到的冷启动问题,就是你怎么把用户在一个已知库上的行为,就是绿色的矩阵,扩张到一个不断有新剧出来,蓝色的更大的矩阵?这个矩阵的行和列,就是剧跟剧之间的关系,所以当你的剧集从已知两万剧的小库,变成一个 10 万剧的大库时,你就是要从绿色的矩阵到蓝色的矩阵当中。
我们用的方法就是基于源数据方法,你就可以产生一跳,比如这是一个 LIVE 的剧,这是一个 SWA 的剧,你想他们这些相关性,这一跳用得是原数据的方法得到的,那这个数就不是零了。
然后知道这个数之后,你想知道同样这个剧和另外一个 SWA 里面剧的关系的时候,你可以借助这两个剧在这个矩阵里的关系,就是给他乘一下,然后再乘一下,你就可以到它下一个数。这是一个比较简单的描述,当然具体的做法比这稍微复杂一些。
这是极客公园2017 年第一期的活动,来自 Hulu 北京研发中心的研发总监周涵宁 Eric,和我们分享了在视频产品中的推荐系统模型,以及他在 Hulu 的相关技术产品经验。
本文为 @ 21CTO 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。