深入浅出排序学习:写给程序员的算法系统开发实践

对于那些由系统开发工程师负责在线排序架构的团队来说,本文会采用通俗的例子和类比方式来阐述算法部分,希望能够帮助大家更好地理解和掌握排序学习的核心概念。如果是算法工程师团队的同学,可以忽略算法部分的内容。本文的架构部分阐述了美团点评到店餐饮业务线上运行的系统,可以作为在线排序系统架构设计的参考原型直接使用。该架构在服务治理、分层设计的理念,对于保障在线排序架构的高性能、高可用性、易维护性也具有一定的参考价值。包括很多具体环节的实施方案也可以直接进行借鉴,例如流量分桶、流量分级、特征模型、级联模型等等。

总之,让开发工程师能够理解排序学习算法方面的核心概念,并为在线架构实施提供细颗粒度的参考架构,是本文的重要目标。

机器学习涉及优化理论、统计学、数值计算等多个领域。这给那些希望学习机器学习核心概念的系统开发工程师带来了很大的障碍。不过,复杂的概念背后往往蕴藏着朴素的道理。本节将尝试采用通俗的例子和类比方式,来对机器学习和排序学习的一些核心概念进行揭秘。

典型的机器学习问题,如下图所示:

机器学习模型或算法(Model/Algorithm)会根据观察到的特征值(Feature)进行预测,给出预测结果或者目标(Prediction/Target)。这就像是一个函数计算过程,对于特定X值(Feature),算法模型就像是函数,最终的预测结果是Y值。不难理解,机器学习的核心问题就是如何得到预测函数。

Wikipedia的对机器学习定义如下:

“Machinelearningisasubsetofartificialintelligenceinthefieldofcomputersciencethatoftenusesstatisticaltechniquestogivecomputerstheabilitytolearnwithdata,withoutbeingexplicitlyprogrammed.”

机器学习的最重要本质是从数据中学习,得到预测函数。人类的思考过程以及判断能力本质上也是一种函数处理。从数据或者经验中学习,对于人类来说是一件再平常不过的事情了。例如人们通过观察太阳照射物体影子的长短而发明了日晷,从而具备了计时和制定节气的能力。古埃及人通过尼罗河水的涨落发明了古埃及历法。

又比如人们通过观察月亮形状的变化而发明了阴历。

如果机器能够像人一样具备从数据中学习的能力,从某种意义上讲,就具备了一定的“智能”。现在需要回答的两个问题就是:

在回答这个问题之前,我们先看看传统的编程模式为什么不能称之为“智能”。传统的编程模式如下图所示,它一般要经历如下几个阶段:

在这种编程模式下,如果一个问题被规则覆盖,那么计算机程序就能处理。对于规则不能覆盖的问题,只能由人类来重新思考,制定新规则来解决。所以在这里“智能”角色主要由人类来承担。人类负责解决新问题,所以传统的程序本身不能称之为“智能”。

所以,“智能”的一个核心要素就是“举一反三”。

在讨论这个问题之前,可以先回顾一下人类是怎么掌握“举一反三”的能力的?基本流程如下:

机器学习专家从人类的学习过程中获得灵感,通过三个阶段让机器具备“举一反三”的能力。这三个阶段是:训练阶段(Training)、测试阶段(Testing)、推导阶段(Inference)。下面逐一进行介绍。

训练阶段如下图所示:

测试阶段如下图所示:

推导阶段如下图所示:

Wikipedia的对排序学习的定义如下:

“Learningtorankistheapplicationofmachinelearning,typicallysupervised,semi-supervisedorreinforcementlearning,intheconstructionofrankingmodelsforinformationretrievalsystems.Trainingdataconsistsoflistsofitemswithsomepartialorderspecifiedbetweenitemsineachlist.Thisorderistypicallyinducedbygivinganumericalorordinalscoreorabinaryjudgment(e.g.“relevant”or“notrelevant”)foreachitem.Therankingmodel’spurposeistorank,i.e.produceapermutationofitemsinnew,unseenlistsinawaywhichis“similar”torankingsinthetrainingdatainsomesense.”

