詳解知乎反作弊垃圾文本識別的深度學(xué)習(xí)實(shí)踐
原創(chuàng)背景
截止今年 8 月,知乎注冊用戶量已突破 2 億。對于垃圾信息的治理,我們面臨著更大的挑戰(zhàn)和考驗(yàn)。過去我們通過不斷升級「悟空」的策略引擎,通過在行為、環(huán)境、資源、文本等多維度組合應(yīng)用,已經(jīng)取得了非常不錯(cuò)的效果。近期我們嘗試引入深度學(xué)習(xí)識別垃圾文本,「悟空」對 Spam 的治理能力又邁上了一個(gè)新的臺階。
問題分析
我們對當(dāng)前站內(nèi)垃圾文本進(jìn)行了梳理,發(fā)現(xiàn)目前主要包括四種形式:
- 導(dǎo)流內(nèi)容:這類內(nèi)容大概能占到社區(qū)中垃圾文本的 70%-80%,比較典型的包括培訓(xùn)機(jī)構(gòu),美容,保險(xiǎn),代購相關(guān)的。導(dǎo)流內(nèi)容會涉及到 QQ,手機(jī)號,微信,URL甚至座機(jī),在一些特殊時(shí)間節(jié)點(diǎn)還會出現(xiàn)各類的專項(xiàng)垃圾文本,比如說世界杯,雙十一,雙十二,都是黑產(chǎn)大賺一筆的好時(shí)機(jī)。
- 品牌內(nèi)容:這類內(nèi)容會具有比較典型的 SEO 特色,一般內(nèi)容中不會有明顯的導(dǎo)流標(biāo)識,作弊形式以一問一答的方式出現(xiàn),比如提問什么牌子怎么樣?哪里的培訓(xùn)學(xué)校怎么樣?然后在對應(yīng)的回答里面進(jìn)行推薦。
- 詐騙內(nèi)容:這類內(nèi)容一般以冒充名人,機(jī)構(gòu)的方式出現(xiàn),比如單車退款類,在內(nèi)容中提供虛假的客服電話進(jìn)行詐騙。
- 騷擾內(nèi)容:比如一些誘導(dǎo)類,調(diào)查類的批量內(nèi)容,非常嚴(yán)重影響知友體驗(yàn)。
這些垃圾文本的核心獲益點(diǎn)一方面是面向站內(nèi)的傳播,另一方面,面向搜索引擎,達(dá)到 SEO 的目的。
算法介紹
從算法角度可以把這個(gè)問題看做一個(gè)文本分類問題,把站內(nèi)的內(nèi)容分為垃圾文本和正常文本兩個(gè)類別。常用文本分類算法有很多,我們不打算詳細(xì)介紹每一個(gè)分類算法,只是分享我們在處理實(shí)際問題中遇到的一些問題和權(quán)衡。
我們遇到的第一個(gè)問題是使用CNN 還是 RNN。一般來說,CNN 是分層架構(gòu),RNN 是連續(xù)結(jié)構(gòu)。CNN 適合由一些關(guān)鍵詞來決定的任務(wù);RNN適合順序建模任務(wù) ,例如語言建模任務(wù),要求在了解上下文的基礎(chǔ)上靈活建模。這一結(jié)論非常明顯,但是目前的 NLP 文獻(xiàn)中并沒有支持性的文章。
另外一般來說,CNN 訓(xùn)練速度和預(yù)測速度都快于RNN??紤]到上述站內(nèi)垃圾文本的主要形式,導(dǎo)流和品牌內(nèi)容中都會出現(xiàn)關(guān)鍵詞,同時(shí)對于垃圾文本檢測的速度要求比較高,我們最終使用 CNN。一個(gè)典型的 CNN 文本分類模型如下圖所示。
接下來,我們遇到的一個(gè)問題是,使用字還是詞語作為輸入。詞語具有比字更高的抽象等級,更豐富的含義。但是導(dǎo)流內(nèi)容中的 QQ、手機(jī)號、微信、URL、座機(jī)等,通常不會出現(xiàn)在已有詞庫中,品牌詞也具有類似的特點(diǎn),一般是未登錄詞。而且,導(dǎo)流內(nèi)容通常會出現(xiàn)變體詞,使用詞語作為輸入,不能很好地捕捉類似特征。所以,我們最終使用的是字作為輸入。
在決定使用字作為輸入之后,需要考慮使用在知乎站內(nèi)語料上預(yù)訓(xùn)練的字向量初始化模型的Embedding層,還是直接在分類模型中隨機(jī)生成初始字向量。這里考慮的是垃圾文本的數(shù)據(jù)分布和知乎站內(nèi)文本的數(shù)據(jù)分布具有比較大的區(qū)別,垃圾文本相對于站內(nèi)正常文本是一個(gè)比較特定的領(lǐng)域。因此我們使用隨機(jī)初始化字向量。
在決定使用字向量之后,我們觀察到“有意者加我咨詢:2839825539”、“找北京·合·合·天·下”等關(guān)鍵信息,按字來計(jì)算通常都很長。因此,CNN需要更大的感受域來提取相關(guān)文本特征,如果簡單增加卷積核大小,會增加參數(shù)數(shù)量。我們考慮使用空洞卷積(Dilated Convolution),來增加卷積的感受域,同時(shí)不增加網(wǎng)絡(luò)參數(shù)數(shù)量。一個(gè)典型的空洞卷積如下圖所示。
另外我們觀察到需要識別的垃圾文本并不都是短文本,還有一部分是長文本。由于文本長度的關(guān)系,如果簡單將卷積層的輸出取平均,輸出到全連接層,那么文本能決定是否是垃圾文本的關(guān)鍵特征很可能被其他特征所淹沒,導(dǎo)致模型精度難以提升。因此,我們加入了一個(gè) Attention 層,通過它給予關(guān)鍵特征更大的權(quán)重。Attention 計(jì)算方法如下圖所示。
通過上述分析,我們最終采用的模型結(jié)構(gòu)如下圖所示。
垃圾文本分類算法結(jié)構(gòu)
模型效果
目前,垃圾文本模型會對知乎站內(nèi)的所有內(nèi)容進(jìn)行評分,輸出 0-1 之間的分?jǐn)?shù),系統(tǒng)會對高分內(nèi)容進(jìn)行處理。
模型分?jǐn)?shù)在知乎部分業(yè)務(wù)線上的表現(xiàn):
文本分?jǐn)?shù) |
>=0.9準(zhǔn)確率 |
>=0.8準(zhǔn)確率 |
>=0.7準(zhǔn)確率 |
回答 |
100.0% |
99.8% |
95.6% |
提問 |
100.0% |
99.1% |
97.7% |
評論 |
100.0% |
99.6% |
98.0% |
當(dāng)前情況下,模型結(jié)合其他反作弊維度,可實(shí)現(xiàn)對垃圾評分 0.5 分以上的內(nèi)容進(jìn)行刪除,同時(shí)準(zhǔn)確率達(dá)到 97% 以上。上線以來,每天刪除垃圾內(nèi)容數(shù)千條。
模型實(shí)時(shí)處理
另外值得一提的是端午期間,知乎站內(nèi)涌現(xiàn)了一波違法違規(guī)的 spam,垃圾文本模型覆蓋了 98% 以上內(nèi)容,使得這波攻擊大概持續(xù)了 1000 條左右就停了。
端午 spam 攻擊
后續(xù)計(jì)劃
垃圾文本識別是一個(gè)長期攻防的過程,站內(nèi)垃圾文本會隨著時(shí)間不斷演變,現(xiàn)有模型的效果也會隨之變化。為了應(yīng)對站內(nèi)垃圾文本的挑戰(zhàn),我們將一直收集 badcase,進(jìn)一步優(yōu)化模型的效果。
最后
由于本人的水平有限,如有錯(cuò)誤和疏漏,歡迎各位同學(xué)指正。
作者:孫俊,知乎內(nèi)容質(zhì)量團(tuán)隊(duì)的算法工程師。主要負(fù)責(zé)導(dǎo)流信息識別,垃圾文本識別和文本情感分析模型的開發(fā)和維護(hù)。