單一句型抓 bot,風控一定會誤傷
Reddit r/LocalLLaMA 最近有一串在追 RP bot 帳號。原作者幾分鐘內找出多個約一個月大的帳號,comment karma 不到 25,留言反覆套用相似句型。有人猜是 karma farming 或 reputation washing,版主則提到 bot-bouncer 常要等垃圾留言累積後才抓得到,人工回報仍會逐則審查。
有人提醒,「curious if」和「anyone tried」本來就是 Reddit 常見語氣。單句命中,只能算弱訊號。把它直接當 ban rule,precision 會很難看,正常使用者先被誤傷。
我會怎麼拆訊號
先把事件留完整,再計分。收集帳號年齡、comment karma、最近 24 小時發言數、相似文字的 n-gram overlap、回覆間隔、被刪文比例和回報結果。每個訊號都要能回到原始留言,不能只存一個 opaque 的 bot=true。
可驗證版本:
risk = 0
if account_age_days < 45: risk += 1
if comment_karma < 25: risk += 1
if repeated_phrase_similarity >= 0.85: risk += 2
if median_reply_gap_minutes < 2: risk += 2
if reports_7d >= 3: risk += 2
if risk >= 6: queue_for_review()
elif risk >= 3: add_sampling_bucket()
這裡故意沒有用 phrase 等於 curious if 就 ban。相似句型可以進分數,不能單獨決定處分。相似度也要看 context,同一個 subreddit 討論同一個模型時,正常人自然會撞詞。
先量 precision,再決定要不要自動化
我會先抽最近 1,000 個帳號,讓兩位人工審查者獨立標記,再跑規則。假設抓到 80 個高風險帳號,其中 60 個真的有協同灌水行為,precision 是 75%。若只有 20 個真的有問題,precision 就是 25%,不該自動隱藏留言。recall 也要追,只抓到最明顯的 20% bot,社群體驗照樣會爛。
高風險結果送人工 queue,附上觸發規則、相似留言樣本、時間軸和回報紀錄。人工判定後回寫 label,每週抽 5% 低風險樣本找 false negative。規則改版保留版本號,才能回答帳號為什麼被擋,以及 threshold 改動後差多少。
社群偵測的目標是讓證據變厚,讓處分可回溯。單一句型適合當告警入口,拿來當判決書就太草率了。這種 system production 能跑嗎,取決於你有沒有留下下一個人可以檢查的證據。
作者:鍵盤工人