亿级日搜索量的美团如何构建高效的搜索系统?

众所周知,美团为用户提供了全方位的生活服务,包括外卖、出行、甚至是零售和生鲜等方面。算法


image.png

面对纷繁复杂的服务与选项,用户怎样才能快速地找到本身想要的结果呢?这就须要美团平台的搜索服务来帮忙。数据库

image.png

2018 年 11 月 30 日-12 月 1 日,由 51CTO 主办的 WOT 全球人工智能技术峰会在北京粤财 JW 万豪酒店隆重举行。缓存


本次峰会以人工智能为主题,来自美团的高级算法技术专家蒋前程在推荐搜索专场,从美团搜索的主要特色,以及他们是如何使用本身的算法模型去应对挑战等方面,向你们介绍《美团 O2O 服务搜索的深度学习实践》。微信


美团搜索业务现状框架


image.png

目前,美团搜索覆盖了平台 40% 的交易,具备所谓千万级的 POI(Point of Interest,兴趣点)和亿级别的 SPU(Standard Product Unit,标准化产品单元),并且用户天天的搜索频次(即:日 PV),也能达到亿级。机器学习

image.png

那么,美团搜索具体涉及到哪些方面呢?如上图所示,除了左图上方的首页搜索栏,其下方的各个业务频道里的搜索服务,也是由咱们团队来负责的。ide


所以,咱们搜索的服务目标可分为许多种,包括:主体 POI,每一个 POI 下不一样业务所提供的不一样服务,如:买单服务、外卖服务、传统团购业务、预付业务、以及酒店预付业务等。学习


做为美团搜索的平台,咱们的使命是把用户流量进行高效的分发,而且在分发内容的基础上尽可能提高他们的搜索体验。大数据


在保持用户黏性的同时,咱们不但要提升用户的交易效率,并且要为他们的决策提供更多的信息帮助。优化


另外一方面,对于商家而言,咱们须要把更优质的用户流量导向他们,从而带来更高的转化效率。这即是咱们做为美团入口的各项使命。


美团搜索的特色和挑战


下面咱们来讨论一下 O2O 的搜索与其余网页及电商的搜索,有什么相同与相异之处,以及咱们面临着哪些挑战。

image.png

首先,就目标而言,咱们的业务种类繁多,并且每种业务在不一样的发展阶段有着不一样的优化目标:有的须要优化点击率、有的须要优化转化率、有的须要优化 GMV(Gross Merchandise Volume,成交总额)。


所以对于咱们平台而言,利用现有的大流量、服务好业务方、提升效率、加固平台的交易,即是咱们的总体大目标。


其次,对于用户而言,他们须要根据不一样的用户属性搜索到个性化的结果。另外,咱们也须要根据搜索时的时间和空间等场景的不一样,提供差异化的结果。


再次,对于商家而言:

  • 异构性很是大。每一个业务及其字段的关注点都有所不一样。因为他们所提供的服务存在着差别性,所以其数据和检索层面,也与传统搜索存在着巨大的差别。

  • 非标属性。从平台上的餐饮店铺能够看到,商家的菜品自己就是一些非标准化的产品。这与电视和空调之类的标准品,有着本质上的区别。


可见,用户与商家之间是经过实时性相关联的。也就是说用户的需求会随着所处位置,以及早中晚餐的时间会有所不一样。


而商家的运能也会随着一天中的不一样时段,以及是否下雨等天气因素有所变化。所以,这些都被视为美团搜索的特色和挑战。


总结而言,咱们搜索服务的愿景即是:让更多人更便捷地找到更多他们想要的生活服务。


其中“找到更多想要的”,能够经过智能匹配技术来实现;而“更便捷地找到”,则须要有个性化的排序。面对这两条关键路径,咱们在深度学习方面进行了以下探索。


美团搜索深度学习探索实践


智能匹配



通常说来,用户的意图表达分为显式和隐式两种输入类型:

  • 显式就是他直接经过筛选条件所传递的搜索要求。

  • 隐式则包括用户的搜索时间、地理位置和我的偏好。


所以,智能匹配就要求咱们经过搜索结果,展示出用户须要的集合。


那么如何才能作好智能匹配呢?咱们总结起来会涉及到以下两个方面:

  • 用户意图的匹配。

  • 多维度的匹配。


就用户意图而言,虽然搜索的是同一条词汇,可是不一样种类用户的指望结果会有所不一样。


例如:“北京南站”一词:

  • 对于北京本地常住的用户来讲,他们搜索的目的居可能是出自餐饮外卖需求。

  • 对于北京本地但少去的用户来讲,他们搜索的目的居可能是出自公交换乘需求。

  • 对于外地游客来讲,他们搜索的目的居可能是出自火车与住宿需求。


所以,这就要求咱们针对不一样“背景”的用户展示不同的内容。


可见,用户的意图能够大体分为两个维度:

  • 场景意图,即基于用户的隐式条件,咱们要探究其需求是以美食为主、酒店为主、仍是以旅游为主。这是业务级别上的需求。

  • 成分分析,即针对用户的显式输入,咱们要分析其中间的有效成分,并籍此制定出有针对性的标准。


