专注新闻资讯的梨视频近来表现亮眼。
梨视频由前澎湃新闻掌门人邱兵创立。
在上线之前,它就获得了黎瑞刚华人文化近1亿美元投资,旗下《微辣》栏目总播放量已经超过4亿,并在上线1个月后获得“年度视频新媒体”大奖。
这样一款脱胎于传统媒体的创业型短视频软件,在视频领域异军突起,不仅让内人士在感叹梨视频内容生产力之强大的同时,也诧异于是谁在为梨视频的庞大用户体量提供技术支撑、保证视频流畅?
今天就和大家分享梨视频如何基于阿里云快速搭建一个套推荐系统。
以下案例分享全部基于实战——梨视频第一代推荐系统。
梨视频在上线初期用户量增长很快,基于阿里云搭建的推荐系统扛住了流量的压力也很出色的完成了初期用户兴趣视频推荐功能。
推荐系统脱离不开数据收集处理系统,数据既是推荐数据来源,也是验证推荐系统重要依据。
选型
对梨视频这样的创业公司来说,技术选型需要考虑的是:快速构建系统,实现业务的快速落地。
我们核心策略是积极拥抱云平台,使用开源系统。
购置物理机,意味着有较大的一次性投入,使用云平台则可以逐渐投入基础IT资源。
对于基础的组件,首选的是开源系统,再次看国内大公司是否有使用。
最终,我们选择的是阿里云的E-MapReduce开源大数据平台(以下简称EMR)。
这个产品在提供开源组件(Hadoop、Spark、HBase)的同时,也提供了非常有价值的运维服务及作业流等基础服务,特别是无缝结合OSS及Logservice,能快速构建数据中心。
数据中心
梨视频的数据包含两大部分: 用户使用的习惯 和 在梨视频中发布的内容。
用户使用习惯主要分布在用户使用的客户端,需要应用一定方式进行收集。后台拍客和编辑生成的内容等结构化数据也需要定时推送到数据处理中心和用户使用习惯一起被清洗,分析,形成各种模型和数据。
梨视频数据中心基于阿里云E-MapReduce 集群进行搭建。用了它,梨视频可以很方便地通过阿里云控制台新建EMR集群,集群提供了HDFS,Hadoop, Spark,Sqoop,HBase,Hive等等基本的大数据处理套件,而且和OSS存储也是无缝打通, 存储在OSS上数据可以使用EMR集群进行分析,使用起来非常方便。
日志收集
梨视频日志收集在APP端进行压缩然后定时上传,压缩为了减少用户的流量使用,定时是为了减少上传次数,避免过多的网络链接,加重App的负担。
服务器端基于ECS搭建Nginx服务器,并结合lua脚本对日志内容进行解压。
日志推送到LogStore。在阿里云服务中有日志服务,logstore是日志服务中的存储单元。下图展示了logstore的全貌
创建logstore, 这里可以制定shard数量,在logstore存储的时长等参数。同时logstore提供日志短时存储,查询索引等功能,可以选择使用,比较方便。只要是阿里云ECS机器上产生的本地文件都可以发送到logstore中进行存储,转储。
创建过程中,还可以指定原始日志的格式,可以指定每个字段在logstore中的名字。
收集的日志可以进行投递,这里梨视频的日志全部推送到oss上进行永久存储。
至此用户适用习惯数据已经从App客户端推送到LogStore和OSS中,可用于后续分析。
业务数据归集
业务数据都存储在云数据库RDS(MySQL)数据库中,利用Sqoop脚本并配合EMR的任务调度定时将数据推送到EMR集群HIVE库中。
Sqoop脚本
EMR任务部署
任务的定时调度由EMR平台自动支持,只需配置就可以方便完成任务调度。
以上是业务数据的推送到数据中心方式。
数据处理
数据完成收集和归集后,都存储在EMR集群上,剩下的工作就是要对数据进行处理。
首先会对数据进行分层设计,底层部分是日志清洗后的数据和推送到EMR的业务数据,中间层是结合用户行为和业务数据的总和视图。最上层是各种报表和模型。
数据的处理过程全部基于EMR集群,由实时的分析,通过Spark streaming消费logstore的实时流,将分析结果写入Redis供查询,可以实时统计性能,用户量等。
离线的分析主要通过 Spark的离线任务进行,可以进行数据统计也可以进行模型训练。
推荐系统
下图为梨视频第一期推荐系统的概貌
梨视频推荐系统主要由三部分组成:Online、Near Online、Offline。该推荐系统是基于阿里云提供的组件搭建而成,主要涉及了LogStore、EMR、Redis、RDS等。
下面来具体看一下每部分的工作方式。
Online召回和排序
Online主要用于相应用户请求,其中主要包含两大功能:召回和排序。
Online部分是采用两个模块实现的:底层是基础搜索模块,主要完成的是工作是构建索引,依据基础排序模型排序;上层是高级搜索模块,通过响应上层请求,获取用户画像数据,如用户ID,标签,根据请求,将画像数据转化为召回条件。
高级搜索模块将召回条件下发到基础搜索模块,基础搜索模块会提供与这才召回条件相关的内容,返回给高级搜索模块。高级搜索模块获得召回结果后,对其进行排序,通常会根据语义模型排序、效果排序以及规则排序(保证多样性)。
基础搜索模块读取阿里云RDS DTS数据流,该数据流可以实时反馈数据库更改,当编辑在后台更新了内容数据库后,DTS会自动将数据流推送到基础搜索模块,然后构建索引。DTS 接收服务器采用主从同步,保证一台失败,另一台能替代。DTS接收服务还负责向多台基础服务分发增量信息,保证每个基础服务实例都能及时更新到增量信息。
Near Online:实时反馈系统
Near Online部分利用EMR中Spark Streaming实时消费日志搜集系统Log Store中的日志,分析的内容分为两个部分:
一是用户24小时内兴趣分布的状况,24小时以前的数据通过离线的方式按天反馈到线上,用户24小时之内的内容通过实时的方式反馈,构建成用户兴趣分布图;
二是用户24小时看过和不喜欢的内容会在三到五秒内反馈给模型,下一次推荐时不再出现该类内容。
Spark Streaming的作业基于python spark 编写, 阿里云提供了loghub.py接口, 可以非常方便的进行streaming编写。
只需要指定日志服务logstore信息,定义好应用逻辑,就可以创建streaming处理日志流。
Offline:用户兴趣画像
用户画像是推荐系统中的重中之重,推荐系统可以根据用户画像给用户推荐其可能感兴趣的内容。
新闻趋势和其他领域略有不同,它是随着时间、事件不断变化的,如八月份的奥运会、刚刚结束的美国大选等。
那么该如何把握新闻的趋势呢?
一是根据自身发布的内容,在某一趋势到来时,发布的内容必然会偏向该趋势;
二是整站的用户表现,多数用户会关注目前最火的新闻,两者相综合,既可以形成新闻趋势。
另外一点是个人长期兴趣,比如长期关注娱乐、体育版块,通过分析用户长期在整站的行为,形成用户长期兴趣分布。
新闻趋势和个人长期兴趣通过贝叶斯模型,整体再结合时间的分布构建出用户长期兴趣模型(即用户画像)。
用户画像任务涉及到用户行为,也涉及到内容的信息,该任务较为复杂,阿里云EMR系统提供了按照计划调度的模式, 每个计划可以有多个任务, 多任务串行执行,可以方便完成复杂任务的调度。
offline的内容质量评估
在Offline部分,还需要对内容进行质量评估。之所以对内容进行评估,是因为在基础搜索模块需要对内容进行排序。
目前,梨视频引进了基于人类记忆遗忘模型对质量进行评估,该模型遵循具有以下三个原则:
时效性强的内容,热度分衰减更快;
时效性弱的内容,热度分衰减慢;
最近发布的内容较历史稿件更有优势,更容易被用户发现。
线上用户召回排序评估
计算机领域会有一些策略存在,进而会涉及到优化问题;而优化的前提是必须明确现状,明确现状则就需要对现状进行评估。这里主要介绍下单用户实时评估和多用户批量评估。
单用户实时评估,梨视频是通过自研系统,只需要输入用户ID等信息,就可以在后台看到用户最近的行为、模型建模之后的情况以及系统对应推荐的内容,可以一目了然地看到推荐内容是否和用户相匹配。
多用户批量评估所关注的是给所有用户推荐的内容是否存在偏差,例如想了解内容发布时是不是全部是社会相关信息,可以通过批量查看用户的分类、属性进行判断。
推荐总结
整个推荐系统由两个闭环组成:实时闭环;离线闭环。
实时闭环是指用户的操作3到5秒内可以反馈到SparkStreaming中,之后再快速推到线上,使其能够快速影响到下一次推荐结果。
离线闭环是指日志会推到OSS中,每天对日志进行建模后再推到线上,第二天再回到数据中形成闭环。离线闭环和实时闭环配合实时评估和实验评估实现推荐系统整体可控,研发人员可以有的放矢地优化推荐结果。
总结
最后简单进行一下总结,梨视频整体架构主要由数据处理系统和推荐系统构成:
数据处理系统方面,首先需要进行日志收集,在客户端压缩传输,基于阿里云组件搭建日志搜集系统;同时以EMR为中心构建数据处理中心;此外,对数据进行逻辑分层,基础数据全面支撑业务需求。
推荐系统方面,召回模块按照兴趣召回候选集合;排序模块可根据需求和目标进行调整和融合;通过用户行为实时反馈提升用户体验;根据新闻趋势和个人长期兴趣建立用户画像。
此外,引进基于人类记忆遗忘模型建模内容基础质量打分体系;通过评估系统让整体推荐系统变得可控。
`如果对E-mapreduce感兴趣,欢迎加入钉钉群交流`