|
|
51CTO旗下网站
|
|
移动端

微博推荐系统架构揭秘:基于机器学习的个性化Push应用实践

Push 作为一种有效的召回用户的产品,近几年来被各类 App 广泛应用。但是 Push 存在两面性,如果推荐的消息准确,则能够有效地召回用户,反之,就会对用户造成骚扰。

作者:齐彦杰来源:51CTO技术栈|2018-11-08 09:37

【51CTO.com原创稿件】Push 作为一种有效的召回用户的产品,近几年来被各类 App 广泛应用。但是 Push 存在两面性,如果推荐的消息准确,则能够有效地召回用户,反之,就会对用户造成骚扰。

通过机器学习进行个性化 Push,给用户推送其感兴趣的内容,既能最大程度地降低对用户的骚扰,同时也能有效地提升 Push 的打开率。

2018 年 5 月 18-19 日,由 51CTO 主办的全球软件与运维技术峰会在北京召开。

在“人工智能技术探索”分会场,新浪微博的技术专家齐彦杰,给大家带来了《机器学习在微博个性化 Push 的应用》的主题演讲。

他和大家分享了微博个性化 Push 如何基于海量数据,通过机器学习有效提升打开效果的一些做法和思路。

本文按照如下四个部分展开:

  • 为什么要做 Push 业务
  • 微博个性化 Push 的场景
  • 微博个性化 Push 的机制
  • 微博基于机器学习的个性化 Push 应用

为什么要做 Push 业务

众所周知,微博是社交媒体中的领跑者,它于 2009 年 8 月份上线;2013 年底,MAU(月活用户数)突破了一亿;2015 年 9 月,DAU(日活用户数)突破了一亿。

2017 年 9 月,MAU 达到 3.76 亿;2018 年 3 月,微博的MAU突破了 4.11 亿。该增长速度是相当惊人的。

当微博的 MAU 超过 4.1 亿之后,这么庞大的用户体量以及用户关系,本身必定会更大发挥其社交媒体的属性。

下面我们来看为何要去做 Push 业务。如上图右边所示,这些都是大家印象非常深刻的事件。

如果我们能够在第一时间把这些事件推送给目标用户,一定会满足用户对重大消息及时性的需求。

所以,每当国内、外有重大事件发生的时候,我们都会做一些提醒发给大家。

同时我们又是一个社交媒体,当用户所关注的博主发出博文的时候,他们都希望能够以内容提醒的方式,收到自己感兴趣的通知类消息。

根据上述需求,我们将微博上的 Push 大概分为:热点 Push、个性化 Push、关系 Push、区域 Push 和直播 Push 等类型。

上图右侧是微博 Push 的展现形态,它们包括一些文案和简介,且都是在通知栏里展现出来的。

可见,Push 本身具有站方主动推送的特征,而用户则处于一种被动提醒的状态。

然而它的挑战性是:用户在信息流中通过一次性刷新,就能带来十多条的信息曝光,命中用户兴趣点的概率较大,而 Push 是单条曝光,命中的概率小了很多。

但是,如果 Push 的发送过于频繁,则会引起用户的反感。因此,我们希望在尽量少发的前提下,尽快找到用户的兴趣点。

它具有一定的复杂性和挑战性。即在降低对用户骚扰的同时,提升用户的点击规模。

所以,我认为 Push 的本质就是一个高效的内容分发系统,它能够在较短的时间内为各种内容找到其目标群体,并且发送给相应的消费者。

同时,对于个人用户来说,它应该是一个拥有足够丰富经验的私人秘书,帮助用户在海量的内容源中,找到喜欢的消息,并及时的提醒用户进行查阅。

微博个性化 Push 场景

下面我们来看看个性化 Push 的场景。上图是 2017 年对于微博用户的分析,用户从 18 岁以下到 41 岁以上有着广泛的年龄层次分布。

相对于微博这种体量的平台,就算 41 岁以上的人群仅占 5.6%,其绝对数量也有几千万的群体。

就地域而言,一、二、三、四线、及港澳台城市,都有大量用户的分布。

同时微博用户的兴趣点也是非常分散的。内容涉及明星、汽车、电影、美食等方面。

在如此庞大的用户群体和用户喜好分布的情况下,微博本身的内容品种也是非常丰富的。

如上图左侧所列的、微博热门的首页分类,以及右侧是某一时刻的、热门话题的列表,可见它是多么的丰富和繁杂。

鉴于用户有如此广泛的兴趣,我们该如何在较短的时间内,为他们匹配并推送喜欢的内容呢?

这就是我们个性化 Push 所要解决的问题。我们需要构建一个推荐系统,有针对性地为不同的用户找到他们所喜欢的内容。

微博个性化 Push 机制

