小紅書搜索算法面試經歷:倒排索引+排序模型+相關性優化全考察

面試經歷作者: 美歷團隊

2年搜索算法經驗面小紅書搜索算法崗,一面信息檢索基礎+倒排索引,二面排序模型+相關性優化,三面項目深挖+AB實驗,附真題匯總和備考建議。

背景介紹

先說我的情況:2年搜索算法經驗,之前在一家中型互聯網公司做搜索,主要負責排序模型和相關性優化。說實話,去面小紅書搜索之前我心裡是有點虛的——小紅書搜索是社區搜索,和傳統電商搜索完全不是一個路子,用戶搜的不是商品而是內容和筆記,這對搜索算法的要求完全不同。但面試走下來發現,搜索的核心技術是相通的,關鍵是理解不同場景下的側重點。

我投的是小紅書搜索算法崗,base上海。內推渠道,從投遞到一面大概等了5天。整個流程是一面+二面+三面+HR面,前後大概3週。下面詳細復盤。

面試流程復盤

一面:信息檢索基礎+倒排索引

一面的面試官是個看起來很學術範的男生,開場先讓我自我介紹,然後直接進入技術問題。他說「我們一面主要考察信息檢索基礎,特別是倒排索引和檢索模型」。

第一個問題就直奔核心:「倒排索引的結構是什麼?怎麼構建的?」這個我準備過,說了倒排索引由詞典和倒排列表組成——詞典記錄所有詞項,倒排列表記錄包含該詞項的文檔ID、詞頻、位置信息。構建過程是:分詞→建立詞項到文檔的映射→排序→壓縮存儲。面試官追問「倒排列表怎麼壓縮?」我說常用壓縮方法有VB編碼、Gamma編碼和Simple9編碼。VB編碼用可變字節表示文檔ID間隔,Gamma編碼用一元編碼和二進制編碼的組合。他又問「跳表在倒排索引中的作用?」我說跳表用於加速倒排列表的合併操作,通過在倒排列表上建立多級索引,可以將合併時間從O(n)降到O(logn)。

接下來是檢索模型的問題。「BM25的原理了解嗎?和TF-IDF有什麼區別?」我說BM25是在TF-IDF基礎上的改進,主要區別在於:1)BM25對詞頻做了飽和處理——詞頻增加到一定程度後,BM25分數不再顯著增加;2)BM25考慮了文檔長度歸一化——長文檔的詞頻天然偏高,BM25通過文檔長度因子進行修正。面試官追問「BM25的參數怎麼調?」我說k1控制詞頻飽和度,b控制文檔長度歸一化強度。k1通常設為1.2-2.0,b通常設為0.75。他又問「BM25有什麼缺點?」我說BM25只考慮詞頻和文檔長度,沒有考慮詞項的語義信息,無法處理同義詞和上下位詞的問題。

然後問了一個和社區搜索相關的問題:「小紅書的搜索和電商搜索有什麼區別?」我說最大的區別是搜索對像不同——電商搜索搜商品,結果有明確的好壞標準(銷量、評價);社區搜索搜內容,結果的好壞更主觀,依賴用戶偏好。所以社區搜索更看重個性化,電商搜索更看重相關性。面試官追問「社區搜索的難點是什麼?」我說難點在於:1)內容理解難——筆記是圖文混合的,需要同時理解文本和圖像;2)意圖識別難——用戶的搜索詞很短,意圖模糊;3)評價標準難——內容質量沒有客觀標準,依賴用戶行為信號。

一面還問了一些信息檢索基礎的問題:「查詢擴展了解嗎?怎麼做?」我說查詢擴展是為了解決詞彙不匹配問題——用戶用的詞和文檔裡的詞不一致。方法包括:同義詞擴展、相關詞擴展、基於用戶行為的擴展。面試官追問「同義詞擴展的詞表怎麼來?」我說可以從知識圖譜獲取,也可以從搜索日誌中挖掘——如果兩個詞經常出現在同一會話中,可能是同義詞。他又問「查詢擴展會不會引入噪聲?」我說會的,所以需要做擴展詞的權重衰減——原始查詢詞權重高,擴展詞權重低。

一面最後出了一道編程題:實現一個簡單的倒排索引,支持構建和查詢。我花了大概20分鐘寫了一個基礎版本,面試官看了說「基本功能沒問題,但如果要支持短語查詢你會怎麼做?」我說需要存儲詞項的位置信息,查詢時檢查位置是否連續。他說「思路可以」。

一面大概1小時,面試官說「基礎還可以,等二面通知」。

二面:排序模型+相關性優化

