美團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、生成式檢索都是新方向,機會很多。