由于所有的推荐系统,基本上都是从内容源头上去寻找用户喜欢的资源。那么对于微博而言,其源头就是全量的原创博文。

每天,这些博文以几千万的量级产生,但并非所有的内容都适合被推荐给用户的,因此我们需要进行机器和人工的双重筛选。

机器筛选,能帮助我们找到优质的素材。但由于 Push 本身是一个推送的过程,当它所推送的内容包含一些不良内容时,就会给用户带来巨大的困扰,因此,为了规避风险,我们加入了人工审核的环节。

在人工审核完成之后,我们会得到适合推荐的集合,该集合再利用算法去匹配博文和用户,即如果两者之间匹配的分数高,我们就会通过分发控制将内容下发过去。

同时,我们通过对“已读、已发”进行过滤,以保证所发出去的内容不是用户已经看过的。

另外,大家使用微博的时间偏好会有所不同。如果我们在用户工作的时候给他发送博文消息,那么由于他在此时并不想消费内容,因此会构成一定的骚扰。

而到了中午,当有空再去查看时,该内容已经过时了。所以我们需要选择用户最想看微博的时间段,将内容发送过去。

有了前面推荐系统的流程概念,我们具体来看一下评分的过程。首先,我们通过物料生成模型进行审核,筛选出全量优质的内容,并放入物料池之中。而物料池需要实时地更新其互动的内容。

例如,物料池根据某条博文在当前时间点的转发次数与评论次数,予以实时更新。

在完成更新之后,我们会以分钟为间隔单位,去拉取所需的物料和参与计算的用户,使用 Rank 模型算出分值和排序,并从中筛选出对于用户最感兴趣的博文予以下发。

上图的 Rank 模型旁边是“协同推荐”。在一般系统中,会将协同作为一种召回的方式,将协同所产生的内容,放在物料召回的部分中再做推荐。

但是在该场景下,根据我们做过的测试,协同推荐的效果好于排序模型,因此我们认为没有必要再“走”一遍排序模型,完全可以直接发送下去了。

而在经历了基础过滤的下发后,我们会实时地收取下发日志和点击日志。这两种日志再通过更新物料池,影响物料生成模型和运营审核部分,从而为筛选环节提供帮助。

微博基于机器学习的个性化 Push 应用

理解了推荐系统的结构,我们再来看如何将机器学习在个性化 Push 中进行具体应用。

上图是我们整体的架构,其最下端是博文信息、用户信息、行为信息等。我们会根据这些信息挖掘出各种非常具象的特征。

利用这些特征进行模型训练和评估,就能得出排序模型和物料模型。当新模型达到需求,我们就会将这些模型运用到线上,进行排序策略、和 CTR 预估。

最后线上的数据被再次“传导”回来,成为下面的基础数据部分,以供模型下一次的训练与迭代。

特征构建

上面提到了特征的构建,那么我们如何来具象各种特征呢?

兴趣维度

对于一篇博文而言,微博通过“三级标签体系”来具现它所代表的特征含义。通过记录用户对博文的消费来记录其兴趣方向。

如上图所示:首先,最上面的是比较宽泛的,如“体育领域”;其次是“足球”;“足球”下面会有“梅西”、“C 罗”。

在某个用户消费了带有“梅西”标签的博文后,只要他多次打开或互动,我们就认为该用户是对于“梅西”感兴趣的,就会把“梅西”标签记录在用户信息中。

我们把用户兴趣标签和博文标签作为特征加入到模型中,进行训练,就能表示用户对博文内容的兴趣程度。

关系维度

检查某个用户与其关注的博主是否有过直接的互动行为。如果他们在历史上的互动次数非常频繁的话,我们就认为该博主所会产生的博文特别契合此用户的需求,那么他们的关系也可以作为一个纬度特征,被加入进来。

实时维度

或称“先验”纬度。由于 Push 在其应用的场景中所使用的物料相对较少,其“曝光”的机会更少,因此所推送的内容必须是热点中的热点。

我们通常会将各种博文在其他领域里的消费点击率作为“先验”数据传导回来,通过导入至模型中,以给我们提供帮助。

环境维度

包括推送的时间、设备的网络信息、和设备本身的信息等。

模型升级

有了上述各种特征之后,我们再讨论一下 Push 业务的模型升级过程。首先,我们从 LR(Logistic Regression)开始做了一个 Base Line。

由于 LR 模型在实践中不但非常简单,同时解释性也不错,而且它特别适合于大规模的计算,因此我们将其作为 Base Line 之后,就有了一个基础性的数据。

在那之后,我们升级到了FM(Factorization Machines)模型,以及现在所做的 Wide&Deep 模型。

线性模型

上图是对 LR 模型的介绍。由于该模型比较难以捕捉用户的组合特征,因此在被使用时,大家往往会增加一些人工的组合特征进去。