列表排序的目标是对多个条目进行排序,这就意味着它的目标值是有结构的。与单值回归和单值分类相比,结构化目标要求解决两个被广泛提起的概念:

列表排序的评价指标体系总来的来说经历了三个阶段,分别是PrecisionandRecall、DiscountedCumulativeGain(DCG)和ExpectedReciprocalRank(ERR)。我们逐一进行讲解。

Precision的定义如下:

Recall的定义如下:

P-R的有两个明显缺点:

对于排序引擎而言,不同请求的结果列表长度往往不相同。当比较不同排序引擎的综合排序性能时,不同长度请求之间的DCG指标的可比性不高。目前在工业界常用的是NormalizedDCG(nDCG),它假定能够获取到某个请求的前p个位置的完美排序列表,这个完美列表的分值称为IdealDCG(IDCG),nDCG等于DCG与IDCG比值。所以nDCG是一个在0到1之间的值。

nDCG的定义如下:

IDCG的定义如下:

ERR的定义如下:

做列表排序的工程师们经常听到诸如Pointwise、Pairwise和Listwise的概念。这些是什么东西呢,背后的原理又是什么呢?这里将逐一解密。

首先我们要告诉学者每个学生的各种属性,这就像我们要告诉排序算法文档特征。对于目标值,我们却有三种方式来告诉学者:

典型的信息检索包含两个阶段:索引阶段和查询阶段。这两个阶段的流程以及相互关系可以用下图来表示:

索引阶段的工作是由索引器(Indexer)读取文档(Documents)构建索引(Index)。

查询阶段读取索引做为召回,然后交给TopnRetriever进行粗排,在粗排后的结果里面将前n个文档传给Reranker进行精排。这样一个召回、粗排、精排的架构最初是由Google提出来的,也被称为“Two-PhaseScheme”。

索引部分属于离线阶段,这里重点讲述在线排序阶段,即查询阶段。

在线排序架构主要面临三方面的挑战:特征、模型和召回。

三大挑战内部包含了非常多更细粒度的挑战,孤立地解决每个挑战显然不是好思路。在线排序作为一个被广泛使用的架构值得采用领域模型进行统一解决。Domain-drivendesign(DDD)的三个原则分别是:领域聚焦、边界清晰、持续集成。

基于以上分析,我们构建了三个在线排序领域模型:召回治理、特征服务治理和在线排序分层模型。

经典的Two-PhaseScheme架构如下图所示,查询阶段应该包含:召回、粗排和精排。但从领域架构设计的角度来讲,粗排对于精排而言也是一种召回。和基于传统的文本搜索不同,美团点评这样的O2O公司需要考虑地理位置和距离等因素,所以基于LBS的召回也是一种召回。与搜索不同,推荐召回往往基于协同过滤来完成的,例如User-BasedCF和Item-BasedCF。

综上所述,召回总体而言分成四大类:

传统的视角认为特征服务应该分为用户特征(User)、查询特征(Query)和文档特征(Doc),如下图:

这是比较纯粹的业务视角,并不满足DDD的领域架构设计思路。由于特征数量巨大,我们没有办法为每个特征设计一套方案,但是我们可以把特征进行归类,为几类特征分别设计解决方案。每类技术方案需要统一考虑性能、可用性、存储等因素。从领域视角,特征服务包含四大类:

如下图所示,典型的排序流程包含六个步骤:场景分发(SceneDispatch)、流量分配(TrafficDistribution)、召回(Recall)、特征抽取(FeatureRetrieval)、预测(Prediction)、排序(Ranking)等等。

