我想知道能不能訓練出一個模型,寫出人們真的會喜歡的 YouTube 留言。最明顯的訓練訊號就是讚數,而且近期確實有研究這麼做:用讚數最高的前 10% 留言做微調,回報的互動量大約是用隨機留言訓練的模型的 3 倍。

接著我檢視讚數實際上在測量什麼。在影片上線第一個小時內發佈的留言,看到的人數比一週後發佈的多好幾個數量級,而 YouTube 的「熱門留言」排序又放大了這一點,因為排名高會帶來讚,而讚又會讓排名更高。兩則一模一樣的留言,光憑抵達時間就可能相差三個數量級。

於是問題不再是「模型能不能寫出好留言」,而變成「讚數裡到底有沒有包含任何關於留言本身的資訊」。

用公開資料回答不了這個問題

兩個大型公開 YouTube 留言資料集 YT-30M 與 YTCommentVerse 合計約有 3,200 萬則留言。兩者都提供 upvotes,卻都沒有時間戳記。

沒有發佈時間,你就無法把留言說了什麼和它何時出現分開。任何在那些資料集上訓練的模型,都是在擬合起跑優勢,卻完全看不見它。

所以我自己收集了一份含有時間的資料集:來自 34 個頻道、633 部影片的 1,345,353 則頂層留言,附有發佈時間、抓取時間、回覆數、影片統計資料,以及 YouTube 自家演算法給每則留言的排名。花了三天,約 14,900 個 API 單位。

其中一個決定比其他都重要。commentThreads.list 回傳留言時是最新在前,所以任何針對單部影片的頁數上限都會丟掉最舊的留言,而那正是這項研究關注的高曝光留言。每部影片都完整列舉。大到無法在每日配額內抓完的影片一開始就排除,並記在清單檔中,而不是悄悄截斷。

曝光佔了 83.5%

預測每則留言在自己所屬影片內的讚數排名,這樣就把影片效應從訓練訊號中移除。然後一次加入一項:曝光特徵,接著是長度與形式,接著是 200,000 個 TF-IDF 特徵,最後是 MiniLM 嵌入。依頻道切分,絕不依留言切分,這樣問的才是模型能否遷移到從未見過的觀眾群。

組成 高於隨機的排序能力佔比
曝光(發佈時間、影片規模) 83.5%
長度與形式 8.4%
留言實際說了什麼 8.2%

留言長度可以說是內容,而非曝光。若照那樣計算,內容就升到 16.5%。無論如何曝光都是 83.5%,所以這個結論不取決於你把界線畫在哪裡。

讓我下定論的數字是:384 維的句子編碼器相較於詞袋模型只多了 0.0015 AUC。對純詞彙虛無模型的標準質疑是文字模型太弱,而一個完全不同的表示法家族卻落在同一個位置。

整體而言絕對可預測性都很低。最好的模型 AUC 為 0.671,隨機為 0.5。曝光大幅勝過內容,而兩者都輸給決定哪些留言會被按讚的其他因素。

這份資料集裡的陷阱

依抵達時間計算的 log1p(likes) 平均值,同一批 135 萬則留言的兩種分組方式 兩張圖,相同留言,相同 y 軸。影片內的相對位置與絕對時齡都呈現同樣的下降。

我一開始弄錯了,在你動手處理資料之前應該先知道這件事。

依留言發佈得多晚分桶,取每桶的平均讚數

發佈時的年齡 <1h 1-6h 6-24h 1-7d 1-30d >30d
平均讚數 19.8 21.7 19.5 19.8 25.8 20.4

平坦。完全沒有抵達時間效應。我還把這寫成一項發現。

現在對相同的分桶取 log1p(likes) 的平均值:

發佈時的年齡 <1h 1-6h 6-24h 1-7d 1-30d >30d
平均 log1p(likes) 0.764 0.387 0.230 0.181 0.163 0.129

下降達 5.9 倍。這個效應一直都在。

82.1% 的留言零個讚,而前 1% 的留言持有全部讚數的 94.9%。 在這樣的分佈上取組平均,得到的是關於該組離群值的統計量,而不是關於該組本身。一則爆紅留言就決定了整個桶的平均值。

任何對這份資料集採用原始讚數平均的摘要,都會在存在巨大效應的地方回報沒有效應。

