美团搜索框架

Apr 25, 2024
2 views
Search&Rec

当前,美团搜索整体架构主要由搜索数据平台、在线检索框架及云搜平台、在线AI服务及实验平台三大体系构成。在AI服务及实验平台中,模型训练平台Poker和在线预估框架Augur是搜索AI化的核心组件,解决了模型从离线训练到在线服务的一系列系统问题,极大地提升了整个搜索策略迭代效率、在线模型预估的性能以及排序稳定性,并助力商户、外卖、内容等核心搜索场景业务指标的飞速提升。

image

首先,美团App内的一次完整的搜索行为主要涉的技术模块。如下图所示,从点击输入框到最终的结果展示,从热门推荐,到动态补全、最终的商户列表展示、推荐理由的展示等,每一个模块都要经过若干层的模型处理或者规则干预,才会将最适合用户(指标)的结果展示在大家的眼前。

image

为了保证良好的用户体验,技术团队对模型预估能力的要求变得越来越高,同时模型与特征的类型、数量及复杂度也在与日俱增。算法团队如何尽量少地开发和部署上线,如何快速进行模型特征的迭代?如何确保良好的预估性能?在线预估框架Augur应运而生。经过一段时间的实践,Augur也有效地满足了算法侧的需求,并成为美团搜索与NLP部通用的解决方案。

模型预估

其实,模型预估的逻辑相对简单、清晰。但是如果要整个平台做得好用且高效,这就需要框架系统和工具建设(一般是管理平台)两个层面的配合,需要兼顾需求、效率与性能。

那么,什么是模型预估呢?如果忽略掉各种算法的细节,我们可以认为模型是一个函数,有一批输入和输出,我们提供将要预估文档的相关信息输入模型,并根据输出的值(即模型预估的值)对原有的文档进行排序或者其他处理。

纯粹从一个工程人员视角来看: 模型可以简化为一个公式( 举例:f(x1,x2)= ax1 + bx2 +c ),训练模型是找出最合适的参数abc。所谓特征,是其中的自变量x1与x2,而模型预估,就是将给定的自变量x1与x2代入公式,求得一个解而已。(当然实际模型输出的结果可能会更加复杂,包括输出矩阵、向量等等,这里只是简单的举例说明。)

所以在实际业务场景中,一个模型预估的过程可以分为两个简单的步骤:第一步,特征抽取(找出x1与x2);第二步,模型预估(执行公式 ƒ,获得最终的结果)。

image

模型预估很简单,从业务工程的视角来看,无论多复杂,它只是一个计算分数的过程。对于整个运算的优化,无论是矩阵运算,还是底层的GPU卡的加速,业界和美团内部都有比较好的实践。美团也提供了高性能的TF-Serving服务以及自研的MLX模型打分服务,都可以进行高性能的Batch打分。基于此,我们针对不同的模型,采取不同的策略:

  • 深度学习模型:特征多,计算复杂,性能要求高;我们将计算过程放到公司统一提供的TF-Serving/MLX预估服务上;
  • 线性模型、树模型:搜索场景下使用的特征相对较少,计算逻辑也相对简单,我们将在构建的预估框架内部再构建起高性能的本机求解逻辑,从而减少RPC。
    image

这一套逻辑很简单,构建起来也不复杂,所以在建设初期,我们快速在主搜的核心业务逻辑中快速实现了这一架构,如下图所示。这样的一个架构使得我们可以在主搜的核心排序逻辑中,能够使用各类线性模型的预估,同时也可以借助公司的技术能力,进行深度模型的预估。关于特征抽取的部分,我们也简单实现了一套规则,方便算法同学可以自行实现一些简单的逻辑。

image