学习美团推荐系统质量模型建设

目录

一、背景引入

(一)基本背景说明

(二)从推荐系统“数据飞轮”看质量建设必要性

二、质量的定位和考量思考

(一)对推荐系统质量的思考迭代

(二)可用性计算的关注点

(三)从请求的角度度量质量

三、质量分计算与建设

(一)质量分计算方法

(二)业务层次的聚合分析

(三)质量指标体系建设

(四)推荐系统的数据血缘

四、质量运营建设

(一)质量分的系统实现

(二)告警跟进流程

五、推荐系统或检索系统质量稳定性建设的思考

参考文章链接或推荐阅读


一、背景引入

(一)基本背景说明

美团到店综合业务的推荐系统是其关键技术组件,旨在通过智能化方式高效匹配用户需求与多元化本地服务,能够涵盖到综业务中的各个行业,包括但不限于洗浴、KTV、美业、医美、亲子、结婚、运动健身、玩乐、教育培训、家居、宠物、酒吧、生活服务等。这要求推荐系统具有良好的扩展性和适应性,能够处理多样化的业务类型和用户需求。

在美团到店综合业务中,推荐系统扮演着关键的角色,是实现供给和需求高效匹配的重要环节。其作用类似于一座智能的桥梁,连接用户的需求与各类本地服务,确保用户能够迅速而准确地找到符合其期望的服务。

推荐系统不仅仅是数据处理的一环,更是传递数据价值的出口。通过分析用户的历史行为、偏好和实时需求,推荐系统能够从庞大的数据中提炼出有价值的信息,为用户提供个性化、精准的服务推荐,实现了数据的最大化利用。

然而,推荐系统的质量直接关系到匹配效果的折损程度。如果推荐系统质量低下,匹配的服务可能不准确,导致用户体验下降,甚至错失一些潜在的商机。因此,推荐系统的质量提升成为确保匹配效果高效的关键步骤。这可能包括采用先进的推荐算法、实时性的数据处理、有效的用户反馈机制等措施,以不断优化系统的性能。

现在我们就以其在质量方面的实践和研究作为基本学习点,进行展开学习一下,具体学习资料主要见:美团综合业务推荐系统的质量模型及实践 - 美团技术团队。

(二)从推荐系统“数据飞轮”看质量建设必要性

想一下,数据在美团到店综合业务中经历了一个闭环的处理过程

  1. 数据采集与数仓处理: 首先,原始数据从各个业务系统和渠道中被采集,并经过清洗、转化等处理流程后,被存储在数据仓库(数仓)中。这一步是确保数据质量和可用性的关键环节。

  2. 算法加工: 在数仓中的数据被用于训练和优化推荐算法。算法加工阶段包括对数据的分析、建模、训练推荐模型等步骤,以提高推荐系统的准确性和个性化水平。

  3. 数据服务到业务系统: 加工后的数据通过数据服务的方式被分发到各个具体的业务系统。这可能包括对用户进行个性化推荐、精准定位等服务,以满足用户的具体需求。

  4. 客户端埋点: 为了获取用户在客户端的实时行为数据,如点击、浏览、购买等,通过在客户端进行埋点操作,记录用户与业务系统的交互。这些埋点数据是获取用户反馈和行为的关键来源。

  5. 数据重新流转回数仓: 最后,客户端埋点收集到的实时数据重新流转回数仓。这样的闭环设计有助于不断更新推荐模型,优化算法,并更好地适应用户的变化和业务的发展。

数据处理链路形成的一种正向的、增强型的效应,类似于一个飞轮(flywheel)在不断累积能量。数据的处理和流转形成一个循环,有助于推动整个系统的运转。通过这一完整的数据处理闭环,形成了数据的“飞轮效应”。每一个阶段都为下一个阶段提供了关键的信息和反馈,实现了数据的循环迭代,有助于推动业务系统的不断优化和创新。这种设计有助于形成一个具有自我学习和不断提升能力的数据生态系统。