二面的面試官是個資深的算法專家,上來就問項目。他說「我看你簡歷上寫了排序模型和相關性優化,詳細說說」。

我先講了我們的排序模型。「你們的排序模型是什麼?怎麼做的?」我說我們用雙塔模型做召回,用精排模型做排序。精排模型是DIN(Deep Interest Network)的變體,輸入包括用戶特徵、文檔特徵和交叉特徵。面試官追問「雙塔模型和交叉模型各有什麼優缺點?」我說雙塔模型的優點是可以離線預計算向量,線上只需要做向量檢索,速度快;缺點是用戶和文檔沒有交叉,表達能力弱。交叉模型表達能力更強,但線上計算量大。他又問「你們怎麼平衡召回率和精度?」我說我們用多路召回——向量召回、倒排召回、熱門召回,每路召回不同的候選集,然後合併去重。

相關性優化是二面的核心。「你們怎麼優化搜索相關性的?」我說我們從三個層面優化:1)召回層面——優化查詢理解和查詢擴展,提高召回的相關性;2)排序層面——優化排序模型的特徵和目標,提高排序的準確性;3)後處理層面——做多樣性和去重,避免結果同質化。面試官追問「排序模型的特徵有哪些?」我說特徵分為三類——用戶特徵(歷史行為、偏好標籤)、文檔特徵(質量分、時效性、互動數據)、交叉特徵(用戶-文檔匹配度、查詢-文檔相關性)。他又問「排序模型的目標函數是什麼?」我說我們用多目標優化——同時優化點擊率、點讚率和停留時長,用加權和作為最終目標。

然後問了一個讓我印象很深的問題:「搜索結果的相關性和多樣性怎麼平衡?」我說這是一個經典的trade-off問題。如果只優化相關性,結果會非常同質化——搜「旅遊」出來的全是旅遊攻略;如果過度追求多樣性,又會降低相關性。我們的做法是在排序後做MMR(Maximal Marginal Relevance)重排——在保證相關性的前提下,選擇與已選結果差異最大的文檔。面試官追問「MMR的具體公式了解嗎?」我說了解——MMR = λ * rel(d) - (1-λ) * max_sim(d, S),其中rel(d)是文檔d的相關性,max_sim(d, S)是d和已選集合S的最大相似度,λ控制相關性和多樣性的權衡。

二面還問了一些和AB實驗相關的問題:「你們怎麼做搜索算法的AB實驗的?指標有哪些?」我說我們用用戶ID做分桶實驗,實驗組和對照組各50%流量。指標分為三類:1)相關性指標——NDCG、MRR、點擊率;2)用戶體驗指標——搜索滿意度、零結果率、翻頁率;3)業務指標——DAU、留存、互動率。面試官追問「NDCG怎麼計算的?」我說NDCG = DCG / IDCG,DCG = Σ(rel_i / log2(i+1)),IDCG是理想排序的DCG。他又問「AB實驗的顯著性怎麼判斷?」我說用t檢驗或卡方檢驗,p值小於0.05認為顯著。但要注意新奇效應——新算法上線初期用戶可能因為新鮮感而表現不同,需要觀察更長時間。

二面大概1.5小時,面試官說「你的搜索算法經驗不錯,但對社區搜索的理解還需要加深」。

三面:項目深挖+AB實驗

三面是部門負責人面的,氛圍比較正式。他先問了我對小紅書搜索的理解,我說「小紅書搜索的核心是理解用戶的真實意圖,在大量UGC內容中找到最匹配的結果,這需要同時做好內容理解、意圖識別和個性化排序」。他點了點頭,然後開始深挖項目。

「你做過的最有技術挑戰的搜索項目是什麼?」我講了之前做的一個長尾查詢優化項目——長尾查詢(搜索頻次很低的查詢)占了總查詢量的60%,但因為訓練數據少,排序效果很差。我們的解決方案是:1)查詢聚類——將語義相似的查詢聚成一類,共享訓練數據;2)遷移學習——用高頻查詢的模型做預訓練,再在長尾查詢上微調;3)零樣本學習——對於完全沒有訓練數據的查詢,用語義相似度直接排序。面試官追問「查詢聚類怎麼做的?」我說我們用BERT對查詢做embedding,然後用K-Means聚類。他又問「聚類數怎麼確定?」我說我們用輪廓係數和肘部法則確定最優聚類數,最終選了500個聚類。

