转自:http://www.programmer.com.cn/9242/
文 / 郑华
随着互联网特别是社会化网络的快速发展,我们正处于信息过载的时代。用户面对过量的信息很难找到自己真正感兴趣的内容,而内容提供商也很难把优质的内容准确推送给感兴趣的用户。推荐系统被认为是解决这些问题的有效方法,它对用户的历史行为进行挖掘,对用户兴趣进行建模,并对用户未来的行为进行预测,从而建立了用户和内容的关系。
视频网站同样也面临着信息过载的问题,比如YouTube目前有数十亿视频条目,而且每分钟都有近1500分钟时长的视频被上传,而专业视频网站Hulu也有近20万的高质量视频,用户也很难从中找到自己真正感兴趣的内容;同时提高用户的观看和停留时间也非常重要,所以推荐系统对于视频网站来说是有必要的。
视频网站中的推荐系统
目前视频网站主要分为两种,一种是以用户产生内容为主的网站(UGC网站),比如国外的YouTube和国内的优酷、土豆等;另一种是专业视频内容为主的网站,比如国外的Hulu、Netflix和国内的奇艺、新浪大片、搜狐视频等。为了获得广告商和资本市场的青睐,国内UGC视频网站比如优酷和土豆也纷纷转型为两者兼备的模式。这两种视频网站的内容和用户行为都是不一样的,从而会导致相应的推荐系统的设计也会有一定差别。表1简单比较了两种网站的一些差别。
相比较而言,UGC网站的视频数量多,内容比较丰富,但是质量良莠不齐,以短视频居多,而且没很好的内容数据。一般的推荐是基于单个视频的,而且会对视频质量做一定过滤(比如去重和限制最少观看次等);UGC内容生命周期比较短,所以推荐系统的设计比较强调时效性,把最新的视频推荐给用户,保持推荐的新鲜性;同时UGC网站的内容比较多样化并且用户一般没有很强的目的性,所以推荐要尽量多样化并且和用户最近的行为相关。
对于专业视频网站,内容一般有很好的结构化内容数据,基本上都是按照电视剧或者电影来统一组织视频,所以推荐一般都是基于剧集而不是单个视频;剧集按照现在是否在播又分为首播剧(On-air show)和重播剧(Library show),相比较而言首播剧一般比较热门,用户获知的渠道很多并对其有明确的追看(Catch-up)需求,而过往剧集更适合推荐;视频的长度一般比较长而且剧集中有很多视频,用户的接受成本相对比较高,推荐的时机也是专业视频网站需要考虑的问题,比如周末或者节假日用户比较空闲而且一般没有首播剧,适合推荐一些较长的连续剧等。
当然除了这些不同点外,一般认为视频网站的推荐系统设计还应遵循一些基本的原则,比如系统能给出合理的推荐赢得用户的信任;系统能对用户的行为作出即时的反应;推荐的逻辑对用户透明;在适当时机鼓励用户积极参与和反馈;推荐的结果要提供足够的信息等。
从推荐产品形态上来看,目前在视频网站中使用的推荐有以下几类:相关推荐、个性化推荐以及个性化电视频道(Leanback)等。
相关推荐就是把用户正在观看或者浏览的视频的相关视频推荐给用户,也就是“喜欢这个视频的用户还喜欢”,比如图1是Netflix对经典《两杆大烟枪》的相关推荐界面,推荐出来一些盖•里奇和其他导演的黑色幽默作品。结果展示出视频的重要信息(标题、缩略图、平均打分、类型、年代、时长、简介、导演、演员等),并且提供打分或者不感兴趣的选项来收集用户反馈。
个性化推荐是根据用户所有的历史行为推断出用户的兴趣,并以此推荐用户最可能感兴趣的视频列表。与相关推荐相比,个性化推荐综合使用了用户的所有历史行为,包括打分、观看、订阅、搜索、标注标签、分享和评论等,而不仅仅是当前的单个浏览或观看行为,所以更准确反映出用户的兴趣。从历史行为中反映的用户兴趣也可能会多样化,所以一般个性化推荐展示结果会按照相对独立的兴趣点(比如类型等)进行聚合。图2是Hulu的个性化推荐的展示形式:我们按照推荐视频的类型对结果进行聚合,用户也可以切换自己感兴趣的类型;结果有很详细的视频内容信息以及最有用的用户评论信息;推荐结果有解释;用户可以直接对推荐结果进行“已经看过”或者“感兴趣与否”的反馈,如果感兴趣还可以进一步收藏推荐结果或者直接进入观看页面等。
在线视频的一个重要战场就是用户的客厅电视,这是最有可能采取收费模式的。目前包括Netflix、Hulu Plus等服务都提供720P的高清视频可以通过游戏平台、机顶设备、蓝光播放器或者高清电视直接播放在大尺寸的客厅电视上。Google也在去年推出了Google TV,试图进入这一领域。为了保持和现有电视相似的操作,Leanback就应运而生了。图3就是YouTube推出Leanback服务的界面。用户可以创建自己的频道,或者推荐系统根据用户的历史行为自动创建符合用户兴趣的视频节目频道。用户可以不间断地观看频道里面的视频,播放的过程中系统不断收集用户对视频的反馈(喜欢、不喜欢、跳过、看完等)实时调整推荐列表,让用户看到越来越满意的结果。
业界一般认为用户界面设计在整个推荐系统中起决定性的作用。传统的推荐结果展示都是基于文本和图片形式的,信息量大但不够形象生动。Hulu在推荐的UI上做了一个大胆的尝试,首次使用视频和声音的形式展示推荐的结果,效果类似于有个性化消息的电视预告片,如图4所示。在实际使用中取得了较好的效果,平均意义上用户对同一个节目感兴趣的概率是传统方式的三倍。
推荐系统的方法
一般认为推荐系统的方法可以按照数据和模型两个维度进行分类。从使用的数据上来看,推荐系统可以分为协同过滤系统、内容过滤系统和社会化过滤系统等;从使用的模型来看可分为基于邻域的模型、矩阵分解模型和图模型等。
协同过滤(Collaborative Filtering)是推荐系统中最著名的方法,它主要通过用户的历史行为分析出用户的兴趣并给用户做出推荐。协同过滤有很多算法,比较常见的有邻域算法(UserCF和ItemCF等)、矩阵分解算法(或Latent Factor Model,如RSVD和SVD++等)和图算法等。目前视频网站中比较常用的协同过滤算法是ItemCF,它的基本假设就是用户会喜欢跟自己之前喜欢视频比较类似的视频。因此在给这个用户做推荐的时候,需要先从用户的历史行为中得到他喜欢的视频列表,然后从剩下的视频中找到和用户之前喜欢列表最相似的视频推荐给他。可见这个方法最核心的就是怎样合理计算两个视频的相似度,比较常用的有余弦相似度或者皮尔逊相关系数等,实际使用的时候需要根据具体情况进行修正。一般认为ItemCF算法比较简单、容易扩展,准确度比较高,能实时更新而且可以解释,可以处理显式(打分或者感兴趣)或者隐式反馈(其他如观看等行为),所以在实际的视频推荐系统中如Netflix、Hulu和YouTube都使用了它。协同过滤方法的一个重要缺点是不能冷启动,也就是对于新加入的视频或者用户都不能做出推荐,一般需要混合其他推荐方法(比如内容过滤等)来处理这个问题。
内容过滤的基本思想是给用户推荐和他们之前喜欢的视频在内容上相似的其他视频。比如用户喜欢看《两杆大烟枪》,那么内容过滤系统就会推荐盖•里奇的其他类似内容作品如《偷拐抢骗》等;如果用户喜欢《火影忍者》,系统就会推荐《火影忍者疾风传》或者其他热血类的日本动画。因此内容过滤的核心是怎样计算两个视频之间的内容相似度。一般情况下,计算视频的内容相似度是从视频内容(比如标题、类型、地区、出品公司、年代、导演、演员、剧情简介、用户标签、评论等)中抽取出关键词,然后确定这些关键词的权重,这样得到了这个视频的向量模型,再计算两个视频向量模型的相似度。随着专家标注系统Pandora在音乐推荐领域的大获成功,目前在视频领域也出现了类似的网站比如Jinni,它定义了描述电影基因的900多个标签(类型、剧情、类别、年代、地点、心情、适合的观影人群、好评、风格、态度、画面等),然后电影专家会给每部电影标注这些标签,从而可以得到每部电影的专家标注的向量空间并以此做出推荐。由于专家标注的工作量非常大又没有公认的收益,目前在实际中并没有大规模使用,一般视频网站还是使用比较传统的方法,结合视频的内容和用户的标签进行内容过滤。
社会化过滤的思想是用户的喜好可能会受他在社会网络中的好友影响。随着SNS网络的兴起,社会化网络的推荐越来越受到关注,比如视频搜索网站Clicker就利用Facebook的好友关系做出推荐;当然利用Facebook的另外一个好处是视频网站可以得到用户的更多信息,特别是一些站外的Like信息,这些也会帮助改善推荐质量。
一般的视频网站的推荐系统都不是单一的,而是混合了这些过滤方法,目前比较常见是混合ItemCF和内容过滤等。
视频推荐系统的框架
视频推荐系统主要工作是从用户的历史行为中分析出用户的兴趣然后找出符合其兴趣的视频展示给用户。因此一个完整的推荐系统,至少包括日志系统、推荐引擎和展示界面设计等部分。展示界面设计在前面我们已经谈过,这里就不再赘述。日志系统主要收集用户的行为和对推荐系统的反馈。推荐引擎也分离线和在线两部分:离线系统主要负责生成视频相关矩阵,存储在数据库中,供在线系统实时查询和调用;在线系统负责实时响应用户的请求,在线提取和分析用户行为并生成最终推荐结果。一个典型的视频推荐系统的框图如图5所示。
目前一般视频网站的流量和用户规模都比较庞大,后台的日志系统的处理基本上都会使用云计算平台进行处理,比如Hulu就搭建了自己的Hadoop集群来处理用户的行为日志文件。该集群由50个节点组成,每个节点有6TB的空间,每天处理大约500GB数据;系统支持定期或者临时从指定时间段的日志中提取符合模式的数据,最终按照一定的维度聚合发布到分布式文件系统HDFS、HBase或其他SQL数据库供后续使用。日志系统收集了表示用户兴趣的行为比如观看、打分、搜索、标注标签、订阅、分享、评论以及用户对推荐系统的反馈行为(点击、感兴趣、已经看过、收藏)等。
推荐引擎离线部分利用收集到的用户行为日志:计算出一系列的关联矩阵(比如视频之间的两两相似度、电影主题和视频的之间关联等);计算全局或者某些群体用户的对推荐系统反馈(比如用户行为的权重、推荐算法的权重等)。对于其中数据量比较大的任务,可以直接在Hadoop系统上并行处理,具体实现可以参考开源项目Apache Mahout。
“用户行为服务”模块实时返回用户的重要行为(打分、感兴趣等),由于用户数很大,一般需要使用数据库拆分(Database Sharding)加前端Memcached的方式来解决扩展性问题,数据库可以是传统的MySQL或者是NoSQL数据库(如MongoDB等)。
在线部分需要根据用户行为分析用户的兴趣特征并结合离线训练结果进行推荐、解释、过滤和排序等,然后给出最终的推荐列表。这块依赖的数据相对比较单一,出于可扩展性和灵活性考虑,可以把服务部署到云计算平台(如AWS、Google App Engine或Windows Azure等),实际上Netflix就把包括推荐系统的大多数服务部署到AWS。
推荐系统的作用
推荐系统一般使用以下指标对推荐系统进行评测:准确度、覆盖率、多样性和新颖性等。在实际视频网站推荐系统中,通常更关注推荐系统带来的在线直接收益,比如点击率、转换率以及用户实际停留和观看时间的增长等。那么推荐系统对视频网站究竟有没有作用呢?答案是肯定的。YouTube公布说首页60%的点击来自于推荐,并且比较了个性化推荐和最热门视频的点击率,结果前者的点击率是后者的207%;Hulu也有类似的实验结果。而Netflix整个网站的设计完全是围绕推荐展开的,这也正说明了推荐在视频网站中的作用。
结语
视频网站充斥着大量用户可能不感兴趣的内容,同时内容提供商希望把自己的优质内容推销给感兴趣的用户,而视频网站也需要提高用户的黏度和观看时间,这些都决定了视频网站需要推荐系统。目前国外大多数视频网站都有自己的推荐系统,而国内的同行也在加大投入研发和部署推荐系统,这对推荐系统领域研究人员是极大的鼓舞。本文简单介绍视频网站中推荐系统的产品、方法和简单框架,希望能对感兴趣的人有所启发。
作者郑华,2007年毕业于清华大学电子工程系并获得硕士学位,之后加入hulu,是hulu最早的员工之一。目前领导hulu的推荐团队,该团队主要负责视频推荐、广告精确投放、数据分析以及支付系统等项目。