例如,我们在此改进为“两两特征组合”,当然也可使用多维特征的组合方式。

不过它存在的问题是:由于本身特征就很稀疏,如果做了组合,其对应的样本变得更加稀少。

而对于模型而言,样本是至关重要的,因此我们使用该模型无法学习到足够多的信息。

FM 模型

在此基础上,业内专家想了一种模型--FM 模型,它是把 LR 模型+“Dense 化两两特征组合”。

即并不直接对 WIJ 进行求导,而是把 WIJ 拆分成了两个向量纬度的乘积予以表现。

同时,它的向量与所有特征共同计算,因此它在泛化能力上有所提升。

具体实现方式如上图所示。该模型在上线之后,在 Push 业务效果的提升非常明显。

Wide&Deep 模型

有了上述的两两特征组合之后,我们还引入了 Wide&Deep 模型。即:通过把 Wide 模型和 Deep 模型相结合,既保留了 Wide 模型里面的记忆能力,又具有一些高阶的特征组合优势。

因此,该模型具有更强的表现能力。当然,它也带来了计算量增加的问题。

深度模型通常网络节点很多,用于线上业务计算量比较大,因此我们相对于原论文,进行了适当地裁剪。

我们使用该模型的网络结构如上图所示,三层网络节点分别是 64、128、256。尽量保证在离线指标下降较小的情况下,简化网络。

模型训练

下面和大家分享一下,我们在工作中遇到过的一些问题和使用的技巧。

对于微博中不同频次的用户而言,由于他们的使用习惯差异较大,如果简单地将其放入同一个模型,则效果不佳。

因此,我们对于不同用户的频次进行了拆分,分别训练了高频次、中频次和低频次类型的用户。同时,我们在负样本的选择上做了一些调整。

由于服务器在做推送(Push)的时候,用户不一定能真的收到、收到了也不一定会被系统所展示出来、就算系统展示出来了也不一定会被用户所看到。

因此我们不能简单地将推送曝光的样本作为负样本,而应当选取历史上有过正样本的用户,将他们在获得正样本触发时,所并未点击到的上下几条曝光,来作为负样本。

籍此,我们的表现能力、点击量和点击率都有了显著的提升。

其他的方法与技巧还包括:

  • 在物料模型上,我们采取的是机器投稿+人工审核的方式。
  • 在物料召回上,我们采用了兴趣领域召回、热点召回、和文本 embedding 召回等。
  • 在排序的方面,我们使用了分片批量计算。因为我们每天要发送几个亿规模的推送量,如果每次都是进行全量计算的话,对于服务器的资源消耗会过大,当然也没有必要。

下面分享我们的两个方案。

BoostPush 方案

如果某个物料在未经充分验证的情况下,对所有的用户进行计算,那么就可能因为某一特征的影响导致分值特别高,而造成过大范围的下发。

如此,该不良物料会被展现给成百上千万用户。因此,我们首先会在一个特别小的范围内进行尝试,如果点击率特别高的话,我们再逐渐扩大其权限,层层扩量,直至全站。

通过该 BoostPush 方式,我们既控制了不良物料下发的范围,又将曝光的机会让给了充分验证完成的物料。通过此法,我们的点击量得到了大幅提升。

协同过滤方案

Push 除了能给用户带来最及时的消息推送以外,它还有一项非常重要的作用--给 App 的服务方提供“拉活”效果。

对于一般不常打开 App 的用户而言,推送在“拉活”方面的效果并不明显。

因此,我们需要选取曾经时常点击并打开 Push 消息的那些用户,以他们的行为作为推送的参考,来进行各种相应的协同下发方面的尝试。这对于我们“拉来”新的用户会十分有效。

上面就是我们在实际生产过程中所遇到过的问题,和相应的解决方案。

齐彦杰,新浪微博技术专家。毕业于郑州大学计算机系,微博研发中心技术专家。曾任职于某搜索公司高级架构师,多年从事爬虫、索引、检索、数据分析等方向的研发工作。目前在微博 User Growth 方向中,关注领域在数据挖掘、用户画像、自然语言处理、个性化推荐系统等领域,负责访客信息流推荐、Push 平台信息推荐、用户转化等业务。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

【编辑推荐】

  1. 一文简单理解“推荐系统”原理及架构
  2. 微内核架构在大型前端系统中的应用
  3. 这可能是目前最透彻的Netty原理架构解析
  4. 苏宁微服务治理架构Istio的通信和治理之道
  5. 苏宁主数据智能维护系统是如何建立的?
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

数据库加密——最后的防线

本书是关于如何使用已有的密码技术和算法对数据库中存储的信息进行保护的书,书中所关注的内容主要是如何设计、建立(或者挑选、集成)一套...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