AutoML如何实现智能推荐系统的自动上线和运维?

1,715 阅读14分钟

第四范式先荐在2050大会上召集了《新媒体结合人工智能后的裂变》主题的新生论坛,第四范式资深科学家王嘉磊博士在论坛上分享了如何通过AutoML实现智能推荐系统的自动上线和运维。以下是演讲实录:

演讲嘉宾简介:王嘉磊,第四范式资深科学家,负责设计实现第四范式 AutoML 产品算法,美国康奈尔大学运筹学博士,研究方向为贝叶斯优化及应用于自动化机器学习。

智能推荐系统领域出现了一些新技术——自动机器学习,即AutoML。接下来我主要讲一下AutoML的概念以及AutoML在智能推荐系统中的应用。

当我们浏览了足够多的视频或文字,手机应用就一定会给我们推荐一些相对符合我们口味的内容,这个过程称之为推荐。

现在大多数推荐系统会采用机器学习技术。相较于之前的人工归纳数据,机器学习能够从海量的数据中挖掘出数据之间的微妙联系,其粒度比人工归纳得出的结果高好几个数量级,推荐的质量和精准度也大幅提高

AI在推荐系统中的应用

在推荐系统中,机器学习的流程一般如下:

最初,用户想要看手机应用中的某些内容,于是发出请求,打开IP,系统就需要给该用户推荐一些他比较感兴趣的内容。这时首先会经过召回策略阶段。这一阶段的主要任务是进行粗选。在这一阶段,系统中可供候选的内容很多。如果我们想通过某些较为简单或快速的召回策略对内容进行初筛,可以从以下维度入手:新闻热点、用户兴趣、新内容分发……

接下来两个阶段主要运用机器学习模型完成:粗排和精排。所谓的粗排和精排,二者之间并无严格的界限。大致看来,粗排模型一般是指能简单快速地做出预测的模型,其精准度相对低精排模型是指一些造价较为昂贵但精准度高的模型,现在更多的就是关于神经网络的模型

经过机器学习模型粗排后,接下来就是排序。所谓的排序就是根据候选内容与用户兴趣的相关度,从高到低进行排序,排序最高的内容与用户的兴趣最相关。在排序完成后,后续要做的就是过滤已经推荐过的内容、考虑到多样性后还需要打散推荐内容。最后一步就是返回给用户的推荐结果

在整个推荐过程中,除了排序模型中涉及到机器学习之外,召回策略阶段也有机器学习的应用。

如果推荐系统中的候选内容是文本内容,那么需要自然语言处理(NLP)模型来理解文本内容中包含的信息

如果是图像或视频,那么需要借助计算机视觉(CV)的技术来理解视频或图像中包含的信息,或者给图像或视频打相应标签

利用机器学习来分析用户画像,其实更多的是用在排序模型中。首先要分析用户归属于哪个用户群,这样才能推荐出用户比较感兴趣的内容,预测点击率和内容阅读时长

内容质量的评估也可以借助机器学习模型来实现自动化。如果评估出一部分较为优质的内容,那就需要分发,大力宣传。

如何构建模型?

刚才简单介绍了我们能够利用AI、机器学习解决的一些点。在这些点里面,其实每一个要解决的点,都可能需要一个或多个模型。那么该如何构建模型呢?

在我们接入数据之后,需要对数据进行清洗。清洗过后,对数据做一些简单的处理,让这些数据能够适应某一个训练模型,从而很好地上线该模型的一个版本。

在推荐场景中,最原始的一个训练数据就是某一随机用户。如果给该用户推荐一篇文章,文章最终被点击或未被点击都是可能产生的行为。但如果只有该用户的ID和给该用户的推荐内容ID这两个信息的话,还远远不够。我们还会收集一些用户的其他信息,比如说用户之前的浏览记录、用户曾经发表的评论等行为数据,这些行为数据会被归纳到其他的表中。

