百亿级通用推荐系统实践

我们每个人每天都会使用到不同的推荐系统,无论是听歌,购物,看视频,还是阅读新闻,推荐系统都可以根据你的喜好给你推荐你可能感兴趣的内容。不知不觉之间,推荐系统已经融入到我们的生活当中。作为大数据时代最重要的几个信息系统之一,推荐系统主要有下面几个作用:

  1. 提升用户体验。通过个性化推荐,帮助用户快速找到感兴趣的信息。
  2. 提高产品销售。推荐系统帮助用户和产品建立精准连接,从而提高产品转化率。
  3. 发掘长尾价值。根据用户兴趣推荐,使得平时不是很热门的商品可以销售给特定的人群。
  4. 方便移动互联网用户交互。通过推荐,减少用户操作,主动帮助用户找到他感兴趣的内容。

以应用宝为例,对于两个不同用户A和B,打开应用程序的界面是很不一样的。用户A是一个年轻男性用户,平时可能喜欢玩手机游戏和看小说,所以应用宝的推荐系统会给他推荐游戏的应用。而用户B是一个年轻女性用户,平时喜欢购物和轻游戏,所以应用的推荐系统就会给她推荐购物的应用。这样一来,从用户的角度,减少了他找到自己喜欢的应用的时间;从产品的角度,用户更愿意去点击和安装他喜欢的应用,所以提高了产品的转化率。

图1. 应用宝首页界面

除了应用宝之外,腾讯云推荐系统还应用在腾讯的QQ空间、QQ、企鹅FM、QQ会员和黄钻贵族等12个不同的业务的200多个不同推荐场景,每天处理的推荐请求有上百亿个。那么,这个日均百亿级请求的推荐系统是怎么打造而成的呢?主要需要解决两个问题:

  1. 支持众多业务和场景。
  2. 支持海量用户请求。

1.通用化推荐算法库

首先要解决的问题是如何支持众多业务和场景。对于不同的场景,用到的数据、算法和模型都会有很多的不同,如果对于每个场景都从头开发,将会耗费非常多的时间和人力。那么有没有更好的方法呢?毕竟常用的推荐算法就是那么几种,有没有一种方法使得同一个推荐算法可以复用到不同的推荐场景呢?那就需要对推荐算法库进行通用化设计。

下面举一个例子来说明推荐系统是什么,又是怎么工作的。如图2所示,一个推荐系统是由学习系统、模型和推荐系统三部分组成的。其中,学习系统通过机器学习的方法对用户的历史数据进行统计、分析,从而训练得到一个模型。这个模型是用户行为规律的总结,会在后面预测系统中对新用户的请求进行预测。比如图中简单的例子,学习系统的输入是5个不同用户的行为,对于男性用户A,他喜欢的《王者荣耀》这个游戏,对于女性用户B,她喜欢的则是《奇迹暖暖》,那么对于这5个用户统计得到的模型是男性用户喜欢《王者荣耀》的概率是0.67,而女性用户喜欢《奇迹暖暖》的概率是1。有了这个简单的模型以后,如果在预测系统中有一个新的用户请求,来自一个男性用户,那么按照前面的模型,会按照概率的大小,把《王者荣耀》推荐给这个用户。

图2. 推荐系统例子

实际的推荐系统中,学习系统处理的用户数据量会更大,数据的维度也更多,用到的推荐模型也会更复杂,常用的有协同模型、内容模型和知识模型。其中,协同模型主要通过我的朋友喜欢什么来猜测我喜欢这么;内容模型则是根据物品本身来预测用户喜欢A所以也可能喜欢B;知识模型则是根据用户的限定条件,按照他的需要进行推荐。

图3. 通用化推荐算法库

一个常见的推荐系统由下面四个部分组成:样本库、特征库、 算法和模型。其中,样本库存储从流水日志中提取的用户行为和特征;特征库存储用户和物品的属性等特征;算法是用于训练模型用到的机器学习算法;模型库存储的是从样本和特征计算得到的训练模型。为了不同的算法可以用于不同的样本和特征,我们可以使用图3中的算法配置表来存储数据、算法和模型的映射关系,将模型、算法、样本和特征的关系解耦,使得算法可以复用。比如,我的模型是从样本1和特征1使用算法A训练得到。

图4. 推荐系统的离线和在线计算分工

学习系统训练一个模型一般会花比较长的时间,这部分我们称为离线计算,对实时性要求并不高,比如,可以在几个小时的时间内计算出来,重要的是模型的质量。而预测系统则不一样,因为预测系统是直接面向用户请求,所以要求它响应快,同时必须能够处理海量用户的请求,系统必须稳定可靠。接下去我们会使用一个实时计算平台来满足这部分的要求。

2.面向海量在线服务的实时计算平台

除了前面提到的通用化算法库,我们需要解决的第二个问题是如何处理海量的用户请求。这部分我们用的是一个名为R2的面向海量在线服务的自研实时计算平台。R2有下面几个特点:

  1. 海量,目前在R2系统上,每天处理上百亿的个性化推荐请求;
  2. 实时,每个请求的处理平均延时为18ms;
  3. 可靠,系统稳定性为99.99%。

R2从一开始就是围绕线上服务而设计。首先,为了快速处理海量请求,我们参考了Apache Storm,把R2定义成一个流处理框架。其次,为了系统的高可用性,在设计的时候,考虑了系统不会出现单点故障。第三,为了方便扩容,计算资源是可插拔的。第四,系统可以支持动态调度以方便负载平衡。第五,为了方便运维,还紧密结合运维工具提供告警和监控。

