作为机器学习的一个细分领域,CTR预估一直以来都是研究的一大热点。之所以成为研究的热点,是因为推荐领域巨大的商业价值。无论是我们每天通信用的微信QQ,还是我们每天搜索用的Google百度,或者是娱乐用的抖音斗鱼,广告在这些产品的收入中都占据着非常重要的组成部分,广告收入的背后是广告推荐引擎在发挥作用。除了广告,我们网上购物时的物品推荐,看新闻时的新闻推荐,听音乐时的音乐推荐等等,这些都是推荐引擎发挥作用的地方。在这些地方,推荐引擎都产生了巨大的价值。
对于如此重要的一个领域,我们做机器学习的小伙伴多多少少都需要了解一下。下面我将结合一个项目上的实际案例,来分享一下整个CTR的研究和应用情况。我将尝试尽可能用通俗易懂的语言,使得只要有一些基本的机器学习知识就能理解文章内容。文章将从应用角度出发,重点关注基本原理及工程实现而弱化更偏理论的公式推导等。
CTR
CTR的全称是Click-Through Rate,即点击率。这里的点击当然就是指点击推荐的内容,如视频、音乐、新闻、广告等。
如何进行推荐呢?从结果来看,我们希望算法能输出一个推荐内容的列表,这个列表按照一定的规则(比如用户感兴趣的程度、最大化盈利)进行排序。为了计算这个列表,用户点击某个内容的概率将是一个重要的输入。所以,CTR预估成为了推荐领域的最重要的部分之一。事实上,CTR预估的准确程度很大程度上影响着推荐结果的好坏。
主流推荐系统架构
在推荐场景中,我们需要思考和解决下面这些问题:
- 如何处理数据形成特征
- 如何高效的、稳定的进行模型训练
- 如何将训练好的模型快速用于线上推理
- 如何支持模型在线优化
- 如何快速的实验新的特征及模型
从整体上来看,推荐系统架构将是一个离线、近在线、在线处理相结合的一个复杂系统。完全在线处理推荐系统中的所有问题是一种理想情况,其成本将非常高昂,即便大型互联网公司也未必能做到。一个相对完善的推荐系统解决方案都会组合利用这三种模式各自的优势来解决问题。
一般的机器学习任务都会包含数据和模型两部分,推荐系统也不例外。从数据层面看,推荐系统的数据可以来自三个方面:1. 用户数据,比如年龄、性别等;2. 物品(或广告)数据,比如广告文案、图像、视频等;3. 场景数据,比如广告位、当前时间、是否节假日等。于是,我们可以得到这样的推荐系统逻辑架构:
对于这些数据,如果按照实时性维度来看,可以分为离线数据、近实时数据、实时数据。正好就可以用不同实时性的数据处理工具进行处理。
从模型层面看,简单的处理方式就是离线模型训练配合在线模型定期更新。如果模型训练时间比较长,可能只能实现按天进行更新。如果模型可以有一定的迁移能力,那么就有可能按小时进行模型离线迁移学习,实现按小时进行模型更新。如果工程能力比较强,能同时实现模型在线训练和服务,那么模型的更新周期就能缩短到分钟级别。模型更新的时效性通常对推荐的效果有很大的影响。
一般而言,当前主流的推荐系统会在设计上将整个推荐过程分成这样几个主要的步骤:召回 -> 排序 -> 再排序。召回层主要目标是快速缩小推荐范围,一般会利用业务规则、高效的算法或简单的模型实现。而排序层则对筛选出来的小规模数据进行CTR预估和排序。再排序层则会充分考虑推荐结果的多样性、流行度、新鲜度等指标,对排序好的结果进行最终的调整。
有了以上这些分析,我们可以得到一张常见的推荐系统的架构图:
推荐系统技术演进
在推荐系统中,模型发挥作用最明显的一步就是排序层,同时排序层也是整个推荐系统中最重要的一步。所以,大多数的研究都是针对排序层的研究,这里提到的技术演进也主要是指排序层模型的技术演进。
2010年之前,业界主流的推荐系统一般都是基于协同过滤或简单的逻辑回归(LR
)模型实现,也有的系统会基于某些业务特征进行推荐,比如标签、地域、热度等。这些模型利用数据的能力有限,需要大量的领域专家设计特征,准确率也不高。
从2010到2015年间,随着移动互联网的高速发展,基于传统模型进行了大量的改进。出现了因子分解机(FM
)、梯度提升树(GBDT
,Facebook
的主要模型)等基于协同过滤的改进模型。也出现了FTRL
(Google
的主要模型)、混合逻辑回归(MLR
,阿里的主要模型)等基于LR模型的改进。
2015年之后,随着深度学习在计算机视觉领域和自然语言处理领域的成功应用,推荐领域的研究方向也快速转向了以深度学习为主。由于深度模型更少的依赖人工特征工程,并能更有效的利用数据和发现数据中的模式,这些模型得到了非常快速的迭代演进和工程应用。当前常见用于各大互联网公司的模型,比如Google
提出的Wide&Deep
模型,微软提出的Deep Crossing
模型,阿里提出的引入注意力的DIN
模型及可以进行时序建模的DIEN
模型,基于深度学习的协同过滤模型NeuralCF
等等。可以看到,深度推荐模型的设计思路开阔,方向多样,呈现出百花齐放的状态。
简单总结一下可以得到下图:
一些重要的问题
除了模型之外,推荐系统中还有一些比较重要的问题。这里简要分析一下。
特征处理
机器学习领域有一个基本的认知,那就是“数据和特征决定了机器学习的上限,模型和算法只是在逼近这个上限”。所以,好的特征是非常关键的一步。在优化模型的时候,如果陷入了一个瓶颈,回过头来从数据层面进行分析可能会有意想不到的效果。常常需要对数据和模型进行综合优化才能实现较大的性能提升。
为了将特征接入模型,需要对数据进行一定的处理,转化为模型需要的格式。对于一般的类别特征,常见的特征处理办法是进行OneHot
编码。对于多类别的特征,比如近期观看的电影列表这类,进行MultiHot
编码可以实