接著問了一個開放性的問題:「如果讓你從零搭建小紅書的搜索系統,你會怎麼做?」我說我會分三步走:1)基礎搜索——先搭倒排索引+BM25排序,保證基本可用;2)個性化搜索——加入用戶畫像和行為特徵,用學習排序模型優化排序;3)智能搜索——加入意圖識別、查詢改寫、多模態檢索,提升搜索體驗。面試官問「多模態檢索怎麼做?」我說用CLIP模型將文本和圖像映射到同一向量空間,實現文搜圖和圖搜圖。他又問「CLIP的向量維度怎麼選?」我說我們試過128、256、512,最終選了256——128太小信息損失多,512太大檢索速度慢。

最後問了我對小紅書搜索的看法和職業規劃。我說小紅書搜索是社區搜索的標杆,技術挑戰和業務價值都很高,我希望能在这裡深耕搜索算法領域。面試官說「歡迎加入」。

HR面就是常規的薪資和入職時間溝通,沒什麼特別的。

真題匯總

一面真題

1. 倒排索引的結構?怎麼構建?
2. 倒排列表的壓縮方法?
3. 跳表在倒排索引中的作用?
4. BM25的原理?和TF-IDF的區別?
5. BM25的參數怎麼調?有什麼缺點?
6. 社區搜索和電商搜索的區別?
7. 查詢擴展怎麼做?
8. 實現一個簡單的倒排索引
9. 分詞算法了解哪些?
10. 搜索引擎的架構了解嗎?

二面真題

1. 排序模型是什麼?怎麼做的?
2. 雙塔模型和交叉模型的優缺點?
3. 怎麼優化搜索相關性?
4. 排序模型的特徵有哪些?目標函數?
5. 相關性和多樣性怎麼平衡?MMR?
6. AB實驗怎麼做?指標有哪些?
7. NDCG怎麼計算?
8. 多目標優化怎麼做?
9. 向量檢索怎麼實現?
10. 搜索的召回策略有哪些?

三面真題

1. 最有技術挑戰的搜索項目
2. 長尾查詢優化方案
3. 查詢聚類怎麼做的?
4. 從零搭建搜索系統
5. 多模態檢索怎麼做?
6. CLIP模型的向量維度怎麼選?
7. 你對小紅書搜索的理解
8. 搜索算法的發展趨勢
9. 怎麼處理搜索作弊?
10. 職業規劃

心得建議

第一,信息檢索基礎必須扎實。倒排索引、BM25、查詢擴展這些是搜索算法的基本功,面試必考。建議看《信息檢索導論》這本書,把核心概念搞清楚。

第二,排序模型要有實戰經驗。不是只會調API就行的,要理解模型的輸入輸出、特徵工程、目標函數。建議自己做一個搜索排序項目,從數據到模型到評估全流程走一遍。

第三,相關性優化要理解全鏈路。不只是知道怎麼調BM25參數,還要理解從召回→排序→後處理的完整鏈路,每個環節怎麼優化相關性。建議做一個端到端的搜索優化項目。

第四,AB實驗是搜索算法面試的必考點。怎麼設計實驗、怎麼選指標、怎麼判斷顯著性,這些都要能講清楚。建議在自己項目中實踐AB實驗,積累經驗。

第五,理解社區搜索的特殊性。小紅書搜索和電商搜索不同,更看重內容理解、意圖識別和個性化。面試前建議多體驗小紅書的搜索,理解用戶場景。

FAQ

Q1:小紅書搜索面試對算法要求高嗎?

要求很高。不是會用sklearn就行的層面,要理解排序模型的原理、特徵工程的方法、AB實驗的設計。建議看《Learning to Rank》和相關的論文。

Q2:沒有搜索算法經驗怎麼辦?

可以自己做一個搜索項目練手。用Elasticsearch搭一個搜索引擎,然後做排序優化——從BM25開始,逐步加入學習排序模型。關鍵是理解搜索系統的全鏈路,不是只會用工具。

Q3:排序模型要學哪些?

建議從經典模型學起——LR→GBDT→DNN→DIN。重點理解DIN的注意力機制和多目標優化。然後學習向量檢索——雙塔模型→ANN檢索。面試中最常問的是雙塔模型和精排模型。

Q4:AB實驗怎麼學?

建議從基礎的假設檢驗學起,理解t檢驗和卡方檢驗的原理。然後學習AB實驗的設計——分桶、分流、指標選擇、顯著性判斷。推薦看《Trustworthy Online Controlled Experiments》這本書。

Q5:小紅書搜索的工作強度怎麼樣?

搜索團隊的技術氛圍很好,節奏適中。搜索算法的迭代週期比較長,不像業務開發那樣趕進度。但模型上線後需要持續監控效果,AB實驗需要耐心等待結果。對搜索算法工程師的成長很有幫助。

#搜索算法#小紅書#倒排索引#排序模型#相關性優化#BM25#AB實驗