您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

饿了么推荐算法演进及在线学习实践

时间:2020-09-21 12:24:46  来源:  作者:
饿了么推荐算法演进及在线学习实践

 

本次分享的主要内容包括以下三个方面:首先是介绍推荐业务背景,包括推荐产品形态及算法优化目标;然后是算法的演进路线;最后重点介绍在线学习是如何在饿了么推荐领域实践的。

 

一、 推荐业务背景

 

1.1 推荐产品形态

饿了么推荐算法演进及在线学习实践

 

大部分人都熟悉饿了么App,甚至通过饿了么app点过外卖。上图中着重圈出的内容就涉及推荐排序,其中首页推荐、类目、搜索构成了整个饿了么流量的入口,通过这些入口覆盖了全网90%以上的订单。

饿了么推荐算法演进及在线学习实践

 

目前饿了么每天的订单量达到千万级别,属于国内Top级,这就意味着流量分发的效率尤为关键,因为它涉及用户体验、商户利益、平台价值,而算法就在该领域发挥着重要的价值。

 

1.2 算法优化目标

在外卖领域有4个重要环节:流量、供给、转化和履约,其中算法在履约环节起着关键的作用。

在不同的业务阶段想要实现的目标也是不一样的。业务成长初期,优化app的点击率、转化率,当用户点击之后想促成成交;随后考虑平台收益就会关注客单价、单均价等;以及后期的满意度等抽象指标,需要将这些大目标拆解为小目标,分别建立不同的算法子模型进行优化。

饿了么推荐算法演进及在线学习实践

 

二、 算法演进路线

 

从2016年至今,饿了么主要经历了数据、特征、模型、业务理解4个方面的升级。

饿了么推荐算法演进及在线学习实践

 

2.1 数据&特征升级

数据及特征方面进行了4个方面的升级:

饿了么推荐算法演进及在线学习实践

 

1) 生产方面:将离线数据升级为实时数据;

引入Flume、Kafka等实时体系,通过模型打分将业务端实时生成的业务日志输出到日志服务器,构建样本时就不需要离线拼接样本特征及标签而是在线生成特征,进而保证特征的质量,避免了特征穿越、特征不准等问题。

2) 时效方面:数据采集从天级别升级为实时,且增加了多维度实时特征;

3) 规模方面:不仅引入大规模的稀疏特征,而且将item、user、query等业务流程中涉及的环节通过word2Vector等实现了向量表达。

4) 监控方面:在特征覆盖及波动、异常值检测、埋点问题等方面进行了实时监控。

 

2.2 模型升级

饿了么推荐算法演进及在线学习实践

 

最初通过人工规则提取特征,基于人工经验敲定采用的因子及权重,线上进行A/B Test实验。当线上效果不太满意时,再次修改因子或权重,这样不仅浪费了时间,而且浪费了很大的流量。

16年上线了简单的LR线性模型,通过机器学习的方法获得各因子权重,与此同时引入用户维度信息,这一阶段形成了个性推荐的雏形。相对于人工规则,点击率、转化率提升了10%。

16年底采用了非线性模型,包括GBDT树模型、FM等,相对于线性模型,在特征交叉表达方面效果提升明显。16年底我们上线了第一版本XGBoost点击率预估,随后基于业务的理解将其拆分为点击率、转化率2个子模型,并引入用户、商户的实时反馈特征,如用户点击某个餐厅、餐厅近一个小时或者一天的情况,效果提升7%-8%。可见用户维度信息增多了,特征维度丰富了,模型结构复杂了,真正做到了千人千面个性化推荐。

从17年饿了么开始在推荐领域尝试使用深度学习及在线学习。目前在线学习已应用在饿了么的很多业务场景。

下面简单介绍Wide&Deep、DeepFM两个深度学习模型是如何应用在饿了么推荐排序领域。

(一)Wide&Deep

饿了么推荐算法演进及在线学习实践

 

