原创 PowerData-胡洋 PowerData

PowerData

数据之力 非同凡想

■ ■ ■

思考  交流  贡献  共赢

全文共  3921 字,建议阅读 18 分钟

  系列前言 / Series Preface

       随着移动互联网的飞速发展,人们已经处于一个信息过载的时代。在这个时代中,信息的生产者很难将信息呈现在对它们感兴趣的信息消费者面前,而对于信息消费者也很难从海量的信息中找到自己感兴趣的信息。推荐系统就是一个将信息生产者和信息消费者连接起来的桥梁。 平台往往会作为推荐系统的载体,实现信息生产者和消费者之间信息的匹配。

     作者:PowerData-胡洋|编辑:PowerData-李钊

Chapter

01

推荐系统概述

推荐系统的意义

推荐系统解决产品能够最大限度地吸引用户、留存用户、增加用户粘性、提高用户转化率的问题,从而达到平台商业目标增长的目的。例如:淘宝等电商平台,除了最大化商品的点击率外,最关键的目标则是最大化用户的转化率,即由点击到完成商品购买的指标。

对于一个平台而言,无论是否靠平台上的物品直接盈利,其将平台上的内容与用户进行匹配的能力都是衡量平台好坏的重要标准之一,推荐系统的好坏很大程度上决定了平台匹配需求和供给的能力。

推荐系统对于用户而言,除了将平台上的需求和供给进行匹配外,还需要尽可能地提高用户的体验。推荐系统可以像为用户准备生日礼物一样,让呈现的内容给用户带来惊喜,进而增强用户对平台的依赖。

推荐和搜索的区别 

搜索和推荐都是解决互联网大数据时代信息过载的手段,但是它们也存在着许多的不同: 

区别点

搜索

推荐 

用户意图

用户意图明确,通过查询关键词发起搜索请求 

用户意图模糊,根据历史推荐用户可能感兴趣的内容 

个性化程度

由于限定的了搜索词,个性化程度较低

没有标准答案,个性化程度较高

优化目标

归一化折损累计收益(NDCG)、精确率(Precision)和召回率(Recall)

优化目标可能会更宽泛。例如用户停留时长、点击、多样性,评分等 

马太效应和

长尾理论

存在马太效应

存在马太效应,长尾性明显   

推荐系统的应用

个性化推荐系统通过分析用户的行为日志,得到用户当前的甚至未来可能的兴趣,给不同的用户展示不同的(个性化)的页面,来提高网站或者app的点击率、转化率、留存率等指标。 推荐系统被广泛应用在广告、电商、影视、音乐、社交、饮食、阅读等领域。下面简单地通过不同的app的推荐页来感受推荐系统在各个内容平台的存在形式。 

  • 电商首页推荐(淘宝、京东、拼多多)

  • 视频推荐(抖音、快手、B站、爱奇艺)

  • 饮食推荐(美团、饿了么、叮咚买菜)

  • 音乐电台(网易云音乐、QQ音乐、喜马拉雅)

  • 资讯、阅读(今日头条、知乎、豆瓣)

Chapter

02

推荐系统的架构

推荐和搜索系统核心的的任务是从海量物品中找到用户感兴趣的物品。本文将从系统架构和算法架构两个角度出发解析推荐系统通用架构。

系统架构以及设计思想 

系统架构层面,将推荐系统按照对数据利用情况和系统响应要求出发,分为离线层、近线层、在线层三个模块。

分层名称 

 作用 

离线层

处理离线海量数据的计算和特征工程,不要求响应时间

近线层

处理准实时数据, 响应时间可达分钟级  

在线层

处理实时数据,响应时间可达秒级,保证在线服务

推荐系统系统架构抽象出来的结构如下图:

整个数据部分其实是一整个链路,主要是三块,分别是客户端及服务器实时数据处理、流处理平台准实时数据处理和大数据平台离线数据处理这三个部分:

客户端和服务端的实时数据处理

  •   记录用户在平台上的行为轨迹, 比如用户的浏览、点赞、收藏、分享、转发以及用户停留时间等;
  • 埋点工作主要是后端和客户端完成,主要是解析日志数据。

流处理平台准实时数据处理

  • 本质上也是记录数据(准实时数据-可能存在几分钟的误差);
  • 准实时数据即为存在误差的即时数据, 比如用户在观看这个内容之前还看过哪些内容;
  • 准实时数据量比较大, 且逻辑相对复杂, 一般通过消息队列做缓存实现。

大数据平台离线数据处理

  • 离线数据处理大批量数据, 基本上没有时限要求。

01

离线层(offline)

离线层是计算量最大的一个部分,它的特点是不依赖实时数据,也不需要实时提供服务。需要实现的主要功能模块是:数据处理、数据存储、特征工程、离线特征计算、离线模型的训练。

 离线任务一般会按照天或者更久运行,比如每天晚上定期更新这一天的数据,然后重新训练模型,第二天上线新模型。 

02

近线层(nearline)

近线层的主要特点是准实时,它可以获得实时数据,然后快速计算提供服务,但并不要求它和在线层一样达到几十毫秒这种延时要求。近线层的产生是同时想要弥补离线层和在线层的不足,折中的产物。 适合处理一些对延时比较敏感的任务,比如: 

  • 特征的实时更新计算:例如统计用户对不同分类文章的点击率。近线层能够获取实时数据,按照用户的实时兴趣计算就能避免这个问题;
  • 实时训练数据的获取:比如在使用DIN、DSIN这行网络会依赖于用户的实时兴趣变化,用户几分钟前的点击就可以通过近线层获取特征输入模型; 
  • 模型实时训练:可以通过在线学习的方法更新模型,实时推送到线上。

03

在线层(online)

