为什么需要推荐系统
推荐系统是随着互联网的发展而诞生的,为了处理平台、信息和用户三者关系而发展的意向技术。本来不想干的内容信息和用户之间以平台为中介产生联系和互动,在其中,推荐系统在用户侧处理信息过载的问题,将感兴趣的信息推荐给合适的用户,另一方面在平台侧,解决用户留存、增长及商业化等问题。一个好的推荐系统应该是既能满足用户的诉求,又能帮助平台实现业务增长。
定义
推荐系统本质上是在处理用户和信息的关系,这里的信息在短视频推荐指的是视频信息,在文章推荐指的是文章信息,在商品推荐指的是商品信息,但这些都可以统称为物品信息,通常物品的候选集合是庞大的。在用户侧,为了更准确的捕捉用户兴趣,推荐系统会使用大量的与用户相关的信息,比如人口信息、行为信息等。同时对用户来说,不同时间、不同位置对物品选择会影响很大,因此场景信息,也称上下文信息也是推荐系统关注的。
图1.推荐系统逻辑
如果给推荐系统一个定义的话,那就是通过获取物品信息 <math xmlns="http://www.w3.org/1998/Math/MathML"> I I </math>I、用户信息 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U、上下文信息 <math xmlns="http://www.w3.org/1998/Math/MathML"> C C </math>C在大量候选集合 <math xmlns="http://www.w3.org/1998/Math/MathML"> S S </math>S中选择用户感兴趣的物品列表 <math xmlns="http://www.w3.org/1998/Math/MathML"> L L </math>L。通过函数转化为数学表达就是:
<math xmlns="http://www.w3.org/1998/Math/MathML"> L = F ( I , U , C ) , L ∈ S L = F( I, U, C), L \in S </math>L=F(I,U,C),L∈S
结构
系统结构
做为一个信息处理系统,推荐系统是复杂的,主要包括数据存储、数据处理和数据计算等功能。从结构上划分,包括离线、近线、在线三个部分,每个部分都具备存储、处理和计算的功能。
图2.推荐系统结构
离线层
离线层处理的数据一般来自Hive、HDFS等,不依赖实时数据,通过离线计算的方式进行加工产出离线特征,用于离线模型的训练。通常使用任务调度框架,如Airflow,将不同离线任务连接起来,按照小时或天维度进行定期更新。离线部分处理的数据往往是十分庞大的,通常采用多机分布式的处理框架,如Spark。
图3.离线层
由于离线部分按照小时或天维度进行更新特征和模型,时效性较差,无法反应实时用户兴趣变化,于是促使了近线层的产生。
近线层
近线层处理时效性较高,但非完全实时化的数据。通常时间间隔在秒级到小时级,因此可以捕获用户及上下文环境近期的变化,包括实时兴趣,地理位置变化等。近线计算从消息队列里订阅数据(如Kafka,MQ,Flume等),对于数据的处理主要使用Storm、Flink、SparkStreaming等技术。
图4.近线层
在线层
在线层一般指的是在请求发生时在线服务的实时处理,通过对当下数据的收集及结构化处理得到实时特征,传入模型,计算预估。
同时请求完成后,用户的交互行为会产生新的实时数据。这部分数据会存入系统,最终以近线或离线形式存储下来,用于后续的模型训练。
图5.在线层
算法结构
推荐系统的算法结构,通常分为:召回、排序、重排序这3个环节,每个环节逐层过滤,最终从海量的物料库中筛选出几十个用户可能感兴趣的物品推荐给用户。
召回
召回层的作用是轻量快速地从内容池中选取几千上万的候选Item,送给排序模块。召回面对的候选集十分大,通常会采用多路召回的方式,按照不同索引并行召回内容,一方面可以保证低延迟,另一方面内容多样性更强,不易遗漏兴趣内容。
召回一般可分为非个性化召回和个性化召回,个性化召回又有content-based、behavior-based、feature-based等多种方式。
排序
排序层通过模型对召回层的候选Item进行打分和排序,得到Top-N个Item。常见的排序模型有LR、XGBT、WideDeep、DNN等。
针对不同的优化目标,比如点击、点赞等,一般会有多个模型进行排序,或者为了节省资源使用多目标模型进行打分。将多个优化目标的打分使用加权融分公式排序。
重排序
重排序阶段对精排生成的Top-N个物品的序列进行重新排序,作为排序系统最后的结果,直接展现给用户。常见的有优化目标有:Point Wise、Pair Wise 和 List Wise。
同时重排序还会根据一些策略、运营规则参与排序,比如去重、运营强插、内容打散等,重新进行一个微调。
总结
本文阐述了推荐系统出现的原因和定义,分别在系统结构和算法结构上整体介绍了推荐系统的整体架构。