logo

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

作者:KAKAKA2025.09.26 12:22浏览量:2

简介:本文深入探讨美团搜索粗排阶段的优化策略,从特征工程、模型架构、工程实践及效果评估等维度展开,分析挑战并提出创新解决方案,为搜索系统优化提供参考。

一、背景与挑战

美团作为本地生活服务平台,搜索场景具有高实时性、强地域性、多业务类型交织的特点。用户输入的查询词往往简短模糊(如”火锅”),而候选结果池包含数十万商户,涉及餐饮、酒店、休闲娱乐等多类业务。粗排阶段需在毫秒级时间内从海量候选集中筛选出千量级的高质量结果,供精排阶段进一步排序。这一环节面临三大核心挑战:

  1. 特征稀疏性:用户行为数据分散在不同业务线,跨业务特征关联困难
  2. 实时性要求:商户状态(如营业中/打烊)、库存(如团购券余量)等动态信息需实时反映
  3. 效果与效率平衡:需在保证排序质量的前提下,尽可能降低计算复杂度

二、特征工程优化实践

2.1 跨业务特征融合

针对特征稀疏问题,构建统一特征平台:

  • 业务无关特征:提取用户画像(年龄、消费等级)、时空特征(GPS定位、时间片)、查询意图(NLP解析结果)等通用特征
  • 业务相关特征:设计业务线特定的动态特征,如餐饮业务的”近30天差评率”,酒店业务的”钟点房可用性”
  • 特征交叉:采用FM模型自动学习二阶特征交互,例如将”用户消费等级”与”商户人均价格”交叉,生成动态价格敏感度特征
  1. # 特征交叉示例代码
  2. import numpy as np
  3. from sklearn.feature_extraction import DictVectorizer
  4. from pyfm import pylibfm
  5. # 原始特征字典
  6. train_data = [
  7. {'user_level': 2, 'merchant_price': 80, 'is_weekend': 1},
  8. {'user_level': 3, 'merchant_price': 120, 'is_weekend': 0}
  9. ]
  10. # 特征向量化
  11. vec = DictVectorizer(sparse=False)
  12. X = vec.fit_transform(train_data)
  13. # FM模型训练
  14. fm = pylibfm.FM(num_factors=10, num_iter=50)
  15. fm.fit(X, [1, 0]) # 假设标签为点击率

2.2 实时特征计算

构建Flink实时计算管道:

  • 商户状态流:接入商户运营系统,实时更新营业状态、库存数量
  • 用户行为流:处理用户点击、下单等事件,生成实时兴趣特征
  • 双流JOIN:通过窗口函数关联用户实时行为与商户状态,生成”用户最近30分钟对该类商户的点击次数”等动态特征

三、模型架构演进

3.1 双塔模型优化

初始采用经典双塔结构(User Tower + Item Tower),面临以下问题:

  • 特征交互滞后:仅在顶层进行交互,丢失细粒度信息
  • 业务耦合:不同业务线需单独训练模型

优化方案

  1. 特征交互下移:在Tower内部增加交互层,使用Cross Network捕捉低阶特征交互
  2. 多任务学习:共享底层表示,上层分业务线输出预测值
  3. 门控机制:引入业务类型作为门控信号,动态调整特征权重
  1. # 双塔模型优化示例(TensorFlow
  2. import tensorflow as tf
  3. def dual_tower_model(user_features, item_features, business_type):
  4. # 用户塔
  5. user_tower = tf.keras.Sequential([
  6. tf.keras.layers.Dense(64, activation='relu'),
  7. tf.keras.layers.Dense(32, activation='relu')
  8. ])
  9. user_embed = user_tower(user_features)
  10. # 商品塔(带业务门控)
  11. item_tower = tf.keras.Sequential([
  12. tf.keras.layers.Dense(64, activation='relu'),
  13. tf.keras.layers.Dense(32, activation='relu')
  14. ])
  15. item_embed = item_tower(item_features)
  16. # 业务门控
  17. business_gate = tf.keras.layers.Embedding(10, 32)(business_type) # 假设10种业务类型
  18. gate_weights = tf.nn.softmax(business_gate, axis=1)
  19. # 动态特征融合
  20. fused_embed = gate_weights[:, :, tf.newaxis] * user_embed * item_embed
  21. return tf.reduce_sum(fused_embed, axis=[1,2])

3.2 深度粗排模型

引入DIN(Deep Interest Network)结构增强用户兴趣建模:

  • 注意力机制:对用户历史行为序列中与当前查询相关的行为赋予更高权重
  • 序列建模:使用Transformer处理用户行为序列,捕捉长期兴趣演变
  • 多模态特征:接入商户图片、视频等非结构化数据,通过预训练模型提取视觉特征

四、工程实践优化

4.1 计算加速技术

  1. 量化压缩:将模型权重从FP32量化为INT8,模型体积减少75%,推理速度提升3倍
  2. 算子融合:将Conv+BN+ReLU三层操作融合为单个CUDA核函数,减少内存访问
  3. 异构计算:利用TensorRT在GPU上部署模型,同时用CPU处理特征预处理,实现流水线并行

4.2 缓存策略

设计两级缓存体系:

  • 热商户缓存:对Top 1%的高频查询商户,缓存其完整特征向量和模型预测值
  • 动态特征缓存:对实时性要求不高的特征(如商户评分),采用LRU缓存策略,设置5分钟过期时间

五、效果评估体系

构建多维评估指标:

  1. 线上指标

    • 粗排召回率:精排输入结果中来自粗排的比例
    • 粗排精度:粗排Top K结果在精排Top K中的占比
    • 业务指标:GMV、点击率、转化率等
  2. 线下指标

    • AUC:区分正负样本的能力
    • NDCG:考虑排序位置的归一化折损累积增益
    • 计算效率:QPS(每秒查询数)、P99延迟

六、实践成果与展望

经过6个月优化,取得显著效果:

  • 粗排阶段P99延迟从12ms降至8ms
  • 召回率提升15%,精排输入质量显著提高
  • 核心业务GMV提升3.2%

未来方向:

  1. 强化学习应用:探索基于环境反馈的动态排序策略
  2. 神经网络:构建商户-用户-商品的异构图,捕捉复杂关系
  3. 端到端优化:打破粗排-精排界限,实现全局最优排序

美团搜索粗排优化是一个持续迭代的过程,需要平衡算法创新与工程实现,在效果、效率、成本之间找到最佳平衡点。上述实践为类似场景的搜索系统优化提供了可参考的路径。

相关文章推荐

发表评论

活动