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

在广告和推荐系统中部署机器学习模型的两种架构

时间:2023-03-14 16:35:09 科技观察

广告和推荐系统是机器学习最成熟的应用领域。那么广告和推荐系统如何在线部署机器学习模型呢?1.当预测功能在线刚学习机器学习时,我觉得广告和推荐系统的流程如下图所示:1)离线部分,从用户和广告(Item)属性中提取用户和物品特征,将提取的特征合并到日志中生成训练数据,训练机器学习模型;2)在线部分,来一个请求,从请求中提取用户和广告(物品)属性,提取用户和物品的特征,将这些特征组合起来请求生成预测实例,在线模型为用于获得预测结果。但是这个架构有两个问题:1)用户和广告(item)属性的特征提取有两套流程,在线和离线,并且两套流程必须完全一致。然而,由于参数调整,特征提取是机器学习系统中变化最频繁的模块。频繁变化的模块需要保持一致,这很难。那么我们可以强行使用一套程序吗?比如我们把特征提取和特征处理模块写成.so文件。这种方式也存在问题:离线需要快速变化,方便工程师调整特性,可能会用到一些训练框架(如Spark);在线需要快速和实时的程序,需要工程师严格编码。写成严谨的.so文件,可以保证线上需求,但是不能快速更改,也不能在Spark上使用。2)在线特征提取要求非常快,尤其是在线吞吐量大的时候。但是有些重特征无法在短时间内提取出来,比如广告的历史点击率(生成这个特征需要遍历一段时间的点击日志)。这两个问题在我的学习过程中困扰了我很长时间,直到2014年我知道了神器Redis。Redis是一个开源的内存数据库,支持集群模式,持久化和Key-Value数据结构。在使用的时候,我们可以把Redis想象成一个巨大的哈希表。Redis在后台开发中经常被用作缓存服务器,后来被工程师用作广告和推荐系统中的特征服务器。工程师将用户和广告(物品)的ID作为Key,将用户和广告(物品)的特征作为Value存储在Redis中,这样在线程序只需要用户和广告(物品)的ID就可以知道特征。引入Redis后,广告和推荐系统流程如下:1)在离线部分,从用户和广告(商品)属性中提取用户和广告(商品)特征,将提取的特征合并到日志中以为训练机生成训练数据,并将提取的特征上传到在线Redis服务器;2)在线部分,来一个请求,从Redis服务器取出用户和广告(商品)特征,将特征合并到请求中生成预测实例,使用在线模型得到预测结果。这种架构还有一种变体:离线提取特征后,不生成训练数据而是直接发送到Redis,在线使用Storm实时拼接训练数据。但我对这个变体的前因后果了解不多,就不展开讨论了。该架构将预测功能(即训练好的模型)在线部署。为了区别于下面的架构,我们把这种架构称为在线预测功能架构。2.在线预测结果在了解了预测功能的在线架构后,我将其作为广告和推荐系统在线部署模型的“正统”。所以在2014年接触到另外一个架构的时候,我心里是拒绝的。这个架构的关键点是把预测结果放到网上。具体过程如下:1)在线,从用户和广告(物品)属性中提取用户和物品特征,将提取的特征合并到日志中生成训练数据,训练机器学习模型;合并几乎所有可能的请求的特征,然后生成预测实例,并使用模型得到预测结果;2)在线很简单,获取离线预测结果。这里有点难以理解的是“穷尽几乎所有可能的请求”。这么多可能的请求怎么可能穷尽?微博广告系统(虚构)看似有很多可能的请求,但每个用户只需要匹配几个广告就可以了。于是将微博广告系统“userid,adid1,adid2...,adidn”的预测结果上传到网上。一旦在线上传userid请求展示广告,在线模块会按照一定的逻辑在预测结果中返回对应的用户。广告。这种架构是将预测结果部署到线上,我们称之为预测结果在线架构。慢慢地,我也开始明白在线预测结果的好处。预测结果在线架构,将机器学习的整个过程和大部分控制逻辑都搬到了线下,在线上避免了各种隐患。这样,功能较弱的工程师也可以使用功能较弱的机器处理在线模块。毕竟在线模块只需要实现少量的控制逻辑和显示即可。这大大降低了构建广告系统或推荐系统的难度。在我正式上岗后,支持组内运营活动的推荐系统采用了预测结果的框架上线。我发现重新运行统计数据浪费了很多时间,因为有时会临时添加或删除项目。一旦添加或删除项目,在线预测结果的推荐系统需要重新生成预测数据(因此之前运行的数据要么没有要添加的项目,要么有要删除的数据)。另一个问题是预测结果的在线结构存在延迟:今天在线显示的是昨天准备的预测结果,今天准备的预测结果要到明天才能显示,这会导致速度变慢。***还有一个问题,预测结果在线架构只适用于几乎所有可能出现请求耗尽的场景。例如,预测结果在线架构不适用于搜索广告系统,因为搜索广告系统无法穷尽所有可能的请求。3.总结预测函数在线架构可以覆盖预测结果在线架构的适用场景,但是预测结果在线架构不能覆盖预测函数在线架构的适用场景。同时,预测功能在线架构更加灵活。预测函数在线架构不愧为部署机器学习模型的“正经”方法。预测结果在线架构的优点是难度比较低。预测结果的在线架构结合了机器学习的全过程和大部分控制逻辑,避免了各种在线隐患。在机器、时间、人力等各种条件不足的情况下,预测结果的在线架构是一个不错的选择。预测结果的在线架构是部署“剑斜”机器学习模型的方法。兵法上有句话:义勇为胜,选择哪种架构,还是需要仔细分析和权衡的。【本文为专栏作家“李莉”原创稿件,转载请联系授权】点此查看该作者更多好文