广告和推荐系统是机器学习是最成熟的应用领域。那么广告和推荐系统是怎么在线上部署机器学习模型的呢?
1.预测函数上线
刚刚学习机器学习时候,我认为广告和推荐系统过程如下图所示:
1)线下部分,从用户和广告(物品)属性抽取用户和物品特征,将抽取的特征合并进日志生成训练数据,训练机器学习模型;
2)线上部分,来了一个请求,从用户和广告(物品)属性抽取请求中的用户和物品的特征,将这些特征合并请求生成预测实例,用线上模型得到预测结果。
但是这个架构有两个问题:
1)从用户和广告(物品)属性抽取特征的程序有线上线下两套,这两套程序必须保持完全一致。但由于调参的原因,特征抽取是机器学习系统中最经常发生变化的模块。经常变化的模块需要保持一致,这很困难。那么我们能不能强行地用一套程序呢?比如,我们把特征抽取和特征处理模块写成 .so 文件。这样也有问题:线下要求快速变化以方便工程师调特征,可能会使用一些训练框架(比如 Spark);线上要求程序快速实时,要求工程师编码严谨。写成严谨的 .so 文件,能够保证线上的需求,但无法快速变化,也不能在 Spark 上使用。
2)线上特征抽取要求非常快速,特别在线上吞吐量很大的情况。但有些重度特征不可能在短时间内抽取出来,比如广告的历史点击率(生成这个特征需要遍历一段时间的点击日志)。在此我向大家推荐一个大数据技术交流圈: 658558542 突破技术瓶颈,提升思维能力 。
在这期间,这两个问题困扰了我很久, 直到我知道了神器 Redis。Redis 是一个开源内存数据库,支持集群模式、持久化和 Key-Value 数据结构。在使用时,我们可以将 Redis 看成一个巨大的哈希表。Redis 在后台开发中经常用作 cache 服务器, 后来被工程师们用于广