资讯详情

资讯详情

建站行业动态 · 设计趋势 · 数字化升级干货

粗排与精排:揭秘大规模推荐系统的核心排序架构

粗排与精排:揭秘大规模推荐系统的核心排序架构 1. 项目概述从“海选”到“决赛”的流量筛选逻辑在广告、搜索、推荐这些我们每天都会接触的互联网产品背后藏着一套极其精密且高效的“流量分发”系统。它的核心任务是在毫秒级的时间内从上百万甚至上亿的候选内容商品、视频、广告、信息中为你选出最可能吸引你点击、观看或购买的那一小撮。如果把这个过程比作一场选秀那么“粗排”和“精排”就是其中最关键的两轮筛选。粗排像是“海选”负责从茫茫人海中快速挑出几百个有潜力的选手精排则是“决赛”对这几百个选手进行全方位的精细打分最终决定冠亚季军的归属。今天我就结合自己在这行摸爬滚打十多年的经验掰开揉碎了讲讲这两个核心模块的设计思路、技术实现和那些只有踩过坑才知道的细节。为什么需要这两层结构直接让最厉害的模型精排模型给所有候选打分不行吗理论上可以但成本和时间不允许。一个成熟的精排模型往往结构复杂、参数庞大进行一次推理计算开销很大。如果要对数亿候选逐一打分所需的计算资源和耗时将是天文数字用户根本无法忍受几秒钟甚至更长的等待。因此粗排的核心价值就是用相对较小的代价快速过滤掉绝大部分明显不相关的候选为精排提供一个高质量、可控数量的候选集通常在几百到几千的量级。这样既保证了最终效果的精准度又将整体响应时间控制在可接受的范围内通常要求百毫秒级别。这套“粗排精排”的协同流水线是平衡效果、性能和成本的艺术也是所有大规模信息分发系统的基石架构。2. 核心模块深度解析粗排与精排的定位与分工2.1 粗排效率优先的“快速过滤器”粗排顾名思义是粗糙的排序。它的目标不是追求极致的预测准确性而是在极短的时间内通常是几个毫秒内完成对海量候选十万、百万级的初步筛选和排序。你可以把它想象成一个高速运转的初筛流水线。2.1.1 粗排的核心设计原则粗排的设计必须紧紧围绕“快”和“省”。为了实现这一点业界通常采用以下几种技术路线模型轻量化这是最主流的方向。使用结构简单、参数少的模型例如双塔模型。在这种架构下用户特征用户ID、历史行为等和物品特征广告素材、商品属性等分别通过两个独立的“塔”即神经网络进行编码生成用户向量和物品向量。最终的排序分数简单地通过计算两个向量的内积或余弦相似度得到。它的最大优点是物品向量可以预先计算好并缓存起来。当用户请求到来时只需要实时计算一次用户向量然后与所有缓存的物品向量做快速的向量内积运算即可计算复杂度从O(N*M)降到了O(NM)速度极快。规则与策略过滤在模型之前或之后会加入大量硬性规则。例如过滤掉用户已经购买过的商品、屏蔽违规或低质内容、根据用户地理位置筛选本地广告等。这些规则虽然简单但能有效剔除大量无效候选减轻模型压力。召回结果融合在实际系统中粗排的输入往往来自多个不同的召回通道如协同过滤召回、热点召回、向量召回等。粗排需要承担起多路召回融合排序的职责用一个统一的、相对简单的打分标准来评判来自不同来源的候选保证送入精排的集合既多样又优质。注意粗排模型虽然“轻”但绝不能“弱”。它的效果直接决定了进入精排池子的天花板。如果粗排误杀太多优质候选精排再厉害也无力回天。因此粗排模型也需要持续优化只是优化的天平更倾向于推理效率。2.1.2 粗排的常见陷阱与调优心得在实际工作中粗排最容易出现的问题是“特征穿越”和“线上线下不一致”。特征穿越粗排模型为了追求效果可能会使用一些“未来信息”。例如使用了物品当天的实时点击率CTR作为特征。这会导致线上推理时模型看到了它本不该看到的信息造成线上效果虚高但线下评估却无法发现。我的经验是严格审查粗排特征的时间戳确保所有特征都是“历史”的可以借鉴精排特征工程的规范来约束粗排。线上线下不一致粗排为了速度常常采用向量内积等简化计算。但模型在训练时可能是用更复杂的交互方式如多层神经网络来拟合目标的。这就造成了训练和推理的不一致。解决方案之一是采用蒸馏技术让复杂的精排模型作为“老师”去教导结构简单的粗排“学生”模型让粗排模型在简化结构下尽量逼近精排模型的打分能力。2.2 精排效果至上的“终极裁判”精排是精细排序。它接收来自粗排的几百个优质候选拥有相对“奢侈”的计算资源几十到上百毫秒动用最复杂的模型、最全面的特征来预测每个候选相对于当前用户的最准确反馈概率如点击率CTR、转化率CVR、播放完成率等。精排的分数直接决定了最终的展示顺序。2.2.1 精排模型的技术演进与核心思想精排模型的发展是一部浓缩的深度学习应用史。wide Deep 时代Google提出的经典结构。Wide部分用线性模型记忆大量的稀疏特征组合如“用户国籍美国”且“商品类别电子产品”擅长记忆历史高频模式Deep部分用深度神经网络学习特征的深层交互和泛化。这个模型奠定了精排模型“记忆与泛化相结合”的基本思想。DeepFM / xDeepFM 时代这类模型重点解决了特征间“如何更有效地交互”的问题。传统的Deep部分隐式地进行特征交互而FM因子分解机或它的变种CIN压缩交互网络能显式地建模二阶甚至高阶特征交叉让模型能更好地理解像“年轻女性用户”与“口红颜色”之间的复杂关系。多任务学习MTL时代业务目标往往不止一个。广告系统既要关注点击CTR也要关注转化CVR和用户体验如停留时长。多任务学习模型如MMoE, PLE用一个共享的底层网络学习通用特征表示同时用多个独立的塔Tower去学习不同的任务。这样既能共享信息、减少数据稀疏又能让不同任务差异化学习最终通过任务权重融合得到综合打分。这是目前工业界的绝对主流。序列建模与Transformer时代用户的行为不是孤立的而是一个有时序的序列。通过GRU、LSTM或Transformer如BERT对用户历史点击、观看序列进行建模可以更精准地捕捉用户的即时兴趣和兴趣演化极大地提升了模型对用户意图的理解能力。2.2.2 精排的特征工程魔鬼在细节里如果说模型结构是骨架那么特征就是血肉。精排的特征工程是效果提升的关键也是最耗费数据科学家精力的地方。特征类型包括用户画像年龄、性别、城市、用户实时行为最近点击、搜索词、物品属性类别、价格、标签、上下文特征时间、地理位置、网络环境以及大量的交叉特征如用户性别x商品类别。实时特征这是精排效果的“胜负手”。例如“用户过去1分钟内对某类商品的点击次数”、“本次请求前最后一次搜索词与当前广告的匹配度”。这些特征通过Flink等流计算引擎实时生成接入模型让模型能感知到用户“此时此刻”的兴趣从而做出更精准的推荐。构建稳定、低延迟的实时特征管道是精排系统的一大挑战。特征重要性分析定期通过SHAP、Permutation Importance等工具分析特征贡献剔除无效或带来噪音的特征迭代优化特征集合。3. 系统协同与工程实现要点3.1 粗排与精排的级联与校准粗排和精排不是孤立运行的它们需要紧密协同。这里最大的挑战是分数校准。粗排和精排是两个不同的模型它们的分数分布和物理意义可能完全不同。直接拿精排分数覆盖粗排分数进行排序可能是不稳定的。常见的做法是分数归一化将粗排和精排的分数分别归一化到同一量纲如0-1之间但这种方法比较粗糙。校准分数训练一个轻量的校准模型以粗排分数和精排分数及其他上下文特征为输入学习一个最终的综合分数。这个校准模型的目标是优化全局目标如总点击率。精排重排序这是更常见的模式。粗排只管筛选不严格决定顺序。它将Top K的候选比如500个送给精排精排对这500个重新打分并严格排序决定最终展示的Top N比如10个。粗排的排序更多是为了保证召回多样性以及应对某些精排服务失败时的降级策略。3.2 线上服务架构与性能优化一个高可用的排序系统工程上的考量丝毫不亚于算法。服务化与异步化粗排和精排通常部署为独立的微服务。请求流程是召回服务并行获取多路候选 - 粗排服务快速筛选 - 精排服务精细打分。为了进一步降低延迟粗排和精排之间、精排与后续的过滤策略之间往往采用异步调用或并行处理。缓存策略模型缓存将训练好的模型参数文件加载到内存中。特征缓存尤其是物品侧的特征和向量可以提前计算并缓存。用户实时特征则需要低延迟的在线特征存储如Redis来支持。结果缓存对于完全相同的用户请求在短时间窗口内可以直接返回缓存的结果这对应对流量高峰非常有效。降级与兜底必须设计完善的降级方案。如果精排服务超时或失败系统可以降级为直接使用粗排结果甚至降级为基于规则的排序确保服务永远有结果返回保障用户体验的基本可用性。AB实验平台任何模型和策略的迭代都必须通过AB实验来验证。一个强大的AB实验平台能够对流量进行精准切分对比新老模型在核心指标如CTR、CVR、人均时长、收入等上的差异这是算法迭代的指南针。3.3 数据链路与样本处理“垃圾进垃圾出”模型的效果严重依赖于数据质量。实时样本拼接用户每一次曝光、点击、转化行为都需要被实时记录并与请求时的特征快照进行拼接形成一条完整的训练样本。这条链路要求高可靠、低延迟通常涉及Kafka、Flink和样本存储系统如HDFS或专用样本数据库。负样本采样曝光未点击的样本就是负样本但它们的数量往往远多于正样本点击样本。直接使用全部负样本训练会导致计算效率低下且模型容易被负样本主导。因此需要进行负样本采样常见的有随机采样、基于曝光的采样等。采样的策略会显著影响模型学习到的分布需要谨慎调整。延迟反馈处理在广告场景中转化如下单、付费行为可能发生在点击几天之后。如果只用短时间内有反馈的样本训练会忽略那些延迟转化的正样本导致模型低估。业界常用“延迟反馈建模”或“假负样本回填”等技术来解决这个问题。4. 效果评估与常见问题排查4.1 多维度评估指标体系不能只看一个CTR就判断模型好坏需要一套综合的评估体系线上AB实验指标这是黄金标准。包括但不限于CTR点击率、CVR转化率、人均曝光/点击次数、GMV成交总额、用户停留时长、翻页深度等。同时要关注统计显著性确保效果提升不是随机波动。线下评估指标在上线前需要在留出的测试集上评估。常用AUC衡量排序能力、LogLoss衡量预测概率的校准程度、GAUC按用户分组计算的AUC更能反映个性化效果。业务健康度指标覆盖率有多少物品被推荐出来、基尼系数衡量流量分布的集中程度避免马太效应、新颖性、多样性等。一个好的系统要在效果和生态健康之间取得平衡。4.2 典型问题与排查思路在实际运维中你会经常遇到以下问题以下是我的排查清单问题现象可能原因排查思路线上CTR突然下跌1. 模型特征数据异常如某个重要特征缺失或全为默认值2. 实时特征管道延迟或中断3. 样本数据污染如埋点上报错误4. 上游召回策略变更1. 检查模型服务日志查看特征获取成功率与值分布。2. 监控实时特征延迟监控大盘。3. 抽样查看原始曝光点击日志验证数据一致性。4. 与召回团队沟通近期变更。精排服务P99延迟飙升1. 依赖的特征存储如Redis响应变慢。2. 模型计算图中有耗时的操作被意外触发。3. 服务器负载过高CPU/内存。4. 网络波动。1. 检查特征服务监控排查慢查询。2. 代码Review近期模型改动用Profiling工具定位耗时算子。3. 查看服务器基础监控。4. 联系运维排查网络状况。新模型离线AUC提升但线上AB实验无效果甚至负向1.特征穿越最常见。2. 线上线下特征处理逻辑不一致。3. 样本分布与线上真实分布存在偏差。4. 模型过拟合了离线数据集。1. 严格审计新特征确保线上推理时无法获取未来信息。2. 抽取线上推理请求的特征与离线训练特征进行逐字段比对。3. 检查样本采样策略尝试使用更接近线上分布的样本训练。4. 增加正则化或使用更多数据训练。流量过于集中在头部少数物品1. 模型马太效应过强过度迎合用户历史兴趣。2. 探索机制如ε-greedy, Thompson Sampling未生效或参数设置不当。3. 热门物品特征权重过高。1. 在损失函数中引入多样性正则项。2. 检查探索策略的服务和配置确保其正常工作。3. 对热门物品的特征进行降权或平滑处理。4.3 我的几点实操心得粗排的“准”比“快”更重要早期容易陷入过度追求粗排速度的误区使用过于简单的模型。后来发现适当给粗排增加一点计算复杂度比如用更深的塔或引入简单的注意力换来候选集质量的显著提升对整体效果的收益远大于那一点点延迟的增加。粗排的天花板决定了精排的天花板。精排模型不是越复杂越好Transformer、大规模多任务网络很酷但部署成本、推理延迟和线上稳定性都是挑战。在业务早期或资源有限时一个精心调优的DeepFM或DIN可能比一个没调好的复杂模型更靠谱。模型复杂度要与业务阶段、数据规模、工程能力相匹配。重视“数据闭环”模型上线不是终点而是起点。必须紧密监控线上表现分析bad case将发现的问题反馈到特征工程和样本处理中形成“数据-模型-线上-分析-数据”的闭环。这个迭代速度决定了算法团队的竞争力。精排阶段的重打散精排输出的是一个严格的分数排序列表直接展示可能会单调。通常会在精排之后加入一个重打散层根据多样性、新鲜度、商业规则等对Top结果进行微调让最终的推荐列表既相关又丰富。这步操作虽然简单但对用户体验的提升非常直接。这套“粗排精排”的体系本质上是在无限的用户需求和有限的计算资源之间寻找最优解。它没有一成不变的银弹只有结合具体业务场景、数据特点和资源约束的持续迭代和权衡。理解其中每一环的设计哲学和工程细节才能更好地驾驭它让算法真正为业务创造价值。

相关资讯