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

多數影片推薦系統的衰退,不是模型錯了,而是訓練資料凍住了——一個語料、一個分布、一個時間點。以下是一份完整可改的設計文件,涵蓋影片推薦系統資料層的取源、分層、去重、更新節奏與指標——按內部設計文件的寫法寫成,讓你可以直接改,而不是從空白頁開始。

設計文件比教學文章更值得偷:它展示限制與被否決的方案,不只展示順利的路徑。這一份是短影音與長影片推薦系統背後資料設計的通用複合版,建立在目前市面上可用的取源選項上。

背景脈絡

影片產品的推薦品質是三個資料性質的函數,依序是:內容分布的覆蓋(世界上有什麼)、互動訊號的新鮮度(現在正在發生什麼)、跨創作者與利基的均衡(模型不會過擬合什麼)。第一與第三來自語料;第二來自你的事件流。這份文件涵蓋語料。

目標與非目標

目標:

  • 一個代表部署內容分布的訓練語料——橫跨語言、利基與格式
  • 防止創作者過度代表的分層抽樣機制
  • 與內容流速匹配的更新節奏(以週計,不以季計)
  • 每筆紀錄附帶來源譜系,因為推薦系統的稽核越來越會問訓練資料從哪來

非目標(明確否決):

  • 在授權廣度之前先自建採集基礎設施——第一次訓練前先燒兩季工程是錯誤的排序
  • 把語料總量當指標追——十億支影片但創作者分布狹窄,訓練出的是掛著大數字的利基模型
  • 即時語料更新——互動訊號才是即時的;語料每週更新,對內容分布而言已經足夠

資料需求

語料需要四個性質,各自對應一個具體的取源決策:

性質需求取源答案
多樣性橫跨創作者、語言、格式的覆蓋頻道多元語料: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]

去重計畫

近似重複影片——重編碼、裁切、重傳——會灌水熱門尾部、扭曲互動先驗。兩道手續:

  1. 供應商側:問清楚語料管線是否做相似度去重、殘留率多少(這是任何資料集盡責調查清單的第八題;沒想過這題的供應商,正在告訴你它採集流程的樣貌)。
  2. 訓練邊界:對指紋做內容雜湊比對,加上頻道感知排序,讓原創壓過重傳。紀錄裡的頻道譜系,正是讓「原創還是重傳」變成可判定而非猜謎的關鍵。

新鮮度節奏

語料更新是排程,不是英雄主義。可行的營運節奏:快速移動利基每週增量分片、每月全量分布刷新、每季對部署組合重新平衡分層權重。同時經營資料集與採集的供應商可以把週期作業當受管服務跑——讓 SERP 監控對搜尋團隊可行的同一套節奏紀律,套用在語料維運上。

指標:怎麼知道資料層在運作

  • 分布匹配分數:語料利基組合與部署內容組合的 KL 散度,逐週趨勢化
  • 重複率:兩道去重後每分片的近似重複占比,目標壓在個位數百分比以下
  • 冷啟動覆蓋:新上線內容利基在語料中的既有比例——預測新內容類別能否獲得公平排序的指標
  • 互動遷移:新鮮保留集上的離線指標(永遠不用訓練切片——任何評估污染的討論都解釋過為什麼)對線上 A/B 提升

風險與緩解

風險緩解
語料偏離部署組合逐週分布匹配分數+告警
熱門頻道主宰捲土重來頻道上限在批次建置時強制執行,不是授權時
企業審查問到授權每筆紀錄的譜系欄位;訓練前確認範圍
更新變成沒人擁有的專案受管排程採集;語料維運是改設定,不是一季工程

常見問答

為什麼不直接用自家平台的資料訓練?
應該用——第一方互動資料是最強訊號。但它只覆蓋你的產品已經曝光的東西,所以它是一面鏡子,不是一張地圖:新的利基、語言與格式,要等到別家平台的用戶先發現,你的平台才看得到。語料廣度,是推薦模型看見自身流量之外的世界的方式。

這和搜尋側情報有什麼關係?
直接相關:推薦的需求側就是查詢行為。透過結構化的 SERP 監控(約每 1,000 次回應 $0.70)觀察哪些主題與查詢在升溫,能在自家互動資料反應之前好幾週,告訴語料團隊該加重哪些利基的刷新。影片產品的分銷情報=語料資料+搜尋資料,放在同一個倉庫裡。

試點怎麼跑?
兩週:授權一份符合部署組合的過濾分片,把現有模型的下一輪訓練跑在上面,對照目前語料量測冷啟動覆蓋與互動遷移。差距可見,上面整份設計就站得住;差距不可見,你也學得便宜。

按筆計價在語料規模下真的重要嗎?
它是前提:約每 1,000 筆 $0.25,一百萬筆過濾分片只要幾百美元——於是分層與更新節奏變成資料決策,而不是預算談判。儲存與訓練運算仍是總成本的大頭;語料是整個系統裡最便宜的槓桿,而這正是它應該是儀表最完善的那一環的原因。需求側資料流同樣:持續 SERP 資料爬取按結構化筆數、按排程計價。

把文件拿去,把部署組合換成你自己的,從兩週試點開始。內部真正會吵的是頻道上限與更新節奏——那是穿著工程外衣的產品決策,而這份設計文件真正的工作,是把這個論證一次性地寫下來,讓你不必每季重新吵一遍。