本文根据美团高级技术专家翟艺涛在2018 QCon全球软件开发大会上的演讲内容整理而成,内容有修改。算法
2018年12月31日,美团酒店单日入住间夜突破200万,再次创下行业的新纪录,而酒店搜索在其中起到了很是重要的做用。本文会首先介绍一下酒店搜索的业务特色,做为O2O搜索的一种,酒店搜索和传统的搜索排序相比存在很大的不一样。第二部分介绍深度学习在酒店搜索NLP中的应用。第三部分会介绍深度排序模型在酒店搜索的演进路线,由于酒店业务的特色和历史缘由,美团酒店搜索的模型演进路线可能跟大部分公司都不太同样。最后一部分是总结。数据库
美团的使命是帮你们“Eat Better,Live Better”,所作的事情就是链接人与服务。用户在美团平台能够找到他们所须要的服务,商家在美团能够售卖本身提供的服务,而搜索在其中扮演的角色就是“链接器”。大部分用户经过美团App找酒店是从搜索开始的,搜索贡献了大部分的订单,是最大的流量入口。在美团首页点击 “酒店住宿”图标,就会进入上图右侧的搜索入口,用户能够选择城市和入住时间并发起搜索。浏览器
酒店搜索技术团队的工做不只有搜索排序,还有查询引导、推荐等工做,查询引导如搜索智能提示、查询纠错等。之因此还有推荐的工做,是由于不少用户在发起搜索时不带查询词,本质上属于推荐,此外还有特定场景下针对少无结果的推荐等。本文主要介绍搜索排序这方面的工做。微信
如今,你们对搜索都很熟悉,常见的有网页搜索,好比Google、百度、搜狗等;商品搜索,像天猫、淘宝、京东等;还有就是O2O(Online To Offline)的搜索,典型的就是酒店的搜索。虽然都是搜索,可是用户使用搜索的目的并不相同,包括找信息、找商品、找服务等等,不一样搜索之间也存在很大的差异。网络
上图对不一样搜索进行了简单对比,能够从5个维度展开。首先是目标维度。由于用户是来找信息,网页搜索重点是保证查询结果和用户意图的相关性,而在商品搜索和酒店搜索中,用户的主要目的是查找商品或服务,最终达成交易,目标上有较大区别。用户使用不一样搜索的目的不一样,从而致使不一样搜索对个性化程度的要求不一样。交易属性的搜索,包括商品搜索和酒店搜索,对个性化程度的要求都比较高,由于不一样用户的消费水平不一样,偏好也不同。架构
在技术层面上,也存在不少不一样点。网页搜索会索引全网的数据,这些数据不是它本身生产,数据来源很是多样,包括新闻、下载页、视频页、音乐页等各类不一样的形态,因此整个数据是非结构化的,差别也很大。这意味着网页搜索须要拥有两种技术能力,数据抓取能力和数据解析能力,它们须要抓取网页并解析造成结构化数据。在这个层面上,酒店搜索和商品搜索相对就“幸福”一些,由于数据都是商家提交的结构化数据,相对来讲更加规范。并发
此外,酒店做为一种O2O的服务,用户在线上(Online)下单,最终须要到线下(Offline)去消费,因此就有一个位置上的约束,而位置的约束也就致使出现供给侧的约束,供给只能在某个特定位置附近。好比北京大学方圆几千米以内的酒店。这两点约束在网页搜索和商品搜索中就不用考虑,网页能够无限次的进行阅读。商品搜索得益于快递业的快速发展,在北京也能够买到来自浙江的商品,供给侧的约束比较小。框架
介绍完不一样搜索产品的特色,接下来看不一样搜索产品的优化目标。通用搜索的优化目标是相关性,评价指标是DCG、NDCG、MAP等这些指标,要求查询结果和用户意图相关。对商品搜索来讲,不一样电商平台的优化目标不太同样,有的目标是最大化GMV,有的目标是最大化点击率,这些在技术上均可以实现。运维
而对酒店搜索而言,由于它属于O2O的业务形态,线上下单,线下消费,这就要求搜索结果必须和用户的查询意图“强相关”。这个“强相关”包括两层含义,显性相关和隐性相关。举个例子,用户搜索“北京大学”,那么他的诉求很明确,就是要找“北京大学”附近的酒店,这种属于用户明确告诉平台本身的位置诉求。可是,若是用户在本地搜索“七天”,即便用户没有明确说明酒店的具体位置,咱们也知道,用户可能想找的是距离本身比较近的“七天酒店”,这时候就须要建模用户的隐性位置诉求。dom
美团是一个交易平台,大部分用户使用美团是为了达成交易,因此要优化用户的购买体验。刻画用户购买体验的核心业务指标是访购率,用来描述用户在美团是否顺畅的完成了购买,须要优化访购率这个指标。总结一下,酒店搜索不只要解决相关性,尽可能优化用户购买体验、优化访购率等指标,同时还要照顾到业务诉求。
根据上面的分析,酒店搜索的整个搜索框架就能够拆分红三大模块:检索、排序以及业务规则。检索层包括查询理解和召回两部分,主要解决相关性问题。查询理解作的事情就是理解用户意图,召回根据用户意图来召回相关的酒店,二者强耦合,须要放在一块儿。检索的核心是语义理解,好比用户搜索“北京大学”,平台就知道用户想找的是“北京大学附近的酒店”,因此这个模块的优化方式是问题驱动,不断地发现问题、解决问题来进行迭代。
接下来,从检索模块检索出来的酒店都已是知足用户需求的酒店了。仍是上面“北京大学”的那个例子,检索模块已经检索出来几百家“北京大学”附近的酒店,这些都是和用户的查询词“北京大学”相关的,怎么把用户最有可能购买的酒店排到前面呢?这就是排序模块要作的事情。
排序模块使用机器学习和深度学习的技术提供“千人千面”的排序结果,若是是常常预约经济连锁型酒店的用户,排序模块就把经济连锁型酒店排到前面。针对消费水平比较高,对酒店要求比较高的用户,排序模块就把高档酒店排到前面,对每一个用户均可以作到个性化定制。排序属于典型的技术驱动模块,优化目标是访购率,用这个技术指标驱动技术团队不断进行迭代和优化。
最后是业务层面,好比有些商家会在美团上刷单做弊,针对这些商家须要作降权处理。
上图是搜索的总体框架,这里详细描述下调用过程:
能够看到,模块划分和前文描述的思想一致,检索模块主要解决用户意图识别和召回问题,也就是解决相关性。预测模块作访购率预测,业务逻辑放在搜索控制中心实现。接下来会介绍一下意图理解和排序模块中涉及的一些深度学习技术。
先来看下查询理解的问题,这个模块经过数据分析和Case分析,不断的发现问题、解决问题来迭代优化。以前的评测发现少无结果的缘由,主要包括如下几种:
针对这几类问题,咱们分别做了如下工做:
这里的每个模块都用到了机器学习和深度学习的技术,本文挑选两个酒店搜索中比较特殊的问题进行介绍。
地标问题是O2O搜索的一个典型问题,在网页搜索和商品搜索中都较少出现此类问题。当用户搜索相似“望京国际研发园”这种查询词的时候,由于搜索的相关性是根据文本计算的,须要酒店描述中有相关文字,若是酒店的描述信息中没有这个词,那就检索不出来。好比昆泰酒店,虽然就在望京国际研发园旁边,可是它的描述信息中并无出现“望京国际研发园”,因此就没法检索出来,这会致使用户体验较差。
通过分析,咱们发现有一类查询词是针对特定地点的搜索,用户的诉求是找特定地点附近的酒店,这种状况下走文本匹配大几率是没有结果的。这个问题的解法是针对这种类型的查询词,从“文本匹配”改为“坐标匹配”,首先分析查询词是否是有地标意图,若是是的话就不走文本匹配了,改走坐标匹配,检索出来这个坐标附近的酒店就能够了。这时就产生了两个问题:第一,怎么肯定哪些查询词有地标意图;第二,怎么获取经纬度信息。
针对这个问题,咱们作了地标策略,步骤以下:
这里提到了NER模型,下面对它作一下详细的介绍。
NER是命名实体识别,是机器学习中的序列标注问题,好比输入“北大附近的七天”,就会标注出来每一个词的成分,这里“北大”是地标,“七天”是酒店品牌。这里的类别是根据业务特色本身定义的,酒店业务中有地标、品牌、商圈等不一样的类别。与分类问题相比,序列标注问题中当前的预测标签不只与当前的输入特征相关,还与先后的预测标签相关,即预测标签序列之间有强相互依赖关系。
解决序列标注问题的经典模型是CRF(Conditional Random Field,条件随机场),也是咱们刚开始尝试的模型。条件随机场能够看作是逻辑回归的序列化版本,逻辑回归是用于分类的对数线性模型,条件随机场是用于序列化标注的对数线性模型,能够看作是考虑了上下文的分类模型。
机器学习问题的求解就是“数据+模型+特征”,数据方面先根据业务特色定义了几种实体类别,而后经过“人工+规则”的方法标注了一批数据。特征方面提取了包括词性、Term文本特征等,还定义了一些特征模板,特征模板是CRF中人工定义的一些二值函数,经过这些二值函数,能够挖掘命名实体内部以及上下文的构成特色。标注数据、模型、特征都有了,就能够训练CRF模型,这是线上NER问题的初版模型。
随着深度学习的发展,用Word Embedding词向量做为输入,叠加神经网络单元的方法渐渐成为NLP领域新的研究方向。基于双向LSTM(Long Short-Term Memory)+CRF的方法成为NER的主流方法,这种方法采用双向LSTM单元做为特征提取器替代原有的人工特征,不须要专门的领域知识,框架也通用。Embedding输入也有多种形式,能够是词向量,能够是字向量,也能够是字向量和词向量的拼接。
咱们尝试了双向LSTM+CRF,并在实际应用中作了些改动:因为在CRF阶段已经积累了一批人工特征,实验发现把这些特征加上效果更好。加了人工特征的双向LSTM+CRF是酒店搜索NER问题的主模型。
固然,针对LSTM+CRF的方法已经有了不少的改进,好比还有一种NER的方法是融合CNN+LSTM+CRF,主要改进点是多了一个CNN模块来提取字级别的特征。CNN的输入是字级别的Embedding,经过卷积和池化等操做来提取字级别的特征,而后和词的Embedding拼接起来放入LSTM。这种方法在两个公开数据集上面取得了最好的结果,也是将来尝试的方向之一。
为了解决少无结果的问题,咱们设计了多级检索架构,如上图所示,主要分4个层次:基本检索、二次检索、核心词检索和异地检索。
多级检索架构上线后,线上的无结果率就大幅度下降了。
排序实际上是一个典型的技术问题,业界应用比较普遍的有广告排序和推荐排序,广告排序好比Google和百度的关键字广告排序,今日头条、腾讯的展现广告排序。推荐排序好比快手、抖音这些短视频平台,以及各大App、浏览器的信息流。广告排序和推荐排序优化的目标都是点击率,技术栈也比较类似,包括LR/FTRL、FM/FFM、GBDT、DNN等模型。
跟以上两种排序应用相比,酒店排序有本身的业务特色,由于美团酒店具备LBS属性和交易属性,天生自带不少连续特征,如酒店价格、酒店评分、酒店离用户的距离等,这些连续特征是决定用户购买行为的最重要因素。优化目标也不同,大部分场景下酒店搜索的优化目标是访购率,部分场景下优化目标是点击率。在技术层面,酒店排序总体的技术栈和广告、推荐比较类似,均可以使用LR/FTRL、FM/FFM、GBDT、DNN等模型。
具体到酒店排序工做,咱们面临一些不同的挑战,主要包括如下4点:
上图右侧是排序的总体架构图,分为线下、线上和近线上三个部分。在线下部分,主要作离线的模型调优和评估,线上部分作预测。这里比较特别的是近线上部分,咱们在实时层面作了大量的工做,包括用户的实时行为、酒店实时价格、实时库存等等,以应对供给变化快的特色。
这里介绍一个业务特色致使的比较独特的问题:模型切分。美团酒店有不少业务场景,包括国内酒店、境外酒店、长租、钟点房等;还有两个App,美团App和大众点评App;还有搜索和筛选两种场景,搜索带查询词,筛选没有查询词,两种场景差别较大;从地理位置维度,还能够分红本地和异地两种场景。
面对这么多的业务场景,第一个问题就是模型怎么设计,是用统一的大模型,仍是分红不少不一样的小模型?咱们能够用一个大模型Cover全部的场景,用特征来区分不一样场景的差别,好处是统一模型维护和优化成本低。也能够划分不少小模型,这里有一个比较好的比喻,多个专科专家会诊,赛过一个全科医生。切分模型后,能够避免差别较大的业务之间互相影响,也方便对特殊场景进行专门的优化。
在模型切分上,主要考虑三个因素:
接下来介绍一下排序模型的演进过程,由于业务特色及历史缘由,酒店搜索的排序模型走了一条不同的演进路线。你们能够看业界其余公司点击率模型的演进,不少都是从LR/FTRL开始,而后进化到FM/FFM,或者用GBDT+LR搞定特征组合,而后开始Wide&Deep。
酒店搜索的演进就不太同样。酒店业务天生自带大量连续特征,如酒店价格、酒店和用户的距离、酒店评分等,所以初始阶段使用了对连续特征比较友好的树模型。在探索深度排序模型的时候,由于已经有了大量优化过的连续特征,致使咱们的整个思路也不太同样,主要是借鉴一些模型的思想,结合业务特色作尝试,下面逐一进行介绍。
初始阶段线上使用的模型是XGB(XGBoost, eXtreme Gradient Boosting)。做为GBDT的改进,XGB实现了非线性和自动的特征组合。树节点的分裂其实就实现了非线性,树的层次结构实现了不一样特征的自动组合,并且树模型对特征的包容性很是好,树的分裂经过判断相对大小来实现,不须要对特征作特殊处理,适合连续特征。
树模型的这些特色确实很适合酒店这种连续特征多的场景,至今为止,XGB都是数据量较小场景下的主模型。可是树模型优化到后期遇到了瓶颈,好比特征工程收益变小、增大数据量没有额外收益等,此外树模型不适合作在线学习的问题愈发严重。酒店用户在劳动节、国庆节等节假日行为有较大不一样,这时须要快速更新模型,咱们尝试过只更新最后几棵树的作法,效果不佳。考虑到将来进一步的业务发展,有必要作模型升级。
模型探索的原则是从简单到复杂,逐步积累经验,因此首先尝试告终构比较简单的MLP(Multiple-Layer Perception)多层感知机,也就是全链接神经网络。神经网络是一种比树模型“天花板”更高的模型,“天花板”更高两层意思:第一层意思,能够优化提高的空间更大,好比能够进行在线学习,能够作多目标学习;第二层意思,模型的容量更大,“胃口”更大,能够“吃下”更多数据。此外它的表达能力也更强,能够拟合任何函数,网络结构和参数能够调整的空间也更大。可是它的优势同时也是它的缺点,由于它的网络结构、参数等能够调整的空间更大,神经网须要作不少的参数和网络结构层面的调整。
上图是MLP的网络结构图,包含输入层、若干个隐藏层、输出层。在很长一段时间内,在特征相同的状况下,MLP效果不如XGB,因此有段时间线上使用的是XGB和MLP的融合模型。后来通过大量的网络结构调整和参数调整,调参经验愈来愈丰富,MLP才逐步超越XGB。这里额外说明一下,酒店搜索中有少许的ID类特征,在初版MLP里ID类特征是直接当作连续特征处理的。好比城市ID,ID的序关系有必定的物理意义,大城市ID广泛较小,小城市开城晚一些,ID较大。
在MLP阶段咱们对网络结构作了大量实验,尝试过三种网络结构:平行结构、菱形结构、金字塔结构。在不少论文中提到三者相比平行结构效果最好,可是由于酒店搜索的数据不太同样,实验发现金字塔结构效果最好,即上图最右边的“1024-512-256”的网络结构。同时还实验了不一样网络层数对效果的影响,实验发现3-6层的网络效果较好,更深的网络没有额外收益并且线上响应时间会变慢,后面各类模型探索都是基于3到6层的金字塔网络结构进行尝试。
MLP上线以后,咱们开始思考接下来的探索方向。在树模型阶段,酒店搜索组就在连续特征上作了不少探索,连续特征方面很难有比较大的提高空间;同时业界的研究重点也放在离散特征方面,因此离散特征应该是下一步的重点方向。
深度排序模型对离散特征的处理有两大类方法,一类是对离散特征作Embedding,这样离散特征就能够表示成连续的向量放到神经网络中去,另外一类是Wide&Deep,把离散特征直接加到Wide侧。咱们先尝试了第一种,即对离散特征作Embedding的方法,借鉴的是FNN的思想。其实离散特征作Embedding的想法很早就出现了,FM就是把离散特征表示成K维向量,经过把高维离散特征表示成低维向量增长模型泛化能力。
实际使用中,咱们稍微作了一些改动,实验中发现使用FM预训练的效率不高,因此尝试了不作预训练直接把Embedding随机初始化,而后让Embedding跟随网络一块儿学习,实验结果发现比FM预训练效果还要好一点。最后的作法是没有用FM作预训练,让Embedding随机初始化并随网络学习,上图是线上的V3模型。
FNN的成功上线证实离散特征Embedding这个方向值得深挖,因此咱们接着实验了DeepFM。DeepFM相对于Wide&Deep的改进,很是相似于FM相对LR的改进,都认为LR部分的人工组合特征是个耗时耗力的事情,而FM模块能够经过向量内积的方式直接求出二阶组合特征。DeepFM使用FM替换了Wide&Deep中的LR,离散特征的Embedding同时“喂”给神经网和FM,这部分Embedding是共享的,Embedding在网络的优化过程当中自动学习,不须要作预训练,同时FM Layer包含了一阶特征和二阶的组合特征,表达能力更强。咱们尝试了DeepFM,线下有提高线上波动提高,并无达到上线的标准,最终没有全量。
尽管DeepFM没有成功上线,但这并无动摇咱们对Embedding的信心,接下来尝试了PNN。PNN的网络重点在Product上面,在点击率预估中,认为特征之间的关系更可能是一种And“且”的关系, 而非Add“加”的关系,例如性别为男且用华为手机的人,他定酒店时属于商务出行场景的几率更高。
PNN使用了Product Layer进行显式的二阶特征组合。上图右边是PNN的网络结构图,依然对离散特征作Embedding,Embedding向量同时送往隐层和Product层,Product经过内积或者外积的方式,对特征作显式的二阶交叉,以后再送入神经网的隐层,这样能够作到显式的二阶组合和隐式的高阶特征组合。特征交叉基于乘法的运算实现,有两种方式:内积和外积。咱们尝试了内积的方式,线下略有提高线上也是波动提高,没有达到上线标准,因此最终也没有全量上线。
PNN以后咱们认为Embedding还能够再尝试一下,因而又尝试了DCN(Deep&Cross Network)。DCN引入了一个Cross Network进行显式的高阶特征交叉。上图右边是论文中的图,能够看到Deep&Cross中用了两种网络,Deep网络和Cross网络,两种网络并行,输入都同样,在最后一层再Stack到一块儿。
Deep网络和前面几种网络同样,包括连续特征和离散特征的Embedding,Cross网络是DCN的特点,在Cross网络里面,经过巧妙的设计实现了特征之间的显式高阶交叉。看上图左下角的Cross结构示意,这里的x是每一层的输入,也就是上一层的输出。Feature Crossing部分包括了原始输入x0、本层输入x的转置、权重w三项,三项相乘其实就作了本层输入和原始输入的特征交叉,x1就包含了二阶的交叉信息,x2就包含了三阶的交叉信息,就能够经过控制Cross的层数显式控制交叉的阶数。
不得不说,DCN在理论上很漂亮,咱们也尝试了一下。可是很惋惜,线下有提高线上波动提高,依然未能达到上线的标准,最终未能全量上线。
通过DeepFM、PNN、DCN的洗礼,促使咱们开始反思,为何在学术上特别有效的模型,反而在酒店搜索场景下不能全量上线呢?它们在线下都有提高,在线上也有提高,可是线上提高较小且有波动。
通过认真分析咱们发现可能有两个缘由:第一,连续特征的影响,XGB时代尝试了600多种连续特征,实际线上使用的连续特征接近400种,这部分特征太强了; 第二,离散特征太少,离散特征只有百万级别,可是Embedding特别适合离散特征多的状况。接下来方向就很明确了:补离散特征的课。
最终,咱们仍是把目光转回Wide&Deep。Wide&Deep同时训练一个Wide侧的线性模型和一个Deep侧的神经网络,Wide部分提供了记忆能力,关注用户有过的历史行为,Deep部分提供了泛化能力,关注一些没有历史行为的Item。以前的工做主要集中在Deep测,对低阶特征的表达存在缺失,因此咱们添加了LR模块以增长对低阶特征的表达,Deep部分和以前的V3同样。刚开始只用了少许的ID类特征,效果通常,后来加了大量人工的交叉特征,特征维度达到了亿级别后效果才获得很好的提高。下图是咱们的V4模型:
接下来介绍一下优化目标的迭代过程(后面讲MTL会涉及这部份内容)。酒店搜索的业务目标是优化用户的购买体验,模型的优化指标是用户的真实消费率,怎么优化这个目标呢? 经过分析用户的行为路径能够把用户的行为拆解成“展现->点击->下单->支付->消费”等5个环节,这其中每一个环节均可能存在用户流失,好比有些用户支付完成后,由于部分商家确认比较慢,用户等不及就取消了。
刚开始咱们采用了方案1,对每个环节建模(真实消费率=用户点击率×下单率×支付率×消费率)。优势是很是简单直接且符合逻辑,每一个模块分工明确,容易确认问题出在哪里。缺点也很明显,首先是特征重复,4个模型在用户维度和商家维度的特征所有同样,其次模型之间是相乘关系且层数过多,容易致使偏差逐层传递,此外4个模型也增长了运维成本。后来慢慢进化到了方案2的“End to End”方式,直接预测用户的真实消费率,这时只须要把正样本设定为实际消费的样本,一个模型就够了,开发和运维成本较小,模型间特征也能够复用,缺点就是链路比较长,上线时常常遇到AB测抖动问题。
模型切换到神经网络后就能够作多任务学习了,以前树模型时代只预测“End to End”真实访购率,神经网络则能够经过多任务学习同时预测CTR展现点击率和CVR点击消费率。多任务学习经过硬共享的方式同时训练两个网络,特征、Embedding层、隐层参数都是共享的,只在输出层区分不一样的任务。上图是酒店搜索当前线上的模型,基于Wide&Deep作的多任务学习。
上图是酒店搜索排序的深度排序模型演进路线,从MLP开始,经过对离散特征作Embedding进化到FNN,中间尝试过DeepFM、PNN、DCN等模型,后来加入了Wide层进化到Wide&Deep,如今的版本是一个MTL版的Wide&Deep,每一个模块都是累加上去的。
除了上面提到的模型,咱们还探索过这个:
这是咱们本身设计的混合网络,它融合了FNN、DeepFM、PNN、DCN、Wide&Deep等不一样网络的优势,同时实现了一阶特征、显式二阶特征组合、显式高阶特征组合、隐式高阶特征组合等,有兴趣的同窗能够尝试一下。
上图是不一样模型的实验结果,这里的BP是基点(Basis Point),1BP=0.01%。XGB是Baseline,MLP通过很长时间的调试才超过XGB,MLP和XGB融合模型的效果也很好,不过为了方便维护,最终仍是用FNN替换了融合模型。Wide&Deep在开始阶段,提高并无特别多,后来加了组合特征后效果才好起来。咱们Embedding上面的尝试,包括DeepFM、Deep&Cross等,线下都有提高,线上波动有提高,可是未能达到上线的标准,最终未能全量。
在特征预处理方面对连续特征尝试了累计分布归一化、标准化,以及手工变换如根号变换、对数变换等;累积分布归一化其实就是作特征分桶,由于连续特征多且分布范围很广,累积分布归一化对酒店搜索的场景比较有效。
离散特征方面尝试了特征Embedding及离散特征交叉组合,分别对应FNN和 Wide&Deep。这里特别提一下缺失值参数化,由于酒店业务是一种低频业务,特征覆盖率低,大量样本存在特征缺失的状况,若是对缺失特征学一个权重,非缺失值学一个权重效果较好。
参数调优方面分别尝试了激活函数、优化器等。激活函数尝试过Sigmoid、ReLU、Leaky_ReLU、ELU等;优化器也实验过Adagrad、Rmsprop、Adam等;从实验效果看,激活函数ReLU+Adam效果最好。刚开始时,加了Batch Normalization层和Dropout层,后来发现去掉后效果更好,可能和酒店搜索的数据量及数据特色有关。网络结构和隐层数方面用的是3到6层的金字塔网络。学习率方面的经验是学习率小点比较好,可是会致使训练变慢,须要找到一个平衡点。
下面介绍深度排序模型线上Serving架构的演化过程,初始阶段组内同窗各自探索,用过各类开源工具如Keras、TensorFlow等,线上分别本身实现,预测代码和其余代码都放一块儿,维护困难且没法复用。
后来组内决定一块儿探索,你们统一使用TensorFlow,线上用TF-Serving,线上线下能够作到无缝衔接,预测代码和特征模块也解耦了。如今则全面转向MLX平台,MLX是美团自研的超大规模机器学习平台,专为搜索、推荐、广告等排序问题定制,支持百亿级特征和流式更新,有完善的线上Serving架构,极大地解放了算法同窗的生产力。
最后介绍一下咱们对搜索排序技术节奏的一些理解,简单来讲就是在不一样阶段作不一样的事情。
在上图中,横轴表示技术深度,越往右技术难度越大,人力投入越大,对人的要求也越高。纵轴是业务阶段。业务阶段对技术的影响包括两方面,数据量和业务价值。数据量的大小,能够决定该作什么事情,由于有些技术在数据量小的时候意义不大;业务价值就更不用说了,业务价值越大越值得“重兵投入”。
起步阶段:起步阶段,尚未数据,这时候作简单排序就好,好比纯按价格排序或者距离排序,目的是让整个流程快速地跑起来,能提供最基本的服务。好比2017年,美团的长租业务当时就处于起步阶段。
业务初期:随着业务的发展,就进入了业务发展初期,订单数慢慢增加,也有了一些数据,这时候能够增长一些启发式规则或者简单的线性模型,检索模型也能够加上。可是因为数据量还比较小,不必部署很复杂的模型。
稳定成长期:业务进一步发展后,就进入了稳定成长期,这时候订单量已经很大了,数据量也很是大了,这段时间是“补课”的时候,能够把意图理解的模块加上,排序模型也会进化到非线性模型好比XGB,会作大量的特征工程,实时特征以及实时模型,在这个阶段特征工程收益巨大。
技术瓶颈期:这个阶段的特色是基本的东西都已经作完了,在原有的技术框架下效果提高变的困难。这时须要作升级,好比将传统语义模型升级成深度语义模型,开始尝试深度排序模型,而且开始探索强化学习、多模型融合、多目标学习等。
中国有句俗话叫“杀鸡焉用牛刀”,比喻办小事情,何须花费大力气,也就是不要小题大作。其实作技术也同样,不一样业务阶段不一样数据量适合用不一样的技术方案,没有必要过分追求先进的技术和高大上的模型,根据业务特色和业务阶段选择最匹配的技术方案才是最好的。咱们认为,没有最好的模型,只有合适的场景。
酒店搜索做为O2O搜索的一种,和传统的搜索排序相比有不少不一样之处,既要解决搜索的相关性问题,又要提供“千人千面”的排序结果,优化用户购买体验,还要知足业务需求。经过合理的模块划分能够把这三大类问题解耦,检索、排序、业务三个技术模块各司其职。在检索和意图理解层面,咱们作了地标策略、NER模型和多级检索架构来保证查询结果的相关性;排序模型上结合酒店搜索的业务特色,借鉴业界先进思想,尝试了多种不一样的深度排序模型,走出了一条不同的模型演进路线。同时经过控制技术节奏,总体把握不一样业务的技术选型和迭代节奏,对不一样阶段的业务匹配不一样的技术方案,只选对的,不选贵的。
发现文章有错误、对内容有疑问,均可以关注美团技术团队微信公众号(meituantech),在后台给咱们留言。咱们每周会挑选出一位热心小伙伴,送上一份精美的小礼品。快来扫码关注咱们吧!