你天天叫的外卖,你知道这里面深度学习的水有多深吗
很多人以为外卖不过是下单、送餐,不需要什么技术含量。这种理解其实很片面,外卖业务不仅需要技术,它高度个性化、精细化的需求,是要用深度学习技术来解决的。
本文以美团的外卖业务为切入点,介绍了深度学习在美团的应用,如通过图像质量的提升、用OCR技术对用户行为数据进行解析,以及DNN在评估模型中的应用,特征组合问题以及树模型的应用等。
分享者刘怀军是美团外卖技术和团队的负责人,本文内容是他在最近一次闭门沙龙上的分享。
作者 | 刘怀军
整理 | AI100(rgznai100)
很多同学认为外卖是线下送餐的业务,业务还很简单,这种想法其实并不正确。外卖为什么需要技术?为什么需要深度学习技术?
深度学习对于送餐的价值,简单了解一下外卖业务的场景和特点,大家就能理解其中需要通过技术方式来解决的难点了:
从业务场景上划分,是团购、点评、预订和外卖:团购场景,像过去的美团、点评,当然两家公司现在合作了,还有之前的窝窝、拉手以及百度糯米;外卖场景,像美团外卖、饿了么;点评方面,像经典的以信息平台的方式给用户提供信息决策;预订方面,我们美团现在也在做的点餐相关的很多业务。
事实上上的O2O线下场景及其业务模式,要远比图上面所表达的复杂。
而整个外卖行业的发展是非常快的,我们2014年的订单才刚突破100万,但是到今年6月份的时候,我们的订单量就已经突破了1200万。这一行业整体的业务增速都是非常快的。
一个典型的外卖产品,的形态,大家肯定有很多人会去点外卖,不管是百度的外卖还是饿了么,应该会比较类似了,整个来讲类似于像淘宝的APP的形态,上面是一个频道的入口,中间有相应的专区,这是很多的个性化的一些展位。
外卖业务的特点有什么不一样的地方呢?或者说相比团购,相比电商的平台有四个业务特点:电商化、运营化、本地化、场景化。
首先说电商化。相对团购而言,外卖有一个特点是交易能够闭环。团购的话,就是团一个优惠券或者套餐到店地面销售。外卖则不同,用户产生一个需求之后,它就会下单,下单之后会接用户的单,接完之后生产餐饮,生产完了之后通过配送的方式送到用户手上……用户从需求产生到需求消费完毕的整个过程是一个完整的闭环。
从全闭环的过程来讲,实际上交易是闭环化的,这一点跟电商在淘宝京东的模式比较类似,但是不一样的地方在于它是线上线下结合,所有提供服务的店铺都是有实体的,不管餐饮还是非餐饮。
接下来是运营化的特点。在这业务中,运营是很关键的一块。但是,运营要涉及到很多相关方:首先涉及到整个外卖平台,怎么样运营商品,运营商家给用户提供好的体验,给商家提供好的流量入口。其次是涉及到商家,如果商家做的餐不符合用户人群的消费习惯,这个餐其实是卖不出去的,所以商家需要有自运营的艺术和能力。另外一块是BD,就是整个线下地推的人员,现在外卖相比电商,就是外卖的商家都是从最原始的线下的经营模式开始的,从最近的几年无线互联网或者O2O,商家的运营模式慢慢往下去转;但相比电商,他们这一块运营能力不是那么强,所以需要BD做很多的运营建议,包括优惠怎么去设计、红包方式怎么设计。还有一个很重要的角色就是骑手,因为餐饮你点一个菜你希望20分钟送达,电商今天点明天或者三天之后可以到,这两个实时性不一样,这个特点上骑手是很重要的角色,直接影响了商家商品的消费能力,以及用户需求的能力。
总结来看,在这个特点上,一个是内容形式的多元化,包括商家,餐饮的、非餐饮的,餐饮有很多套餐的组合,内容形态上能看到产品的形态,目前这一块还不明显。另外是运营能力,包括商家自运营的能力、BD自运营的能力、骑手的运营能力,这些都不是完全一样的。
另外一个特点是本地化。这个本地化大家都了解,O2O就是线上线下结合,但是外卖的本地化相比团队的本地化更强,这是一个简单的图。对于这个用户来讲,你只能消费到绿色区域商家提供的服务。比如说,大家坐在咖啡馆区域里面,你现在想订外卖了,你只能订周边几公里商家的外卖,附近的一个商家触达用户的范围其实也是有限的,这个就决定了它的供需关系是受约束的。而从电商来讲,北京的用户可以买上海的商家的商品,甚至像现在的海淘或者国际化的电商也可以买国外的商品。但是,外卖这一块很折腾,很难跨出这个区域去消费你想要的商品。
其中还有一块是供需关系的动态变化。动态变化首先商家不是24小时营业的,很多饭店基本上早上到晚上时候营业;另外一点是商家配送的距离也是动态变化的,比如说这个附近可能会有一个肯德基,你现在能订到它的餐,但是晚高峰的时候,有可能线下用户量很大了,外卖送不过来,会把配送范围调小一点。从技术角度满足整个服务的动态变化,就需要个性化的数据,这是一个很大的挑战。
另外一块是场景化。场景化也好理解,这是外卖订单的一个按一天24小时的一个分布曲线图,很简单两个高峰,一个是午餐高峰,另外一个就是晚餐高峰。这个是时间的一个时段化,对于用户来讲订外卖就很简单,早上可能是早餐,中午可能是正餐,下午是下午餐,晚上会有夜宵。对于基本吃的场景来讲,用户吃的地域性差异很大,比如说东北的用户到北京了,他虽然在北京,但是它的饮食习惯偏向于东北,所以用户的地域性或者本地化的差异比较大。
综合几个业务特点来看,一个是个性化程度其实很高的,另外一块其实精细化的需求很大。我们在时间场景上、地域场景上,甚至更细的业务场景上,要把精细化程度做深;另外一块是多元化的特点,形态多元、内容多元包括供给单位的多元;还有实时化程度很重的,配这一块距离在实时变化的,我们需要做实时监控。
前面是一个简要的业务的特点,我们要去解决这些技术挑战需要什么样的基础工具?
下面简单介绍一下整个美团点评的大数据平台。
大数据平台的架构,大家想如果对这个区域是比较熟悉,大的框架上比较类似。最底层是美团的基础设施,美团有自己的云平台,所以整个我们的所有的服务器都是在整个云平台上的。云平台之上是基础的HDFS这样的服务之上,像Hbase相关的这些基础的设施。上面一层是机器学习平台,非线性数目性的工具都有相应的部署。最上面是美团点评几个大的业务群,包括我们酒店、旅游的业务,包括娱乐这样综合的业务,包括整个公司广告平台。在主架构之上有一个Log平台,因为业务很多,所以业务产生的数据,不管是B端还是C端,很多数据都会统一落到Log平台上,由Log平台对接到顶层业务平台上。另外一个就是监控平台,服务监控、数据监控以及业务调度。
接下来给大家简要介绍两个深度学习,两个关键的应用场景。
第一个应用场景是图像技术,平台上的技术内容是多样化的,包括文字和图像,尤其在手机上面用户做很多决策的时候,他看到图像对用户的决策是至关重要的,在图像这一块我们做了两个关键事情,一个是图像质量的技术,另一个是OCR技术。
图像质量技术有什么应用场景?如上图所示,左侧这个图明显看着比较舒服,右侧图看着乱七八糟,这个很难主观描述,这就是人的直观感觉。具体来说,左侧两个清晰度可能会比较高一点,或者完整度比较高一些。在用户做决策的时候,如果我们在平台上面分的质量比较高的图片,用户整个点击会比较快,对商家来讲,用户很容易发生需求匹配的转化。但是右侧这个图来讲,整个体验转化的能力上会相对比较弱,这是一个背景。
在这个背景上面,如果我们做这样一个图像质量的判断,这里面有一些关键的难点和挑战,主要有三个关键点:
第一个就是标准评判很难,定义它的清晰度、完整度还是里面构成,其实很难标准定义的,或者说整个行业里面没有对图像质量标准定义。
另外一个挑战是用户的关注其实是不一样,有些用户可能关注图片是否清晰,有些用户关注图片是不是完整,有没有关键的信息给切走。
另外一个是人工标注成本高,我们直观判断做这个事,一种无监督,一种有监督,一方面标准难定,另外大量的学习样本,标准的人力也很高。
怎么解决这几个问题?我们引入了建模的方式,一个像美学的课程,接下来会详细介绍一下。另外一个是图像基础的特征,在样本标注这一块采用的自动化标注的方式,自动化标注一方面我们去看图片的来源,比如说直观的理解,用户自动上传的图片,也就是UGC的图片,但是质量相对差一些。如果是专业的,我们有专业的人员,专业的人员开设的图品质量会好一些,我们可以做一些基本的标注。
另外一块基于用户行为来看,这个图片我们展示给用户点比较多,可能这个图片是用户感兴趣,或者质量比较好的,点击比较少,我们认为它是质量比较差的图片,这样可以通过自动化的方式把样本标注出来。
只要我们输入的这里面,我们没有说直接给每个图片识别它是高质量、中质量还是低质量的,基本上我们采用的是一个学习的方式,输入图片,这里面包括图片的美感,通过DNN方式来判断图片,包括它的品类,品类这一块属于快餐、西餐还是简餐之类的品类。另外一块是基础特征,图像的色彩,包括图像的对比度这一块,这些基础特征也是可以用来做整个建模的,还有一块整个在学习上面我们有直接去做,通过KOS的方式判断哪一个图像质量比较好,哪一个图像质量比较差,最主要是从一堆图片里面选图片比较好的展示给用户。涉及到数据比较商业化,整体来讲,这个事情做完了之后,我们用户体验式提升了很多,整个结果也是比较享受的。
前面是整个图像质量的一个技术,接下来说说OCR的技术。深度学习的同学可能比较熟悉,基本的OCR就是做数据的检测,OCR在美团外卖有哪些比较关键的应用呢?
比较大的方面是自动审核,为了保证给用户提供可靠的服务或者优质的服务,我们需要审商家的牌照,审商家的经营许可证,审商家的质量,没有地沟油或者不合规的商家进来,这一块如果用人审的话,人力成本其实是很高。
另外一块是自动录入,商家入住到外卖平台之后,要把菜录入到上面去,尤其商家要不断的改菜单,不断的录入,需要很多其他的录入到平台上的信息,这一块是自动录入的过程,这是我们两个基本上应用的需求点。
图像有很多成像的方式,另外一块文字很复杂,很多图片上的文字不是标准的楷体,各种各样乱七八糟的字体会有,甚至还有变形的字体,图像的背景很复杂,或者说其实人看到很难区分这种场景,这一块其实整个OCR里面有了技术难点的挑战。怎么解决这些问题呢?
OCR识别的技术我们发现比较关键的技术,文字的检测首先从图片里面,比如说这个图片我们检测哪一些是图片里面的文字,哪一些是图片本身。
另外一块是文字的一个识别,我们检测到图片之后,怎么把里面的文字识别出来,这一块整体采用的是CNN方式,加入BLSTM的模式,其实考虑了整个序列建模的能力,最后一块是CTC的序列识别模型。
我们整个过程由原来人工审核变成了自动化的过程,整个运营效率得到了很大的提升。
接下来详细介绍一下DNN在预估模型上面的应用,包括前面也讲了会涉及到很多预估,预估整个算法领域用的非常多,比如说广告里面涉及到的CTR的预估,如果我们优化目标可能是CTR那就是CTR的预估,还有很多ROI的预估。
最近几年,其实互联网包括国内国外大公司都在研究基于DNN的模型,怎么把原来传统的模型可能存在的一些缺点改进下,这一块我们做的一些相应的探索给大家做简单的分享。
首先大家先简单介绍一下我们的业务模型。前面介绍了业务的特点,这个业务特点上面用户的模型是什么样子的,其实有几个关键的步骤,用户做决策时看到了相关的信息之后,这个是不是用户的目标需求,决定了用户的消费决策。先点击,点击之后进入到商家的点菜页里面,可以加菜或者减菜,之后用户可以提交订单,提交之后用户有一系列的输入、地址等,之后就是支付了,之后就进入到商家系统,所以这里边其实它是一个漏斗,在这个漏斗里面每一场其实都有相应的转化,我们其实可以去做预估,也可以说整个链路上做一个完整的预估。
另外一块在这样一个预估模型里面,其实预估的模型挺快,要么我们多个维度的特征表述这个样本,我们采用某一种学习模型,得到最终的预制的结果。在外卖的场景上面,特征的维度更复杂,前面提到包括用户的特征这是最基本的,另外一块包括场景层面地点的特征,不同的建筑物类型其实用户需求不同,包括时间也是涉及到配的特征,用户肯定倾向于配送比较快的结果,这个又分不同的业务场景,比如说吃午饭12点餐,你可能希望十分钟送过来,你想吃水果你可以等三个小时。
另外一个就是商家的特征,最主要是提供商品实际上就是商家提供的,而且是直营的模式,每一个实体的饭店,包括饭店的质量以及整体的转化能力,包括经营能力很多的特征,还有商品的特征,从这个角度来看,其实整个在去做特征的过程中,特征是很多的,这么多维度都可以切出来不同的模式,怎么去定义特征,怎么组合特征这个过程成本很高的,这个过程其实是依赖于人工经验,在整个行业里面个性化推荐效果比较好,为什么效果比较好呢?除了技术比较好之外,在业务这一块做了很好,很多特征的定义,除了技术本身要深入的理解业务很多的特征和经验。这一块其实是成本很高的,另外一块是特征选择还是很大,像现在广告里面都是说不止是亿级了,特色比较多了之后做特色选择成本是很高的,怎么样把有价值的选出来。
刚才提到几个关键点是DNN比较擅长的能力,为什么我们会尝试很多的DNN呢?一方面是传统的模型已经研究了很多年了,另外一块其实传统的模型上面,其实它有一些不足,一方面可以看到,它的优点其实是很快,基本上是线性模型,我们用千亿级的特征,但是它的缺点在于因为它是线性的所以非线性的能力是比较弱的。但是实际的场景里面不是简单的线性化,是非线性化,甚至更复杂的构成的。
另外一块因为是线性的,所以最基本的逻辑认为它是单维的,需要我们每个人手动的组合特征,组合特征就涉及到如果人工安排,我们如果准备三个就三个,如果多个就很复杂,所以特征组合的成本很高。
树模型可以解决特征组合的问题。同时还能解决整个树空间来讲,把整个空间做了一个多维度,不是简单的通过线性的切分方式,所以它的解决就是线性能力受限的问题,比如说前面提到的有业务的类型,有快餐、简餐、西餐,另外一块是文本特征,这一块树模型上面不是那么擅长的,所以基于此我们相信尝试DN的模型,先介绍一下我们整个系统的架构,这个架构分这么两个大的层次,首先是基本的数据这一层,包括我们的用户来了之后在APP上面,包括我们API,包括我们很多业务的数据,上面分两块,一个是离线的数据处理,一个是在线实时的数据处理,离线数据有几个关键的步骤,另外一个在线的整个逻辑上比较类似,核心的逻辑部分就是包括端达到API,API到后来Service,这个用户是使用技术还是某一个线,这个是业务特点的规则做一个排序的。
再看一下整个在外卖上面关键特征的体系,我简单介绍一下,一个是用户维度,一个是商户维度,我们从用户画像来看,一个是基本的人口的用户是男生还是女生,或者是它的行业是学生还是白领,有哪一些偏好,他喜欢吃粤菜还是北京菜,还有另外购买能力,一顿饭吃一百块还是20块钱,另外还有优惠的偏好很多的信息,商户这一层包括商户的基本信息,使也有商家用的第三方的配送,也有用的美团点评,所以在配送的时效性这一块有很大的差别,这个是单独的特征,另外还有各种组合特征和关联特征。
比如说一个用户浏览次数是多少,点击次数是多少,下单次数是多少,以及对应的点击率是多少,有很多交叉的特征。熟悉了政策体系之后,首先我们尝试了Google经典的Deep Model,其实分成两块,特征进去之后做最后的一个预测得到相应的结果。
接下来简要介绍一下,Wide这一块其实可以输出单一的特征,可以输出组合的特征,特征这一块其实需要把特征转到一个Model空间里面去,在Deep这一块可以根据业务的特点是去试或者调参数,另外输入的高危的,相当于前面提到的像品类ID,或者像里面的文本,另外一块是做特征的话,虽然它是高危的,但是可以把高危转到低危空间里面,这一块是更详细的一个图,这个图里面其实相当于我们把特征做了分层,他是直接做分还是内的原因,另外做的比较灵活一些,可以在不同的厂商,或者有的厂商可以介入到最终的逻辑回归那一层去。
在做模型的过程中,关键的就是离线,离线一个是样本处理,包括样本的清洗还有爬虫过滤,爬虫现在还是不少的,这些爬虫的数据其实对整个效果影响是很大的,它纯粹是爬虫,如果我们把这些样本进入到整个样本里面去会有影响,另外还有无效的加载,另外材料的优化,怎么调价样本还是副样本很关键,这一块我们采用用户的点击它是设想给它。在业界里面用的比较多的,甚至他是新用户使用优惠才点,这个是表述它的兴趣的,这样我们做了一些筛选,选出来相对一定频度的用户,或者是商品作为整个的样本空间,准确的来做数据。
前面提到的Model把不同的特征做了不同层次的划分,不同层次的划分在不同模型上使用,其实特征能力用的比较强,但是大家也看到,前面模型使用特定的特征,没有考虑到实序的特征,实际上用户进入到一个场景,不管是电商的产品还是外卖这种产品上面的时候,肯定会有一系列的行为,比如说在最终下单之前,还有就是去构建实际的序列,同时把实际的序列作为每个时段的输入,同时每个去做相应特征的项目,最后在最终做一个完整的预测得到相应的结果,这里面是经典RNN的模型,大家可以尝试一下长短序列机的模型。
这一块因为涉及到用户的实时的架构,所以简要介绍一下我们实时系统的架构,基本上就是首先用户的个人行为的数据,进入序列之后数据做相应的梳理,从整个KV结构里面,同时去做了多层指标的监控,监控这个数据是不是正常的,我们怎么样对日常的数据做一些相应的处理。
接下来简单介绍一下用户的信息,一个是输入,以不同的应用场景去选择,实际上在点用户场景里面可以点用户观看,同时它的每一个输入需要做相应的one—hot,这种输入的。输出的也可以做一个序列,这个序列可以根据实际的场景控制,序列里面根据概率我们去选择的时候,按照一定概率的排序去给用户一个相应的序列结果还是怎么做,在这里面比如说用户点击了其中一个,其实在序列里面这个是可以加进去的,这个主要是用于我们怎么样通过序列的方式精准的标识用户的需求。
在这里面很关键的一个就是序列的长度,序列的长度根据不同的业务方式去调,序列太长了,一方面可能会很稀疏,另外一方面计算的时间是很高的,序列太短的情况下,用户的信息不那么充分的挖掘,按一定的时间窗做相应的选择。最终的收益,一方面我们给用户推荐结果的精准度提升了很多,整个平台的转化效果就提升了这是整个的收益。
对外卖来讲业务是很关键的,如果把最终的效果做好,其实不但是从技术的角度上理解,我们还需要对业务有深入的理解,理解业务之后决定采用什么样的技术来解决这个问题。另外在整个算法里,做算法的都有这个感觉,一下子找到牛逼的方法需要做很多的尝试,我们需要尝试很多的模型,需要做很多的尝试,同时需要做总结,在什么样的场景,什么样的问题上什么样的策略方式是比较合适的。
推荐阅读
AI100好评如潮的精品课《XGBoost从基础到实战》由资深讲师一步步带领大家从XGBoost的安装到一行行Python代码实现各类算法任务,不需要有很强的数学基础,直接从实战入手,学员们纷纷表示获益良多。快加入我们开启你的XGBoost探索之路!