我们需要把这些表做一个拼接,最后成行,形成一张比较全面的表单。表单中的每一行都是一次行为事件,这一行的每一个数据都是用来描述该事件的具体情况:内容是什么样的?用户是什么样的?用户是否点击了内容?多表拼接和特征工程这两个操作有一定相关性,做拼接的时候其实也是在做特征。

接下来就涉及到训练模型。我们把一个模型训练出来,它的产出需要就变成待上线的模型。构建模型的过程很复杂,其中的每一个环节都需要人工的参与。一些建模科学家会凭借自己丰富的背景知识或实战经验来做出选择。

我们希望能训练出一个AI模型,让这个AI模型帮助数据科学家在每个环节中做出对应的选择。其实我刚才介绍的就是用机器学习构建机器学习模型的一个流程。这个模型的具体模式(下图),其实和刚才的机器学习流程图一一对应。二者基本上是在做同一件事情,只不过我们希望,由AutoML完成这条链中要做的选择。

在这个链条中,Feature为特征工程,Model涉及到在多个模型之间的选择,Optimization涉及到模型的优化。假设现在我们有一个模型并在其中做出了选择,那我怎么才能知道这次选择的好坏呢?这里比较关键的一个环节,也是人工建模时不一定会用到的一个环节,就是最后的AI模型。

也就是说,在这链条中,我们所做的每一次操作,都可以通过评估这一步来检验这次操作。以特征工程为例,假设我们想在已有特征的基础上尝试某个新的特征,那么可以在加了新特征以后,通过评估这一步骤来检验这次操作是否是好的操作。如果我们还希望给AutoML一些反馈,告诉它这次操作是好是坏,那么接下来AutoML就能知道我们之后可能需要的一些其他操作,什么样的操作是较好的操作,或什么样的操作是差的操作。

从本质上来讲,AutoML是一个搜索的过程

我们看这幅图,一开始,这条链是一个非常简单的排列。在拿到数据后,我们会做一些简单的特征工程(包括随机选取某个模型),等到把模型训练好后,通过评估便可得知这条机器学习管道目前的效果。

机器学习要达到的目标就是,通过不断的改变或者增加操作,让这条链最终的效果有所提升。这就是自动机器学习要做的主要工作。我们可以把优化的过程也称为搜索的过程。

至于搜索,最简单的方法就是随机尝试。不管是选择模型还是训练模型,其中都包含一些已知的、有限的操作。我们从中随机挑选,挑选完后进行评估,评估完后继续去做新的尝试。最后把做过的所有尝试进行排序,挑选其中最好的或者次好的一个机器学习管道作为最终结果。但这样做存在的问题是,随着机器学习管道越来越长,或是这当中的操作越来越复杂,能做的选择呈指数性增长,并马上就会变成上万种或者数十种万种操作。之后,对每一次操作进行评估还要花费大量时间。这时候就要用到搜索策略。

所谓的搜索策略,就是怎么样能够把搜索的过程尽可能地加速,尽可能做得更快。我总结了四种主要的方法:

第一种搜索策略叫进化算法。这种算法和达尔文进化论较为相似。假设有一个种群,所谓的种群即多个机器学习管道,这些机器学习管道有好有坏。通过不断的迭代,让好的机器学习管道和另一个好的机器学习管道变换或结合,逐步取代坏的,从而产生下一代机器学习管道。评估结果好的机器学习管道会被继续保留在群组中,评估结果差的则会被剔出群组。经过不断的更新迭代,最终留在这个群组中的都是好的机器学习管道。

第二种搜索策略叫贪心法。假设你身处一个山谷中,希望以尽快的速度爬出山谷,但你的视线范围可能就只在附近的10米以内。你能做的事情就是通过目测10米的范围以内,哪个方向可能是上升最快的方向,等走到之后继续做下一个选择。所谓的贪心法就是指在局部环境中不断地做出我们认为最好的决策,通过对局部不断的迭代,从而找到全局最优解

第三种搜索策略叫贝叶斯优化。贝叶斯优化是基于数据使用贝叶斯定理估计目标函数的后验分布,然后再根据分布选择下一个采样的超参数组合。它充分利用了前一个采样点的信息,其优化的工作方式是通过对目标函数形状的学习,并找到使结果向全局最大提升的参数