在整个链路中,质量是关键的因素。如果推荐系统的质量不高,即推荐效果不佳,将导致整个链路中的匹配效果减弱,从而降低了系统的效率和效果。所以考虑进行推荐系统的质量模型建设是完全必须且有价值的,需要学习其如何以可用性为基础,然后调整计算方式,进而指导精细化的质量运营。

二、质量的定位和考量思考

(一)对推荐系统质量的思考迭代

在推荐系统中,产品通过理解用户场景,提出产品需求,向推荐团队传递用户需求。这在外部体现为产品的迭代和更新。同时,在推荐系统团队内部,团队成员相互协作,学习最佳优化模型策略,这在内部体现为数据团队的算法迭代。

上图的可用性计算公式中强调了长时间的概念,而“需要”和“预期”主要体现在对外提供服务上。这是合理的,因为可用性是一个泛化的指标,定义上通常是对外提供服务的泛化表达。大多数后台系统的交付功能通常在“有”和“无”之间,因此对服务降级有一定的空间。

然而,对于以效果为核心目标的推荐系统,质量的思考逐渐演变为对外提供服务的“好”和“坏”。在推荐系统中,存在着更为广泛的效果光谱,而不仅仅是“有”和“无”。因此,对推荐系统质量的思考迭代,从“有”和“无”到“好”和“坏”,这也是改造可用性计算方式的出发点。这种改变强调了对用户体验和推荐效果的更精细的评估和优化。

(二)可用性计算的关注点

结合美团到综推荐系统的业务特色和高频质量问题,考虑如下图  所示的质量特征作为缺陷来源:

在对传统可用性度量的审视中,发现其主要集中在可靠性、功能完整性和正确性等方面,而对于推荐系统中关键的功能准确性、适当性以及安全性等方面缺乏充分的度量,这些方面与推荐质量和效果密切相关。具体来说,准确性和适当性对于推荐效果的直接影响较为直观,而其他方面的影响则较为间接。

以安全性为例,其中的爬虫访问问题是一个典型情况。爬虫的访问行为与真实人类的行为习惯不符,可能对核心指标如UVCTR(用户点击率)等产生负面影响,进而导致对效果的误判。同时,如果系统不能识别和清除爬虫数据,噪声将进一步影响模型训练的准确性。数据质量问题在数据“飞轮效应”中充当了一种“毒丸”,可能导致缺陷不断被正反馈放大。

这意味着将准确性、适当性、安全性等因素纳入度量体系,拓展可用性的外延,使度量更全面、细致,能够更准确地反映推荐系统在各个方面的性能和效果。这种拓展和量化的努力有助于全面理解推荐系统的质量,从而更好地优化系统,提高用户满意度。

(三)从请求的角度度量质量

在度量方式上,业界常用的质量度量方式如下图 4所示:

对于到综业务线众多的基本特点,以上评价体系并不直观,所以美团当前按以下从请求的角度度量质量。

三、质量分计算与建设

(一)质量分计算方法

在从成功请求占比的角度评估系统质量时,可以将缺陷划分为四个层面,以全面考量系统在不同方面的问题:

  1. 系统层面: 包括系统在请求过程中触发的异常,如召回超时、召回失败、召回空结果等。这一层面关注系统运行的稳定性和可靠性,确保请求的处理不受到系统级的问题影响。

  2. 数据层面: 涉及请求使用的数据出现异常,例如供给数量异常、标签分布异常等。在这一层面,关注数据的质量,确保数据的准确性和完整性,以及数据对用户请求的实际影响。

  3. 算法层面: 涉及在召回和排序过程中使用的特征、模型、策略的异常,比如模型更新延迟、特征缺失等。这一层面关注算法的准确性和实时性,以确保推荐的效果能够达到预期。

  4. 业务层面: 涉及请求触发了业务适当性或安全合规要求,包括运营反馈有供给质量、内容安全等严重的 Bad Case。在这一层面,关注业务的合规性和用户体验,确保推荐结果符合业务规定的标准。

对于一条请求,如果在生命周期的任意环节经历了上述任何层面的缺陷,那么就定义为缺陷响应。具体的缺陷环节可以通过详细的分析下钻来确定,这有助于深入理解问题根源并进行有针对性的改进。这种综合的缺陷分类方式有助于全面地评估系统质量,提高系统的整体性能和用户满意度。