按照DDD的设计原则,我们设计了如下在线排序分层模型,包括:场景分发(SceneDispatch)、模型分发(ModelDistribution)、排序(Ranking)、特征管道(FeaturePipeline)、预测管道(PredictionPipeline)。我们将逐一进行介绍。

场景分发一般是指业务类型的分发。对于美团点评而言包括:分平台、分列表、分使用场景等。如下图所示:

模型分发的目标是把在线流量分配给不同的实验模型,具体而言要实现三个功能:

流量的定义是模型分发的一个基础问题。典型的流量包括:访问、用户和设备。

如何让一个流量稳定地映射到特定模型上面,流量之间是否有级别?这些是模型分发需要重点解决的问题。

采用如下步骤将流量分配到具体模型上面去:

举个例子来说,如上图所示,所有流量分为32个桶,A、B、C三个模型分别拥有37.5%、25%和37.5%的配额。对应的,A、B、C应该占据12、8和12个桶。

为了确保模型和流量的正交性,模型和流量的HashKey采用不同的前缀。

每个团队的模型分级策略并不相同,这里只给出一个建议模型流量分级:

做实验的过程中,需要避免新实验流量对老模型流量的冲击。流量群体对于新模型会有一定的适应期,而适应期相对于稳定期的效果一般会差一点。如果因为新实验的上线而导致整个流量群体的模型都更改了,从统计学的角度讲,模型之间的对比关系没有变化。但这可能会影响整个大盘的效果,成本很高。

为了解决这个问题,我们的流量分桶模型优先为模型列表前面的模型分配流量,实验模型尽量放在列表尾端。这样实验模型的频繁上下线不影响主力和潜力流量的用户群体。当然当发生模型流量升级的时候,很多流量用户的服务模型都会更改。这种情况并不是问题,因为一方面我们在尝试让更多用户使用更好的模型,另一方面固定让一部分用户长期使用实验流量也是不公平的事情。

排序模块是特征模块和预测模块的容器,它的主要职责如下:

特征管道包含特征模型(FeatureModel)、表达式(Expression)、原子特征(AtomicFeature)、特征服务代理(FeatureProxy)、特征服务(FeatureService)。如下图所示:

特征管道要解决两个核心问题:

完整的特征获取流程如下图所示,具体的流程如下:

//包含特征获取和特征算子计算所需的meta信息publicclassFeatureModel{//这是真正用在Prediction里面的特征名privateStringfeatureName;//通过表达式将多种原子特征组合成复合特征。privateIExpressionexpression;//这些特征名是真正交给特征服务代理(FeatureProxy)去从服务端获取特征值的特征名集合。privateSetoriginalFeatureNames;//用于指示特征是否需要被级联模型转换privatebooleanisTransformedFeature;//是否为one-hot特征privatebooleanisOneHotIdFeature;//不同one-hot特征之间往往共享相同的原始特征,这个变量>用于标识原始特征名。privateStringoneHotIdKey;//表明本特征是否需要归一化privatebooleanisNormalized;}表达式(Expression)表达式的目的是为了将多种原始特征转换成一个新特征,或者对单个原始特征进行运算符转换。我们采用前缀法表达式(PolishNotation)来表示特征算子运算。例如表达式(5-6)*7的前缀表达式为*-567。

复合特征需要指定如下分隔符:

例如:表达式v1+14.2+(2*(v2+v3))将被表示为$O+_O+_Vv1_C14.2_O*_C2_O+_Vv2_Vv3

原子特征(或者说原始特征)包含特征名和特征值两个部分。原子特征的读取需要由4种实体类共同完成:

一个典型的例子如下图所示:

复杂系统设计需要充分的利用语言特性和设计模式。建议的优化点有三个:

在特征读取里面,需求方是模型,模型仅仅提供一个特征名(FeatureName),不关心怎么读取对应的特征值。具体的ScoreEnum类是具体的提供方,具体的ScoreEnum从POJO里面读取特定的特征值,并转换成ScoringValue交给模型。

