首頁要為每位使用者推薦「最想看」的影片。難點不在單一模型,而在把商業目標翻成 ML 目標,再用多階段管線從數十億影片裡快又準地挑出來。
📋 Requirements
- 功能:使用者載入首頁時,推薦個人化影片列表;輸入是使用者,輸出是依相關性分數排序的影片列表。
- 商業目標:提高使用者參與度。
- 規模:約 100 億部影片、使用者遍佈全球、影片有不同語言。
- 非功能:推薦需快速回應(假設不超過 200 毫秒)。
🧠 Core Ideas
TIP
先把商業目標翻成 ML 目標。點擊數會招來標題黨、完整觀看偏好短片、總觀看時間也各有取捨——最後選最大化相關影片數,因為對訊號有更多控制,且沒有前述缺點。相關性可由規則定義(如按讚、或觀看至少一半)。
三種推薦類別各有取捨:content-based 用影片特徵推相似影片,能處理新影片、但難發現新興趣且需領域知識;collaborative filtering (CF) 只靠使用者歷史互動、不用影片特徵,容易發現新興趣且高效,但有冷啟動問題與小眾興趣難處理。兩者互補,實務多採hybrid——例如以 CF 做第一階段候選生成、再用 content-based 做第二階段。
⚖️ Reference Design
資料與特徵工程
- 三類資料:影片資料(ID、時長、標籤、標題、語言等)、使用者資料(人口統計)、使用者-影片互動資料(按讚、點擊、曝光、觀看、搜尋,附位置與時間戳)。
- 影片特徵:Video ID/Language 用 embedding layer;標籤用輕量預訓練模型(如 CBOW)、標題用上下文感知模型(如預訓練 BERT)轉向量。
- 使用者特徵:人口統計、上下文(時段、裝置、星期幾)、歷史互動(搜尋/按讚/觀看/曝光,皆以平均 embedding 取固定長度向量)。
模型選擇 — Matrix factorization vs Two-tower
- Matrix factorization:把使用者-影片 feedback matrix 分解成使用者與影片兩個低維 embedding 矩陣,用 dot product 算相關性。訓練與服務快(embedding 靜態可預計算),但不用其他特徵、難處理新使用者。優化可用 SGD 或 WALS(收斂快、可並行)。損失採已觀察與未觀察配對的加權組合。
- Two-tower neural network:使用者塔與影片塔各自輸出 embedding,共享空間中的距離代表相關性;當成二元分類用 cross-entropy 訓練,推論走 approximate nearest neighbor。能納入使用者特徵、處理新使用者、推薦品質較好,但服務較慢、訓練成本較高。
服務 — 多階段預測管線
- 面對數十億影片,用多階段設計兼顧效率與準確性。
- 候選生成:輕量、不依賴影片特徵、能處理新使用者的模型(Two-tower),從數十億縮到數千;優先效率、不擔心 false positive。實務用多個候選生成器涵蓋熱門、趨勢、地點等來源以提升多樣性。
- 評分 (ranking):用依賴影片特徵的較重模型(Two-tower)精確排序少量候選;優先準確性。
- 重新排序:加入區域限制、新鮮度、錯誤資訊、重複、公平性等準則。
🔑 Takeaways
- 商業目標 → ML 目標是第一步:選最大化相關影片數,避開標題黨等副作用。
- hybrid filtering 結合 CF(發現新興趣)與 content-based(推相似內容),並用多階段管線落地。
- 多階段設計是服務關鍵:輕量候選生成快速縮小範圍,較重評分模型精確排序。
- 評估分離線(Precision@k、mAP、diversity)與線上(CTR、完整觀看數、總觀看時間、顯式回饋);diversity 需與相關性並用。
- 冷啟動:新使用者靠 two-tower 的人口統計等特徵、新影片靠啟發式收集互動後微調。
No notes yet — jot your takeaways or Q&A here.