(二)业务层次的聚合分析

到综推荐系统的业务特色是多业务线,行业差异大,推荐物料位置多,折射到质量度量上,需要各个层次的聚合分析,进而指导精细化的运营。

(三)质量指标体系建设

通过将推荐系统响应的一条请求视为一次产品交付行为,将无缺陷的请求比例作为顶层的质量输出指标。这一指标为质量分,是整个质量度量的顶层汇总。在这一体系中,可以建立一级输入指标,用于衡量核心流程的质量现状,例如召回缺陷率、排序缺陷率等。

进一步,可以对一级输入指标进行拆解,得到更为具体的二级输入指标。以召回缺陷率为例,可以衡量召回空值率、召回超时率等细分指标。这有助于深入挖掘系统性能和质量的方方面面,提供更详尽的信息。

另外,用户的请求可以根据业务进行垂直、横向、时间维度的聚合,得到具有业务属性的质量分。这样的质量分更加有针对性,更能聚焦于不同业务维度的性能差异。这种多维度的质量分体系可以更好地指导运营决策和系统优化。

通过这套改进后的质量分计算方式,以请求为基本单位,相较于最初的可用性计算方式,一定程度上解决了其对缺陷敏感的局限性。这种改进使得系统的质量度量更全面、灵活,并且方便进行多业务维度的聚合分析。

所以开始有些思考,推荐系统的质量建设需要基于整体的系统理念,通过细致的质量度量体系来全面评估系统性能。将每条请求视为产品交付行为,并以无缺陷的请求比例作为顶层的质量输出指标,是一种有效的方法。以下是一些建议和思考:

  1. 建立多层次的质量度量体系: 通过建立多层次的质量度量体系,从顶层的整体质量分到一级、二级输入指标,再到业务维度的聚合分,能够更全面、深入地了解系统在不同方面的表现。这有助于定位问题、制定针对性的优化策略。

  2. 细分关键质量指标: 在每个层次细分关键质量指标,例如召回缺陷率、排序缺陷率等,使得问题能够更具体地显现出来。细分指标的使用有助于深入挖掘系统性能的各个方面,从而更有针对性地进行优化。

  3. 多维度的业务聚合: 根据业务进行垂直、横向、时间维度的聚合,得到有业务属性的质量分。这使得质量度量更具有业务针对性,有助于关注不同业务维度下的性能差异,从而更好地指导运营决策和系统优化。

  4. 请求作为基本单位: 将每条请求作为基本单位进行质量度量,有助于细致地把握系统性能。这种方式相对于传统的可用性计算方式更为灵活,能够更好地适应推荐系统的复杂性和多样性。

  5. 解决缺陷敏感性问题: 改进的质量分计算方式在一定程度上解决了对缺陷敏感的问题,使得系统的质量度量更加稳健。通过全面考量缺陷对质量的影响,能够更准确地评估系统性能。

综合而言,建议推荐系统的质量建设要以用户请求为核心,通过多层次、多维度的质量度量体系,深入挖掘系统性能,提高系统的质量和用户满意度。实践建设中还需要在多打磨下!!!

(四)推荐系统的数据血缘

血缘拓展在推荐系统的业务语境下是质量分度量的重要补充,通过将请求的生命周期延展到数据全链路,借助数据的血缘关系构建全景的质量画像。

以下是对血缘拓展的一些思考:

  1. 数据血缘关系的概念: 数据的血缘关系类比于人际关系中的家族血缘,反映数据之间的融合、转换关系。血缘关系可以分为数据库、数据表、字段等不同级别,用于数据资产、数据开发、数据治理和数据安全等方面。

  2. 血缘关系的应用: 在推荐系统的质量分思路中,主要通过影响分析去拓展质量分。通过血缘关系,标记所有途径故障节点的请求,扣除相应的分数。这有助于更全面地评估系统中可能存在的问题,准确追踪和修复故障。

  3. 六种业务元数据: 在业务语义下,定义了六种业务元数据,包括快照、方案、组件、索引、模型、特征。基于这些元数据构建血缘,分为任务接入、血缘解析、数据导出三个步骤。这种方式更贴近推荐系统的业务场景,为质量分的拓展提供了有力支持。

  4. 异常检测和影响分析: 血缘关系的建立使得节点本身的异常能够得到系统发现和人工标记,通过自动化的影响分析,能够更快速地识别和定位问题。异常信息通过血缘传播,影响下游环节的质量分计算。

  5. 业务损失的计算: 当异常波及到用户端时,采用业务语言重新描述损失。根据到综收入模型,计算各个业务线每个意向 UV 的价值,并利用该流量位的周同比访问情况,自动推导业务损失。这有助于更直观地了解异常对业务带来的实际影响。