初始阶段参照google发表的论文,复用GBDT模型使用的特征,将用户稀疏特征、商户稀疏特征输入线性部分,在没有引入更多特征的前提下,相对于base版本效果没有特别大的突破。

随后将用户稠密特征等加入Deep部分,将GBDT的叶子节点通过One-Hot或者重新编码的方式加入Wide部分,效果有了较大的提升。

但是模型结构复杂度的增加使得在线预测达不到工程响应时间要求。现阶段模型一直在优化,在业务低峰期仍使用此模型,业务高峰期工程上采用降级的方式。

(二)DeepFM

随后尝试了DeepFM,总体结构和论文保持一致,充分利用DNN提取高阶特征组合以及FM提取二阶特征的能力,实现了自动提取特征,是一个端到端的模型。该模型在很长一段时间用于首页推荐,实验效果比较理想。

饿了么推荐算法演进及在线学习实践

 

模型经过不断地演化,现阶段外卖推荐系统架构与大部分推荐系统架构类似:

饿了么推荐算法演进及在线学习实践

 

1)数据来源:包括业务日志、服务端日志、用户行为日志;

2)基础设施层:包括大数据处理的Spark、Hadoop以及用于实时计算的平台、工具。可以看出引入了很多开源组件,加入阿里后考虑引入公共基础设施,避免由于开源组件本身存在的问题困扰业务发展;

3)特征层:包括商户、用户、上下文、交叉组合等维度特征;

4)模型层:特征层的数据输入模型层后调用实时数据、用户画像等数据服务层;

5)数据服务层:包含实时数据服务、画像服务、特征服务等;

6)业务层:结合模型输出的结果用于在线业务投放等。

 

三、 在线学习实践

 

目前在线学习(Online Learing)这几年比较热门,利用一年左右的时间,从无到有搭建了在线学习。

 

3.1 在线学习的特点

为什么要做在线学习?很多时候我们会遇到类似问题:利用离线数据训练的模型效果很好,而在线效果却不理想。这就意味着离线评测与在线效果之间存在很大的gap。

饿了么推荐算法演进及在线学习实践

 

这是什么原因造成的呢?主要是由于数据分布数据时刻发生变化,特别是外卖业务,用户在不同的时间段会选择不同类型的外卖,而商户会随时上线各种营销活动,这就使得数据分布范围、分布趋势发生很大的变化。

而在线学习的优势就是利用实时收集的样本数据及用户反馈实时更新模型参数进行预估,最后进行最新的投放,进而实时反馈用户兴趣爱好等变化带来的影响。

在线学习与离线学习的一个重要区别是它可以简单地理解为数据集无限大,时间序列无限长。它不需要存储大量的样本数据,而是利用样本流数据逐条地更新模型,样本学习完成后丢弃。这就避免了离线模型随着数据量增大导致模型无法训练,即便采用分布式训练,训练速度也会变慢。

饿了么推荐算法演进及在线学习实践

 

最后,总结在线学习的特点:

饿了么推荐算法演进及在线学习实践

 

3.2理论基础

饿了么推荐算法演进及在线学习实践

 

FTRL模型是参照谷歌发表的论文实现的,模型参数、响应速度均可达到电商领域或推荐领域的生产要求。

 

3.3 在线学习技术栈

在线学习使用的技术栈包括以下几个方面,引入了很多的开源组件:

饿了么推荐算法演进及在线学习实践

 

3.4 在线学习流程图

现阶段在线学习流程图如下:

饿了么推荐算法演进及在线学习实践

 

最左侧是实时效果归属:基于在线排序引擎实时收集业务日志、用户行为日志,利用storm聚合生成一个实时样本流;然后进入在线模型训练实时消费样本流,利用FTRL模型实时更新参数,在不同时间将模型参数快照定时存入redis。说到快照的好处,它不仅支持模型增量学习,而且即使模型训练终止,也可以加载历史参数从某个节点重新进行模型训练。