最后一种搜索策略叫强化学习。AlphaGo用到的主要策略就是强化学习。它的本质是解决 decision-making 问题,即自动进行决策,并且可以做连续决策。

自动特征工程

做出好的特征工程一般对模型的效果提升比较明显,因此我们做自动机器学习的工作也涉及这部分。对于自动特征工程,我们要先定义特征应该怎么生成,我们认为特征是原始数据经过一系列操作后产出的变换后的数据,我们将操作大致分为unary operation, binary, aggregation等几类操作。

有了这些操作后,我们通过算法来决策如何通过这些操作生成优质的特征。这里面我们对于特征重要性评估,也就是评价一个特征多好或者多坏,以及决策算法都有较深入的研究。

模型超参数优化

做完特征工程之后,我们就到了模型训练环节。这个过程中,因模型算法而异,可能会存在一些需要人提前去设置的参数,我们称之为超参数。

这些超参数决定了这个模型训练过程中的行为,并且会直接影响到这个模型最终的效果,而且最优超参数的选择又是和输入的数据息息相关的,它的设定需要根据不同场景、不同数据进行调节。

我们通过研发自动调参算法来使这个过程自动化,在无人干预的情况下我们在多个数据集上发现最终模型效果能和专家相当甚至更好。 方法上我们一方面把它当做一个黑盒优化问题,通过贝叶斯优化来决策超参数的选择,另一方面我们也顾及到模型训练本身不是一个黑盒,通过利用训练过程中产生的数据来加速超参数优化。

神经网络结构搜索

在神经网络结构搜索这个方向上,我们主要做的工作一方面是如何能够让搜索变得更加的高效,另一方面我们会去考虑专用的硬件和性能的优化。

第一个方面比较清楚,由于最初的NAS算法动辄需要几百个GPU运行近一周的时间才能搜索出在某些任务上效果优质的网络结构,之后经过改进搜索结构的资源消耗依然是巨大的。这使网络结构搜索很难广泛应用起来。我们的研究方向希望通过高效的搜索算法和模型参数共享来尽可能降低搜索对计算资源的要求。

第二个方面我们发现实际应用中,以前设计出来的神经网络,它并不会关心这个模型最终是在什么样的机器上运行。然而如果训练完的模型是放在手机上,或者一些边缘计算设备上,由于这些设备的内存和运行速度都有很大限制,未经调试的模型很可能在这些设备上跑不起来或者性能有很大的影响。所以我们在做神经网络搜索的时候,希望能够把这些关于性能或者关于硬件的限制加进去,让它去做一个更加有针对性的优化。

最后,当我们有了训练好的模型以后,我们需要将模型做成一个服务并且不断为其他应用提供预估服务。然而随着时间推移,模型不可避免地会出现性能衰减这样一个问题。

为什么呢?因为我们的数据分布其实是不断变化的。在推荐场景中,用户的兴趣,大家关注的内容是会不断变化的。对于单一模型,我们可以通过不断使用新的数据训练和更新模型来保持效果。然而整个推荐系统是一个由很多模型组成的复杂系统,在系统建立之初,专家通过调试各模型之间分配的权重使系统在当时达到较优的状态。随着数据和模型的更新,先前的配置不再是最优状态,需要花费人力重新调优系统。我们使用自动化在线调优算法将人力解放了出来。我们把在线调优看作经典的多臂老虎机问题,并使用兼顾exploration和exploitation的算法实现实时的优化系统配置。

我们做的另一个尝试叫做多任务贝叶斯优化。由于系统的最优解在不断地缓慢变化。变化之后,我们会认为当前优化目标和之前的优化目标,或者之前一系列的不同的优化目标,是一系列相关的任务。那么我们可以在优化当前目标时把之前优化过程中获得的信息复用过来,以热启动的方式实现当前优化任务的加速。

我今天分享的就是这些,谢谢。