通过血缘拓展,推荐系统的质量分不仅仅局限于请求的粒度统计,还可以更全面地理解数据全链路的性能,从而提高系统的整体质量水平。

四、质量运营建设

(一)质量分的系统实现

系统实现方面,推荐系统质量分的建设依赖于埋点和诊断,包括以下主要步骤:

埋点数据收集: 通过Kafka异步收集埋点数据,覆盖全链路的多个环节,包括参数输入、召回前置处理、召回、召回后置处理、粗排、精排、重排等。这些埋点数据包含运行时异常、各环节的关键输入输出信息。

数据处理和存储:

  • 在生产环境下,使用近实时的Elasticsearch(ES)构建索引,提供近4天的快速查询服务。4天前的日志入Hive进行归档。
  • 通过Flink引擎解析埋点数据,进行必要的诊断,实时计算分数并推送告警信息。
  • 在测试环境下,将日志实时分拣至MySQL,方便测试排查。

质量分计算: 结构化展示推荐不同阶段的质量情况,提高结果的可读性。初始阶段主要关注推荐空结果,以避免最严重的质量问题。

空结果的诊断: 针对推荐空结果,通过参数诊断、数据诊断、链路诊断三个环节进行识别和处理。

  • 数据诊断:当线上筛选条件出现空结果时,回源二次校验底层数据,查询底表数据是否为空。根据结果,沉淀免告警规则,设置免告警有效期。
  • 链路诊断:确定出错环节,将问题纳入相应的质量分计算。

规则引擎的选择: 选择适当的规则引擎,例如EasyRule、Drools、Zools、Aviator等。规则引擎需要能够对请求参数、推荐链路以及底层数据进行规则诊断。在这方面,Aviator表达式引擎较为合适,考虑到使用成熟度和便利性。

通过埋点和诊断的系统实现,推荐系统能够全面地收集、处理、诊断各个环节的数据,实现质量分的计算和监控,从而及时发现并解决系统中可能存在的问题,提高整体的质量水平。

(二)告警跟进流程

在推荐系统中,质量分不仅可以用于实时监控,还可以用于运营复盘,需要团队成员及时跟进异常情况。然而,由于推荐系统是一个平台型服务,模型策略由不同的团队成员维护,存在业务间的行业知识和理解门槛。通常,通用的告警系统基于服务名称粒度配置告警接收人,但这种广播式的告警方式容易引起告警风暴,使每个人难以专注于自己模块的问题,同时也可能导致告警遗漏的问题。

为了解决这一问题,基于现有告警系统进行二次开发,引入了跟进功能。具体来说,将特定流量位的告警通过专属负责人进行路由,并记录跟进状态流转。这种方式有助于及时通知相关人员,同时方便事后复盘。通过这样的跟进机制,团队能够更精准地分配问题,并提高团队对异常的跟进效率。

在运营方面,通过数据报表搭建了质量分看板,定期回顾不同业务的质量波动情况。这样的操作有助于全面了解不同业务线的质量状况,及时发现潜在问题,并采取相应的优化策略。通过跟进功能和质量分看板的建设,推荐系统团队能够更加高效地进行异常处理和质量管理,提升整体服务水平。

五、推荐系统或检索系统质量稳定性建设的思考

基于前述内容,推荐系统或检索系统的质量稳定性建设进行一些思考。

多维度的质量度量

