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

2019 年 5 月 6 日 架构文摘

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


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

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


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


美团搜索业务现状


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

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


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

作为美团搜索的平台,我们的使命是把用户流量进行高效的分发,并且在分发内容的基础上尽量提升他们的搜索体验。


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


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


美团搜索的特点和挑战


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

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


因此对于我们平台而言,利用现有的大流量、服务好业务方、提高效率、加固平台的交易,便是我们的整体大目标。


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


再次,对于商家而言:

  • 异构性非常大。每个业务及其字段的关注点都有所不同。由于他们所提供的服务存在着差异性,因此其数据和检索层面,也与传统搜索存在着巨大的差异。

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


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


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

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


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


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


智能匹配


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

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

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


因此,智能匹配就要求我们通过搜索结果,展现出用户需要的集合。

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

  • 用户意图的匹配。

  • 多维度的匹配。

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


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

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

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

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


因此,这就要求我们针对不同“背景”的用户展现不一样的内容。

可见,用户的意图可以大致分为两个维度:

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

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


业务识别


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


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


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


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


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


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


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


通过此类迭代,我们可以识别出用户在某方面的业务需求是否强烈。

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


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


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


成分分析


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


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

由于成分识别实际上是一个序列标注的问题,因此我们起初采用的是传统的 CRF 模型。


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


初期,由于数据量太小,算法不能很好地学习到各种标签的正确性,因此效果不如 CRF。


于是,我们采用了如下的方法来扩充数据量:

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

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


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


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


当然根据业务属性,由于商家的名称以及微信地址都是五花八门的,因此我们无法做到及时的全面覆盖,召回也就不那么的理想。

前面提到的是用户意图在智能匹配上的作用。下面我们来看为何要进行多维匹配。


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


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


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


如今,该框架已经能够被在线使用到了。


语义模型


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

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


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


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

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


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


相比前面提及的主要体现在文本上的模型,此处则更偏向于推荐的思想。如果用户既点了 A,又点了 B,那么两者之间就存在相似性,因此我们采用了单独的模型来训练此类序列。


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


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


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

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

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


个性化排序


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

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

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

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

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

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


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

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

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

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


实时特征


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


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


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


深度模型


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

  • 场景非常复杂,每个业务的需求都存在着巨大差异。

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

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


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

上图是我们的深度学习框架。其特点在于如下三个方面:

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

  • 能够方便地支持多种模型的定义。

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


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

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

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

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

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


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

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

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

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

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


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


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

总的说来,我们现在的主体模型是:流式的深度学习模型。从上图的各项指标可以看出,其整体效果都有了正向的提升。


未来展望


展望未来,我们会在如下两大方面继续个性化排序的探索:

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

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

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

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


作者:蒋前程,美团高级算法技术专家

来源:51CTO技术栈(blog51cto)

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。


架构文摘

ID:ArchDigest

互联网应用架构丨架构技术丨大型网站丨大数据

更多精彩文章,请点击下方:阅读原文

登录查看更多
4

相关内容

互联网
【SIGMOD2020-腾讯】Web规模本体可扩展构建
专知会员服务
29+阅读 · 2020年4月12日
【Google】利用AUTOML实现加速感知神经网络设计
专知会员服务
29+阅读 · 2020年3月5日
【阿里技术论文】AliMe KBQA:阿里小蜜中的结构化知识问答
专知会员服务
82+阅读 · 2019年12月14日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
96+阅读 · 2019年12月14日
 图像内容自动描述技术综述
专知会员服务
85+阅读 · 2019年11月17日
自动机器学习:最新进展综述
专知会员服务
118+阅读 · 2019年10月13日
知识图谱本体结构构建论文合集
专知会员服务
106+阅读 · 2019年10月9日
【LinkedIn报告】深度自然语言处理的搜索系统,211页pdf
专知会员服务
106+阅读 · 2019年6月21日
【干货】电商数据中台如何构建?
AliData
11+阅读 · 2019年4月4日
【知识图谱】 一个有效的知识图谱是如何构建的?
产业智能官
57+阅读 · 2018年4月5日
一天造出10亿个淘宝首页,阿里工程师如何实现?
机器学习研究会
5+阅读 · 2017年12月20日
【智能商务】海量商品查找利器—苏宁搜索系统
产业智能官
5+阅读 · 2017年12月1日
思路+步骤+方法,三步教你如何快速构建用户画像
【大数据】如何用大数据构建精准用户画像?
产业智能官
12+阅读 · 2017年9月21日
【知识图谱】如何构建知识图谱
产业智能官
134+阅读 · 2017年9月19日
A Survey on Edge Intelligence
Arxiv
50+阅读 · 2020年3月26日
Arxiv
29+阅读 · 2020年3月16日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
11+阅读 · 2018年1月11日
Arxiv
3+阅读 · 2017年12月23日
VIP会员
相关VIP内容
【SIGMOD2020-腾讯】Web规模本体可扩展构建
专知会员服务
29+阅读 · 2020年4月12日
【Google】利用AUTOML实现加速感知神经网络设计
专知会员服务
29+阅读 · 2020年3月5日
【阿里技术论文】AliMe KBQA:阿里小蜜中的结构化知识问答
专知会员服务
82+阅读 · 2019年12月14日
【阿里技术干货】知识结构化在阿里小蜜中的应用
专知会员服务
96+阅读 · 2019年12月14日
 图像内容自动描述技术综述
专知会员服务
85+阅读 · 2019年11月17日
自动机器学习:最新进展综述
专知会员服务
118+阅读 · 2019年10月13日
知识图谱本体结构构建论文合集
专知会员服务
106+阅读 · 2019年10月9日
【LinkedIn报告】深度自然语言处理的搜索系统,211页pdf
专知会员服务
106+阅读 · 2019年6月21日
相关资讯
【干货】电商数据中台如何构建?
AliData
11+阅读 · 2019年4月4日
【知识图谱】 一个有效的知识图谱是如何构建的?
产业智能官
57+阅读 · 2018年4月5日
一天造出10亿个淘宝首页,阿里工程师如何实现?
机器学习研究会
5+阅读 · 2017年12月20日
【智能商务】海量商品查找利器—苏宁搜索系统
产业智能官
5+阅读 · 2017年12月1日
思路+步骤+方法,三步教你如何快速构建用户画像
【大数据】如何用大数据构建精准用户画像?
产业智能官
12+阅读 · 2017年9月21日
【知识图谱】如何构建知识图谱
产业智能官
134+阅读 · 2017年9月19日
相关论文
A Survey on Edge Intelligence
Arxiv
50+阅读 · 2020年3月26日
Arxiv
29+阅读 · 2020年3月16日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
11+阅读 · 2018年1月11日
Arxiv
3+阅读 · 2017年12月23日
Top
微信扫码咨询专知VIP会员