基于用户画像的实时异步化视频推荐系统

本文介绍了一个实时推荐系统的构建过程,涵盖用户画像、视频画像、异步化计算等关键技术点,并详细解析了流式技术在推荐系统中的应用。

前言

这个月做的事情还是蛮多的。上线了一个百台规模的ES集群,还设计开发了一套实时推荐系统。 标题有点长,其实是为了突出该推荐系统的三个亮点,一个是实时,一个是基于用户画像去做的,一个是异步化。

*** 实时主要体现在三个层面:***

  1. 用户画像中的的短期兴趣模型实时构建。

    也就是你看完一个视频,这个视频几秒内就影响了你的短期兴趣模型,并且反应到你下次的推荐中。

  2. 候选集实时变更。

    在我设计的推荐系统中,候选集的概念是不同类型的待推荐给用户的视频库,一个用户并不能看到某个候选集的全部,而是能够看到经过匹配算法处理完后的候选集的一部分。 候选集的更新周期直接影响用户能够看到的视频的实时性。候选集可以有很多,通过不同的候选集解决不同的推荐场景问题。比如结合最新候选集和最近N小时最热候选集,我们可以做到类似今日头条的推荐效果。新内容候选集的产生基本就是实时的,而最近N小时热门视频候选集则可能是分钟级别就可以得到更新。还有比如协同就可以做视频的相关推荐,而热门候选集则可以从大家都关心的内容里进一步筛出用户喜欢的内容。

  3. 推荐效果指标的实时呈现。

    上线后你看到的一些比较关键的指标例如点击转化率,都可以在分钟级别得到更新。推荐系统有个比较特殊的地方,就是好不好不是某个人说了算,而是通过一些指标来衡量的。比如点击转化率。

*** 用户画像和视频画像 ***

用户画像则体现在兴趣模型上。通过构建用户的长期兴趣模型和短期兴趣模型可以很好的满足用户兴趣爱好以及在用户会话期间的需求。做推荐的方式可以很多,比如协同,比如各种小trick,而基于用户画像和视频画像,起步难度会较大,但是从长远角度可以促进团队对用户和视频的了解,并且能够支撑推荐以外的业务。

*** 异步化 ***

推荐的计算由用户刷新行为触发,然后将用户信息异步发送到Kafka,接着Spark Streaming程序会消费并且将候选集和用户进行匹配计算,计算结果会发送到Redis 的用户私有队列。接口服务只负责取推荐数据和发送用户刷新动作。新用户或者很久没有过来的用户,它的私有队列可能已经过期,这个时候异步会产生问题。前端接口一旦发现这个问题,有两种解决方案:

  1. 会发送一个特殊的消息(后端接的是Storm集群), 接着hold住,等待异步计算结果
  2. 自己获取用户兴趣标签,会按一定的规则分别找协同,然后到ES检索,填充私有队列,并迅速给出结果。(我们采用的方案)

除了新用户,这种情况总体是少数。大部分计算都会被异步计算cover住。

流式技术对推荐系统的影响

我之前写了很多文章鼓吹流式技术,最露骨的比如 数据天生就是流式的。 当然主要和我这一两年部门的工作主体是构建
流式流水线(Pipline),解决实时日志计费等相关问题。流式计算对推荐系统的影响很大,可以完全实现

在推荐系统中,除了接口服务外,其他所有计算相关的,包括但不限于:

  1. 新内容预处理,如标签化,存储到多个存储器
  2. 用户画像构建 如短期兴趣模型
  3. 新热数据候选集
  4. 短期协同
  5. 推荐效果评估指标如点击转化率

这些流程都是采用Spark Streaming来完成。对于长期协同(一天以上的数据),用户长期兴趣模型等,则是采用Spark 批处理。因为采用了StreamingPro这个项目,可以做到所有计算流程配置化,你看到的就是一堆的描述文件,这些描述文件构成了整个推荐系统的核心计算流程。

这里还值得提的三点是:

  1. 推荐效果评估,我们采用Spark Streaming + ElasticSearch的方案。也就是Spark Streaming 对上报的曝光点击数据进行预处理后存储到ES,然后ES提供查询接口供BI报表使用。这样避免预先计算指标导致很多指标实现没有考虑到而不断变更流式计算程序。

  2. 复用现有的大数据基础设施。整个推荐系统只有对外提供API的服务是需要单独部署的,其他所有计算都使用Spark跑在Hadoop集群上。

  3. 所有计算周期和计算资源都是可以方便调整的,甚至可以动态调整(Spark Dynamic Resource Allocatioin)。这点非常重要,我完全可以放弃一定的实时性来节省资源或者在闲暇时让出更多资源给离线任务。当然这些都益于Spark 的支持。

推荐系统的体系结构

整个推荐系统的结构如图:

1063603-3def1faf808919b0.png
Snip20161201_6.png

看起来还是挺简单的。分布式流计算主要负责了五块:

  1. 点击曝光等上报数据处理
  2. 新视频标签化
  3. 短期兴趣模型计算
  4. 用户推荐
  5. 候选集计算,如最新,最热(任意时间段)

存储采用的有:

  1. Codis (用户推荐列表)
  2. HBase (用户画像和视频画像)
  3. Parquet(HDFS) (归档数据)
  4. ElasticSearch (HBase的副本)

下面这张图则是对流式计算那块的一个细化:

1063603-dbc0439aeacd89a1.png
Snip20161201_7.png

用户上报采用的技术方案:

  1. Nginx
  2. Flume (收集Nginx日志)
  3. Kafka (接收Flume的上报)

对于第三方内容(全网),我们自己开发了一个采集系统。

个性化推荐示

1063603-ecc828b552ebb9bb.png
Snip20161201_10.png

所有候选集都是实时更新的。