認證出 3 倍的那個指標

先前的研究為生成的留言評分的方式是:把它嵌入,從參考語料中取出 K 個最近鄰,然後平均它們的讚數。我原本預期這可以靠相似度來作弊:用高讚文字訓練,落在高讚文字附近,不管人類會不會真的喜歡都得高分。

我錯了,錯了兩次。挑選真實的高讚留言並不能重現 3 倍的比值(我得到 0.88 到 1.21)。生成 960 則留言、其中一半以高讚範例做少樣本條件化,也做不到。

我反而發現這個統計量根本站不穩。在 K=5 時,平均值之比說條件化讓結果糟了 3 倍,而且區間排除 1.0。中位數之比在同樣的 480 個樣本上卻說好了 2 倍。三次執行下來,同一個數字先是 138,然後 0.09,然後以平均值算是 0.25、以中位數算是 2.00。

同樣的重尾分佈,和我上面自己犯的錯是同一種失效模式。一個方向會隨你怎麼摘要而翻轉的指標,撐不起 3 倍的主張,不管任何已發表的特定數字是怎麼來的。

它也幾乎追蹤不到它要估計的東西。對照真實的讚數結果,它排序留言的 Spearman 只有 0.050。而一個只知道留言何時發佈、影片有多大的模型,在同樣的留言上得到 0.19。

如果你只是想讓自己的留言被看見

把同樣的數字對準人而不是模型,就讀成一套策略。大致按影響力大小排序:

要早。 在同一部影片內,最早的十分位留言平均是最晚的 5.4 倍。依絕對時齡看,第一個小時的留言比一個月後發佈的高 5.9 倍。你能控制的其他事情都差得遠。

在大影片上搶早。 影片規模會把其他一切乘上去。在原始資料中,NileRed 影片上遲了六週才發的留言,勝過 Computerphile 影片第一小時的留言。500 萬觀看影片上的平庸留言,表現勝過 7 萬觀看影片上的好留言。

真正的獎品是第一頁。 顯示在上面的留言平均有 419.5 個讚,其餘則是 1.13。這是 373 倍的門檻,不是漸層,而且因為排序靠的是早期的讚,第一個小時才是買到入場券的關鍵。

挑頻道。 零讚留言的比例從 Vox 的 52.8% 到 Davie504 的 90.7%。在你還沒寫下一個字之前,光看你在哪裡留言,拿到任何讚的機率就差了將近一倍。

在 Shorts 上,要更快。 那裡的早發優勢是 7.6 倍,長影片則是 5.3 倍。

你寫什麼大約只佔 8%。 而它呈現的形式是短。留言平均長度隨讚數上升,然後反轉:100-999 讚級是 171 個字元,到 1000 以上降為 147。語料中最高讚的留言是針對某個特定片段的精簡回呼,而不是展開的觀察:

煉金術士最討厭這一招

這部影片幾乎全是灰階

那句硬撐出來的「支持本地商家」笑死我了

引用一個片段,壓縮它,停筆。

有兩個重要的附帶說明。全部留言中有 82% 拿到零個讚,而即使是用上我建構的每一項特徵的模型,排序 AUC 也只有 0.671,所以這裡大部分是你控制不了的變異。而且我測量的是什麼能預測讚,而不是什麼造成讚。時機效應很可能具因果性,因為它是機械性的曝光。「短回呼」則很可能只是其他因素的相關表現。

誠實的總結是:勝出的策略主要是後勤,而不是寫作。

這帶我們到哪裡

針對讚數去最佳化留言生成器,多半是在針對一個時鐘最佳化。用高讚留言訓練的模型,學到的是大影片上早發留言長什麼樣,而可歸因於留言內容的部分大約是 8%。

這並不代表留言品質無法測量。它代表測量必須先對曝光做條件化,而在此之前沒有任何公開資料集讓你這麼做。我接下來想建的,正是我做不到的那一塊:在曝光固定的條件下由人類對留言評分,這份語料讓它成為可能,但本身並不包含它。

資料集在 Hugging Face 上,採 CC BY 4.0 授權,程式碼與凍結的母體清單在 GitHub 上,而論文則有完整的層層加法、切分方式,以及我弄錯的部分。