在线预测:定时拉取redis中的模型参数提供线上预测服务。至于为什么采用定时更新参数,稍后给出答案。

上述三个模块最终能够形成一个闭环,关键在于将所有的数据源join起来。

饿了么推荐算法演进及在线学习实践

 

那么又是如何做到将所有的数据源join起来,在此特别介绍一下实时归属模块。将用户行为、服务端日志、订单日志等数据经过清洗、过滤等,在Storm中利用唯一id将整个业务join起来。在整个数据体系设计过程中给每一次排序打上唯一id,在整个的业务流程环节中标记此id。特别地,Storm对状态管理支持不是特别好,目前通过web存储的方式进行状态管理,防止任务挂了丢失状态信息。

通过Storm 聚合之后可以产出时间列、维度列、事实列三种基础效果数据,其中时间列包括数据产生的时间节点即时间戳等;维度列主要包含数据的入口、位置、业务场景、特征等信息;事实列包括信息是否曝光、用户是否点击、购买以及购买金额、商品信息等。

三种基础效果数据相当于样本特征及标签,可用于在线学习,对应的模型结构如下:

饿了么推荐算法演进及在线学习实践

 

从模型结构上来看,将GBDT与FTRL进行了融合:基于实时样本流,利用点击 GBDT模型、下单GBDT模型产出叶子节点进行编码,原始特征分桶或者离散后加入模型,利用FTRL更新模型参数存入redis实现在线排序。

目前模型结构相对来说简单,业务效果的提升主要体现在模型调参,在此简单地介绍几个小技巧:

饿了么推荐算法演进及在线学习实践

 

n 采样策略

1)位置截断:考虑到不可能利用所有的实时样本,因此会结合业务特点及数据特点进行位置截断:

如用户不小心刷到位置特别靠后的列表数据,这部分数据对于预测效果价值不大就会丢弃;

2)业务过滤:之所以存在业务过滤,是因为最后的投放不仅仅取决于算法结果,也取决于业务规则。如新店的加入或扶持特定的商家,需要将它的排序强行放在首位,这样带来订单量的提升就不是算法的功劳。

3)根据样本目标设置样本权重:根据不同阶段的目前进行样本权重的调整,比如现阶段的业务目标是优化GMV,将会调高GMV的样本权重。

n 参数更新

为什么采用定时更新参数的策略,而不是实时更新参数?主要是考虑到工程的难度,在线预测服务不可能实时获取参数,否则将影响在线服务性能。目前采用5分钟定时获取模型参数,保证模型抖动不会太剧烈。若由于样本延迟造成正负样本比例发生变化或者特殊情况导致参数发生波动,这样的更新策略就可保证模型的稳定性 。

n 样本不均衡

在外卖场景中,正样本特别宝贵。假如与跟正样本相关的订单数据流由于网络等原因造成延迟导致样本数据都是正样本或者负样本,倘若直接使用这类样本实时更新模型就会导致模型参数发生巨大的抖动。因此我们目前采取的方式是利用缓存存储这类样本,然后根据权重拆分样本,分时段与负样本进行混合使得样本的正负比大致稳定,进而解决样本不均衡的问题。

n 输入归一化

特别是线性模型一般推荐数据归一化,否则模型收敛速度特别慢。而在线学习模型,由于不是短时间输入大量样本,这就使得样本量相对较小、收敛速度较慢,归一化后可提升收敛速度。

与此同时采用归一化后的样本数据训练出的权重相对而言是可比较的,业务可解释性更强。

接下来介绍2个小特色:

n 可视化Debug

饿了么推荐算法演进及在线学习实践

 

模型上线后若想知道模型效果或者数据排序依据,就采用加入白名单的方式,将实时收集的排序数据通过页面的形式同步地将后端打分依据展示出来,包括排名依据、是否融入了业务规则、特征权重,这样便于排查特征缺失等问题。