这里我们说下参数配置服务器的概念。

假设我有三个算法A,B,C ,他们分别由三个流式程序完成,各个程序是互相独立的,最后都会算出各自的结果集。因为不同候选集和算法算出的内容数据量和频度都会有差异,假设A算出的结果集过大,B算出的结果集很小,但是质量很好,这个时候他们在发送到用户推荐队列的时候,需要将自己的情况提交给参数配置服务器,并且由参数服务器决定最后能够发送到队列的量。参数服务器也可以控制对应频度。比如A算法距离上次推荐结果才10s就有新的要推荐了,参数服务器可以拒绝他的内容写入到用户推荐队列。

上面是一种多算法流程的控制。其实还有一种,就是我希望A,B的结果让一个新的算法K来决定混合的规则,因为所有算法都是StreamingPro中的一个可配置模块,这个时候A,B,K 会被放到一个Spark Streaming应用中。K可以周期性调用A,B进行计算,并且混合结果,最后通过参数服配置服务器的授权写入到用户推荐队列。

一些感悟

我14,15年做的一次推荐系统,那个时候还没有流式计算的理念,而且也不能复用一些已有的技术体系,导致系统过于复杂,产品化也会比较困难。而且推荐的效果也只能隔日看到,导致效果改良的周期非常长。当时整个开发周期超过了一个多月。然而现在基于StreamingPro,两三人没人么天只能投入两三小时,仅仅用了两个礼拜就开发出来了。后续就是对用户画像和视频画像的进一步深入探索,核心是构建出标签体系,然后将这些标签打到用户和视频身上。我们组合了LDA,贝叶斯等多种算法,获得不少有益的经验。

用户画像,作为一种勾画目标用户、联系用户诉求与设计方向的有效工具,用户画像在各领域得到了广泛的应用。用户画像最初是在电商领域得到应用的,在大数据时代背景下,用户信息充斥在网络中,将用户的每个具体信息抽象成标签,利用这些标签将用户形象具体化,从而为用户提供有针对性的服务。还记得年底收到的支付宝年度消费账单吗?帮助客户回顾一年的消费细节,包括消费能力、消费去向、信用额度等等,再根据每位客户的消费习惯,量身定制商品推荐列表……这一活动,将数据这个量化的词以形象生动的表现手法推到了大众面前。这就是用户画像在电商领域的一个应用,随着我国电子商务的高速发展,越来越多的人注意到数据信息对于电商市场的推动作用。基于数据分析的精准营销方式,可以最大限度的挖掘并留住潜在客户,数据统计与分析为电商市场带来的突破不可估量。在大数据时代,一切皆可“量化”,看似普通的小小数字背后,蕴藏着无限商机,也正在被越来越多的企业所洞悉。如何从大数据中挖掘商机?建立用户画像和精准化分析是关键。什么是用户画像呢?用户画像是根据市场研究和数据,创建的理想中客户虚构的表示。创建用户画像,这将有助于理解现实生活中的目标受众。企业创建的人物角色画像,具体到针对他们的目标和需求,并解决他们的问题,同时,这将帮助企业更加直观的转化客户。用户画像最重要的一个步骤就是对用户标签化,我们要明确要分析用户的各种维度,才能确定如何对用户进行画像用户画像建立步骤首先,基础数据收集,电商领域大致分为行为数据、内容偏好数据、交易数据,如浏览量、访问时长、家具偏好、回头率等等。而金融领域又有贷款信息,信用卡,各种征信信息等等。然后,当我们对用户画像所需要的基础数据收集完毕后,需要对这些资料进行分析和加工,提炼关键要素,构建可视化模型。对收集到的数据进行行为建模,抽象出用户的标签。电商领域可能是把用户的基本属性、购买能力、行为特征、兴趣爱好、心理特征、社交网络大致的标签化,而金融风控领域则是更关注用户的基本信息,风险信息,财务信息等等。随后,要利用大数据的整体架构对标签化的过程进行开发实现,对数据进行加工,将标签管理化。同时将标签计算的结果进行计算。这个过程中需要依靠Hive,Hbase等大数据技术,为了提高数据的实时性,还要用到Flink,Kafka等实时计算技术。最后,也是最关键的一步,要将我们的计算结果,数据,接口等等,形成服务。比如,图表展示,可视化展示。基于Flink+Alink构建全端亿级实时用户画像系统课程,将带领大家一步一步实现一个强大的实时用户画像系统,该系统以热门的互联网电商实际业务应用场景为案例讲解,具体包含:标签管理(支持动态标签扩展,动态标签指标)、用户预测、用户群体画像用户行为画像用户中心、几大内容。本课程采用全新的大数据技术栈:Flink+Alink,让你体验到全新技术栈的强大,感受时代变化的气息,通过学习完本课程可以节省你摸索的时间,节省企业成本,提高企业开发效率。本课程包含的技术: 开发工具为:IDEA、WebStorm Flink1.13.0Alink1.5.0 ClickHouseDolphinSchedulerHadoopHbaseKafkaZookeeper SpringBoot2.0.8.RELEASE SpringCloud Finchley.SR2BinlogCanal MySQL MybatisVue.js、Nodejs、ElementUI 课程亮点: 1.与企业接轨、真实工业界产品2.标签化管理模块功能,支持动态标签扩展3.动态标签指标分析和维护4.Alink算法技术框架 5.大数据热门技术Flink新版本 6.主流微服务后端系统 7.数据库实时同步解决方案 8.涵盖主流前端技术VUE+NodeJS+ElementUI 9.集成SpringCloud实现统一整合方案 10.互联网大数据企业热门技术栈 11.支持海量数据的实时画像 12.支持全端实时画像 13.全程代码实操,提供全部代码和资料 14.提供答疑和提供企业技术方案咨询 
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值