明建華,胡 創(chuàng),周建政,姚金良
1.天鴿互動控股有限公司 項目部,杭州310105
2.杭州電子科技大學 計算機學院,杭州310018
隨著互聯(lián)網技術的發(fā)展,人類社會逐漸步入了信息時代。其中4G網絡的普及催生了以直播為代表的各類信息產業(yè)。直播開始融入到人們的生活當中[1],通過彈幕實現(xiàn)用戶與主播、用戶與用戶之間的互動更是成為一種新型的網絡社交方式。這種用戶自由發(fā)表內容的方式方便了信息的分享與交流,但是這種互聯(lián)網發(fā)布方式也極易被不法分子利用,發(fā)布一些非法廣告信息。各種虛假信息、垃圾信息、色情、暴力等不良短文本遍布在各類直播彈幕中,其中色情廣告在直播彈幕中最為盛行。這類色情廣告通過彈幕的方式將游客引導至色情網站或者提供色情服務的微信、QQ 等社交網絡賬號上。為了杜絕這類非法信息的傳播,直播平臺需要在服務端構建專門的程序來檢測用戶發(fā)布的內容,確認是否為非法信息。如果是非法信息,則阻止發(fā)布信息,并封禁非法賬號[2]。
當前實際應用中最為常用的短文本過濾方法是基于關鍵詞過濾的方法[3]。該方法事先構建一個關鍵詞列表,通過檢測短文本中是否含有該關鍵詞進行判別。這種方法的效率高,但同時識別率比較低。關鍵詞列表的構建一般需要人為篩選,整個篩選過程耗時耗力。因此,在實際應用中一般選用已經構建好的通用關鍵詞列表,然后根據(jù)實際應用的結果去更新關鍵詞列表。關鍵詞列表雖然是目前最為通用的方法,但其并不能滿足實際應用的需求。隨著統(tǒng)計機器學習的發(fā)展,一些研發(fā)人員采用統(tǒng)計機器學習方法實現(xiàn)短文本過濾。樸素貝葉斯、支持向量機等方法都在短文本過濾方面取得不錯成績[4],但是短文本的字符數(shù)量有限,該類方法無法充分利用詞語的上下文,因此,其識別準確率仍難以滿足實際應用的需求。
另外,由于非法用戶也會根據(jù)檢測系統(tǒng)改進發(fā)布內容的形式,從而躲避系統(tǒng)的識別。當前逃避識別和過濾的主要方式是對短文本中的關鍵詞進行變體。比如,將“發(fā)票”寫成“發(fā)漂”,將“裸聊”寫成“落聊”等等。統(tǒng)計已有的一些非法色情廣告信息,發(fā)現(xiàn)當前存在的主要關鍵詞變體形式為:(1)夾雜特殊符號(一般是標點類的非文字字符),比如:“QQ296『161『7102”;(2)形狀相近的字符替代,比如,“日”替換為“曰”;(3)同音或近音替換,比如:“微”替換為“為”;(4)拼音替換,“微信”替換為“weixin”;(5)關鍵詞倒序或者整句倒序;(6)中文字符拆分成偏旁和其他字符,比如:“裸”拆分為“衤果”。(7)關鍵詞繁體化;(8)對英文和數(shù)字等采用相似形狀字符的穿插,比如:“a5m2coM”;(9)對數(shù)字字符轉換為編號形式或者中文數(shù)字等,比如:“嶶765510103㈡”。
為了應對關鍵詞的變體形式,通常采用一種關鍵詞擴展的方法。該方法將關鍵詞表根據(jù)可能的變體形式構造關鍵詞的變體形式,并作為關鍵詞表的一部分。另外,為了應對關鍵詞變體,溫園旭提出了提取變體特征的方法[5]。該方法提出采用一些規(guī)則構建特征來表達可能出現(xiàn)的關鍵詞變體形式,然后采用貝葉斯分類器進行識別。但是采用構建規(guī)則的方式提取變體特征容易被非法用戶識別,從而非法用戶可以方便地更新變體的產生方式來逃避系統(tǒng)的識別。另外,人為地構建變體特征是一項比較困難的工作。
針對當前方法難于有效處理關鍵詞變體和傳統(tǒng)短文本分類方法準確率不高的問題,本文提出利用深度學習技術在樣本中發(fā)現(xiàn)可能的變體特征,并挖掘字符之間的相關性特征,提高帶噪短文本的分類準確率的方法。該方法利用深度學習強大的學習能力,并且易于根據(jù)樣本進行更新,從而能快速應對新出現(xiàn)的變體形式。該方法可部署于各類直播彈幕檢測的服務器端,實現(xiàn)對用戶提交的帶噪短文本的自動識別,阻止有害信息的傳播。
帶噪短文本識別和過濾是保障網絡內容安全的重要手段,它涉及自然語言處理、信息檢索、信息過濾和模式識別等多個領域。在現(xiàn)有關鍵詞過濾方法準確率低的情況下,許多學者都開始研究機器學習在短文本過濾中的應用。韓偉在其碩士論文中實現(xiàn)了樸素貝葉斯、決策樹、支持向量機、k近鄰、隨機森林在短文本過濾中的應用[6],取得了不錯的成果。也有學者如劉梅彥、黃改娟通過依存句法獲取語句的語義框架來研究文本信息內容[7],分析出文本的感情狀態(tài)。從而判定文本是否是某一特殊情感傾向的文本,如包含暴力、色情、詐騙、垃圾信息等的文本。
國外在文本信息過濾方面的研究大多以檢測垃圾郵件為主[8-11],而在短文本識別過濾和用戶檢測方面主要專注于以網絡垃圾用戶為主的用戶識別。如在電子商務領域,利用用戶評價數(shù)據(jù)判斷是否為極端用戶。在社交網絡領域,利用推特用戶的昵稱、發(fā)布的信息,實現(xiàn)垃圾用戶的檢測與識別[12-13]。
本文提出的針對直播彈幕的TextCNN 過濾方法分為訓練過程和實時識別過程。具體方法流程見圖1。在訓練過程中,首先對訓練樣本進行預處理,通過對訓練樣本中噪聲部分的識別、分類處理,降低了噪聲對短文本識別準確率的影響。預處理后得到的數(shù)據(jù)作為訓練模型的輸入。接下來,構建Text CNN過濾模型,通過調節(jié)訓練參數(shù)改善模型訓練的結果。最終,得到訓練好的TextCNN過濾模型。
圖1 針對直播彈幕的TextCNN過濾方法示意圖
在實時識別過程中,將實時的帶噪短文本通過同樣的預處理過程得到用于實時識別的數(shù)據(jù)輸入。應用訓練過程得到的TextCNN過濾模型,得到分類結果。
預處理的目標是減少噪聲的影響,雖然噪聲符號也可以作為詞匯進行短文本卷積神經網絡的訓練,但是由于噪聲符號添加的多樣性和訓練樣本數(shù)據(jù)的稀疏性,直接通過預處理去掉這些噪聲符號可以更好地應對各種符號變換的噪聲添加操作。預處理步驟通過6 個處理過程對輸入的帶噪短文本進行處理。處理的結果可以直接用于CNN短文本過濾模型的訓練或實時識別。
如圖2 所示,本文方法的預處理步驟包括:數(shù)字字符標準化、英文字符標準化、繁體中文字符轉簡體中文字符、特殊意義符號處理、去除夾雜噪聲符號、連續(xù)數(shù)字字符統(tǒng)一表示和字符串切分6個處理過程。
圖2 帶噪短文本預處理流程圖
如圖3 所示,數(shù)字字符標準化是將所有unicode 編碼下具有數(shù)字意義的編碼符號轉換為標準的數(shù)字字符編碼。比如:將“ ⑦”“零”“ ㈡”分別轉換為“7”“0”“2”樣式的標準數(shù)字字符。為了實現(xiàn)這一轉換過程,本文通過查看unicode 編碼下的所有具有數(shù)字意義的符號,根據(jù)數(shù)字符號的有序性,構建編碼轉換的對應關系。比如:“①”到“?”的符號在unicode 編碼表中是有序排列的,對于“①”到“⑨”,本文通過以下公式實現(xiàn)變換:ch_out=chr(ord(ch)-ord(“①”)+ord(“1”))。其中ord 函數(shù)是獲得字符的unicode 編碼,chr 函數(shù)是通過unicode編碼獲得對應的字符。類似的,對于“⑩”<=ch<=“ ?”,ch_out=“1”+chr(ord(ch)-ord(“ ⑩”)+ord(“0”));對于“?”則特殊處理,如果ch 為?,則輸出直接賦值為“20”。以同樣的方式,本文的數(shù)字字符標準化處理了“:0”<=ch<=“9”“、⑴”<=ch<==ch<=<=、對于“⒈”<=ch<=“ ⒛”和“0點”<=ch<=“24點”,則在轉換的結果后面添加“點”符號。對于“1日”<=ch<=“31日”,則在轉換的結果后面添加‘日’符號。對于“零一二三四五六七八九十”和“壹貳叁肆伍陸柒捌玖”中的字符,則通過index函數(shù)獲取輸入字符在該字符串中的位置,然后通過str 函數(shù)將位置的整數(shù)值轉換為字符。而對于非數(shù)字意義的符號,數(shù)字字符標準化不進行處理,直接返回原來的字符。
圖3 數(shù)字字符標準化
如圖4所示,英文字符標準化是將所有的具有相似形狀的不同編碼的字母符號轉換為標準的小寫英文字符。比如:將”分別轉換為“a”“f”“k”樣式的標準小寫英文字符。由于相似的字母符號在unicode編碼表中沒有統(tǒng)一的連續(xù)的進行編碼,因此本文通過構建一個字典結構的對照表進行實現(xiàn)。為此,本文用一個文件存儲形狀相似字母符號;將unicode 中形狀相似的字母符號保存為文件中的一行。比如:
其中第一個“h”為標準字母,并用“:”將形狀相似的字母分開。后續(xù)的相似字母通過空格分隔。本文中構建了所有26個英文字母的形狀相似符號對應關系。通過該文件,可以創(chuàng)建一個字典結構,其中的鍵為形狀相似字符,值為標準英文字符。通過查找該字典實現(xiàn)字符的轉換。對于大寫字母則通過常用的大寫字母轉小寫字母函數(shù)實現(xiàn)。英文字母標準化對于非英文字母,則原樣輸出[14]。
圖4 英文字符標準化
如圖5所示,繁體中文字符轉簡體中文字符是將字符串中可能存在的繁體中文字符轉換為簡體形式。本文通過構建一個對應關系的表進行實現(xiàn)。該表是通過查找unicode編碼中所有簡體和繁體不一樣的所有中文字符實現(xiàn)。同樣采用了字典結構實現(xiàn)快速的轉換。實現(xiàn)的時候使用了zhtools 這個python 包。該包構建了簡體和繁體的對應關系。
圖5 繁體中文字符轉簡體中文字符
如圖6所示,特殊意義符號轉換處理是將一些具有特殊意義的符號轉換為對應的特定意義的符號。比如:將等形狀類似“+”的符號轉換為中文字符“加”。因為這些特殊意義的字符代表了特定的語義信息,并且比較重要。很多的噪聲添加模式就是通過將有意義的特定中文字符轉換為這類字符,并通過形狀相似性進行了替換。為此,本文采用類似于相似形狀英文字母的轉換方法進行實現(xiàn),構建了一個對照表,比如:
最后通過字典結構實現(xiàn)轉換。本文通過對語料的分析查找可能存在的特殊意義的符號,并構建對照表實現(xiàn)特殊意義字符的轉換。
圖6 特殊意義符號轉化
如圖7所示,去除夾雜噪聲符號是對經過上述字符轉換操作后得到的短文本過濾掉非中文字符、非英文字符和非數(shù)字字符的所有符號,比如:
標準化字符后的字符串這一操作比較容易實現(xiàn),直接去除上述非中文字符、非英文字符和非數(shù)字字符的所有符號即可。
圖7 去除夾雜噪聲符號
如圖8所示,連續(xù)數(shù)字字符表示是將經過以上處理的短文本中連續(xù)的數(shù)字字符根據(jù)數(shù)字字符的個數(shù)表示為“
圖8 連續(xù)數(shù)字字符表示
如圖9所示,字符串切分是經過上述字符轉換后對短文本進行切分。在本文中,中文字符被單獨切分為一個字符,連續(xù)的英文字符被切分為一個單元,連續(xù)的數(shù)字字符用“
圖9 字符串切分
TextCNN過濾模型(見圖10)包括:一個詞向量的嵌入層,用于將字符轉換為向量表示;然后根據(jù)卷積的尺度進行卷積,一個卷積核可以得到len(sequence)-filter_size+1 個卷積結果;然后對所有的卷積結果進行ReLu激活函數(shù)進行非線性處理;再對處理結果用最大值池化,每一個filter 得到一個值。最后將所有的filter 值通過全連接層輸入到softmax進行分類。
圖10 TextCNN模型示意圖
預處理步驟可以消除大部分噪聲字符的影響?;陬A處理后的數(shù)據(jù)構建詞向量表,利用tensorflow 中的VocabularyProcessor 函數(shù)設定TextCNN 過濾模型的詞嵌入層的詞向量長度為128。卷積層的尺度設置為(3,4,5),也就是卷積核的尺寸分別為3、4、5。從而可以捕獲跨度分別為3、4、5 個字符之間的關系。另外,對每個卷積尺度又設置128 個濾波器。設定非線性函數(shù)為Relu 函數(shù)。在池化層采用最大值池化,也就是一個濾波器返回的結果向量中取最大的值作為池化層的輸出結果。
構建好深度學習的網絡模型后,需要設定損失函數(shù),從而通過最優(yōu)化來得到模型在訓練樣本集上最優(yōu)的參數(shù)。本文中卷積神經網絡模型訓練時設定的損失函數(shù)為:
其中l(wèi)2_loss為了防止參數(shù)過擬合增加了參數(shù)正則項。該正則項作用于softmax 前的全連接層的權重。loss1為交差熵損失函數(shù)。本模型采用tensorflow函數(shù)softmax_cross_entropy_with_logits進行實現(xiàn)。其首先對全連接層的輸出(輸出為每個類別的值)進行softmax函數(shù)運算:
從而將輸出轉換為屬于每個類的概率值;然后對softmax 函數(shù)的輸出與真實樣本的標簽(類別)做交差熵。Tf.reduce_mean函數(shù)用于計算loss1中一個batch的平均交差熵。因此,本模型的損失函數(shù)包括交叉熵函數(shù)和權重正則項損失,其中Lambda為兩者之間的權重[15]。
接下來,設定最優(yōu)化方法,通過梯度下降算法來計算參數(shù)的最優(yōu)解。本模型采用的是Adam 最優(yōu)化方法。Adam算法根據(jù)損失函數(shù)對每個參數(shù)的梯度的一階矩估計和二階矩估計動態(tài)調整針對于每個參數(shù)的學習速率。Adam 方法的學習步長有一個范圍,不會因為某個樣本上產生很大的梯度導致很大的學習步長,參數(shù)變化比較穩(wěn)定。
為了測試本文設計的過濾模型的效果,實驗采用了來自視頻直播平臺上的數(shù)據(jù)。特此說明,本次論文的數(shù)據(jù)來源于天鴿互動控股有限公司旗下喵播、歡樂吧等在線直播平臺。平臺通過用戶的發(fā)帖行為模式獲取了色情廣告短文本13萬條,正常短文本8萬條,總樣本數(shù)21萬條。在實驗過程中,將色情廣告短文本、正常短文本按照9∶1的比例,劃分為訓練集和測試集。對比實驗中采用同樣的數(shù)據(jù)集,通過統(tǒng)計關鍵詞出現(xiàn)的次數(shù)構建樸素貝葉斯模型[16]及SVM模型。
如圖11 所示,作為對比實驗的樸素貝葉斯模型。在其實驗過程中,先通過jieba 分詞對訓練數(shù)據(jù)集進行處理并統(tǒng)計詞頻,將詞頻較高的關鍵詞0-1 向量化作為輸入。接下來縱向比較不同輸入向量維度下樸素貝葉斯模型的識別準確率,即圖11 橫坐標表示輸入向量維度??梢钥吹?,當輸入向量維度為2 000 時,召回率、精準率、準確率趨于平緩。此外,在實驗過程中隨著輸入向量維度的增加,所占用的計算資源也越來越大。故在接下來實驗結果橫向對比中,采用樸素貝葉斯模型在輸入向量維度為4 700時的各項指標。
圖11 樸素貝葉斯實驗結果
SVM模型的特征輸入采用word2vec向量化表示的方法。事實上,當SVM 模塊采用與樸素貝葉斯模型相同輸入特征時可以取得與樸素貝葉斯模型相近甚至更好的識別準確率,但其消耗的計算資源也比樸素貝葉斯模型更大,無法滿足高效識別的要求。故SVM 模型和本文提出的模型均采用word2vec向量化后的輸入。
SVM 模型、4 700 維輸入向量下的樸素貝葉斯模型和本文提出的Text CNN短文本過濾模型進行比較。結果見表1。
表1 橫向對比結果%
從實驗結果上看,本文提出的針對直播彈幕的TextCNN 過濾模型的準確率達到90.6%,高于樸素貝葉斯模型的81.2%,且遠高于SVM模型的53.6%??梢缘玫剑疚奶岢龅尼槍χ辈椖坏腡extCNN過濾模型是優(yōu)于樸素貝葉斯模型和SVM模型的。
可以看到,word2vec 向量化作為輸入的SVM 模型在可接受的時間下能夠被計算出來,同時也損失了準確率,甚至低于樸素貝葉斯模型。
此外,單從統(tǒng)計學角度去分析數(shù)據(jù)的樸素貝葉斯是無法充分考慮到詞語的上下文。如表2中非法彈幕“主播的衣服應該直接脫掉”,單從“主播”“衣服”“脫掉”這幾個關鍵詞考慮,樸素貝葉斯模型的判定結果是正常的。而針對直播彈幕的TextCNN短文本則考慮到了“衣服”“脫掉”之間的聯(lián)系,從而給出了正確的判定結果。除此之外,直播彈幕這一短文本類型還有著重復率高的特點。統(tǒng)計單個字在正負樣本出現(xiàn)的次數(shù),訓練樣本發(fā)現(xiàn)總共出現(xiàn)17 286個單字,其中正常短文本出現(xiàn)16 722個單字,不良短文本出現(xiàn)15 072個單字。大部分字在正負樣本中都有出現(xiàn),使得只依靠關鍵詞或者統(tǒng)計學的方法難以取得高的準確率,甚至低于同類方法在垃圾郵件等其他文本分類上的準確率。總的來說,統(tǒng)計學類的機器學習方法因難以充分考慮帶噪短文本字符之間的關系,使得其難以得到高的識別準確率。而且,在直播彈幕這類字符重復率高的特殊短文本的應用上表現(xiàn)更差。本文提出的Text CNN 短文本過濾模型,則通過利用字符之間的關系,在一定程度上解決了直播彈幕識別率低的問題。但是,本文提出的模型準確率還有提升的空間。盡管本文提出的方法消除了大部分噪音的影響,也利用了詞語的上下文。但是中文字符的同音字符替換這個難點問題仍有待進一步的優(yōu)化。
表2 識別結果示例
此外,為了說明預處理過程的重要性,還做了有無預處理過程的TextCNN過濾模型的實驗對比。
從表3的結果可以看到,噪聲對實驗結果的影響巨大,預處理過程能夠更好地幫助模型識別非法彈幕。
表3 實驗結果%
本章中共進行了三組實驗。第一組實驗中,通過縱向對比不同輸入向量維度下的樸素貝葉斯模型,得到結論:隨著輸入向量維度的增加,樸素貝葉斯模型的識別準確率在增加,但所占用的計算資源也在增加。第二組實驗,橫向對比了樸素貝葉斯模型、SVM模型和本文提出的針對直播彈幕的TextCNN 過濾模型。需要特別說明的是,當SVM 模型采取和樸素貝葉斯相同的數(shù)據(jù)輸入時,SVM 模型將占用更大的計算資源,故盡管采用word2vec 向量化的輸入的SVM 模型表現(xiàn)更差,但其所需的計算資源更少,也只好用其作為對比實驗之一。第二組實驗的對比結果也充分說明了本文提出的模型優(yōu)于其他兩種模型,其原因在于本文提出模型,不僅考慮了關鍵詞是否在當前語句存在,更進一步了考慮了當前語句中存在的關鍵詞間的關系。從而能更準確地識別非法彈幕。第三組實驗則對比了有無預處理過程的TextCNN 模型,可以看到無預處理過程的模型表現(xiàn)極差,這也驗證了前文所說的非法彈幕的發(fā)送者開始有意識地規(guī)避檢測。
本文提出了一種針對直播彈幕場景下的TextCNN過濾模型。相較于統(tǒng)計機器學習方法,此方法能夠更深入地考慮到詞語的上下文,從而提高了識別的準確率和召回率。在TextCNN過濾模型中,通過綜合考慮單個關鍵詞的屬性和關鍵字之間的關系,判斷整個短文本的性質。在帶噪短文本預處理的過程中,通過6種方式來降低噪聲的影響。在一定程度上,使得直播彈幕場景下短文本識別達到一個較高的水平。但是帶噪短文本預處理的過程中,仍無法消除中文同音字的影響,使得本文提出的針對直播彈幕的TextCNN 過濾模型在短文本識別里還有進步的空間,需要以后深入研究,不斷完善。