当前位置: 首页 > 科技观察

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

时间:2023-03-20 21:38:51 科技观察

【.com原创文章】推送作为召回用户的有效产品,近年来被各种APP广泛使用。然而,Push有两个方面。如果推荐信息准确,可以有效召回用户,否则会对用户造成骚扰。利用机器学习对Push进行个性化推送,推送用户感兴趣的内容,不仅可以最大限度减少对用户的骚扰,还可以有效提高Push的打开率。2018年5月18-19日,由主办方主办的全球软件与运维技术峰会在北京召开。在“人工智能技术探索”分会场,来自新浪微博的技术专家戚艳杰为大家做了主题演讲《机器学习在微博个性化 Push 的应用》。他与大家分享了微博个性化Push如何通过基于海量数据的机器学习有效提升打开效果的一些实践和想法。本文分为以下四个部分:为什么要推送商务微博个性化推送场景微博个性化推送机制微博基于机器学习的个性化推送应用为什么要推送商务众所周知,微博是社交媒体中的一种媒介,它于2009年8月;2013年底,MAU(月活跃用户)突破1亿;2015年9月,DAU(日活跃用户)突破1亿。2017年9月MAU达到3.76亿;2018年3月,微博MAU突破4.11亿。增长速度相当惊人。当微博的MAU超过4.1亿时,如此庞大的用户基础和用户关系,必将充分发挥其社交媒体属性。我们来看看为什么要做Push业务。如上图右侧所示,这些都是给大家留下深刻印象的事件。如果我们能够在第一时间将这些事件推送给目标用户,肯定能满足用户对于重要消息及时性的需求。所以,每当国内外有什么大事,我们都会做一些提示,发给大家。同时,我们是一个社交媒体。用户关注的博主在发送博文时,都希望以内容提醒的形式收到自己感兴趣的通知消息。根据以上需求,我们将微博推送大致分为:热点推送、个性化推送、关系推送、区域推送和直播推送等类型。上图右侧是微博推送的展示形式,包括一些文案和介绍,都展示在通知栏中。可见,Push本身具有站主动推送的特点,而用户则处于被动提醒的状态。但它的挑战在于,用户在信息流中通过一次刷新可以带来十条以上的信息曝光,命中用户兴趣点的概率比较高,而Push是单次曝光,击中的概率要小得多。但是,如果过于频繁地发送Push,则会引起用户的反感。因此,我们希望在尽可能少发送的前提下,尽快找到用户的兴趣点。它具有一定的复杂性和挑战。也就是说,在减少对用户骚扰的同时,增加用户的点击规模。因此,我认为Push的本质是一个高效的内容分发系统,可以在短时间内为各种内容找到它的目标人群,并发送给相应的消费者。同时,对于个人用户来说,应该是一位经验丰富的私人秘书,帮助用户在海量内容源中找到自己喜欢的新闻,并提醒用户及时查看。微博个性化推送场景我们来看看个性化推送场景。上图是2017年微博用户分析,用户年龄分布广泛,从18岁以下到41岁以上。对比微博规模的平台,即使41岁以上的用户占比也只有5.6%,绝对数量是数千万。从地域上看,一二三四线城市,以及港澳台城市,都有大量的用户。同时,微博用户的兴趣也很分散。内容涉及明星、汽车、电影、美食等,在如此庞大的用户群体和用户喜好分布的情况下,微博本身的内容种类就非常丰富。上图左边是微博热门首页的分类,右边是某一时刻的热门话题列表,可见其丰富程度和复杂程度。用户兴趣广泛,如何在短时间内为用户匹配推送喜欢的内容?这就是我们个性化Push要解决的问题。我们需要建立一个推荐系统,有针对性地找到不同用户喜欢的内容。微博个性化推送机制因为所有的推荐系统,基本上都是从内容源头去寻找用户喜欢的资源。所以对于微博来说,它的来源就是全量的原创博文。每天,这些博文都会产生数以千万计的量级,但并不是所有的内容都适合推荐给用户,所以我们需要进行机器和人的双重筛选。机器筛选可以帮助我们找到优质材料。但是,由于Push本身就是一个推送过程,当它推送的内容中包含一些不良内容时,就会给用户带来巨大的困扰。因此,为了规避风险,我们增加了人工审核流程。人工审核完成后,我们会得到一个适合推荐的合集,然后会通过算法对博文和用户进行匹配,即如果两者匹配分高,我们会通过分发控制来分发内容.同时,我们对“已读已发送”进行过滤,确保发送的内容不是用户已经看过的内容。另外,每个人使用微博的时间偏好也会不同。如果我们在用户工作时向他发送博文消息,这将构成一定程度的骚扰,因为他此时不想消费内容。而且中午有时间再看一遍,内容已经过时了。所以我们需要选择用户最想看微博的时间段,把内容发到那个时间段。有了前面推荐系统的流程概念,我们再详细看一下评分流程。首先,我们通过素材生成模型进行审核,筛选出足量的优质内容,放入素材池。素材池需要实时更新互动内容。例如,素材库根据某篇博文在当前时间点的转发数和评论数实时更新。更新完成后,我们会每隔几分钟拉取需要的素材和参与计算的用户,使用Rank模型计算分值排序,筛选出用户最感兴趣的博文并分发.上图中Rank模型旁边是“CollaborativeRecommendation”。在一般的系统中,会采用协同作为召回的方式,将协同产生的内容放在素材召回的部分进行推荐。但是在这个场景下,根据我们做过的测试,协同推荐的效果要好于排序模型。因此,我们认为不必再“走”排名模型,直接发送即可。基本过滤投递后,我们会实时收集投递日志并点击登录。这两种日志然后更新素材池,影响素材生成模型和操作审查部分,从而帮助筛选过程。微博基于机器学习的个性化Push应用了解了推荐系统的结构,下面就来看看如何将机器学习应用在个性化Push中。上图是我们的整体架构,最底端是博客信息、用户信息、行为信息等,根据这些信息,我们会挖掘出各种非常具体的特征。利用这些特征进行模型训练和评估,可以推导出排序模型和材料模型。当新模型满足要求后,我们会在线应用这些模型进行排名策略和CTR预估。最后将线上数据再次“传导”回来,成为下面的基础数据部分,用于模型的下一次训练和迭代。特征构建上面说了特征构建,那么我们如何可视化各种特征呢?兴趣维度对于一篇博文,微博使用“三级标签体系”来实现其所代表的特征的含义。通过记录用户对博文的消费记录用户的兴趣方向。如上图所示:第一,上面的比较宽泛,比如“运动场”;其次是“足球”;“足球”下会有“梅西”和“C罗”。用户消费标签为“梅西”的博文后,只要多次打开或互动,我们认为该用户对“梅西”感兴趣,“梅西”标签将被记录在in用户信息。我们将用户兴趣标签和博客文章标签作为特征添加到模型中,并训练它们以指示用户对博客文章内容的兴趣。关系维度检查用户是否与他关注的博主有过直接互动。如果历史上他们的互动非常频繁,我们认为博主制作的博文特别适合用户的需求,他们的关系也可以作为纬度特征加入。实时维度或“先验”维度。由于Push在应用的场景中使用的素材相对较少,“曝光”的机会也较少,所以推送的内容一定是热点中的热点。我们通常会将其他领域的各种博文的消费点击率作为“先验”数据传回,导入到模型中来帮助我们。环境维度包括推送时间、设备的网络信息和设备自身的信息。模型升级具备以上特点后,我们再来说说Push业务的模型升级流程。首先,我们根据LR(逻辑回归)制作了一条基线。由于LR模型不仅在实践中非常简单,而且具有很好的可解释性,特别适合大规模计算,所以我们用它作为BaseLine之后,我们就有了一个基础数据。之后我们升级到FM(FactorizationMachines)模型,现在做Wide&Deep模型。LinearModel上图是对LR模型的介绍。由于这种模型很难捕捉到用户的组合特征,因此在使用时,人们往往会在其中加入一些人为的组合特征。比如我们这里改进为“两两特征组合”,当然也可以使用多维特征的组合。但是它存在的问题是:因为它本身的特征很稀疏,如果结合起来,它对应的样本会变得更加稀疏。对于模型而言,样本至关重要,因此我们无法使用该模型学习足够的信息。FM模型在此基础上,业内专家想到了一个模型——FM模型,它结合了LR模型+“densepairwisefeaturecombination”。即不直接推导WIJ,而是将WIJ拆分成两个向量纬度的乘积来表示。同时,它的向量是和所有特征联合计算的,因此泛化能力提高。具体实现方法如上图所示。模型上线后,Push业务效果提升非常明显。在Wide&Deep模型有了上面的pairwise特征组合之后,我们还引入了Wide&Deep模型。即:通过将Wide模型与Deep模型相结合,既保留了Wide模型中的记忆能力,又具有一些高阶特征组合优势。因此,该模型具有更强的表达能力。当然也带来了计算量增加的问题。深度模型通常网络节点较多,在线业务的计算量比较大。因此,与原始论文相比,我们对其进行了适当的剪裁。我们使用该模型的网络结构如上图所示,三层网络节点分别为64、128、256。尽量确保网络简化,离线指标小幅下降。模型训练给大家分享一下我们在工作中遇到的一些问题和使用的技巧。对于不同微博频率的用户,由于他们的使用习惯差异较大,如果简单地放到同一个模型中,效果并不好。因此,我们将不同用户的频率进行拆分,分别训练高频、中频和低频用户。同时,我们在负样本的选择上做了一些调整。服务器在推送(Push)的时候,用户不一定能真正收到,系统收到后也不一定会显示出来,即使系统显示了也不一定被用户看到。因此,我们不能简单地将推送的曝光样本作为负样本,而是应该选择历史上有过正样本的用户,取其在获得正样本触发时未点击的上下曝光,作为负样本。结果,我们的性能、点击率和点击率都显着提高。其他方法和技巧包括:在材质模型上,我们采用机器提交+人工审核的方式。在素材召回方面,我们使用了兴趣领域召回、热点召回、文本嵌入召回等。在排序方面,我们使用了分片批计算。因为我们每天要发送上亿的推送量,如果每次都进行全量计算,服务器的资源消耗就太大了,当然没有必要。下面我们分享我们的两个建议。在BoostPush方案中,如果一个素材在没有经过充分验证的情况下为所有用户计算,可能会因为某个特征的影响导致分值特别高,导致分布过大。这样,不良材料就暴露给了数百万用户。因此,我们会先在很小的范围内进行尝试。如果点击率特别高,我们会逐渐扩大它的权限,逐层扩大量,直到整个站点。通过这种BoostPush的方式,我们既控制了不良素材的投放范围,又放弃了接触完全验证素材的机会。通过这种方式,我们看到流量大幅增加。协同过滤解决方案Push除了为用户带来最及时的新闻推送外,还有一个很重要的作用——为App的服务商提供“拉直播”的效果。对于一般不经常打开App的用户来说,推送在“拉直播”方面的效果并不明显。因此,我们需要选择那些频繁点击和打开Push消息的用户,以他们的行为作为推送的参考,进行各种相应的协同投放尝试。这对于我们“拉”新用户会非常有效。以上就是我们在实际生产过程中遇到的问题以及相应的解决方案。齐艳杰,新浪微博技术专家。毕业于郑州大学计算机系,微博研发中心技术专家。曾任搜索公司高级架构师,多年从事爬虫、索引、检索、数据分析的研发。目前微博用户增长方向,重点领域为数据挖掘、用户画像、自然语言处理、个性化推荐系统等领域,负责访客信息流推荐、Push平台信息推荐、用户转化等业务。【原创稿件,合作网站转载请注明原作者和出处为.com】