业务识别


image.png

下面我来看看业务识别的基本流程。首先,咱们要有一个行业知识库,或称为词表。


接着,咱们挖掘出一些通用的词汇,以保证每一个词都能对应某个需求,以及 Top 的相关问题。


在系统上线以后,咱们经过迭代来匹配用户的反馈,包括他们的点击、下单、品类等业务分布。而后,咱们得出此类需求分布的几率,并执行各类召回。


固然,这种简单统计行为的泛化能力是存在一些问题的。若是用户的行为特征反馈并不充分的话,他们的需求也就不太明确。


此时咱们天然而然地想到了使用各类机器学习模型,对文本和用户行进行向量化,经过诸如 FastText 或 CNN 之类的分类模型,对用户的各类特征予以分类,从而获得用户的意图,并解决泛化的问题。


不过咱们也曾经发现:经过机器学习所获得的分布,虽然对总体而言是合理的,可是对于某些用户却并不合理。


所以,咱们最近采用了一些强化学习的方法:在细微之处,咱们探索性地为用户提供业务需求的入口,从而收集到用户后续的反馈。


经过此类迭代,咱们能够识别出用户在某方面的业务需求是否强烈。

image.png

至此,咱们是否能够认为总体的业务已经识别清楚了呢?其实,咱们不难发现:在用户仅输入单个词语进行搜索的状况下,平台基于大量用户数据所统计出来的需求分布,并不必定可以准确地反映出用户的意图。


另外,用户的历史意图是否会影响他的实时意图呢?面对此类时序化的问题,咱们须要基于此前他在咱们系统中发生过的搜索行为,采用大数据统计来提取相关特征,利用 RNN 模型去预测他的下一个行为。


固然,咱们也会参照上述一些非业务方面的因素。


成分分析



第二个方面是成分分析。考虑到用户可能会搜索各类短语,如:“中关村火锅”,其中,“中关村”是地址,“火锅”是品类,那么咱们须要作好针对性的检索。


例如:咱们将地址信息转化成地图上的坐标画圈,将品类信息转呈到已有成品类的检索中,进而实现成分分析和智能匹配的完美结合。


因为成分识别其实是一个序列标注的问题,所以咱们起初采用的是传统的 CRF 模型。


虽然该模型的精度与召回尚可,可是它对于语义的理解,以及相关性的考虑是不够的,并且它须要人工进行特征提取与数据标注。所以,咱们想到了使用基于 LS 的深度学习与 CRF 结合的方法。


初期,因为数据量过小,算法不能很好地学习到各类标签的正确性,所以效果不如 CRF。


因而,咱们采用了以下的方法来扩充数据量:

  • 咱们将已训练的 CRF 模型扩展出更多的语料,使之将预测出来的结果做为标志数据。

  • 对于已总结的数据库,咱们根据用户反馈的规则,挖掘出更多的数据。


经过各类扩充,待样本增加了百万级的规模时,咱们再运用深度学习模型进行实体识别。


在实体识别的过程当中,咱们所用到的输入特征包括:值向量特征,以及之前 CRF 所用到的人工特征,经过 BiLSTM 再进行 CIF,最后达到了实体识别。而由此所产生的效果相对于 CRF,已经有了大幅的提高。


固然根据业务属性,因为商家的名称以及微信地址都是五花八门的,所以咱们没法作到及时的全面覆盖,召回也就不那么的理想。


前面提到的是用户意图在智能匹配上的做用。下面咱们来看为什么要进行多维匹配。


例如:某个用户输入了“减肥餐”,那么咱们仅仅使用文本匹配予以返回显然是不够的。


他的潜在需求,可能还包括:低油、低脂、轻食、蔬菜、水果等一系列方面。所以,这就产生了需求之间的语义 Gap。


为了弥补该 Gap,咱们须要创建向量化的召回框架结构,由上方的示意图可见,咱们将文本数据和用户行为序列数据,导入语义模型,处理完毕后获得了 Query、POI、User 三者的向量,再根据这些向量执行召回。


现在,该框架已经可以被在线使用到了。


语义模型


下面咱们来介绍一下美团在语义模型方面的具体尝试。


首先是 DSSM 模型。咱们在其原生模型的基础上进行了一些修改。在输入方面,咱们采用的是文档(Doc)和查询(Query)的双塔结构。此处,咱们已经作好了文本的过滤(包括低频次的过滤)。


一般状况下,系统会通过两个隐藏层。而在此处,咱们改进为:让第二层将第一层向量选出来的隐性层转到第三层,以便数据可以更好地向下传递。


而在输出层,咱们会更细腻地考虑二者之间的权重。咱们会作一个类似度的矩阵,同时将这两个向量传递到最后的输出层,以线性加权的方式获得最终的分数,这即是咱们在 DSSM 语义模型上的探索。


前面咱们讨论了监督的模型,其实咱们也尝试了一些非监督的模型。非监督模型主要是基于用户的行为序列。


例如:用户会在某个查询会话中会点击多处(POI一、POI2),那么咱们就将此序列当成一个文档。