我们先来看一下R2这个流处理框架是如何处理推荐请求的。如图5所示的推荐场景用于猜测用户喜欢的手机应用,可以分为三步来计算:

  1. 根据id得到用户特征;
  2. 使用决策树判断喜欢某个应用的概率;
  3. 对结果重新排序。其中,使用决策树这一步因为计算量大,可以通过并行计算来缩短处理时间,每个处理单元可以处理子树的一部分,最后在第三步将结果汇总以后重新排序。

图5. 流计算场景:猜测用户喜欢的手机应用

R2的架构如图6所示,分为业务层、通信层和全局配置层三层。其中,业务层负责业务处理逻辑;通信层负责基于名字的通信和分布式流处理;全局配置层负责可适应的拓扑配置、动态扩缩容和动态负载调度。

图6. 实时计算平台R2架构

其中,业务层由两部分组成:计算拓扑图和计算单元(PU)。计算拓扑图负责数据的流向,而计算单元负责业务的逻辑计算。通信层负责PU之间的通信以及拓扑图执行跟踪。其中,Interface负责从业务接入请求,Acker负责跟踪拓扑图执行情况,而R2Server负责转发PU之间的通信、启动PU和监控PU心跳。PU之间的通信都通过R2Server转发。全局配置层负责拓扑管理和名字服务,通过Zookeeper来进行动态配置。其中,拓扑管理将逻辑拓扑映射到物理拓扑,名字服务提供PU地址查询。

3.腾讯云推荐引擎

基于上面的经验,我们打造了腾讯云推荐引擎。腾讯云推荐引擎(CRE)是面向广大中小互联网企业打造的一站式云推荐引擎解决方案,提供安全、便捷、精准、可靠的推荐系统服务,提升其业务的点击转化率和用户体验。如图7所示,CRE由算法模型和在线计算两部分组成。算法模型部分由于采用了通用推荐算法库设计,用户在接入推荐场景时只需要通过简单配置,就可以直接使用已有的算法模版。在线计算部分集成了R2的优势,系统稳定可靠,并且支持快速扩容。

图7. 腾讯云推荐引擎

腾讯云推荐引擎具有下面的功能:

  1. 一天接入,快速上线;
  2. 模板化算法,节省99%代码;
  3. 快速扩容,应对业务快速增长;
  4. 稳定可靠,节省运维开销。

这些功能降低了推荐系统的技术门槛,使得搭建推荐系统变得简单便捷。更多有关腾讯云推荐引擎的信息请点击查看

4.总结

综上所述,要打造一个百亿级通用推荐系统,需要考虑下面几点:

1.为了能够支持尽可能多的业务和场景,推荐算法库需要做通用化设计。

2.为了支撑海量在线用户的实时请求,实时计算平台必须低延时,可扩展,而且稳定可靠。

3.云推荐引擎的解决方案,在通用化的基础上,同时考虑了易用性,方便用户接入。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

吕慧伟的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

【业界】创建深度学习数据平台时,你需要考虑的五个因素

AiTechYun 编辑:nanan 随着AI应用程序和深度学习算法的成熟,许多组织正在制定计划,以弄清楚它们将如何从数据中提取差异化竞争优势。 ? 事实上,在...

3156
来自专栏机器之心

资源 | 关于大数据,你应该知道的75个专业术语

选自DataConomy 机器之心编译 近日,Ramesh Dontha 在 DataConomy 上连发两篇文章,扼要而全面地介绍了关于大数据的 75 个核心...

3426
来自专栏大数据和云计算技术

​大数据和云计算技术周报(第37期)

“大数据” 三个字其实是个marketing语言,从技术角度看,包含范围很广,计算、存储、网络都涉及,知识点广、学习难度高。

781
来自专栏Albert陈凯

大数据人工智能词汇索引S大数据人工智能词汇索引S

大数据人工智能词汇索引S S ---- 流处理(Stream processing):流处理被设计来用于持续地进行流数据的处理。与流分析技术(指的是能够持续地计...

3567
来自专栏喔家ArchiSelf

tataUFO 大数据应用实践

感谢tataUFO各位同仁的大力支持,帮助我顺利完成了在QingCloud Insigt 2016技术大会上的演讲,特将讲稿PPT分享出来,共勉!

834
来自专栏PPV课数据科学社区

如何让Hadoop结合R语言做统计和大数据分析?

有奖转发活动 回复“抽奖”参与《2015年数据分析/数据挖掘工具大调查》有奖活动。 R是GNU的一个开源工具,具有S语言血统,擅长统计计算和统计制图。由Revo...

2454
来自专栏IT大咖说

Hadoop集群从180到1500,携程大数据实践之路

内容来源:2018 年 09 月 08 日,携程大数据平台技术总监张翼在“2018开源数据库论坛暨首届MariaDB中国用户者大会”进行《大数据平台在携程的实践...

633
来自专栏Kiba518

谈谈我理解的SA——Systems Architecture

系统体系结构是定义系统的结构、行为和系统视图的概念模型。架构师将其系统的形式化描述或表示出来,以支持结构和行为的推理的方式组织。

512
来自专栏媒矿工厂

网络媒体联合工作组(JT-NM)技术规范介绍

目前,专业媒体行业面临着从专用广播设备和接口(SDI,AES,交叉点切换器等)到基于IT的分组网络(以太网,IP,服务器,存储,云等)的转变。如何通过在网络上进...

690
来自专栏智能计算时代

75个每个人都应该知道的大数据术语

在第一篇文章中介绍了以下术语:算法,分析,描述性分析,规定分析,预测分析,批处理,Cassandra,云计算,集群计算,黑暗数据,数据湖,数据挖掘,数据科学家,...

3934

扫码关注云+社区