导读 今天给大家分享一下推荐系统在近年来的整体技术发展。文中的很多观点和技术都参照于业界的论文以及一些外部的文章。
全文目录如下:
**01****推荐系统技术架构 **
整个推荐技术,经过几年的发展已经比较完善,上图展示了推荐系统的一个整体架构,分为数据和推荐模型两层。
1. 数据层
数据层主要是通过客户端以及服务端的实时数据,经过流处理的平台,把用户的信息、商品的信息、场景的信息以及端侧的信息全部都收集全。基于这些信息,再通过特征工程的很多方法,如归一化、离散化、非线性离散等很多的变换,把特征处理成下游模型处理的方式。处理完后一般会放在特征存储中,如 KV 存储: Redis、阿里的 iGraph 等;
2. 模型层
通过离线训练完后的模型一般会导到线上,通过线上服务的方式直接对整个推荐系统进行服务。模型的训练也有很多的方式,现在业界比较流行的有 TensorFlow 、 PyTorch 或者阿里巴巴的 PAI 都可以通过离线 + 在线实时训练的方式对模型进行加工。(1)全链路干预模型加工完后,会对整个推荐链路从召回、到粗排、到精排、到重排进行全链路的干预。其中在粗排阶段,一致性、全链路、高性能这三个特点是整个粗排需要关注的。重排阶段是最近几年发展起来的,由于整个技术栈都比较成熟,所以在端侧可以部署准实时的模型,包括阿里这边开源的 EdgeRec 。除了整个的召回、粗排、精排和重排之外,还有很多的冷启动策略、E&E 策略,包括很多适配的策略。往往经过排序完之后的结果并不是整个推荐系统最终给用户呈现的结果,这里需要做多样性的、信任性的、疲劳度的控制、分页过滤等等,最终才得到整个的推荐的结果。后面的分享会围绕召回、粗排、精排、重排以及用户理解和特殊处理进行一些简单的探讨。
02 **用户理解 **
首先是用户理解,这张图展示了最近几年来用户理解的发展历程。
1. 用户理解可以从下往上分为数据、洞察和理解三层
(1)数据层数据层主要是要更全面、更实时、更准确地把用户、场景、待推荐的物品等各个方面的数据特征的收集全。这里包含用户的基础信息、还有行为信息、时空信息以及端的信息,需要有一些比较成熟的端的实时的框架来支持。(2)洞察层在数据层之上要做一些比较深入的洞察,包括:① 关于用户价值的洞察。② 行为模式的洞察。③ 生命周期的洞察。每一层的洞察又包含了很多标签的建设:需求强度的建设、敏感度的建设以及行为序列的模式等。(3)理解层在洞察之上会有一层更高抽象的理解。2. 业界学术及实战分类:显式和隐式通过业界的学术及实践,可以分为显式和隐式两类。(1)显式① 对召回的用户行为做筛选:如物料和类目等;② 标签的抽取;③ 群体的理解:包括通过聚类、 Looklike 等方式;④ 更高层面的意图的推断。这种意图的推断主要集中在显式的意图的推断,包括购买力的推测、类目、品牌属性的预测。⑤ 另外一个是最近比较兴起的关于用户生命周期的理解。 需要对用户的整个行为做理解,从用户的浏览到购买到决策到结束整个生命周期,在整个生命周期内去推测用户的意图和偏好。(2)隐式除了显式之外,另外一个是在学术界研究比较多的隐式。主要是对用户的多个行为做隐式的表达、做向量的表达,以及做一些模糊的表达。如单序列或者多模态的行为表达,有短的、长的、超长的行为序列的表达,还有超长生命周期的表达等等。
03 召回技术
有了用户理解之后,就是召回的技术,召回技术可以分为工程和召回算法两部分。
1. 工程侧
对于整个召回来说,工程侧起到非常大的作用,因为召回一般都是多通道的召回,这里面对性能的影响会比较大,所以工程侧需要一个更强的技术架构。
上图左侧是一个召回侧的技术架构:把用户的特征、商品特征和行为的特征通过多种类型的召回模型,包括通过向量的方式、相似矩阵的方式,弱个性化方式等等几十种召回通道之后,再通过向量检索的方式或其他检索的方式在线上做召回。
2. 召回算法
召回技术可以分为传统的召回、知识的召回、表示的召回、匹配召回四大类型,当然还有一些召回类型可能是这四种类型的融合体。
(1)传统召回
最近几年,传统召回使用的比较少了,但是在整个推荐系统里面,传统召回一直占据着一个比较主要的位置。对于一个推荐系统,传统召回已经可以解决大部分问题了。传统召回里面,可以分为热门召回,协同召回,还有基于内容的召回。这里有大家耳熟能详的 SVD、Slim、gSlim、fSlim,还有大家经常用的 UserCF,以及包含它的 ItemCF、 Swing 等等,还有基于 UserCF、ItemCF 做的很多变种来去适配,召回率才能更好。还有大家最常见的内容召回,如属性的召回。
(2)知识召回
最近几年,随着知识图谱的发展,知识的召回显得尤为重要。知识召回有很多优势:① 第一个是知识召回的可解释性比较强。② 第二个是知识召回整个线上实现的逻辑会比较简单,性能会比较好。基于知识的召回主要是通过图谱、或者通过一些规则标签的方式建立。有了图谱或者标签之后,在上面可以做基于实体的召回、基于标签的召回、基于路径的推理,以及基于逻辑的表达。(3)表示召回表示召回是最近几年整个学术界和工业界都在极力探索的,表示召回所带来的提升是很大的,对整个工程的要求也比较高。表示召回的发展从最简单的双塔模型,到最近一些年基于 Graph-base 模型的相关推理。Graph-base 也经历了一段时间,从基于简单序列的,包括 DeepWalk、Node2Vec,到后面基于知识图谱的知识的表达,类似于 TransE,KGAT,以及最近一些年基于 Graph的表达。表示的召回整体上可以分为:① 显式行为的建模。② 隐式行为建模。③ 多兴趣表征。④ 超长行为的建模。每一类其实都有一些代表性的算法,大家可以都去观察一下。在显式行为建模里面有GRE4Rec、DUPN、BERT4Rec。隐式行为建模里面有 XDM。多兴趣表征里面有 MIND、SASNet,还有超长行为里面的。(4)匹配召回相对于传统的表示召回,匹配召回为了更加精准的表征各种行为训练,它对上层的模型的复杂度要求会更高一点。如传统的 NCF,还有最近在阿里或者字节应用的比较成功的 TDM 和 DR。TDM 和 DR 是从检索、模型、索引三个方面来对整个召回链路做优化。要求有更加复杂的匹配模型,同时兼顾候选集大规模召回的时效性。在整个召回技术的发展里面,特别是基于表示的召回和匹配的召回都需要对很多的负样本做比较精准的采样。
04****排序技术
1. 粗排技术迭代
接下来是排序技术,首先粗排技术的发展:(1)粗排模型的发展粗排这张图是参考了阿里妈妈这边的一些论文,经历了数代的发展。① 初代模型在初代,整个粗排模型主要还是基于人工规则或后验概率统计的。② 第二代模型到了第二代之后,粗排模型就开始有 LR 的模型,或者基于 XFTRL 相关的一些简单的模型的表达。③ 第三代模型到了第三代之后就有了一些双塔模型或三塔模型或者 FSCD 模型,模型里面主要是把用户还有商品用来做表征,表征完了之后在上层再做一个匹配。④ 第四代模型到了第四代模型之后,性能要求更高,如 COLD 的模型、 AutoFAS 模型等。整个模型把特征和工程做了更加深入的优化。模型的发展是从后验统计、线性模型、双塔模型,到轻量的高精度深度模型,到最近一些年大家都在深入研究的端到端深度粗排。在端到端的更深度的粗排模型上,主要做了几个方面:① 一方面是怎么与精排模型进行更好的深度的融合统一,包括粗排跟模型的蒸馏。② 另外一方面是真正地将最终的优化目标跟一致性的粗排保证一致,这个其实是很难的。③ 第三个就是随着粗排模型越来越复杂,在性能上要求更高,所以需要比较强的工程效率优化 。(2)粗排优化阶段面临的问题特征应该怎么做交叉、性能应该怎么去做、这里还面临着很多 SSB(严重的样本选择偏差)的问题。
2. 精排模型技术
接下来是精排技术的发展,这张图也参考了很多的模型,在其基础上又做了一些添加。精排技术的发展可以分为传统模型时代和深度模型时代。(1)传统模型时代在传统模型时代,主要是基于 LR 展开。通过样本分组做 MLR、通过特征交叉做 FM,通过 FM 做序列,通过树模型的 GBDT 相关序列,XGBOST 序列,有实时性的、 FTRL、XFTRL 等 。(2)深度模型时代最近几年,模型在深度模型时代是迭代比较快的,主要是基于 MLP 做了很多的变换。右边这张图按照上下两部分 + 左右两部分来看:下面这部分其实大家很多场景都用过,就是基于 MLP 到 Wide 和 Deep,同时基于 Wide 和 Deep 侧分别做改进,有 DCN 、DPFM、 AFM、NFM 等等,他们都是针对于某一个部分做了优化,上面部分,主要是针对 MLP 里面的很多东西引进了更加先进的 Attention 、Product Layer 还有 GNN 等等。右侧这部分主要是基于 AE 、强化学习或者 NCF 的变动。左侧这部分主要是在引入 Attention 相关演化出来的,基于 DIN、DIEN、MIMN、 DSIN,还有 SIM,分别对长序列等等建模。整个排序技术的发展最终是要朝着多模块、多任务、多目标还有多模态四个方向去做。在多任务、多目标、多模态三个方面都有比较经典的模型,比如多任务阶段有 MMOE 和 PLE,多目标阶段有帕累托最优,多模态方面有 MMGCN、 LOGO 等。(3)精排技术的模型演****进方向① 第一个是模型的目标:目标从一个要变成多个。② 第二个是模型的表达:模型需要有更加成熟的,更加复杂的结构来增强表达。③ 第三个是模型的容量:怎么在特征和信息扩充方面引入更多的特征处理,还有外部的信息让模型的容量变大。
05****其它推荐算法方向
其它的推荐技术,这里选了几个比较热门的方向:冷启动、偏置建模和可解释性。1. 冷启动冷启动可以分为:① 基于后验概率的群体统计。② 高效地利用属性信息。③ 充分利用少量的标注数据的启发式的探索。这里也有很多经典的论文,在此不做赘述,大家可以去看一下。冷启动应该是现在业界很多的场景,如旅游、视频、商品等很多地方都会面临的一个问题,在模型建模方面怎么更好地利用全局的信息,群体的信息,以及更好地利用少量的交互数据来去把用户的行为表征得更准确。2. 偏置建模在模型层面有很多方式去做建模,偏置建模是最近几年比较热的一个 topic。偏置建模主要可以分为位置偏差、曝光偏差和热度偏差。当然还有其他的偏差,这里主要列举了 3 个比较热门的。这三个偏差建模里面也有很多经典的模型,包括 Click Model、曝光模型、基于正则化的和基于因果推断的等等。3. 可解释随着推荐系统的发展,包括信息安全法,还有很多其他方面,对推荐系统的可解释性要求也比较强。推荐系统的可解释可以分为:① 怎么去基于其他用户和基于商品去做可解释。② 怎么基于文本和视觉做可解释。③ 怎么通过社交的方式做可解释。可解释推荐是在给用户提供推荐的列表时,给用户解释为什么会这样推。能够帮助提升整个推荐系统的说服力,以及对用户的表征能力。
06 评估
最后,简要介绍推荐系统 Metrics 的变化。 1. 整体指标随着视频等行业的兴起,指标方案也在发生变化,主要可以分为:① 转化率的指标。② 推荐类的指标,推荐质量类的指标。③ 消费满意度的指标。这里面有传统的 CTR、CVR、ECPM、客单价、DAU 类,也有多样性、新颖性等很多指标,还有留存、停留时长等等。 2. 分阶段指标推荐系统还是要以线上的 AB test + 离线指标两者的融合才能有更好的说服力。推荐系统线上的指标是与所推荐的内容,包括场景密切相关的,所以说推荐系统的目标不一样,所选择的指标观测也不一样。这张图可以分为离线和在线,上层的在线主要看的是整体指标,下面的离线主要是从召回、到粗排、到精排、到重排每个阶段各个部分看的效果。在召回阶段,大家比较常用的一些 Recall、Precision、F1、NS-recall、NS-precision 还有 Hit Rate 等等,基于场景的不一样,还有很多去看 KL 散度、长尾判断。在粗排阶段,除了常用的 AUC、GUC、MAP 相关性指标之外,还有跟精排分数的一致性,这个是非常重要的,因为最终粗排要优化的目标还是要跟精排打分的尽量保持一致性。在精排和重排阶段还是要面向场景化,除了要看正常的 AUC、GUC,还要看是不是要分类目去看 AUC、GUC,是不是要分人群、分场景,都是需要深入动态做的。以上就是今天分享的内容,感谢大家。
分享嘉宾 INTRODUCTION
陈祖龙
阿里巴巴
高级算法专家
2013 年毕业东北大学,先后在百度知识搜索部,淘宝搜索与推荐,飞猪技术算法,一直在做搜索、推荐等相关工作,曾在 WWW,KDD,SIGIR,CIKM,ICDE 等多个国际期刊和会议上发表二十多篇论文。