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

作者: 李立 2017-04-18 14:31:39

广告和推荐系统是机器学习是最成熟的应用领域。那么广告和推荐系统是怎么在线上部署机器学习模型的呢?

机器学习模型

1. 预测函数上线

刚刚学习机器学习时候,我认为广告和推荐系统过程如下图所示:1)线下部分,从用户和广告(物品)属性抽取用户和物品特征,将抽取的特征合并进日志生成训练数据,训练机器学习模型;2)线上部分,来了一个请求,从用户和广告(物品)属性抽取请求中的用户和物品的特征,将这些特征合并请求生成预测实例,用线上模型得到预测结果。

广告和推荐系统过程

但是这个架构有两个问题:1)从用户和广告(物品)属性抽取特征的程序有线上线下两套,这两套程序必须保持完全一致。但由于调参的原因,特征抽取是机器学习系统中最经常发生变化的模块。经常变化的模块需要保持一致,这很困难。那么我们能不能强行地用一套程序呢?比如,我们把特征抽取和特征处理模块写成 .so 文件。这样也有问题:线下要求快速变化以方便工程师调特征,可能会使用一些训练框架(比如 Spark);线上要求程序快速实时,要求工程师编码严谨。写成严谨的 .so 文件,能够保证线上的需求,但无法快速变化,也不能在 Spark 上使用。2)线上特征抽取要求非常快速,特别在线上吞吐量很大的情况。但有些重度特征不可能在短时间内抽取出来,比如广告的历史点击率(生成这个特征需要遍历一段时间的点击日志)。

在读书期间,这两个问题困扰了我很久, 直到 2014 年我知道了神器 Redis。Redis 是一个开源内存数据库,支持集群模式、持久化和 Key-Value 数据结构。在使用时,我们可以将 Redis 看成一个巨大的哈希表。Redis 在后台开发中经常用作 cache 服务器, 后来被工程师们用于广告和推荐系统中的特征服务器。工程师将用户和广告(物品)的 ID 作为 Key,将用户和广告(物品)的特征作为 Value 存入 Redis,这样线上程序只需要用户和广告(物品)的 ID 就能知道特征。引入 Redis 之后,广告和推荐系统过程如下所示:1)线下部分,从用户和广告(物品)属性抽取用户和广告(物品)特征,把抽取的特征合并进日志生成训练数据用于训练机,并把抽取的特征上载到线上 Redis 服务器;2)线上部分,来了一个请求,从 Redis 服务器取出用户和广告(物品)特征,将特征合并进请求生成预测实例,用线上模型得到预测结果。

Redis

这种架构还有一个变种:在线下抽取特征之后不生成训练数据而是直接送到 Redis,在线上用 Storm 实时拼接训练数据。但我对这个变种的前因后果不太了解,就不展开讨论了。这种架构将预测函数(也就是训练出来的模型)部署在线上。为了和下面的架构区分开来,我们将这种架构称为预测函数上线架构。

2. 预测结果上线

了解预测函数上线架构之后,我将之作为广告和推荐系统线上部署模型的 “正统”。 因此当 2014 年我接触到另一种架构时,我内心是拒绝的。这种架构的要点在于把预测结果上线,具体过程如下所示:1)在线上,从用户和广告(物品)属性抽取用户和物品特征,将抽取的特征合并进日志生成训练数据,训练机器学习模型;将几乎所有可能的请求合并特征,进而生成预测实例,用模型得到预测结果;2)线上就很简单了,接入线下传过来的预测结果。这里稍微难理解的是 “穷尽几乎所有可能的请求”,疑惑那么多可能的请求怎么可能穷尽呢?微博广告系统(虚构的)所有可能的请求貌似很多,但每个用户只需要匹配若干个广告就行了。因此微博广告系统的预测结果 “userid,adid1,adid2...,adidn” 上载到线上,一旦线上传一个 userid 请求展示广告,线上模块就按照一定的逻辑返回预测结果中这个用户对应的广告。这种架构是将预测结果部署到线上,我们将之称为预测结果上线架构。

广告和推荐系统线上部署模型的 “正统”

慢慢地我也开始明白预测结果上线的好处了。预测结果上线架构将机器学习全过程和绝大部分控制逻辑都搬到线下,规避了线上的各种隐患。这样不那么厉害的工程师用不那么厉害的机器也能搞定线上模块了,毕竟线上模块只需要实现少量的控制逻辑和展示。这大大降低了建立一个广告系统或者推荐系统的难度。

