4. 倒排索引、分词与排序算法:TF‑IDF、BM25、Learning to Rank、Query理解
本章聚焦 — 搜索排序的三大核心环节:索引构建(倒排)、分词质量、排序算法演进。面试中常从“BM25与TF‑IDF区别”切入,考察你对召回‑排序全链路的理解,以及结合Query理解做特征工程的能力。
面试问答卡片
面试问题:倒排索引如何支持“分词 + 排序”的实时检索?
考察点:索引结构理解、写入与查询链路、排序阶段的特征获取
回答框架:
1. 倒排表通过 term -> docId 列表快速命中候选文档。
2. 检索时先对 query 分词,从倒排表拿 docId 集合,按 BM25 等打分。
3. 排序阶段需要从正排或列存中读取 doc 特征(如点击率、时效性)参与计算。
1. 倒排表通过 term -> docId 列表快速命中候选文档。
2. 检索时先对 query 分词,从倒排表拿 docId 集合,按 BM25 等打分。
3. 排序阶段需要从正排或列存中读取 doc 特征(如点击率、时效性)参与计算。
简短示例回答:“倒排索引记录 term->docId 映射,查询时对 query 分词后取交集/并集得到候选集,再逐 doc 读取词频、文档长度等字段,代入 BM25 公式计算得分,最后融合业务特征重新排序”(90字)
可能追问:倒排表在内存和磁盘上的存储结构(如跳表、Roaring Bitmap)?如何更新索引?
避坑提醒:不要只聊索引结构忽略排序流程;明确区分“倒排查找”与“排序计算”是两阶段。
面试问题:TF‑IDF 和 BM25 的核心差异是什么?在什么场景下 BM25 更优?
考察点:对文本统计模型的理解深度、参数调优经验
回答框架:
1. TF‑IDF 词频线性增长,BM25 用饱和函数限制词频贡献(k1 参数)。
2. BM25 引入文档长度归一化(b 参数),控制长文档的权重惩罚。
3. 场景:短文本搜索、文档长度差异大时 BM25 更稳定。
1. TF‑IDF 词频线性增长,BM25 用饱和函数限制词频贡献(k1 参数)。
2. BM25 引入文档长度归一化(b 参数),控制长文档的权重惩罚。
3. 场景:短文本搜索、文档长度差异大时 BM25 更稳定。
简短示例回答:“TF‑IDF 中词频无上限,BM25 通过 k1 控制词频饱和,b 控制长度惩罚。当文档集长度方差很大(如网页与 PDF 混合搜索)时,BM25 能避免长文档因词频高被过度抬升,排序更合理。”(95字)
可能追问:你项目中 b、k1 如何调优?有没有基于 BM25 的改进版本(如 BM25F)?
避坑提醒:避免只背公式不解释直觉;强调参数含义和调优做法,否则显得纸上谈兵。
面试问题:Learning to Rank 如何在搜索引擎中应用?它与传统排序如何衔接?
考察点:排序模型选型、特征工程、离线在线一致性
回答框架:
1. 召回层用 BM25 + Query 理解得到候选集。
2. 精排层提取特征(相关度、点击、CVR、位置偏差)输入 LTR 模型(LambdaMART 等)。
3. 排序结果融合业务规则(去重、多样性)后返回。
1. 召回层用 BM25 + Query 理解得到候选集。
2. 精排层提取特征(相关度、点击、CVR、位置偏差)输入 LTR 模型(LambdaMART 等)。
3. 排序结果融合业务规则(去重、多样性)后返回。
简短示例回答:“先靠 BM25 粗排保留约千条候选,再抽取文本匹配分、用户点击率、文档时效性等特征,用 LambdaMART 训练排序模型。线上将模型导出为特征函数直接计算,保证离线在线打分一致。”(92字)
可能追问:你如何处理位置偏差和样本选择偏差?Label 怎么获取?
避坑提醒:不要只说“用机器学习排序”没有细节;至少提一个模型(如 LambdaMART)和两个特征。