3. 搜索算法基础:召回与排序

📌 章节定位:任何搜索面试的“及格线”。不问算法细节,先问概念分层。清晰区分“召回”和“排序”的职责,是面试官判断候选人是否具备工程思维的第一步。

🎯 召回 vs 排序:核心对比

维度召回(Recall)排序(Ranking)
目标从海量候选池中快速找出“可能相关”的少量文档对召回结果精确打分,输出用户最喜欢的Top-N
候选集量级千万→千/百千/百→10
时延要求毫秒级(10-100ms)相对宽松(几十到几百ms)
常用方法BM25、倒排索引、向量检索DeepFM、DIN、Transformer-based模型
面试关注点召回率和覆盖率精准度和个性化

🧠 常用算法速览

  • BM25:词频+逆文档频率的进阶版,包含文档长度归一化。面试高频:公式中 k1 和 b 参数的意义。
  • DSSM:双塔结构,Query和Doc分别过DNN,在最后一层做内积。典型用于向量化召回。面试高频:双塔离线训练 vs 在线更新的差异。
  • DeepFM:用于精排。FM部分负责二阶特征交叉,深度部分负责高阶特征学习。面试高频:为什么DeepFM比Wide&Deep在特征交叉上更强?
召回与排序面试回答框架 1. 先定义概念 2. 召回:覆盖+速度 2. 排序:精度+个性化 举BM25或向量检索例子 举DeepFM或DIN例子 3. 总结协同关系

📝 问答卡片

卡片1:召回与排序的核心区别是什么?

📌 概念辨析

  • 核心差异:召回是“找”,排序是“选”。召回重覆盖和效率,排序重精度和个性化。
  • 分层原因:全量排序计算量过大。优先生成百级别候选再精细排序,平衡延迟和精度。
  • 协同关系:召回决定上限,排序决定下限。召回漏掉相关文档,排序再强也无效。
✅ 示例回答:“召回的目标是从千万级文档中快速筛选出百级候选,常用BM25或向量检索;排序则是利用深度模型(如DeepFM)对候选集精细打分,推送给用户。两者是漏斗关系,召回决定了系统的上限。”

卡片2:BM25有哪些关键参数和工程优化?

📌 算法深度

  • 公式核心:BM25 = IDF * (fq,d * (k1+1)) / (fq,d + k1 * (1 - b + b * |d|/avgdl))
  • k1:词频饱和度,通常[1.2, 2.0],越大对高频词惩罚越小。
  • b:文档长度归一化,通常0.75,靠近1则长度惩罚强烈。
  • 工程优化:提前算好IDF分桶、doc长度分档,避免在线重复计算。
✅ 示例回答:“BM25的k1控制词频饱和,b控制长度归一化。我在优化时,会将IDF和文档长度提前分桶索引,查询时直接查表,减少在线计算开销。”

卡片3:DSSM和DeepFM各自适合做什么?

📌 模型对比

维度DSSMDeepFM
阶段召回(双塔向量化)排序(交叉特征)
优势Query和Doc独立计算,离线缓存向量,在线快速近邻搜索显式建模FM低阶交叉+深度网络高阶交叉
面试高频双塔的temperature参数如何调?为什么DeepFM比单FM效果好?
✅ 示例回答:“DSSM适合召回场景,Query和Doc分别过网络,在线只计算Query向量再近邻搜索;DeepFM适合精排,FM层处理二阶特征交叉,DNN处理高阶,两者联合训练效果优于单模型。”

🏢 公司侧重点

公司召回侧重点排序侧重点
百度倒排+语义向量多路召回海量用户行为特征的Wide&Deep变体
字节跳动多路召回(标签、协同、向量)精排模型+瀑布流实时重排
阿里淘宝搜索侧重向量化召回DIN/DIEN系列,强依赖用户行为序列

👤 面试官画像

  • 典型画像:搜索算法专家,3-5年经验。更关注候选人对“分层逻辑”的理解,而非背诵公式。
  • 考察点:是否清楚召回和排序的边界,能否结合业务举例。
  • 应对策略:先给结论,再举具体场景例子,最后追问时能展开参数细节。
面试追问路径:从概念到工程细节 召回与排序区别 召回怎么优化? 排序模型怎么选? BM25 vs 向量召回 多路召回如何融合 DeepFM vs DIN 离线评估与A/B测试 k1、b参数怎么调 特征工程怎么做

⚠️ 避坑指南

常见错误:

  1. 混淆概念:将BM25归类为排序算法。BM25是词袋模型,属于召回阶段。
  2. 忽略工程落地:面试官问“向量召回怎么实现”只回答理论,不提Faiss或HNSW等工程化方案。
  3. 不对比模型:只说DeepFM好,不说为什么比FM好、比Wide&Deep好。

正确示范:“我选DeepFM是因为它同时建模低阶和高阶交叉,相比Wide&Deep无需手动设计交叉特征,训练起来更省人力。”

📚 项目案例模板

项目名称:电商搜索多路召回优化

业务背景用户搜索商品时,原有BM25召回覆盖率低,长尾商品容易漏掉
规模指标商品库10亿+,日常请求峰值5000QPS,召回率提升15%
技术栈BM25(Elasticsearch)、双塔模型(DSSM)、向量检索(Faiss)

核心难点:

  • 多路召回结果如何合并去重,保证最终list多样性和相关性。
  • 向量召回延迟高,需把向量量化+分段索引,满足5ms要求。

面试高频追问:

  1. 多路召回融合时,你用什么策略?加权平均?交叉排序?
  2. 向量召回训练数据怎么构造?正负样本怎么选?
  3. Faiss的IVFPQ和HNSW分别适合什么场景?

可迁移回答话术:“在这个项目中,我们采用了两阶段融合:第一层用规则过滤掉强无关结果,第二层用一个轻量排序模型学习各路的权重。这比固定权重方式提升了5%的NDCG。”