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

美团如何打造日搜索量过亿的高效搜索系统?

时间:2023-03-20 17:42:22 科技观察

【.com原创文章】众所周知,美团为用户提供全方位的生活服务,包括外卖、出行,甚至包括零售和生鲜。面对众多的服务和选择,用户如何快速找到自己想要的结果?这就需要美团平台的搜索服务来帮忙了。2018年11月30日至12月1日,由WOT主办的WOT全球人工智能技术峰会在北京JW万豪酒店举行。本次峰会的主题是人工智能。美团资深算法专家江千城介绍了美团搜索的主要特点,以及他们如何在推荐搜索环节用自己的算法模型来应对挑战。《美团 O2O 服务搜索的深度学习实践》。美团搜索业务现状目前,美团搜索覆盖了平台40%的交易,所谓独特的POI(PointofInterest)和亿级SPU(StandardProductUnit,标准化产品单元),以及用户日搜索频次(即:日PV)也能达到1亿。那么,美团搜索具体涉及哪些方面呢?如上图所示,除了左图上方的首页搜索栏,我们团队还负责其下方各个业务渠道的搜索服务。因此,我们搜索的服务对象可以分为多种类型,包括:主要POI,每个POI下不同商家提供的不同服务,如:计费服务、外卖服务、传统团购业务、预付费业务、酒店预付费商业等。作为美团的搜索平台,我们的使命是在分发内容的基础上,高效分发用户流量,尽可能提升用户的搜索体验。在保持用户粘性的同时,不仅要提高用户的交易效率,还要为用户的决策提供更多的信息辅助。另一方面,对于商家来说,我们需要将更好的用户流量引向他们,从而带来更高的转化效率。这是我们作为美团入口的使命。美团搜索的特点和挑战接下来,我们来谈谈O2O搜索与其他网络和电商搜索的异同,以及我们面临的挑战。首先在目标上,我们的业务种类繁多,每个业务在不同的发展阶段都有不同的优化目标:有的需要优化点击率,有的需要优化转化率,有的需要优化转化率。优化GMV(GrossMerchandiseVolume,总营业额)。所以对于我们平台来说,利用现有的大流量,服务好商家方,提高效率,加强平台交易是我们的总体目标。其次,对于用户来说,需要根据不同的用户属性搜索个性化的结果。此外,我们在搜索时还需要根据时间、空间等不同场景,提供差异化??的结果。再次,对于商家来说:异质性非常大。每个企业及其领域都有不同的关注点。由于它们提供的服务不同,它们的数据和检索水平也与传统搜索有很大不同。非标准属性。从平台上的餐饮门店可以看出,商家自己的菜品都是一些非标准化产品。这与电视和空调等标准产品有着根本的不同。可以看出,用户和商户是实时关联的。也就是说,用户的需求会随着早餐、午餐和晚餐的地点和时间的不同而不同。商家的运力也会随着一天中的不同时段以及是否下雨等天气因素而有所不同。因此,这些都被视为美团搜索的特色和挑战。综上所述,我们搜索服务的愿景是:让更多的人更方便地找到更多他们想要的生活服务。其中,“找到更多你想要的”可以通过智能匹配技术实现;而“查找更方便”则需要个性化排序。面对这两条关键路径,我们在深度学习方面进行了如下探索。美团搜索深度学习探索实践智能匹配一般来说,用户的意图表达分为显式和隐式两种输入:显式是他直接通过过滤条件的搜索需求。隐性包括用户的搜索时间、地理位置和个人喜好。因此,智能匹配需要我们通过搜索结果展示用户需要的收藏。那么我们如何做智能匹配呢?总结起来,我们会涉及到以下两个方面:用户意图的匹配。多维匹配。就用户意图而言,虽然搜索同一个词,但不同类型用户的预期结果会有所不同。例如:“北京南站”这个词:对于居住在北京的本地用户来说,他们的搜索目的大多是外卖需求。对于身在北京但很少去北京的用户来说,他们的搜索目的大多是公交换乘需求。对于外国游客来说,他们的搜索目的大多是出于火车和住宿的需要。因此,这就需要我们为不同“背景”的用户展示不同的内容。可以看出,用户的意图大致可以分为两个维度:场景意图,即基于用户的隐性条件,我们要探究用户的需求主要是美食、酒店还是旅游。这是业务层面的要求。成分分析,即针对用户的显式输入,我们需要对中间的有效成分进行分析,并以此来制定有针对性的标准。业务识别让我看一下业务识别的基本过程。首先,我们要有一个行业知识库,或者词汇表。然后,我们挖掘出一些常用的词汇,保证每个词都能对应到某个需求,以及Top相关问题。系统上线后,我们迭代匹配用户反馈,包括点击量、订单量、品类等业务分布。然后我们推导出这种需求分布的概率并执行各种召回。当然,这种简单的统计行为的泛化能力存在一些问题。如果用户的行为特征反馈不充分,则说明他们的需求不明确。这时候我们很自然地想到了利用各种机器学习模型对文本和用户行进行向量化处理,通过FastText或者CNN等分类模型对用户的各种特征进行分类,从而获取用户意图并解决泛化问题。但是,我们也发现,虽然通过机器学习得到的分布对于整体来说是合理的,但是对于部分用户来说就不太合理了。所以,我们最近采用了一些强化学习的方法:在细微之处,我们探索性地为用户提供业务需求的入口,以收集用户后续的反馈。通过这样的迭代,我们可以识别出用户在某个方面是否有强烈的业务需求。至此,我们是否可以认为整体业务已经明确?其实不难发现,当用户只输入单个词进行搜索时,平台根据大量用户数据计算出的需求分布可能并不能准确反映用户的意图。另外,用户的历史意向会不会影响他的实时意向?面对这样的时序问题,我们需要利用大数据统计,根据他之前在我们系统中的搜索行为提取相关特征,并利用RNN模型来预测他接下来的行为。当然,我们也会参考上面的一些非商业因素。成分分析第二个方面是成分分析。考虑到用户可能会搜索各种词组,比如:“中关村火锅”,其中“中关村”是地址,“火锅”是类别,那么我们就需要做针对性的搜索。例如:我们将地址信息转化为地图上的坐标圈,将品类信息转化为现有成品的检索,从而实现成分分析与智能匹配的完美结合。由于成分识别实际上是一个序列标注问题,我们最初采用的是传统的CRF模型。虽然模型的准确率和召回率尚可,但其对语义和相关性考虑的理解不足,需要人工进行特征提取和数据标注。因此,我们想到了使用基于LS的深度学习结合CRF。前期由于数据量小,算法不能很好的学习各种标签的正确性,所以效果不如CRF。因此,我们采用以下方法来扩充数据量:将训练好的CRF模型扩充到更多的语料库中,从而将预测结果作为标记数据。对于汇总数据库,我们根据用户反馈的规律挖掘更多的数据。通过各种扩展,当样本增加到最大尺寸时,我们再使用深度学习模型进行实体识别。在实体识别过程中,我们使用的输入特征包括:值向量特征,以及前面CRF中使用的人工特征。通过BiLSTM,再通过CIF,最终实现实体识别。与CRF相比,得到的效果有了很大的提升。当然,根据业务性质,由于商户名称、微信地址五花八门,无法做到及时全面的覆盖,召回也不是很理想。前面提到了用户意图在智能匹配中的作用。让我们看看为什么需要多维匹配。比如:用户输入“减肥餐”,那么我们使用文本匹配返回显然是不够的。他的潜在需求可能还包括:低油、低脂、清淡的食物、蔬菜、水果等一系列方面。因此,这会在需求之间产生语义鸿沟。为了弥补这个差距,我们需要建立一个向量化的召回框架结构。从上面的示意图可以看出,我们将文本数据和用户行为序列数据导入到语义模型中,处理后得到Query、POI、User的向量。然后根据这些向量执行召回。今天,该框架可在线使用。语义模型下面介绍一下美团在语义模型方面的具体尝试。第一个是DSSM模型。我们在其原生模型的基础上做了一些修改。在输入方面,我们使用文档(Doc)和查询(Query)的双塔结构。这里,我们已经做好了文本过滤(包括低频过滤)。通常,系统会经过两个隐藏层。而这里,我们将其改进为:让第二层将第一层向量选择的隐藏层传递给第三层,这样数据可以更好的向下传递。在输出层,我们会更细致地考虑两者之间的权重。我们会做一个相似度矩阵,将这两个向量同时传到最后的输出层,以线性加权的方式得到最后的分数。这是我们对DSSM语义模型的探索。前面我们讨论了监督模型,但我们也尝试了一些无监督模型。无监督模型主要基于用户行为序列。例如:用户在某个查询会话中会点击多个地方(POI1,POI2),那么我们就把这个序列当作一个文档。相比前面提到的主要体现在文中的模型,这里更偏向于推荐的思想。如果用户同时点击了A和B,那么两者之间存在相似性,因此我们为此类序列训练了一个单独的模型。此外,我们不仅在输入层对POI进行向量化,还将POI相关的类别信息、GU哈希信息等拼接成额外的向量。这是我们所做的简单更改。上图右侧是一个向量显示,说明系统可以学习到一些相关的信息,以便我们回忆各种相关性。关于上述智能匹配技术,我们可以归纳为两个方面:如何识别用户的意图。如何实现多维匹配,即:在传统文本匹配的基础上,加入向量化召回的思想。个性化排序完成用户匹配后,我们帮助用户找到大量的匹配结果。那么,我们必然需要通过个性化的排序,将用户最需要的结果信息进行优先展示。如上图所示,排序的整体流程是:我们使用recall层进行简单的粗排序,适用于一些简单的特征,也就是对结果进行初步的线性模型过滤。将少量结果发送到模型层,进行点击率和转化率预估。在业务层中会有一些可解释性和业务规则的排序。其中,模型层的演化过程为:线性模型→决策树模型(如GBDT)→PairWise模型→实时模型→深度学习满足个体特征。接下来,我们重点关注实时模型和深度学习的实现。为了更好的满足用户的需求。我们有两个实时的方向:很多公司会把包括实时行为、实时库存、实时转化等特性放到模型中进行实时更新。通过在线学习,将各种实时流拼接在一起,实时更新参数,并根据对模型的评估,判断是否更换为新训练的模型。实时特征同时,在提取实时特征的过程中,我们需要将实时的用户数据,比如点击流、订单流等请求数据缓存到Storm中。然后,基于这些数据,我们需要提取用户的实时行为特征,包括:品类偏好、价格偏好、距离偏好等。另外,我们会针对序列和“交换”特征一一区分不同的时间段。当然我们也会考虑用户会话(Session)里面的01特性。结合业务特征的挖掘,最终提取实时特征。深度模型对于美团而言,深度模型的需求来自以下三个方面:场景非常复杂,各个业务的需求差异很大。上面提到的树模型虽然有很好的泛化能力,但是缺乏对用户行为的记忆能力。需要处理一些稀疏特征和特征组合。因此,基于业务和工程师的实际需求,我们有必要采用深度学习模型。上图是我们的深度学习框架。其特点在于以下三个方面:可以更好地支持超大规模的数据和模型在线,比如几十个G模型。它可以方便地支持多个模型的定义。可以很好的支持streaming模式的训练和在线。简单来说,模型也分为三部分:离线训练,即Base模型,从日志数据表中提取特征,通过训练将参数存储在离线集群中。流式训练,将实时采集的数据拼接为日志,提取特征及时进行训练。在线预测,评估具有实时优先级的模型。如果通过,则更新到PS在线集群进行预测。有了上面的框架,我们来看看在这个深度模型上的探索路径。一开始,我们直接把Dense的特征丢到一个简单的MLP中进行快速迭代。具有更强的特征拟合能力,可以实时迭代出参数模型,进而实现在线实时更新。因此,与之前的树模型相比,深度学习模型的效果有了明显的提升。对于稀疏特征,我们采用了以下两种方式:直接用模型学习训练Embedding特征,然后输入到模型中。通过宽记录模型进行深度学习。如上图所示,在特征组合方面,我们尝试了一些知名模型。其实它们之间并没有明显的优缺点,就看哪个更适合业务项目了。例如:PNN将特征作为组合放在输入层;DeepFM增加了一个FM值;而DCN是具有高级特征的模型。因此,我们在不同的业务场景中尝试了上述模型。一旦我们发现它运作良好,我们将其替换为当前业务的主要模型。总的来说,我们目前的主要模型是:流式深度学习模型。从上图中的各项指标可以看出,整体效果得到了积极的提升。未来展望展望未来,我们将在以下两个方面继续探索个性化分拣:智能匹配。在深度方面,我们将深入研究组件分析、用户意图和业务预测。在广度上,我们会针对文本匹配效果不好的场景,补充一些向量召回,进而实现根据用户不同属性进行多维度个性化召回的效果。对模型进行排序。类似于阿里的DIEN模型,我们将用户兴趣单独建模,并与我们的排序模型相结合。考虑到各个类别的相关性,文本的相关性,以及实际业务场景的不确定性,我们会在深度学习中尝试多目标联合优化。【原创稿件,合作网站转载请注明原作者和出处为.com】