logo

美团搜索粗排优化的探索与实践

作者:demo2025.09.26 12:22浏览量:3

简介:本文深入探讨美团搜索粗排阶段的优化策略与实践经验,从模型优化、特征工程到工程架构,系统阐述如何提升粗排效率与准确性。

引言

在美团搜索场景中,用户请求量日均数亿次,如何在海量商品中快速筛选出与用户需求高度匹配的候选集,是粗排阶段的核心目标。粗排作为搜索链路的首个排序环节,直接影响后续精排的效率与最终结果质量。本文将结合美团搜索团队在粗排优化中的探索与实践,从模型优化、特征工程、工程架构三个维度展开论述,为行业提供可复用的优化思路。

一、粗排阶段的核心挑战与优化目标

1.1 粗排的定位与核心矛盾

粗排阶段位于搜索链路的最前端,需在毫秒级时间内从千万级商品库中筛选出千级候选集供精排使用。其核心矛盾在于:

  • 效率与效果的平衡:模型复杂度提升可提高排序准确性,但会增加计算延迟,影响用户体验。
  • 特征稀疏性问题:粗排阶段可用的用户行为数据、商品特征较精排更少,导致模型对长尾需求的覆盖能力不足。
  • 动态场景适配:美团搜索覆盖餐饮、酒店、旅游等多业务场景,不同场景下用户意图差异显著,需动态调整粗排策略。

1.2 优化目标量化

美团搜索团队将粗排优化目标拆解为三个维度:

  • 召回率(Recall):粗排返回的候选集覆盖精排阶段Top-K结果的占比,目标≥90%。
  • 计算效率(QPS):单节点每秒处理请求数,目标≥5000 QPS。
  • 特征覆盖率:粗排模型可用的特征数量,目标≥200维。

二、模型优化:从传统到深度学习的演进

2.1 传统模型的局限性

早期美团粗排采用逻辑回归(LR)模型,其优势在于计算效率高,但存在以下问题:

  • 特征交叉能力弱:无法自动学习高阶特征组合,对复杂用户意图的建模能力不足。
  • 冷启动问题:新商品或新用户因历史行为数据缺失,排序质量下降。

示例代码(LR模型特征处理)

  1. def lr_feature_processing(user_features, item_features):
  2. # 一阶特征拼接
  3. features = []
  4. features.extend(user_features['age'], user_features['gender'])
  5. features.extend(item_features['price'], item_features['category'])
  6. # 手动交叉特征(需预先定义)
  7. if user_features['gender'] == 'male' and item_features['category'] == 'electronics':
  8. features.append(1)
  9. else:
  10. features.append(0)
  11. return features

2.2 深度学习模型的引入

为解决上述问题,美团搜索团队逐步将粗排模型升级为深度学习架构,主要演进路径如下:

2.2.1 DNN双塔模型

  • 结构:用户特征与商品特征分别通过独立DNN网络编码,最后通过点积或余弦相似度计算匹配分数。
  • 优势:计算效率高,可通过预计算用户向量实现实时召回。
  • 优化点:引入用户历史行为序列的Attention机制,提升对动态意图的建模能力。

模型结构示例

  1. class DualTowerModel(tf.keras.Model):
  2. def __init__(self, user_dim, item_dim):
  3. super().__init__()
  4. self.user_tower = tf.keras.Sequential([
  5. tf.keras.layers.Dense(128, activation='relu'),
  6. tf.keras.layers.Dense(64, activation='relu')
  7. ])
  8. self.item_tower = tf.keras.Sequential([
  9. tf.keras.layers.Dense(128, activation='relu'),
  10. tf.keras.layers.Dense(64, activation='relu')
  11. ])
  12. def call(self, user_features, item_features):
  13. user_emb = self.user_tower(user_features)
  14. item_emb = self.item_tower(item_features)
  15. return tf.reduce_sum(user_emb * item_emb, axis=-1)

2.2.3 多目标学习框架

美团搜索场景需同时优化点击率(CTR)、转化率(CVR)、GMV等多目标,粗排阶段采用以下策略:

  • 共享底层表示:通过多任务学习(MTL)共享用户和商品的特征编码层,降低模型复杂度。
  • 动态权重调整:根据业务场景(如促销期侧重GMV,日常侧重CTR)动态调整各目标的损失权重。

损失函数设计

  1. def multi_task_loss(y_true_ctr, y_pred_ctr, y_true_cvr, y_pred_cvr, alpha=0.5):
  2. ctr_loss = tf.keras.losses.binary_crossentropy(y_true_ctr, y_pred_ctr)
  3. cvr_loss = tf.keras.losses.binary_crossentropy(y_true_cvr, y_pred_cvr)
  4. return alpha * ctr_loss + (1 - alpha) * cvr_loss

三、特征工程:从静态到动态的升级

3.1 静态特征优化

  • 离散化处理:对连续特征(如价格、距离)进行分桶,减少特征稀疏性。
  • 交叉特征构建:通过规则引擎生成组合特征(如“用户性别+商品类别”)。

3.2 动态特征引入

  • 实时行为序列:将用户最近10次点击的商品ID序列通过Transformer编码,捕捉短期兴趣。
  • 上下文特征:加入时间、位置、设备类型等上下文信息,提升场景适配能力。

实时特征处理流程

  1. 用户请求 提取实时行为ID 查询行为序列存储 Transformer编码 特征拼接

3.3 特征选择策略

  • 基于重要性的筛选:通过SHAP值或Permutation Importance评估特征贡献度,淘汰低效特征。
  • 在线A/B测试验证:对新特征进行灰度发布,监控召回率、QPS等核心指标。

四、工程架构:高性能与可扩展性设计

4.1 分布式计算优化

  • 模型服务化:将粗排模型部署为gRPC服务,通过负载均衡实现水平扩展。
  • 异步计算框架:对非实时依赖的特征(如用户画像)采用异步预计算,减少请求延迟。

4.2 缓存与预计算

  • 用户向量缓存:对高频访问用户,预计算并缓存其特征向量,减少实时计算量。
  • 商品索引分片:按商品类别或热度分片存储,提升查询效率。

4.3 监控与告警体系

  • 实时指标监控:通过Prometheus采集QPS、延迟、错误率等指标,设置阈值告警。
  • 离线分析平台:基于Spark构建特征质量分析平台,定期生成特征分布报告。

五、实践效果与未来方向

5.1 优化效果

  • 召回率提升:从85%提升至92%,精排阶段可用的候选集质量显著提高。
  • QPS提升:单节点QPS从3000提升至6500,支持业务快速增长。
  • 特征覆盖率:从150维扩展至280维,长尾需求覆盖能力增强。

5.2 未来方向

  • 强化学习应用:探索基于强化学习的动态粗排策略,适应实时业务变化。
  • 神经网络:利用商品-用户-场景的图结构,提升复杂关系建模能力。
  • 端到端优化:研究粗排与精排的联合训练框架,减少层级误差传递。

结语

美团搜索粗排优化是一个持续迭代的过程,需在效率、效果与工程复杂度之间找到平衡点。通过深度学习模型的引入、动态特征的构建以及工程架构的优化,美团搜索团队已构建起一套高可用、高性能的粗排系统。未来,随着业务场景的进一步复杂化,粗排阶段将承担更多“智能筛选”的职责,成为搜索链路的核心竞争力之一。

相关文章推荐

发表评论

活动