在线层,即直接面向用户的那一层。最大的特点是对响应延时有要求;因为它是直接面对用户群体,想象你打开抖音淘宝等界面,几乎都是秒刷出来给你的推荐结果,不会说还需要让你等待几秒。所有的用户请求都会发送到在线层,在线层需要快速返回结果。它主要承担的工作有: 

  • 模型在线服务: 包括了快速召回和排序;
  • 在线特征快速处理拼接:根据传入的用户ID和场景,快速读取特征和处理拼接;
  • AB实验或者分流:根据不同用户群体采用不同的模型,比如冷启动用户和正常服务模型;
  • 运筹优化和业务干预:比如要对特殊商家流量扶持、对某些内容限流。

算法架构

在实际的生产系统中,首先需要保证的是稳定、实时地向用户提供推荐服务,在这个前提下才能追求推荐系统的效果。 

工业推荐系统,如果粗分的话,有两个阶段。首先是召回,主要根据用户部分特征,从海量的物品库里,快速找回一小部分用户潜在感兴趣的物品,然后交给排序环节,排序环节可以融入较多特征,使用复杂模型,来精准地做个性化推荐。召回强调快,排序强调准。

但是,如果我们更细致地看实用的推荐系统,一般会有四个环节,如下图所示: 

01

召回

召回层的主要目标是从推荐候选池中选取几千上万的item,送给后面的排序模块。由于召回面对的候选集十分大,且一般需要在线输出,故召回模块必须轻量快速低延迟。由于还有排序模块作为保障,召回不需要十分准确,但不可遗漏。 目前基本上采用多路召回解决范式,分为非个性化召回和个性化召回。个性化召回又有content-based、behavior-based、feature-based等多种方式。

 召回主要考虑的内容有: 

  1. 考虑用户层面:用户兴趣的多元化,用户需求与场景的多元化:例如:新闻需求,重大要闻,相关内容沉浸阅读等等;
  2. 考虑系统层面:增强系统的鲁棒性;部分召回失效,其余召回队列兜底不会导致整个召回层失效;排序层失效,召回队列兜底不会导致整个推荐系统失效;
  3. 系统多样性内容分发:图文、视频、小视频;精准、试探、时效一定比例;召回目标的多元化,例如:相关性,沉浸时长,时效性,特色内容等等;
  4. 可解释性推荐一部分召回是有明确推荐理由的:很好的解决产品性数据的引入;

02

粗排

粗排可以理解为精排前的一轮过滤机制,减轻精排模块的压力。粗排介于召回和精排之间,要同时兼顾精准性和低延迟。目前粗排一般也都模型化了,其训练样本类似于精排,选取曝光点击为正样本,曝光未点击为负样本。但由于粗排一般面向上万的候选集,而精排只有几百上千,其解空间大很多。

粗排阶段的架构设计主要是考虑三个方面:

  • 根据精排模型中的重要特征,来做候选集的截断;
  • 增强与用户侧的相关性, 使得结果更加准确。 比如热度或者语义相关的这些结果,仅考虑了item侧的特征,可以用粗排模型来排序跟当前User之间的相关性。

03

精排

精排层的任务是获取粗排模块的结果,对候选集进行打分和排序。精排需要在最大时延允许的情况下,保证打分的精准性,是整个系统中至关重要的一个模块,也是最复杂,研究最多的一个模块。

04

重排

由于精排模型一般比较复杂,基于系统时延考虑,一般采用Point Wise方式,并行对每个item进行打分。重排一般比较轻量,可以加入上下文感知能力,提升推荐整体算法效率。比如三八节对美妆类目商品提权,类目打散、同图打散、同卖家打散等保证用户体验措施。重排中规则比较多,但目前也有不少基于模型来提升重排效果的方案。 

01

混排

多个业务线都想在Feeds流中获取曝光,则需要对它们的结果进行混排。比如推荐流中插入广告、视频流中插入图文和banner等。可以基于规则策略(如广告定坑)和强化学习来实现。 

Chapter

03

 本文小结

  • 推荐系统的背景:信息过载或者用户难以找到感兴趣的物品。
  • 推荐与搜索的区别:用户意图、个性化程度、优化目标以及马太效应和长尾理论。
  • 推荐系统三层设计:离线层(管理离线作业)、近线层(执行类似于在线计算的方法,但又不必以实时方式完成)、在线层(快速地响应最近的事件和用户交互,必须实时完成)。
  • 推荐系统四个环节:召回(万/千)、粗排(千)、精排(百)、重排(百)

往期精彩文章合集

【开源人物专栏】

 开源人物-禅道社区王春生:让项目管理更便捷

 开源人物—IoTDB乔嘉林:征服工业互联网数据

【技术文章专栏】

 Kafka 源码学习(一)生产者源码

 kafka源码学习(二)服务端源码

 kafka源码学习(三)消费者源码

【技术实践】Doris数据查询性能解析:Explain 与 Profile 功能深度应用

【技术实践】大数据SQL优化原理与实践系列之认知篇(一)

【技术实践】大数据SQL优化原理与实践系列之原理篇(一)

【社区活动专栏】

 活动回顾 |【数字经济·城市脉动】PowerData西安开源行

 活动回顾 |【数字经济·城市脉动】PowerData 杭州开源行

 国内开源数据社区运营天团

<<<  END >>>

PowerData是由一群数据从业人员,因为热爱凝聚在一起,以开源精神为基础,组成的数据开源社区。

社区整理了一份每日一题汇总及社区分享PPT,内容涵盖大数据组件、编程语言、数据结构与算法、企业真实面试题等各个领域,帮助您提升自我,成功上岸。

扫码关注下方公众号,点击"加入社区",即可加入社区群,免费领取资料,报名社区活动,与社区共同成长。


PowerData
1 声望2 粉丝

PowerData社区官方思否账号