了解和度量系统质量的关键是采用多维度的指标。传统的可用性、稳定性等指标仍然重要,但在推荐系统中,更需要关注准确性、适当性等与推荐效果相关的指标。建立一个全面的质量分体系,包括系统层面、数据层面、算法层面和业务层面,有助于更全面地评估系统质量。

实时性和故障处理

推荐系统在本地服务场景中对实时性有较高要求,因此需要建立实时监控和反馈机制。及时发现系统异常,进行快速的故障处理是确保系统稳定性的关键。在推荐系统中,尤其需要关注召回、排序、推荐效果等关键步骤的实时性和准确性。

业务场景特征

推荐系统往往涉及多个业务线,每个业务线可能有自己的特点和需求。因此,在质量稳定性建设中,需要考虑不同业务场景的差异性。对于多业务线的平台型产品,建立适应不同业务场景的质量度量和监控机制是至关重要的。

血缘关系和链路追踪

建立数据的血缘关系,实现全链路的质量监控。这包括从数据源到最终推荐结果的整个流程,通过链路追踪技术,可以及时发现并定位问题,从而提高系统的整体稳定性。

异常诊断和自动化

引入异常诊断引擎,通过规则匹配机制自动识别异常,减少人工介入。通过自动化的异常诊断,可以更迅速地响应问题,并及时采取措施,提高系统的质量和稳定性。

团队协作与业务理解

推荐系统的质量稳定性建设涉及多个团队成员,而这些成员可能来自不同的领域,拥有不同的业务理解和技术背景。因此,建设一个有效的团队协作机制,促进不同团队成员之间的信息共享和合作,对于推动质量稳定性的提升至关重要。

参考文章链接或推荐阅读

美团综合业务推荐系统的质量模型及实践 - 美团技术团队  --- 主要学习来源

推荐系统:作者: 周志华《推荐系统实践》推荐系统实践 (豆瓣)

《Site Reliability Engineering: How Google Runs Production Systems》:https://sre.google/sre-book/table-of-contents/

《Effective Monitoring and Alerting》:https://www.oreilly.com/library/view/effective-monitoring-and/9781491953712/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/133830.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS源码阅读笔记3--queue.c

消息队列可以应用于发送不定长消息的场合,包括任务与任务间的消息交换,队列是 FreeRTOS 主要的任务间通讯方式,可以在任务与任务间、中断和任务间传送信息,发送到 队列的消息是通过拷贝方式实现的,这意味着队列存储…

【原创】java+swing+mysql爱心捐赠管理系统设计与实现

摘要: 爱心捐赠管理系统旨在管理和优化捐赠过程,提高效率,增强透明度,并鼓励更多的个人和企业参与公益捐赠,用户可以捐款或者捐物。本系统采用javaswing界面可视化技术,数据库使用mysql。 功能分析&#…

Python高级语法----深入理解Python迭代器与生成器

文章目录 1. 迭代器协议代码示例:2. 生成器基础代码示例:3. 使用yield的高级技巧代码示例:4. 生成器表达式代码示例:迭代器和生成器是Python中实现迭代的两种主要方式,它们都允许用户创建可以遍历数据集的对象。在Python中,迭代器协议是指对象需要遵守__iter__()和__next…

【大数据】NiFi 中的处理器(一):GenerateTableFetch

NiFi 中的处理器(一):GenerateTableFetch 1.简介2.应用场景3.示例3.1 案例一:无输入流文件,来源表含增量字段3.2 案例二:无输入流文件,不含增量字段3.3 案例三:无输入流文件&#xf…

通用文件在线预览软件kkFileView

什么是 kkFileView ? kkFileView 为文件文档在线预览解决方案,基本支持主流办公文档的在线预览,如 doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip&…

如何配置《动手学强化学习》的环境

如何配置《动手学强化学习》的环境 网站:https://hrl.boyuai.com/chapter/intro github仓库:https://github.com/boyu-ai/Hands-on-RL/tree/main 可以看到该教程要求使用gym0.18.3版本的gym库,本教程可以用于解决绝大多数需要使用Pendulum-…

科力雷达Lidar使用指南

