直接抄走這份設計文件:不會過時的影片推薦訓練資料

多數影片推薦系統的衰退,不是模型錯了,而是訓練資料凍住了——一個語料、一個分布、一個時間點。以下是一份完整可改的設計文件,涵蓋影片推薦系統資料層的取源、分層、去重、更新節奏與指標——按內部設計文件的寫法寫成,讓你可以直接改,而不是從空白頁開始。
設計文件比教學文章更值得偷:它展示限制與被否決的方案,不只展示順利的路徑。這一份是短影音與長影片推薦系統背後資料設計的通用複合版,建立在目前市面上可用的取源選項上。
背景脈絡
影片產品的推薦品質是三個資料性質的函數,依序是:內容分布的覆蓋(世界上有什麼)、互動訊號的新鮮度(現在正在發生什麼)、跨創作者與利基的均衡(模型不會過擬合什麼)。第一與第三來自語料;第二來自你的事件流。這份文件涵蓋語料。
目標與非目標
目標:
- 一個代表部署內容分布的訓練語料——橫跨語言、利基與格式
- 防止創作者過度代表的分層抽樣機制
- 與內容流速匹配的更新節奏(以週計,不以季計)
- 每筆紀錄附帶來源譜系,因為推薦系統的稽核越來越會問訓練資料從哪來
非目標(明確否決):
- 在授權廣度之前先自建採集基礎設施——第一次訓練前先燒兩季工程是錯誤的排序
- 把語料總量當指標追——十億支影片但創作者分布狹窄,訓練出的是掛著大數字的利基模型
- 即時語料更新——互動訊號才是即時的;語料每週更新,對內容分布而言已經足夠
資料需求
語料需要四個性質,各自對應一個具體的取源決策:
| 性質 | 需求 | 取源答案 |
|---|---|---|
| 多樣性 | 橫跨創作者、語言、格式的覆蓋 | 頻道多元語料:Thordata 的影片資料集以 60 億支影片、7 億個獨立頻道結構化——頻道欄位正是分層抽樣得以成立的前提 |
| 結構 | 每筆紀錄帶字幕/逐字稿、時長、語言、頻道 | 按紀錄交付而非檔案傾倒;按筆計價(約 $0.25/千筆)讓過濾分片可負擔 |
| 新鮮度 | 內容分布每週到每月刷新 | 由同時經營採集基礎設施的供應商跑排程採集作業 |
| 譜系 | 每筆紀錄帶授權範圍與來源 | 紀錄附授權與譜系欄位;法務審查有具體標的可審 |
抽樣設計
推薦訓練資料的核心決策是分層。兩層:
按頻道,設上限。 沒有頻道上限,語料由高產能上傳者主宰,模型過擬合他們的風格。上限是內容策略的超參數,不是技術常數——從長尾 2 倍加權開始,按利基調整。
按部署分布。 讓語料組合對上產品實際服務的內容:如果 30% 流量是教學內容,一個只有 5% 教學的語料,訓練出一個被自家用戶嚇到的模型。
# 示意:分片 → 分層訓練批次
def build_batch(shard):
records = [r for r in shard
if r.get("caption_text") # 只收對齊配對
and r["duration_seconds"] <= 900]
stratified = (stratify(records, by="channel", cap=long_tail_weight(2.0))
.then(by="language", target=DEPLOYMENT_MIX)
.then(by="duration_bucket"))
return [featurize(r) for r in stratified]
去重計畫
近似重複影片——重編碼、裁切、重傳——會灌水熱門尾部、扭曲互動先驗。兩道手續:
- 供應商側:問清楚語料管線是否做相似度去重、殘留率多少(這是任何資料集盡責調查清單的第八題;沒想過這題的供應商,正在告訴你它採集流程的樣貌)。
- 訓練邊界:對指紋做內容雜湊比對,加上頻道感知排序,讓原創壓過重傳。紀錄裡的頻道譜系,正是讓「原創還是重傳」變成可判定而非猜謎的關鍵。
新鮮度節奏
語料更新是排程,不是英雄主義。可行的營運節奏:快速移動利基每週增量分片、每月全量分布刷新、每季對部署組合重新平衡分層權重。同時經營資料集與採集的供應商可以把週期作業當受管服務跑——讓 SERP 監控對搜尋團隊可行的同一套節奏紀律,套用在語料維運上。
指標:怎麼知道資料層在運作
- 分布匹配分數:語料利基組合與部署內容組合的 KL 散度,逐週趨勢化
- 重複率:兩道去重後每分片的近似重複占比,目標壓在個位數百分比以下
- 冷啟動覆蓋:新上線內容利基在語料中的既有比例——預測新內容類別能否獲得公平排序的指標
- 互動遷移:新鮮保留集上的離線指標(永遠不用訓練切片——任何評估污染的討論都解釋過為什麼)對線上 A/B 提升
風險與緩解
| 風險 | 緩解 |
|---|---|
| 語料偏離部署組合 | 逐週分布匹配分數+告警 |
| 熱門頻道主宰捲土重來 | 頻道上限在批次建置時強制執行,不是授權時 |
| 企業審查問到授權 | 每筆紀錄的譜系欄位;訓練前確認範圍 |
| 更新變成沒人擁有的專案 | 受管排程採集;語料維運是改設定,不是一季工程 |
常見問答
為什麼不直接用自家平台的資料訓練?
應該用——第一方互動資料是最強訊號。但它只覆蓋你的產品已經曝光的東西,所以它是一面鏡子,不是一張地圖:新的利基、語言與格式,要等到別家平台的用戶先發現,你的平台才看得到。語料廣度,是推薦模型看見自身流量之外的世界的方式。
這和搜尋側情報有什麼關係?
直接相關:推薦的需求側就是查詢行為。透過結構化的 SERP 監控(約每 1,000 次回應 $0.70)觀察哪些主題與查詢在升溫,能在自家互動資料反應之前好幾週,告訴語料團隊該加重哪些利基的刷新。影片產品的分銷情報=語料資料+搜尋資料,放在同一個倉庫裡。
試點怎麼跑?
兩週:授權一份符合部署組合的過濾分片,把現有模型的下一輪訓練跑在上面,對照目前語料量測冷啟動覆蓋與互動遷移。差距可見,上面整份設計就站得住;差距不可見,你也學得便宜。
按筆計價在語料規模下真的重要嗎?
它是前提:約每 1,000 筆 $0.25,一百萬筆過濾分片只要幾百美元——於是分層與更新節奏變成資料決策,而不是預算談判。儲存與訓練運算仍是總成本的大頭;語料是整個系統裡最便宜的槓桿,而這正是它應該是儀表最完善的那一環的原因。需求側資料流同樣:持續 SERP 資料爬取按結構化筆數、按排程計價。
把文件拿去,把部署組合換成你自己的,從兩週試點開始。內部真正會吵的是頻道上限與更新節奏——那是穿著工程外衣的產品決策,而這份設計文件真正的工作,是把這個論證一次性地寫下來,讓你不必每季重新吵一遍。