解决方案:饿了么推荐算法演进及在线学习实践
优采云 发布时间: 2022-12-06 07:51解决方案:饿了么推荐算法演进及在线学习实践
01
推荐业务背景
一、推荐产品形态
大多数人都熟悉饿了么应用程序,甚至通过饿了么应用程序订购了外卖。上图突出显示的内容涉及推荐排序,其中首页推荐、分类、搜索构成了整个饿了么流量的入口,这些入口覆盖了全网90%以上的订单。
目前饿了么的日订单量达到千万级,属于国内Top水平,这意味着流量分发的效率尤为关键,因为这涉及用户体验、商家利益、平台价值,算法发挥在该领域发挥着重要作用。的价值。
2. 算法优化目标
外卖领域有四个重要环节:流量、供应、转化和履约,其中算法在履约环节发挥着关键作用。
在不同的业务阶段,你想要达到的目标也是不同的。在业务增长初期,优化APP的点击率和转化率。当用户点击时,他们想促进交易;然后考虑平台收入,关注客单价、订单均价等;以及后期的满意度等抽象指标,需要将这些大目标拆解成小目标,建立不同的算法子模型进行优化。
--
02
算法演进路线
2016年至今,饿了么主要经历了四个方面的升级:数据、特性、模型、业务理解。
1. 数据&功能升级
数据和特性在4个方面进行了升级:
1)生产:将离线数据升级为实时数据;
引入Flume、Kafka等实时系统,将业务端产生的业务日志通过模型打分实时输出到日志服务器。构建样本时,无需离线拼接样本特征和标签,而是在线生成特征,从而保证了特征质量,避免了特征遍历、特征不准确等问题。
2)时效性方面:数据采集由天级升级为实时,增加了多维度的实时性特征;
3)在规模上:不仅引入了*敏*感*词*的稀疏特征,还将item、user、query等业务流程中涉及的环节通过Word2Vector用向量表示。
4)监控:在特征覆盖和波动、离群点检测、埋点问题等方面进行了实时监控。
2.模型升级
最初通过人工规则提取特征,根据人工经验最终确定所使用的因子和权重,在线进行A/B Test实验。当线上效果不理想时,再修改因子或权重,不仅浪费时间,还浪费大量流量。
2016年推出简单的LR线性模型,通过机器学习得到各个因素的权重。同时引入了用户维度信息。这个阶段形成了个性化推荐的雏形。与人工规则相比,点击率和转化率提升了10%。
2016年底采用非线性模型,包括GBDT树模型、FM等,与线性模型相比,特征交叉表达的效果有明显提升。2016年底,我们推出了第一版XGBoost点击率预估,之后根据业务理解拆分成两个子模型,点击率和转化率,引入了用户实时反馈的特性而商家,比如用户点击餐厅,在餐厅停留近一个小时或一天,效果提升7%-8%。可以看出,用户维度信息增加,特征维度丰富,模型结构更加复杂,真正实现了千人千面的个性化推荐。
从2017年开始,饿了么开始尝试在推荐领域使用深度学习和在线学习。目前,在线学习已经应用于饿了么的多个业务场景。
下面简单介绍Wide&Deep和DeepFM这两种深度学习模型在饿了么推荐排名领域的应用。
(1) 广与深
初期参考谷歌发表的论文,复用了GBDT模型中使用的特征,将用户和商户的稀疏特征输入线性部分。在没有引入更*敏*感*词*的情况下,效果上相比基础版并没有太大的突破。
然后在Deep部分加入user dense特征,通过One-Hot或者re-encoding的方式在Wide部分加入GBDT的叶子节点,效果有了很大的提升。
但模型结构复杂度的增加使得在线预测不能满足工程响应时间的要求。现阶段对模型进行了优化,业务低峰期仍采用该模型,业务高峰期采用降级方式。
(2) 深度调频
然后尝试了DeepFM,整体结构和论文一致。充分利用了DNN提取高阶特征组合和FM提取二阶特征的能力,实现了自动特征提取。它是一个端到端的模型。该模型长期用于首页推荐,实验结果比较理想。
模型一直在不断演进,现阶段外卖推荐系统的架构与大部分推荐系统的架构相似:
1)数据来源:包括业务日志、服务器日志、用户行为日志;
2)基础设施层:包括大数据处理的Spark和Hadoop,以及实时计算的平台和工具。可以看到引入了很多开源组件。加入阿里后,考虑引入公共基础设施,避免因开源组件本身的问题导致业务发展;
3)特征层:包括商户、用户、上下文、交叉组合等维度特征;
4)模型层:特征层的数据输入模型层后,调用实时数据、用户画像等数据服务层;
5)数据服务层:包括实时数据服务、画像服务、要素服务等;
6) 业务层:结合模型输出的结果进行线上业务交付等。
--
03
在线学习实践
目前,在线学习(Online Learning)在近几年比较流行。从头开始构建在线学习大约花了一年时间。
一、在线学习的特点
为什么要在线学习?很多时候我们会遇到类似的问题:用离线数据训练的模型效果很好,但是在线效果却不理想。这意味着线下评价与线上效果存在较大差距。
这是什么原因?主要原因是数据分发数据时常变化,尤其是*敏*感*词*和分布趋势很大。改变。
在线学习的优势是利用实时采集的样本数据和用户反馈,实时更新模型参数进行预估,最终进行最新上线,然后实时反馈变化带来的影响用户的兴趣和爱好。
在线学习和离线学习的一个重要区别在于,可以简单理解为无限数据集和无限时间序列。它不需要存储大量的样本数据,而是使用样本流数据逐个更新模型,学习后丢弃样本。这样可以避免随着数据量的增加,离线模型无法训练,即使采用分布式训练,训练速度也会变慢。
最后总结一下在线学习的特点:
二、理论基础
FTRL模型是参考Google发表的论文实现的。模型参数和响应速度可以满足电商领域或推荐领域的生产需求。
3.在线学习技术栈
在线学习使用的技术栈包括以下几个方面,并引入了很多开源组件:
4.在线学习流程图
现阶段在线学习流程图如下:
最左边是实时效果归因:基于在线排序引擎实时采集业务日志和用户行为日志,使用storm聚合生成实时样本流;然后进入在线模型训练实时消费样本流,使用FTRL模型实时更新参数,在不同时间定时将模型参数快照保存到redis。说到快照的好处,它不仅支持模型增量学习,而且即使模型训练终止,也可以加载历史参数,从某个节点开始重新训练模型。
在线预测:定时从redis中拉取模型参数,提供在线预测服务。至于为什么要使用定时更新参数,后面会给出答案。
以上三个模块最终能形成一个闭环,关键是把所有的数据源都加入进来。
那么如何将所有数据源join在一起呢,这里专门介绍一下实时归因模块。在对用户行为、服务器日志、订单日志等数据进行清洗过滤后,整个业务在Storm中使用一个唯一的id进行join。在整个数据系统设计过程中,为每一个排序都标记了一个唯一的id,这个id在整个业务流程中都被标记。特别是,Storm 对状态管理的支持不是很好。目前都是通过web存储来进行状态管理,防止任务被挂起,丢失状态信息。
Storm聚合后可以产生三种基本效果数据:时间列、维度列、事实列。时间列包括数据产生的时间节点,即时间戳等;维度栏目主要包括数据录入、位置、业务场景、特征等信息;事实栏包括信息是否暴露、用户是否点击、购买及购买金额、商品信息等。
三种基本效果数据相当于样本特征和标签,可用于在线学习。对应的模型结构如下:
从模型结构上看,GBDT和FTRL是融合的:基于实时样本流,点击GBDT模型下单生成叶子节点进行编码,将原创特征分桶或离散化再添加到模型中,FTRL用于更新模型参数存储在redis中,用于在线排序。
目前的模型结构比较简单,业务效果的提升主要体现在模型调优上。这里有一些提示:
n 采样策略:
1)位置截断:考虑到不可能全部使用实时样本,会结合业务特点和数据特点进行位置截断:
如果用户不小心滑动到了特别低位置的列表数据,这部分数据如果对预测效果没有太大价值,就会被丢弃;
2)业务过滤:之所以有业务过滤,是因为最终的交付不仅取决于算法结果,还取决于业务规则。比如新增店铺或扶持特定商户时,需要强行将其排名放在首位,这样订单量的增长就不是算法的原因了。
3)根据样本目标设置样本权重:根据不同阶段的现状调整样本权重。比如这个阶段的业务目标是优化GMV,会增加GMV的样本权重。
n 参数更新
为什么采用定时更新参数而不是实时更新参数的策略呢?主要是考虑到项目的难度,在线预测服务不可能实时获取参数,否则会影响在线服务的性能。目前模型参数是每隔5分钟定时获取模型参数,保证模型抖动不会太厉害。如果由于样本延迟导致正负样本比例发生变化,或者由于特殊情况导致参数发生波动,这样的更新策略可以保证模型的稳定性。
n 样本不平衡
在外卖场景中,正样本特别有价值。如果正样本相关的订单数据流由于网络等原因延迟,且样本数据均为正样本或负样本,如果直接使用此类样本实时更新模型,会造成巨大的抖动模型参数。因此,我们目前的方法是使用缓存来存储此类样本,然后将样本按照权重进行拆分,在时间间隔内与负样本进行混合,使样本的正负比例大致稳定,从而解决样本不平衡问题。
n 输入归一化
特别是线性模型一般推荐数据归一化,否则模型收敛速度很慢。对于在线学习模型,由于短时间内没有输入大量样本,样本量相对较小,收敛速度较慢。归一化后,可以提高收敛速度。
同时使用归一化后的样本数据训练出来的权重比较具有可比性,业务可解释性更强。
这里有2个小功能:
n 可视化调试
模型上线后,如果想了解模型效果或者数据排序依据,可以使用添加白名单的方法,实时采集的排序数据会以后台的形式同步展示页面形式的评分依据,包括排名依据和是否融入业务规则。,特征权重,方便排查缺失特征等问题。
App端采集的用户行为数据,如埋点信息、订单信息等,经过数据清洗聚合后,前后端数据以页面形式呈现,方便模型调试和在线故障排除。
n 实时效果对比
结合storm产生的维度列信息,使用不同维度进行数据聚合,实现实时效果对比:
1)不同算法版本实时效果:根据不同算法版本统计点击率和点击量,实现实时A/B测试。
2)子条目实时效果
3) 子列表位置实时效果
4)实时特征监测。
解读:暴力破解!二维码采集器关联话题一一为您分析!
想要分解二维码采集器的网友,其实大家急于珍惜的就是上面提到的问题。不过,要写出一篇优化后可读性强的文章文章是很容易的,但是一篇文章文章能获得的流量实在是不值一提。想要通过内容积累达到引流的目的,最重要的一点就是Batch!假设1个文章可以获得1次阅读(每24小时),如果我们能产出10000篇文章,每天的阅读量可能会增加几万。但是说起来容易,但实际上,在写作的时候,一个人一天只能编辑40篇左右,很多人也只能编辑60篇左右。就算你用一些伪原创软件,也不过一百篇而已!看完这篇文章,大家先把二维码采集器的话题放到一边,研究一下如何实现批量编辑。!
什么是算法身份的自主创建?单词 原创 不一定等于段落 原创 写作!在每次搜索的算法字典中,原创不收录重复的段落。理论上,只要每个人的文字堆叠与其他网站内容不同,收录的概率可能会增加。1 优秀的内容,内容充满吸引力,保持不变的关键词,只要确定没有相同的大段,说明这个文章还是很有可能收录,甚至变成爆文。比如在说我的文章文章的时候,我们大概是通过搜狗搜索二维码采集器,最后浏览的。告诉你:下一篇文章
本系统的自动原创系统,正确来说应该叫原创文章工具,可以实现3小时内制作上千个靠谱的优化文案,你的页面权重是通常足够大,收录 率可高达 79% 或更高。具体的使用技巧,在个人中心放了视频展示和新手指南,大家可以第一时间使用哦!我很内疚,我不能告诉你二维码采集器的具体信息,可能让我们查了那么多废话。但是如果我们对这个产品感兴趣,我们可以进入菜单栏,这样大家的优化结果每天都能达到几千万的流量,是不是很牛逼?