特征服务代理负责远程特征获取实施,具体的过程包括:

预测管道包含:预测(Prediction)、级联模型(CascadeModel)、表达式(Expression)、特征转换(Transform)、计分(Scoring)和原子模型(AtomicModel)。

预测本质上是对模型的封装。它负责将每个列表实体的特征转化成模型需要的输入格式,让模型进行预测。

我们构建级联模型主要是基于两方面的观察:

举例如下图所示,我们自上而下进行讲解:

在这里原子模型指的是一种原子计算拓扑结构,比如线性模型、树模型和网络模型。

常用的模型像LogisticRegression和LinearRegression都是线性模型。GBDT、RandomForest都是树模型。MLP、CNN、RNN都是网络模型。

这里定义的原子模型主要的目的是为了工程实施的便利。一个模型被认定为原子模型有如下两个原因:

根据我们所掌握的知识,特征治理和召回治理的思路是一种全新的视角,这对于架构排序系统设计有很大的帮助。这种思考方式同样也适用于其他领域模型的构建。与Google提供的经典Two-PhaseScheme架构相比,在线排序分层模型提供了更细颗粒度的抽象原型。该原型细致的阐述了包括分流、A/B测试、特征获取、特征算子、级联模型等一系列经典排序架构问题。同时该原型模型由于采用了分层和层内功能聚焦的思路,所以它比较完美地体现了DDD的三大设计原则,即领域聚焦、边界清晰、持续集成。