相比前面说起的主要体如今文本上的模型,此处则更偏向于推荐的思想。若是用户既点了 A,又点了 B,那么二者之间就存在类似性,所以咱们采用了单独的模型来训练此类序列。


并且,咱们在输入层不仅是把 POI 进行了向量化,还将与 POI 相关的品类信息、GU 哈希信息等都拼接成额外的向量。这即是咱们所作的简单的改动。


上图右侧是一个向量的展示,可见系统可以把一些相关的信息学习出来,以便咱们进行各类相关性的召回。


针对上述智能匹配技术,咱们总结起来有两个方面:

  • 怎么作好用户的意图识别。

  • 怎么实现多维度匹配,即:在传统文本匹配的基础上,加入了向量化召回的思路。


个性化排序


在完成了用户匹配以后,咱们帮用户搜到大量的匹配结果。那么,咱们势必须要经过个性化排序,来优先显示用户最须要的结果信息。


如上图所示,排序的总体流程为:

  • 咱们使用召回层进行简单的粗排,它适用于一些简单的特征,即经过线性模型对结果进行初步过滤。

  • 把少许的结果送到模型层,执行点击率和转化率的预估。

  • 在业务层会有一些可解释性、业务规则的排序。


其中,模型层的演进过程是:线性模型→决策树模型(如 GBDT)PairWise 模型实时模型深度学习,以知足个性化的特征。


下面,咱们来重点讨论实时模型和深度学习的实现方式。

image.png

为了更好地知足用户的需求。咱们有两种实时化的方向:

  • 许多公司会将包括实时行为、实时库存、实时转化等在内的特征放入模型,以进行实时更新。

  • 经过在线学习,拼接各类实时流,实时更新参数,根据模型的评估,判断是否要替换成新训练的模型。


实时特征


image.png

同时,在提取实时特征的过程当中,咱们须要将用户实时的数据,如:点击流、下单流等请求数据缓存到 Storm 里。


接着,基于这些数据,咱们须要提取到用户的实时行为特征,包括:品类偏好、价格偏好、距离偏好等。


另外,咱们会对序列区分不一样的时段,并逐一“兑换”特征,固然,咱们也会考虑该用户会话(Session)内部的 01 特征。结合业务特色的挖掘,咱们最终把实时特征提取了出来。


深度模型


image.png

对于美团而言,深度模型的需求源自以下三个方面:

  • 场景很是复杂,每一个业务的需求都存在着巨大差别。

  • 前面提到的树模型虽然有较好的泛化能力,可是缺乏针对用户行为的记忆能力。

  • 须要对一些稀疏特征,以及特征组合进行处理。


所以,基于业务和工程师的实际需求,咱们有必要采用深度学习模型。


上图是咱们的深度学习框架。其特色在于以下三个方面:

  • 可以更好地在线支持超大规模的数据和模型,如:几十个 G 的模型。

  • 可以方便地支持多种模型的定义。

  • 可以很好地支持流式模式的训练与上线。


简单来看,该模型也分为三个部分:

  • 离线训练,即Base模型,是从日志数据表里提取特征,经过训练,将参数存到离线集群之中。

  • 流式训练,将实时收集到的数据做为日志予以拼接,经过特征的提取,最后执行训练。

  • 在线预测,经过实时优先级对模型进行评估。若是经过,则更新到 PS 在线集群里进行预测。


有了上述框架的感念,咱们再来看看在该深度模型上的探索路径。起初,咱们直接将 Dense 特征拿过来,扔到简单的 MLP 里执行快速迭代。


凭借着更强的特征拟合能力,咱们可以实时地迭代出参数的模型,进而实现了在线式的实时更新。所以,相比以前的树模型,深度学习模型的效果有了明显的提高。


而针对稀疏特征,咱们采用了以下两种方法:

  • 直接用模型去学习和训练 Embedding 特征,进而输入到模型之中。

  • 经过 Wide 记录模型来实现深度学习。


如上图所示,在特征组合方面,咱们尝试了一些知名的模型。其实它们之间并没有明显的优劣势,就看哪一个更适合业务项目罢了。


例如:PNN 是将特征做为一个组合放在了输入层;DeepFM 则多了一个 FM 值;而 DCN 是作到了特征高阶的模型。


所以,咱们在不一样的业务场景中,都尝试了上述这些模型。一旦发现效果较好,咱们就会将其替换成当前业务的主模型。


总的说来,咱们如今的主体模型是:流式的深度学习模型。从上图的各项指标能够看出,其总体效果都有了正向的提高。


将来展望



展望将来,咱们会在以下两大方面继续个性化排序的探索:

  • 智能匹配。在深度上,咱们会深耕成分分析、用户意图、以及业务预测等方面。

    在广度上,咱们会针对文本匹配效果不佳的场景,补充一些向量召回,进而实现根据用户的不一样属性,达到多维度个性化召回的效果。

  • 排序模型。相似于阿里的 DIEN 模型,咱们会对用户的兴趣进行单独建模,进而与咱们的排序模型相组合。

    考虑到各类品类的相关性、文本的相关性、以及实际业务场景的不肯定性,咱们将在深度学习中尝试多目标的联合优化。

相关文章
相关标签/搜索