科力2D Lidar使用指南 作者: Herman Ye Galbot Auromix 版本: V1.0 测试环境: Ubuntu20.04(x86) PC 以及 Ubuntu20.04(Arm) Nvidia Orin 更新日期: 2023/11/11 注1: 本文内容中的硬件由 Galbot 提供支持。 注2&#x…

力扣100题——子串

560.和为k的子数组 这道题目不是滑动窗口的类型,因为长度并不是固定的。(好的,我在说废话) 注意题目要求是子数组,且是连贯的。那这里的话,解法有很多,最简单的就是暴力解法,但在这…

无缝集成GORM与Go Web框架

探索GORM与流行的Go Web框架之间的和谐集成,以实现高效的数据管理 高效的数据管理是每个成功的Web应用程序的基础。GORM,多才多艺的Go对象关系映射库,与流行的Go Web框架非常搭配,提供了无缝集成,简化了数据交互。本指…

Git可视化界面的操作,SSH协议的以及IDEA集成Git

目录 一. Git可视化界面的操作 二. gitee的ssh key 2.1 SSH协议 2.2 ssh key 三. IDEA集成Git 3.1 分享项目 3.2 下载项目 一. Git可视化界面的操作 上一篇博客只用到了git的命令窗口,现在就来看看可视化窗口要怎么操作。 点击Git GUI Here GUI界面 在g…

【Git】git常用命令大全

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Git》。🎯🎯 &#x1f449…

afsim 下载链接

afsim是一个通用的建模框架,能够构建典型的虚拟威胁环境和相关模型。能够以可视化形式分析软件仿真结果,显示平台、路由、传感器区域等内容,能够基于事件生成图表,进行结果统计,能够按类型进行统计分析。 苦于网上没有…

【Git】Git分支与应用分支

一,Git分支 1.1 理解Git分支 在 Git 中,分支是指一个独立的代码线,并且可以在这个分支上添加、修改和删除文件,同时作为另一个独立的代码线存在。一个仓库可以有多个分支,不同的分支可以独立开发不同的功能&#xff0…

maven教程

1. Maven概述 1.1 Maven的功能 1、Maven 作为依赖管理工具 随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多。项目中,一个模块里面用到上百个jar包是非常正常的。jar包所属技术的官网通常是英文界面&am…

极智芯 | 存算一体 弯道超车的希望

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 存算一体 弯道超车的希望。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:…

【C++笔记】优先级队列priority_queue的模拟实现

【C笔记】优先级队列priority_queue的模拟实现 一、优先级队列的介绍与使用方式1.1、优先级队列介绍1.2、优先级队列的常见使用 二、优先级队列的模拟实现1.0、仿函数的介绍1.1、构造函数1.2、优先级队列的插入push1.3、优先级队列的删除(删除堆顶元素)1.4、获取堆顶元素1.5、判…

MATLAB仿真通信系统的眼图

eyediagram eyediagram(complex(used_i,used_q),1100)

【Java 进阶篇】Java 中 JQuery 对象和 JS 对象:区别与转换

在前端开发中,经常会涉及到 JavaScript(JS)和 jQuery 的使用。这两者都是前端开发中非常重要的工具,但它们之间存在一些区别。本文将详细介绍 Java 中的 JQuery 对象和 JS 对象的区别,并讨论它们之间的转换方法。 1. …

Amazon Aurora MySQL 与 Amazon Redshift 的 Zero ETL 集成已全面可用,一起轻松上手!

“数据是应用、流程和商业决策的核心。” 亚马逊云科技数据库、 数据分析和机器学习全球副总裁 Swami Sivasubramanian 如今,客户常用的数据传输模式是建立从 Amazon Aurora 到 Amazon Redshift 的数据管道。这些解决方案能够帮助客户获得新的见解,进而…

【C/C++笔试练习】内联函数、函数重载、调用构造函数的次数、赋值运算符重载、静态成员函数、析构函数、模板定义、最近公共祖先、求最大连续bit数

文章目录 C/C笔试练习选择部分(1)内联函数(2)函数重载(3)调用构造函数的次数(4)赋值运算符重载(5)静态成员函数(6)调用构造函数的次数…