聊天過濾器現在會說我們全部十二種語言
它原本只有一本詞典,而那是英文的。於是另外十一種語言裡寫的髒話它一句也沒攔住——與此同時,它卻在拒絕完全普通的詞,包括法語裡的「三」,而這是一個用骰子玩的遊戲。

通俗版
玩家在 opolyx 裡敲下的內容中,有四分之一不是英文,而在此之前聊天過濾器一個字都讀不懂。它只有一份很大的英文詞表,這意味著用俄語、中文、阿拉伯語、西班牙語或德語寫的辱罵原封不動地穿了過去。這是你能預料到的那一半。你預料不到的那一半是:同一份詞表正忙著拒絕一些一點都不粗魯的詞——法語裡的「三」,在一個用骰子玩的遊戲裡;一個在德語中意為「富有」的詞,在一個關於地產的遊戲裡;還有一個西洋棋棋子的英文名字。一位法國玩家沒法在聊天裡打出數字三。
現在,網站發布的每一種語言都有了自己的詞典,另加烏克蘭語,而且每一本都是按那門語言真正如何構詞來寫的,而不是把英文詞表翻譯一遍。俄語有詞形變化,所以規則必須連著詞根和詞尾一起命中。中文詞與詞之間不加空格,所以規則必須往句子內部看。而且當某則訊息被拒絕時你收到的提示現在也翻譯過了——它原本是英文的,出現在一個有十二種語言的網站上,於是最不可能看懂這句拒絕的人,恰恰最可能收到它。
技術細節
最難的部分是證明這裡面有任何東西真的有效,而理由值得直說:一個審核過濾器無法用它自己的聊天紀錄來檢驗。被舊過濾器拒絕的訊息從來沒有被保存過,所以紀錄裡只有穿過去的那些——而對於一門還沒有玩家的語言,紀錄裡什麼都沒有。用它來測試,等於在數倖存者,然後把這叫作覆蓋率。所以詞典改為對著我們自己的翻譯文字來檢查:網站的每一個頁面、每一種語言,都是我們自己寫的,從構成上就是乾淨的。過濾器在那裡標出的任何一個詞,按定義就是誤報,中間不摻任何主觀判斷。
| 它做了什麼 | 數量 |
|---|---|
| 全部語料中攔下的髒話 | 0 |
| 它現在能看見的髒話 | 113 |
| 被它誤標的我們自己的乾淨頁面 | 40 |
暱稱比訊息分量更重,而它們此前完全沒有被過濾。訊息會捲上去消失;暱稱卻印在你每一步棋的旁邊,還會被畫進這個網站發到 YouTube、Instagram 和 TikTok 的精華短片裡。現在它們會被檢查——但刻意不用那份大詞表,因為作為純粹的子字串,它連「Classic」和「Cassandra」都會拒絕。若天真地拿它跑一遍 opolyx 上兩千五百個真實暱稱,子字串式的做法會標出四十個,其中大約一半是普通名字:Hassan、Yassin、Phoenix。把那種東西發出去,等於告訴這些玩家他們的名字是下流的。
中文這個例子最清楚地說明了,為什麼一份英文詞表不能簡單翻譯了事。舊的比對方式是比較用空格分開的完整單字——這是個相當合理的設計,因為正是它避免了「assassin」因為內含一個粗魯子字串而被拒。但中文不用空格分詞,於是一整句中文會作為一個巨大的詞元抵達,任何詞表裡的任何條目都永遠不可能在它內部比對上。問題不在於過濾器的中文不好,而在於它在結構上根本看不見中文。
