網易雲音樂推薦演算法面試經歷:召回+排序+重排全鏈路考察
2年推薦演算法經驗,完整覆盤網易雲音樂推薦演算法三輪技術面試,涵蓋機器學習基礎、特徵工程、推薦系統架構、多目標最佳化、AB實驗等核心考點,附真題彙總與備考建議。
背景介紹
我做推薦演算法2年了,之前在一家內容平台做推薦系統的開發,主要負責召回和排序模組的迭代。平時接觸最多的是雙塔模型、DeepFM、DIN這些經典模型,也做過一些特徵工程和AB實驗的工作。網易雲音樂推薦演算法崗位是我一直想去的,畢竟網易雲的推薦在業內口碑很好,「每日推薦」和「私人FM」的使用者體驗都很棒。
我是透過獵頭推薦的,崗位是推薦演算法工程師。大概一週後收到了面試邀請。整個流程是三輪技術面,週期大概兩週半。
面試流程覆盤
一面:機器學習基礎+特徵工程(約65分鐘)
一面面試官是推薦組的核心演算法工程師,開場先讓我自我介紹,然後問了幾個機器學習基礎問題。
機器學習基礎:面試官問了LR和SVM的區別,我從模型形式、損失函數、核技巧幾個角度講了。然後問了過擬合的解決方案,我說了正則化、Dropout、資料增強、早停等。面試官追問了L1和L2正則化的區別,我從貝葉斯先驗(L1對應拉普拉斯先驗、L2對應高斯先驗)和最佳化特性(L1產生稀疏解)兩個角度回答了。然後問了一個比較深入的問題:為什麼深度學習中L2正則化比L1更常用?我從梯度特性和權重衰減的角度解釋了。
特徵工程部分:面試官問了我對特徵工程的理解,以及推薦系統中有哪些常用的特徵類型。我分了使用者特徵、物品特徵、上下文特徵、交叉特徵四類來講。面試官對交叉特徵特別感興趣,讓我講了特徵交叉的方法,從人工交叉、FM/FFM到DeepFM和DCN的自動特徵交叉,我詳細對比了各種方法的優劣。然後問了一個實際的問題:如何處理類別型特徵?我講了One-Hot、Embedding、Target Encoding、Hash Encoding幾種方法,以及各自的適用場景。
評估指標部分:問了推薦系統常用的評估指標,我講了離線指標(AUC、NDCG、Hit Rate)和線上指標(CTR、CVR、停留時長)。面試官追問了AUC的物理含義,以及AUC和線上CTR提升的關係,我說了AUC衡量的是正樣本排在前面的機率,但AUC提升不一定等比例轉化為線上CTR提升,因為存在位置偏差等因素。
一面結束面試官說「基礎不錯,特徵工程有實戰經驗」,我感覺還不錯。
二面:推薦系統架構+多目標最佳化(約80分鐘)
二面是整個面試最核心的一輪,面試官是推薦系統的架構師。
推薦系統架構部分:面試官讓我畫一個完整的推薦系統架構圖,從召回、粗排、精排、重排四個階段講了。面試官對召回階段特別關注,讓我詳細講了多路召回的策略,包括協同過濾召回、向量召回(雙塔模型)、熱門召回、標籤召回等。然後追問了向量召回的實作細節,從ANN檢索(HNSW、IVF-PQ)到雙塔模型的訓練方式(In-batch Negative、Hard Negative),我詳細講了。面試官又問了一個關鍵問題:召回和排序的目標不一致怎麼處理?我講了召回注重覆蓋率、排序注重準確率,以及如何透過樣本採樣策略來對齊。
多目標最佳化部分:面試官問了一個很實際的問題:推薦系統通常需要同時最佳化點擊、點讚、收藏、分享等多個目標,如何做多目標最佳化?我講了Shared-Bottom、MMoE、PLE三種架構,詳細對比了它們的優劣。面試官對MMoE的Expert選擇機制很感興趣,讓我講了閘控網路的作用和訓練方式。然後問了一個進階問題:多目標最佳化中不同目標的Loss量級差異很大,怎麼處理?我講了GradNorm、Uncertainty Weighting、Dynamic Weight Average等Loss加權方法。
冷啟動問題:面試官問了新使用者和新物品的冷啟動怎麼解決。新使用者方面,我講了基於人口統計學特徵的推薦、熱門推薦、興趣探索策略。新物品方面,我講了基於內容特徵的推薦、EE策略(如LinUCB)、元學習等。面試官追問了EE策略中Exploration和Exploitation的平衡,我講了UCB和Thompson Sampling的原理。
二面聊了80分鐘,資訊量很大,但面試官的引導也很好,不會讓人完全答不上來。
三面:專案深挖+AB實驗(約70分鐘)
三面面試官應該是推薦部門的技術負責人,問題更偏向實戰和思考深度。
專案深挖:面試官讓我講一個最有影響力的推薦專案。我選了之前做的一個召回模型升級專案,從原來的ItemCF升級到雙塔向量召回,講了模型設計、訓練策略、線上部署、效果評估的完整過程。面試官對線上部署的細節很感興趣,問了向量索引的構建和更新策略、A/B測試的分流方案、模型更新的灰度發布。然後問了我遇到的最大挑戰是什麼,我講了一個負樣本採樣策略的調優過程——從隨機負採樣到Hard Negative Mining,最終離線Recall@50提升了15%。
AB實驗部分:面試官問了我對AB實驗的理解,包括分流策略、指標選擇、顯著性檢驗。我講了使用者級分流的優點、互斥實驗和正交實驗的區別、以及如何用t-test判斷實驗結果的顯著性。面試官追問了一個關鍵問題:如果AB實驗的指標互相矛盾怎麼辦?比如點擊率提升了但停留時長下降了。我講了需要定義核心指標和護欄指標,核心指標提升且護欄指標不降才上線。面試官還問了一個實際場景:如果實驗組樣本量不夠怎麼辦?我講了流量放大、延長實驗週期、CUPED方差縮減等方法。
綜合考察:面試官問了我對推薦系統發展趨勢的看法,我聊了大模型+推薦、端上推薦、隱私計算三個方向。然後問了職業規劃,為什麼選擇網易雲音樂。最後問了一個開放題:如果讓你從零搭建一個音樂推薦系統,你會怎麼做?我從資料採集、特徵構建、模型選型、AB實驗體系四個層面回答了。
真題彙總
1. LR和SVM的區別?
2. L1和L2正則化的區別?為什麼深度學習中L2更常用?
3. 推薦系統中有哪些常用的特徵類型?
4. 特徵交叉的方法有哪些?從人工交叉到自動交叉?
5. 如何處理類別型特徵?
6. AUC的物理含義?AUC和線上CTR提升的關係?
7. 畫一個完整的推薦系統架構圖?
8. 多路召回的策略?向量召回的實作細節?
9. 召回和排序的目標不一致怎麼處理?
10. 多目標最佳化的架構?Shared-Bottom、MMoE、PLE的對比?
11. 多目標最佳化中Loss量級差異怎麼處理?
12. 新使用者和新物品的冷啟動怎麼解決?
13. EE策略中Exploration和Exploitation的平衡?
14. AB實驗的分流策略和顯著性檢驗?
15. AB實驗指標互相矛盾怎麼辦?
16. 從零搭建一個音樂推薦系統?
心得建議
1. 機器學習基礎要扎實:推薦演算法面試不是只會調包就行,面試官會追問底層原理。LR、SVM、樹模型、深度學習基礎這些都要能講清楚。建議讀《統計學習方法》和《Deep Learning》。
2. 推薦系統全鏈路要理解:不能只懂排序模型,召回、粗排、重排、AB實驗這些都要了解。建議讀《Recommender Systems: The Textbook》和美團技術團隊的推薦系統部落格。
3. 多目標最佳化是高頻考點:大廠推薦系統幾乎都是多目標的,MMoE、PLE這些架構要能講清楚原理和適用場景。建議讀原論文,理解實驗設計和消融實驗。
4. AB實驗要有實戰經驗:推薦系統的迭代離不開AB實驗,分流策略、指標體系、顯著性檢驗這些是基本功。建議在實際專案中累積AB實驗經驗。
5. 關注前沿技術:大模型+推薦、對比學習在推薦中的應用、隱私計算這些新方向在面試中經常被問到。建議關注KDD、RecSys、WWW等頂會的最新論文。
FAQ
Q:網易雲音樂推薦演算法面試對程式設計要求高嗎?
A:有一定要求。一面會問一些Python程式設計題,比如實作一個簡單的協同過濾演算法。但不會問LeetCode那種演算法題,更偏實用性。
Q:沒有推薦系統經驗能過嗎?
A:比較難。網易雲推薦崗位明確要求有推薦系統開發經驗。如果只有通用機器學習經驗,建議先做一個推薦系統的專案,比如用MovieLens資料集搭建一個完整的推薦Pipeline。
Q:面試會問數學推導嗎?
A:會。我這次被要求推導了FM的公式和Softmax的梯度。建議準備一些常見模型的數學推導。
Q:網易雲推薦團隊的技術氛圍怎麼樣?
A:據我了解,網易雲推薦團隊的技術氛圍很好,經常有論文分享和技術討論。面試官也提到團隊鼓勵發論文和參加頂會。