App端收集的用户行为数据,如埋点信息、订单信息等,经过数据清洗、聚合后将前后端的数据通过页面形式呈现出来,这便于模型调试、线上问题排查。

实时效果对比

饿了么推荐算法演进及在线学习实践

 

结合storm产出的维度列信息,利用不同的维度进行数据聚合,实现实时效果对比:

1) 分算法版本实时效果:根据不同的算法版本统计点击率、金额等实现了实时A/B test。

2)分入口实时效果

3)分列表位置实时效果

4)实时特征监控。


作者:刘金,饿了么算法专家。12年毕业后加入阿里,主要从事淘系电商数据开发与挖掘,16年入职饿了么,加入搜索推荐算法组,从无到有开始搭建实时技术在推荐场景的应用,包括实时特征、实时监控及在线学习的落地。



Tags:推荐算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
导读:本文的主题为阿里飞猪推荐算法探索实践,首先会介绍电商背景下主流推荐技术的发展,例如基于全空间的CVR预估技术的发展历程等 ( ESMM / ESM^2 / HM^3 );接着会重点结合旅行...【详细内容】
2021-10-21  Tags: 推荐算法  点击:(56)  评论:(0)  加入收藏
商品详情页是手淘内流量最大的模块之一,它加载了数十亿级商品的详细信息,是用户整个决策过程必不可少的一环。这个区块不仅要承接用户对当前商品充分感知的诉求,同时也要能肩负起其他来源导流流量的留存,最终尽可能地激活...【详细内容】
2021-08-04  Tags: 推荐算法  点击:(89)  评论:(0)  加入收藏
架构头条 作者 | theinsaneapp.com译者 | 张健欣策划 | 万佳今天,我们会讨论一些不同的东西,例如 Spotify、YouTube、Signal Messenger、Amazon 等科技巨头的推荐算法,以及像 U...【详细内容】
2021-07-15  Tags: 推荐算法  点击:(121)  评论:(0)  加入收藏
导读:近年来,电商呈现内容化的趋势,以直播和短视频为首,内容化提升了用户体验,增加了平台收益。作为电商的重要流量入口,推荐算法除了应用于商品,现在也被应用于直播场景。我们将以阿里的B类电商网站1688为例,分享直播推荐相...【详细内容】
2021-04-21  Tags: 推荐算法  点击:(287)  评论:(0)  加入收藏
【写在前面】淘宝搜索引擎至今已经迭代了多轮,搜索排序也已经从最开始的统计模型升级到机器学习模型;2010年前是没有标签概念的就是基础标签这些都没有,随着算力的增强,2010年后...【详细内容】
2020-12-29  Tags: 推荐算法  点击:(220)  评论:(0)  加入收藏
指尖在抖音上划过,满屏幕的颜值少女,满屏幕的乡村野趣,满屏幕的都市传奇,满屏幕的生活乐趣。在碎片化的时间里,我们拿着手机,看着屏上的视频,充满了视觉的欢乐与笑语。手指迅速地划...【详细内容】
2020-09-28  Tags: 推荐算法  点击:(199)  评论:(0)  加入收藏
本次分享的主要内容包括以下三个方面:首先是介绍推荐业务背景,包括推荐产品形态及算法优化目标;然后是算法的演进路线;最后重点介绍在线学习是如何在饿了么推荐领域实践的。...【详细内容】
2020-09-21  Tags: 推荐算法  点击:(88)  评论:(0)  加入收藏
读者读完本文后,你会知道每类范式常用的算法有哪些、实现的思路是什么、以及常用的应用场景。本文也可以作为读者落地推荐算法到真实推荐场景的参考指南。一、推荐算法与产品...【详细内容】
2020-08-31  Tags: 推荐算法  点击:(146)  评论:(0)  加入收藏
近些年,随着深度学习理论,GPU 和 CPU 等计算机硬件,TensorFlow、Caffe、PyTorch 等算法平台的发展,深度学习算法在个性化推荐、计算机视觉、自然语言处理、语音识别等领域大放光...【详细内容】
2020-08-04  Tags: 推荐算法  点击:(52)  评论:(0)  加入收藏
今天,算法分发已经是信息平台、搜索引擎、浏览器、社交软件等几乎所有软件的标配,但同时,算法也开始面临质疑、挑战和误解。今日头条的推荐算法,从2012年9月第一版开发运行至今,...【详细内容】
2020-06-22  Tags: 推荐算法  点击:(65)  评论:(0)  加入收藏
▌简易百科推荐
前言Kafka 中有很多延时操作,比如对于耗时的网络请求(比如 Produce 是等待 ISR 副本复制成功)会被封装成 DelayOperation 进行延迟处理操作,防止阻塞 Kafka请求处理线程。Kafka...【详细内容】
2021-12-27  Java技术那些事    Tags:时间轮   点击:(1)  评论:(0)  加入收藏
博雯 发自 凹非寺量子位 报道 | 公众号 QbitAI在炼丹过程中,为了减少训练所需资源,MLer有时会将大型复杂的大模型“蒸馏”为较小的模型,同时还要保证与压缩前相当的结果。这就...【详细内容】
2021-12-24  量子位    Tags:蒸馏法   点击:(9)  评论:(0)  加入收藏
分稀疏重建和稠密重建两类:稀疏重建:使用RGB相机SLAMOrb-slam,Orb-slam2,orb-slam3:工程地址在: http://webdiis.unizar.es/~raulmur/orbslam/ DSO(Direct Sparse Odometry)因为...【详细内容】
2021-12-23  老师明明可以靠颜值    Tags:算法   点击:(7)  评论:(0)  加入收藏
1. 基本概念希尔排序又叫递减增量排序算法,它是在直接插入排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接插入排序算法的;希尔排序是一种不稳定的排序算法...【详细内容】
2021-12-22  青石野草    Tags:希尔排序   点击:(6)  评论:(0)  加入收藏
ROP是一种技巧,我们对execve函数进行拼凑来进行system /bin/sh。栈迁移的特征是溢出0x10个字符,在本次getshell中,还碰到了如何利用printf函数来进行canary的泄露。ROP+栈迁移...【详细内容】
2021-12-15  星云博创    Tags:栈迁移   点击:(19)  评论:(0)  加入收藏
一、什么是冒泡排序1.1、文字描述冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地...【详细内容】
2021-12-15    晓掌柜丶韶华  Tags:排序算法   点击:(16)  评论:(0)  加入收藏
在了解golang的map之前,我们需要了解哈希这个概念。哈希表,又称散列表(Hash table),是根据键(key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算出一个键值的函数,将...【详细内容】
2021-12-07  一棵梧桐木    Tags:哈希表   点击:(13)  评论:(0)  加入收藏
前面文章在谈论分布式唯一ID生成的时候,有提到雪花算法,这一次,我们详细点讲解,只讲它。SnowFlake算法据国家大气研究中心的查尔斯·奈特称,一般的雪花大约由10^19个水分子...【详细内容】
2021-11-17  小心程序猿QAQ    Tags:雪花算法   点击:(24)  评论:(0)  加入收藏
导读:在大数据时代,对复杂数据结构中的各数据项进行有效的排序和查找的能力非常重要,因为很多现代算法都需要用到它。在为数据恰当选择排序和查找策略时,需要根据数据的规模和类型进行判断。尽管不同策略最终得到的结果完...【详细内容】
2021-11-04  华章科技    Tags:排序算法   点击:(37)  评论:(0)  加入收藏
这是我在网上找的资源的一个总结,会先给出一个我看了觉得还行的关于算法的讲解,再配上实现的代码: Original author: Bill_Hoo Original Address: http://blog.sina.com.cn/s/bl...【详细内容】
2021-11-04  有AI野心的电工和码农    Tags: KMP算法   点击:(36)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条