THE END
1.深入解析大模型:从基础理论到实际应用正则化技术:为了防止大模型过拟合,需要引入正则化技术,如L1/L2正则化、Dropout等。 优化算法:大模型的训练过程需要高效的优化算法,如随机梯度下降(SGD)、Adam等。 三、大模型在自然语言处理中的应用 大模型在自然语言处理(NLP)领域有着广泛的应用,如语言模型、机器翻译和文本生成等。下面我们以Java语言示例,展示如何https://www.ctyun.cn/zhishi/p-433372
2.aigc生成式人工智能- 深度学习与神经网络:生成对抗网络(GANs)、变分自动编码器(VAEs)、Transformer架构等是实现高质量内容生成的核心算法。这些模型能够从大量数据中学习复杂的模式,并根据给定的提示或输入生成新的、独特的输出。 - 自然语言处理(NLP):通过大规模预训练模型如BERT、GPT系列,机器可以理解和生成人类语言,用于撰写文章、对话https://fuxi.163.com/database/1344
3.AI大模型:从基础到进阶的概念解析1.什么是大模型? 大模型(Large Model)是指在人工智能领域,参数规模较大、模型结构复杂的神经网络模型。大模型具有强大的拟合能力,能够在语音识别、图像识别、自然语言处理等任务中取得优异的表现。 2.大模型的发展历程 (1)深度学习的兴起:2006年,深度学习理论逐渐成熟,神经网络模型在多个领域取得突破性进展。 https://www.bilibili.com/read/cv40092739
4.AI算法模型线上部署方法总结jpmmltensorrt一、机器学习算法线上部署方法 来自:机器学习算法线上部署方法 ? 我们经常会碰到一个问题:用了复杂的GBDT或者xgboost大大提升了模型效果,可是在上线的时候又犯难了,工程师说这个模型太复杂了,我没法上线,满足不了工程的要求,你帮我转换成LR吧,直接套用一个公式就好了,速度飞速,肯定满足工程要求。这个时候你又屁颠https://blog.csdn.net/SeafyLiang/article/details/121213681
5.强化学习离线模型离线模型和在线模型在推荐算法领域,时常会出现模型离线评测效果好,比如AUC、准召等指标大涨,但上线后业务指标效果不佳,甚至下降的情况,比如线上CTR或CVR下跌。 本文尝试列举一些常见的原因,为大家排查问题提供一点思路。 1. 离线、在线特征不一致 离线、在线特征不一致通常是模型线上效果不好的主要原因,然而,造成离在线特征不一致的原因https://blog.51cto.com/u_14499/11815202
6.亚马逊COSMOLM新算法将取代A9算法重塑亚马逊搜索规则?3. 多样化在线服务。COSMO系统为亚马逊提供了多样化的在线服务,包括搜索相关性、基于会话的推荐等。 4. 持续的技术创新。论文介绍的COSMO系统不断利用大型语言模型和人机协同注释等训练技术手段来提升知识图谱的质量和适用性。 COSMO-LM新算法会采用用户画像和大数据搜索成交习惯,智能推荐产品给潜在的买家。对于卖家而言,https://www.cifnews.com/article/156691
7.算法服务平台算法模型服务平台是一个面向企业用户的数字化服务平台,旨在为用户提供高效、先进的算法模型。它以数据为核心,利用机器学习、深度学习等前沿技术,为用户提供行业定制化的算法模型解决方案。 应用场景 用户情感分析 使用情感分析模型,对文本进行情感分析,用于市场调研,客户服务和社交媒体监测。 https://wakedata.com/wakeAI.html
8.2023年重大网络安全政策法规盘点11月29日,北京市科学技术委员会、中关村科技园区管理委员会在AICC 2023人工智能计算大会上发布了《北京市人工智能行业大模型创新应用白皮书(2023年)》。《白皮书》从大模型全球发展态势、国内外行业应用概述、北京应用情况和发展建议等方面进行了系统分析和阐述。 https://www.eet-china.com/mp/a273064.html
9.图解机器学习模型评估方法与准则腾讯云开发者社区1.模型评估的目标 模型评估的目标是选出泛化能力强的模型完成机器学习任务。实际的机器学习任务往往需要进行大量的实验,经过反复调参、使用多种模型算法(甚至多模型融合策略)来完成自己的机器学习问题,并观察哪种模型算法在什么样的参数下能够最好地完成任务。 https://cloud.tencent.com/developer/article/1953727
10.蚂蚁金服核心技术:百亿特征实时推荐算法揭秘阿里妹导读:本文来自蚂蚁金服人工智能部认知计算组的基础算法团队,文章提出一整套创新算法与架构,通过对TensorFlow底层的弹性改造,解决了在线学习的弹性特征伸缩和稳定性问题,并以GroupLasso和特征在线频次过滤等自研算法优化了模型稀疏性,在支付宝核心推荐业务获得了uvctr的显著提升,并较大地提升了链路效率。 https://maimai.cn/article/detail?fid=1010621115&efid=mIQCHnkj0zjxlpygUmo5mg
11.干货一文读懂工业大数据的算法与模型基本知识与应用细分算法常见的应用是客户细分,购物中心根据会员的消费金额、消费频次和最近一次消费时间将会员划分为不同价值的群体。在实施细分算法之前,我们并不知道这些会员可能被分为几类,每个类别是什么,只有建立细分模型之后,才能根据划分出类别在这三个方面表现出的特点归纳出每一类具体是什么。 https://www.evget.com/doclib/s/14/10645
12.深蓝汽车发布S7i和SL03i搭载智能操作系统和智驾辅助在环境感知方面,深蓝汽车利用AI视觉识别和多模型并行概率融合的感知识别技术,实现了快速、稳定和高效的感知能力,并提升了目标测距精度和场景泛化能力,从而增强了处理复杂场景的能力。 决策精准的算法模型 在行为决策方面,深蓝汽车研发了多目标交互预测决策模型和基于场景特征耦合风险评估的主动防御式类人决策算法,结合动态占https://www.pcauto.com.cn/hj/article/2278216.html
13.朱庆华宋珊珊风险视角下生成式人工智能的司法应用路径如简易版的模型治理对策流程:(1)数据采集——生成式人工智能司法需要准确的数据作为输入,因此在数据采集方面需建立严格的数据标准和评估机制,可通过采取错位学习、多元数据来源验证等方式,以确保数据的真实性和可靠性。(2)算法建模——在开发生成式人工智能司法算法模型时,应注重正义的重塑效应。如,避免算法偏见、公正https://www.jfdaily.com/sgh/detail?id=1247369
14.关于AIGC这些算法是以手工设计为基础的功能,并且是有限的,可以生成复杂多样的图像。2014年,生成对抗网络(Generative Adversarial Networks,简称GAN)首次被提出,这是该领域的一个重要里程碑,因为它在各种应用中取得了令人瞩目的成果。变分自编码器(VAE)和其他方法(如扩散生成模型)也被开发出来,用于对图像生成过程进行更精细的https://www.aigc.cn/about
15.软考高级——信息系统项目管理师(第4版)思维导图模板建模分析。提供大数据、人工智能分析的算法模型和物理、化学等各类仿真工具,结合数字孪生、 工业智能等技术,对海量数据挖掘分析, 实现数据驱动的科学决策和智能应用。 知识复用。将工业经验知识转化为平台上的模型库、 知识库,并通过工业微服务组件方式, 方便二次开发和重复调用,加速共性能力沉淀和普及。 https://www.processon.com/view/654c455f8f11b40fe56ece43
16.李丰对话连文昭:大模型的想象与泡沫,机器人的「不可能三角」与如果当下的技术进展提早实现,Google X和Vicarious会有什么不同? 李丰:回顾你在 Google X 做Make这部分的机器人,以及之前在 Vicarious想用机器人来证明上一轮的AGI,两者都面临着各自的挑战和目标。今天回过头来看,假如当前的大模型、Transformer 算法等软硬件技术在当时已经有了,Vicarious的机器人或 Google X 的 Intrihttps://36kr.com/p/2739773975865608
17.《深度学习:数学基础算法模型与实战》(于子叶)简介书评当当网图书频道在线销售正版《深度学习:数学基础、算法模型与实战》,作者:于子叶,出版社:机械工业出版社。最新《深度学习:数学基础、算法模型与实战》简介、书评、试读、价格、图片等相关信息,尽在DangDang.com,网购《深度学习:数学基础、算法模型与实战》,就上当http://product.dangdang.com/29559261.html
18.省大数据局关于印发贵州省数据要素登记服务管理办法(试行)的通知第二十三条 初始登记是指登记主体对通过投入劳动及其他要素,汇聚、整理、加工形成的数据资源、算法模型、算力资源以及综合形成的数据产品进行初始登记的行为。 登记主体办理初始登记前,应与其他利害关系人就登记内容达成一致。 通过初始登记,登记主体获得数据要素登记凭证和数据用益凭证。 https://dsj.guizhou.gov.cn/zwgk/xxgkml/zcwj/bmwj/202311/t20231115_83084263.html
19.轻松看懂机器学习十大常用算法西南石油大学通过本篇文章大家可以对ML的常用算法形成常识性的认识。没有代码,没有复杂的理论推导,仅是图解,介绍这些算法是什么以及如何应用(例子主要是分类问题)。以后有机会再对单个算法做深入地解析。 一、决策树 二、随机森林算法 三、逻辑回归 四、SVM 五、朴素贝叶斯 https://www.swpu.edu.cn/eelab/info/1090/2296.htm
20.基于阿里云PAI平台搭建知识库检索增强的大模型对话系统它提供的弹性扩缩容和蓝绿部署等功能,可以支撑您以较低的资源成本获取高并发且稳定的在线算法模型服务。此外,PAI-EAS还提供了资源组管理、版本控制以及资源监控等功能,方便您将模型服务应用于业务。PAI-EAS适用于实时推理、近实时异步推理等多种AI推理场景,并具备自动扩缩容和完整运维监控体系等能力。 在LLM检索增强https://developer.aliyun.com/article/1369412