我正式工作之后,组里支持运营活动的推荐系统采用了预测结果上线的架构。我发现有不少时间浪费在重跑数据上,原因在于有时需要临时增加或者删除物品。一旦增加或者删除物品,预测结果上线的推荐系统就需要重新生成预测数据(因此之前跑的数据要么没有要加的物品,要么有要删的数据)。另外一个问题就是预测结果上线架构有延时性:今天线上展示的是昨天准备的预测结果,今天准备的预测结果要等明天才能展示,这会导致节奏慢一些。***还有一个问题,预测结果上线架构只适用于几乎所有可能的请求能够穷尽的场景。比如,预测结果上线架构不适用于搜索广告系统,因为搜索广告系统不能穷尽所有可能的请求。

3. 总结

预测函数上线架构能够覆盖预测结果上线架构的适用场景,但是预测结果上线架构不能够覆盖预测函数上线架构的适用场景。同时预测函数上线架构更具灵活性。预测函数上线架构不愧为部署机器学习模型的 “堂堂正正” 之法。

预测结果上线架构的好处就是难度比较低。预测结果上线架构将机器学习全过程和绝大部分控制逻辑,规避了线上的各种隐患。在机器、时间和人力等各种条件不充足的情况,预测结果上线架构不失为一个好的选择。预测结果上线架构是 “剑走偏锋” 的机器学习模型部署之法。兵法有云:以正合以奇胜,选择哪一种架构还是需要仔细的分析和权衡。

【本文为51CTO专栏作者“李立”的原创稿件,转载请通过51CTO获取联系和授权】

戳这里,看该作者更多好文

机器学习 模型 架构
上一篇:云计算、人工智能颠覆传统医疗只是时间问题 下一篇:Facebook的交互式神经网络可视化系统ActiVis,打开神经网络的“黑盒子”
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

人工智能取得重大突破,意识识别已经实现

这只是一个开始,但是却非常令人兴奋:将大脑活动转化为文本的系统。对于那些无法说话的人,例如患有锁定综合征的人,这将改变生活。

秦枫时尚范 ·  1天前
特征工程是啥东东?为何需要实现自动化?

如今人工智能(AI)变得越来越普遍和必要。从防止欺诈、实时异常检测到预测客户流失,企业客户每天都在寻找机器学习(ML)的新应用。ML的底层是什么?这项技术如何进行预测?使AI发挥神奇功效的秘诀又是什么?

布加迪 ·  4天前
科学家研发出“读心术”,直接将脑电波翻译成文本,错误率低至3%

美国加州大学旧金山分校的科学家,已经训练出一种算法,可以直接将受试者的脑电波实时翻译成句子,错误率仅为 3% 。

张路 ·  2020-04-02 10:16:59
破解机器学习的误区——常见机器学习神话究竟从何而来?

Forrester Research最近发布了一份名为“ 粉碎机器学习的七个神话”的报告。在其中,作者警告说:“不幸的是,一些对机器学习项目做出重要决策的企业领导者,普遍存在机器学习的误解。”

CDA数据分析师 ·  2020-04-01 14:24:06
令人兴奋的 2020 年人工智能和机器学习趋势

在本文中,我们将讨论几个顶级的人工智能和机器学习趋势,将塑造新年:2020。 我们还将介绍面部识别技术及其在2020年的应用。

飞羽译 ·  2020-03-31 18:49:03
2020之最:最实用的机器学习工具有哪些?

就如同制作米其林菜肴,拥有井井有条的厨房固然重要,但可选择的东西太多也着实让人烦恼,建立良好的机器学习(ML)应用程序也是如此。

读芯术 ·  2020-03-31 18:47:22
用机器学习备忘单解决艰巨问题,你行吗?

在本文中,我们将介绍如何使用备忘单简化机器学习方法,你可以使用该备忘单选择适合解决问题的正确算法。

读芯术 ·  2020-03-28 14:36:36
“阿凡达”式脑-脑接口性能提升 2-3 个数量级

脑-脑接口这一概念,看过科幻电影《阿凡达》的人可能有点印象。在电影中,地球上的人可以通过脑对脑的直接信息传递,远程控制潘多拉星上经基因改造的蓝色类人生物 Na'vi 族。

付静 ·  2020-03-26 10:42:31
Copyright©2005-2020 51CTO.COM 版权所有 未经许可 请勿转载