美团AI搜索算法面试经历:语义搜索+向量检索+排序模型全考察
2年搜索算法经验,详细复盘美团AI搜索算法工程师三轮面试,涵盖倒排索引、语义搜索、向量检索(ANN)、排序模型与业务理解
背景介绍
先说下我的情况,本科软件工程,硕士方向是信息检索,毕业后在一家搜索引擎公司做了2年搜索算法工程师,主要做相关性排序和语义搜索。美团虽然是生活服务平台,但他们的搜索团队技术实力很强,尤其是本地生活搜索有很多独特的技术挑战,所以我很想试试。
投的是美团AI搜索算法工程师岗位,base北京。整个面试流程大概两周,三轮技术面,节奏比较快。美团的面试偏实战,很多问题都是围绕真实业务场景展开的,不是纯理论。下面详细复盘。
面试流程复盘
一面:信息检索+倒排索引
一面的面试官是个很务实的工程师,上来就问得很直接。
第一个问题:倒排索引的原理和构建过程?这个我太熟了,从文档分词、term字典构建、倒排链表(posting list)的组织,到跳表加速合并,都详细说了。面试官追问了倒排索引的压缩方法,我提到了VByte编码、Roaring Bitmap和SIMD加速。
然后问检索模型:BM25的原理?和TF-IDF的区别?我说BM25在TF-IDF基础上加了文档长度归一化和TF饱和度限制,公式里k1控制TF饱和度,b控制长度归一化强度。面试官追问了BM25的参数怎么调,我说一般k1在1.2-2.0之间,b在0.75左右,可以通过grid search在验证集上优化。
问了一个比较深入的问题:搜索相关性怎么评估?我说了离线评估(DCG/NDCG、MRR、MAP)和在线评估(点击率、满意度、AB测试)。面试官追问了NDCG的计算方式,我详细说了gain、cumulative gain、discounted cumulative gain和归一化的过程。
还问了一个系统设计题:设计一个搜索引擎的索引更新策略,要求近实时。我说了双缓冲策略——主索引(全量)+实时索引(增量),新文档先写入实时索引,定期合并到主索引。面试官追问了合并策略,我提到了段合并(segment merge)和文档删除的标记方式。
一面大概50分钟,面试官说"基础很扎实,对搜索理解很深",让我准备二面。
二面:语义搜索+向量检索(ANN)
二面的面试官应该是搜索团队的技术骨干,问的问题更偏前沿。
先问语义搜索:稠密检索(Dense Retrieval)和稀疏检索(Sparse Retrieval)的区别?我说稀疏检索(BM25、QL)基于词匹配,长尾查询效果差;稠密检索(DPR、ColBERT)基于语义向量,能处理词汇不匹配问题。面试官追问了DPR的训练方式,我说用in-batch negatives或hard negatives做对比学习,query和document分别过encoder得到向量,用余弦相似度排序。
然后重点聊向量检索:ANN(近似最近邻)检索有哪些方法?我详细说了几类:基于树的(Annoy、KD-Tree)、基于哈希的(LSH)、基于量化的(PQ、OPQ、IVF-PQ)、基于图的(HNSW、NSW)。面试官追问了HNSW的原理,我说它构建多层导航小世界图,搜索时从顶层开始逐层向下,每层做贪心搜索,兼顾效率和精度。面试官还问了HNSW和IVF-PQ的对比,我说HNSW召回率高但内存占用大,IVF-PQ内存友好但需要调nprobe参数。
出了一个系统设计题:设计一个亿级文档的向量检索系统,要求P99延迟<50ms。我说了几个关键设计:量化压缩(OPQ+PQ把向量从768维压缩到几十字节)、分片(按业务分片,减少单分片数据量)、缓存(热点查询缓存)、以及多级检索(先粗筛再精排)。面试官追问了量化对召回率的影响,我说一般PQ压缩后召回率下降3-5%,可以通过重排(rerank)弥补。
还问了一个比较新的方向:大模型对搜索的影响?我说了几个方面:查询理解(意图识别、查询改写)、生成式检索(直接生成文档ID)、RAG(检索增强生成)、以及LLM做重排序。面试官对生成式检索很感兴趣,追问了DSI和GENRE的思路。
二面大概60分钟,聊得很有收获。
三面:排序模型+项目深挖
三面是搜索团队的负责人,这轮主要聊排序模型和项目。
先问排序模型:搜索排序一般分哪些阶段?我说了召回(多路召回)、粗排(轻量模型快速打分)、精排(复杂模型精确排序)、重排(业务规则+多样性)。面试官追问了粗排和精排的模型选择,我说粗排一般用双塔模型(快但交互浅),精排用交叉模型(慢但交互深)。
然后聊精排模型:DeepFM、DCN、DIN这些模型的区别?我说DeepFM是FM+DNN的并行结构,自动学习特征交叉;DCN用Cross Network显式建模有界阶特征交叉;DIN用注意力机制对用户行为序列做自适应聚合。面试官追问了特征交叉为什么重要,我说手动构造交叉特征成本高且容易遗漏,自动交叉能发现隐式组合。
深挖项目:你做的搜索排序项目,怎么处理冷启动和长尾查询?我说冷启动方面,新物品用内容特征(标题、类别、属性)做embedding,新用户用人口统计学特征和短期行为;长尾查询方面,用查询改写(同义词扩展、拼写纠错)、语义匹配(稠密检索兜底)、以及多任务学习(共享底层表征)。面试官追问了查询改写怎么做,我说可以用seq2seq模型或LLM生成改写候选,然后用点击日志做过滤。
还问了一个业务题:美团搜索和通用搜索(如百度)有什么不同?我说了几个差异:本地生活搜索有地理位置约束(POI距离很重要)、有即时性需求(营业状态、库存)、有个性化需求(口味偏好),而且美团搜索的query更短更模糊,意图识别更难。面试官对这个分析很认可。
三面大概55分钟,面试官最后说"分析得很好",让我等HR面。
真题汇总
1. 倒排索引的原理和构建过程?
2. BM25的原理?和TF-IDF的区别?
3. 搜索相关性怎么评估?NDCG的计算方式?
4. 设计近实时的索引更新策略?
5. 稠密检索和稀疏检索的区别?
6. DPR的训练方式?
7. ANN检索有哪些方法?HNSW的原理?
8. 设计亿级文档的向量检索系统?
9. 大模型对搜索的影响?
10. 搜索排序分哪些阶段?
11. DeepFM、DCN、DIN的区别?
12. 怎么处理冷启动和长尾查询?
13. 美团搜索和通用搜索有什么不同?
心得建议
1. 搜索基础是核心:倒排索引、BM25、NDCG这些是搜索算法的基石,面试必考,必须滚瓜烂熟。
2. 向量检索是重点:语义搜索和向量检索是搜索方向的热点,HNSW、PQ这些方法的原理和工程实现都要掌握。
3. 系统设计要落地:美团的面试偏实战,系统设计题要考虑延迟、内存、召回率等工程指标,不能只说算法。
4. 排序模型要深入:DeepFM、DCN、DIN这些模型不只是知道名字,还要理解它们的特征交叉机制和适用场景。
5. 了解业务差异:不同公司的搜索有不同的技术挑战,面试前一定要了解目标公司的业务特点。
FAQ
Q:搜索算法岗位需要什么背景?
A:信息检索基础+机器学习+工程能力。搜索是算法和工程的结合体,纯算法或纯工程都不够。
Q:没有搜索经验怎么转?
A:可以先学信息检索经典教材(Manning的IR书),然后做几个搜索相关的项目练手。
Q:美团搜索的技术栈?
A:Java/Scala后端,Python算法,Elasticsearch做基础检索,自研向量检索引擎,TensorFlow/PyTorch训练模型。
Q:面试难度如何?
A:中等偏上,一面偏基础,二面偏前沿和系统设计,三面偏业务理解和项目深挖。
Q:搜索算法的发展前景?
A:很好。大模型时代搜索正在经历范式变革,RAG、生成式检索都是新方向,机会很多。