對抗濫用內容的演算法筆記
自從上次推出「守望相助隊」之後,Matters 社群已經累積了快要 600 筆主動打掃的違規內容,其中色情廣告佔約九成。這段時間以來又做了諸多更新與研究,對於垃圾文偵測演算法、首頁排序設計、社群設計有了更深的經驗,這則筆記紀錄不同內容類型的垃圾排除設計研究。
如果前文所說,平台服務者撇除「演算法霸權」,以基於商業利益考量的演算法,讓使用者「困在社群平台」,另一種演算法(或更廣義的平台設計),是為了避免「劣幣驅逐良幣」。如果放眼望去都是垃圾內容,正常寫作、閱讀的使用者,大概都會被嚇跑。所以平台服務者必須研發符合該社群需求的「打掃演算法」——核心目標是「驅逐劣幣」,而劣幣在不同平台、語境、脈絡,定義可能不同。不過具有共識的劣幣,不外乎是色情廣告、濫用廣告、詐騙內容與洗 SEO 內容。
不過「內容」本身有不同類型,因此也有不同的防治策略,我覺得整個實作路徑,很像以前修寄生蟲學或免疫學的概念,不同量體的害蟲,要有不同的防治方法,舉凡對症下藥、環境打掃、培植益蟲、群體免疫,條條大路通羅馬,但不是每一招都能整治害蟲。
短文
最近我們開放了短文頻道集成,也就是如同推特的推文(140 字元)、脆(Threads)的短文,有嚴格的字數限制的小品文。其實 Matters 本來就有短文,在 Matters 稱為短動態,但過去沒有集成,只能在個人頁面看到。
沒有集成的好處是,即使有違規帳號發了一大堆廣告短文,其他正常的使用者也不會看到,因此使用者體驗不會被破壞。但如今要集成成為單一頻道,藉由線上互動(如按讚、留言)作為最新排序,如果無腦集成,就會將一大堆垃圾內容灌進頻道裡面。這會導致上線即陣亡。
而垃圾偵測模型方面,實務上要偵測短文的難度是比長文高的。原因在於短文讓「純內容偵測」容易失真,比如短文訊號量少、歧義度高、很難抓上下文關係等等。尤其偽陽性問題更是麻煩,許多正常的短文被分類成垃圾內容,這實在是非常糟糕的事情呢。
因此更好的方式是抓「Ring」也就是「水軍團夥一把抓」的意思。通常同一個操盤手(或同一個廣告主),會自動生成一堆垃圾帳號,拿幾乎一樣的內容到處亂貼,所以只要偵測到重複樣態的內容在短時間內出現,幾乎就可以確定是「Ring」行為,這就很好一網打盡了。
但最近也發現用 AI 將 Ring 產生變異的垃圾內容,實在是道高一尺,魔高一丈,越來越難抓了。
不過秉持著「公共廣場」實驗的精神,我還是想要集成短文,因此我們採取了「opt-in」白名單制度,搭配退火設計。也就是說,我們集成短文的「閒聊」頻道,如果想要將自己的短文放進來,就必須按「加入」功能。只要管理員看一下沒問題,或者 48 小時內沒有被拒絕,就會通過獲得資格。
開放半個月以來,「閒聊」杜絕了 100% 的垃圾內容,即使整個垃圾短文總量佔據整個站台超過一半的比例。這樣的社群設計機制,比用模型偵測還要便宜有效許多。在規模小的 local 社群,其實挺適合的。
不過同一時間,也在持續訓練短文模型。
留言
垃圾留言的侵略性比垃圾短文高太多了。原因是各自發短文,相安無事,沒事也不會點進去垃圾帳號的頁面去看,體驗不會差。但如果垃圾帳號「主動」去別人的正常文章下面留言,一般使用者就不得不看到,甚至通知也會跳出來,這是最糟糕的體驗,也是怨聲載道比例最高的理由之一。
這也是為了先設計了「守望相助」制度,讓願意 opt-in 的使用者獲得可以刪除色情或濫用留言的權利,而為了制衡權力濫用,也製作了自動化的透明布告欄,記錄每一則打掃(刪除)行為。
上線一個以來,將近六百則的打掃中,很開心的是,沒有一則留言打掃行為有被申訴,因此可以將整個機制設計是為一個成功的設計。而且垃圾留言出現的頻率大幅降低了,可能是 ring 壞壞集團發現這樣做,真的沒賺頭。
不過基於這 600 則垃圾留言資料庫,可以往下做的事情實在太多了,其中一個就是將這些垃圾樣態訓練成新的模型,餵給機器人,讓它可以自動自發的去海巡,然後同樣打掃(刪除)、檢舉可疑的內容,當然這些過程也會被透明紀錄(因此是可信賴、負責任的 AI?)。然後這些機器打掃行為,也會第一時間通報給管理員,就跟掃地機器人一樣。
為了不誤掃正常留言,我設下了嚴格的限制,比如打掃內容要重複三次出現才會啟動打掃功能,並且要符合 ring 的樣態,或者模型分數要高到一個很確定的門檻,不然可疑的留言不打掃,交給眾守望相助隊隊員。
這樣一來,守望相助隊隊員的負擔,就可以大幅降低。而這支 AI 機器人,其實就如同唐鳳所說的 Kami(地神)概念,是由群眾集體的智慧創生出來的,其行為也是集體的展現,我並沒有加上更多的設計。
對我來說,是一個巧妙、簡單,好理解的設計(自己說)。
多談一點訓練於「垃圾留言」的模型與分類器,整個實作成果與長文竟然完全不一樣!
在留言方面,採用了 multilingual-e5-small 模型,參數大約是 0.1B,是多語言、擅長做對比學習的小小模型,由微軟團隊開發,可以簡單區分垃圾留言與正常留言。
有意思的是這樣的小模型比更笨重的模型效果還好,偽陽性僅 0.33%,而我們在文章方面選用了 granite + LoRA 的訓練方案, granite 是 IBM 製作的,規模跟 e5 差不多,但我們用 LoRA 微調了模型,所以更費功夫,表達力強、能學更細的任務特徵。但實際上在留言這種極短的文字串中,錯誤率比 e5 高很多。
因此在留言防治措施上,我們上了好幾層保護,包含志願者打掃、模型訓練志願者提供的資料並且自動打掃(Auto)、辨識垃圾集團(Ring)、還有管理員判斷機制,總共四層機制。
因為留言具有侵略性,所以設計上比較激進。
長文
長文方面,其實本來就有許多防治措施,如同之前的貢獻者 Duke 在 g0v Summit 所分享的,Matters 對於垃圾長文其實很「寬容」,不太會主動去註銷、刪除其帳號,少數主動進行的動作是將其「關入小黑屋」,不讓這些文章跑進各頻道裡面,去污染一般使用者的版面。
文章治理自始即為機器偵測驅動之自動能見度調節。
也就是俗話說的「演算法」。
而此中精華,就是在如何將「關入小黑屋」、「標記為 Spam」的樣本們,訓練成更有效的垃圾文偵測模型,之前透過同仁之手,總共人工打標籤了四萬多筆資料呢。
文章的治理原則約莫在 2024 年中就奠定了,並貫穿其後全部演進,
處置原則為「不刪除內容,只是不再被看見」。高分的可疑文章被排除於推薦、熱門、標籤與頻道等地方,但內容、頁面與既有連結均保留。
這個原則對一個抗審查之中文書寫平台尤具意義,它使「抑制垃圾」之代價被限制在「降低觸及」而非「消滅內容」,從而為日後模型的偏差,比如誤判政治、學術內容,這是完全可預期的,保留了可逆性。
過了兩年,本來想用新的模型(如Qwen3-Embedding、BGE-M3)來訓練看看,但發現原本的模型其實就夠強了,微調一下就行。
但有一個非常有價值的發現,就是舊模型在每天搜集資料重新訓練的過程中,漸漸被污染,整個誤判率因此飄移了。誤判不是被惡意協同攻擊導致的(雖然這個站台確實一天到晚一堆協同攻擊),反而是被錯殺放大導致。
錯殺的意思是當一個帳號被標記過某天文章有問題,結果後來變正常,這些正常文還是會被識別為有問題,然後就像是不小心把可樂倒進去麵團裡一樣,越揉越分不出可樂在哪裡。這導致有些政治評論、學術考據、日記、詩的文章被看成是垃圾文。
好在基於相對安全的設計,這些分數僅見於後台,並沒有被真正落實在演算法的排序上面。
後來我用了 Claude 的 Sub-agent,搭配 Sonnet 模型,抓出 5,000 筆資料重新校正可疑的內容(成本只花了 1 USD) ,結果意外抓出了一堆有意思的垃圾文,比如説許多防詐騙科普,其實是貸款公司的洗白文(之前也是因為這類文章,被 DNS-RPZ 鐵拳,導致整個 Matters 網域在台灣被禁,當時我還只是一般用戶)。
校正完模型之後,偽陽性降低了 10 倍以上,進入可以上線操作的階段,並且也導入了集團(Ring)模式,在更主動一點去凍結短時間內出現的數百則濫用內容。
這邊的小結論是,其實「小模型(0.1B)+ LoRA 微調模型」+「LLM(可能超大幾 T 之類的)校正垃圾文品質」的混搭模式,可能比更新模型的效果還要好,在成本與成效方面。
目前的進度到這邊,下一步我覺得還可以做的是開放整個垃圾內容資料庫,無論是靜態還是動態,都可以作為前線打詐的最佳實務,實際上研究了一些官方與民間的資料庫,如打詐通報或 co-fact,但還沒照到最適合沿用的模式,前者只有與特定業者合作,後者偏向事實查核。這題真適合繼續研究下去。
之所以要記錄這些「垃圾內容防治」的筆記,一方面是增加自己的實作經驗,另一方面是我自始至終認為,最佳的平台治理,是透明化的流程開放,而在機器人大戰的時代,人類只能在中間求生存,因此更需要透明化整個演算法、訓練資料庫,以及因為偽陽而被錯殺的案例。
許多大型平台這幾天被批評就是因為背後被錯殺、封鎖、停權的原因,使用者實在不知道,甚至有些是付費使用者吶。因此先寫出來,並且開源整個實作流程,是整個大環境對平台治理認識的第一步。
感覺可以再去讀一個 PhD 了。
延伸閱讀:
