馮軍軍 李力



摘要:隨著通信技術的發展,垃圾郵件越來越多,對個人和中小企業危害也越來越大。該文介紹垃圾郵件識別使用的數據集以及特征提取方法,包括詞袋模型和詞匯表模型,然后介紹樸素貝葉斯、支持向量機、多層感知機、卷積神經網絡和循環神經網絡在垃圾郵件過濾的實現,經過對比發現多層感知機和卷積神經網絡效果最好。
關鍵詞:垃圾郵件;特征提取;NB;SVM;MLP;CNN;RNN
中圖分類號:TP393? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)08-0154-02
1 引言
垃圾郵件是指收件人拒絕接收或者不同意接收但是仍然收到的郵件[1],主要包含商業類、廣告類、培訓類、推廣類、報價類等郵件。如2020年護網爆出的案例,就是攻擊方通過信息收集獲取防守方用戶的郵箱,通過群發郵件,引誘用戶更新釣魚flash,從而實現權限獲取進而內網滲透獲取關鍵信息。為避免垃圾郵件影響人們的正常工作和生活,垃圾郵件檢測技術隨之產生。傳統的垃圾郵件檢測方法有關鍵詞、黑白名單、校驗碼法等[2]。這些傳統的垃圾郵件檢測方法通常存在檢測效果差、易被逃避等缺陷,為此本文引入機器學習方法解決這一問題。
垃圾郵件檢測的關鍵在于識別哪些郵件是垃圾郵件,可以將該問題歸結于機器學習中的文本分類任務。關于此類任務的數據通常是高維數據,本文選擇常見的機器學習算法來進行垃圾郵件過濾的實現。
2 數據集和工具介紹
數據集采用開源的Enron-Spam[3]數據集,實現過程中,采用python語言。主要采用的模塊為TFLearn,該模塊可以直接在GitHub上面進行下載。它可以快速搭建實驗環境,容易實現深度神經網絡,內置神經網絡層、正則化器、優化器等,支持多輸入、多輸出等模式。
3 特征提取
垃圾郵件的特征提取,樸素貝葉斯算法、支持向量機算法和多層感知機算法,采用的詞袋模型,該模型利用單詞構成的集合,如果一個單詞在文檔中出現不止一次,統計其出現的頻數。郵件的特征提取,采用的sklearn.feature_extraction.text模塊的CountVectorizer函數。利用該函數,將文本進行詞袋處理,獲取對應的特征名稱,從而獲取詞袋數據,完成詞袋化。該數據集在實現過程中,把郵件當成一個字符串處理。然后在字符串處理過程中,過濾掉空白符,例如回車符、換行符等。最后遍歷全部郵件文件,加載數據。在詞袋模型中,把郵件數據進行向量化,將正常郵件標記為0,垃圾郵件標記為1。
垃圾郵件的特征提取,卷積神經網絡算法和循環神經網絡算法采用的是詞匯表模型。詞匯表模型是在詞袋模型的基礎上,根據郵件內容生產的詞匯表對原有句子按照單詞逐個進行編碼。通過VocabularyProcessor()函數,定義文本的最大長度、詞頻的最小值、分詞函數等。在文本的最大長度初始化時,如果文本的長度大于最大長度,那么會截斷文本,反之則用0填充。在詞頻最小值初始化時,如果出現次數小于最小詞頻則不會被收錄到詞表中。本文中,通過VocabularyProcessor函數對獲取的ham和spam數據,進行處理,獲取詞匯表。
4 深度學習實現
本課題采用樸素貝葉斯算法、支持向量機算法、多層感知機算法、卷積神經網絡算法和循環神經網絡算法五種機器學習的算法,對郵件數據集進行識別。實現處理流程,如圖1所示。如圖1所示,在實現過程中,首先將數據樣本根據算法要求進行特征提取(樸素貝葉斯算法、支持向量機算法、多層感知機算法實現用的詞袋模型,卷積神經網絡算法和循環神經網絡算法實現用的詞匯表模型);特征提取后把數據集隨機劃分為訓練集和測試集,測試集的比例為40%;接著根據機器學習算法在訓練集上進行訓練,獲取模型數據;最后根據模型數據,在訓練集上進行預測,從而驗證算法的預測效果。
4.1 樸素貝葉斯算法[4]
樸素貝葉斯算法(NB),該算法實現垃圾郵件分類的過程中,將數據集合隨機分配訓練集合和測試集合,實例化樸素貝葉斯算法后,針對訓練集進行訓練,并針對測試集進行預測,最后輸出評估結果的準確度和TP、FP、TN、FN(FN:False Negative,真實郵件判定為垃圾郵件,FP:False Positive,垃圾郵件判定為正常郵件,TN:True Negative,垃圾郵件判定為垃圾郵件,TP:True Positive,正常郵件判定為正常郵件)4個值。該方法中,由于最大特征數對結果有影響,把最大特征數,從1000到20000對評估準確度進行測試。發現最大特征數在13000左右的時候,系統準確率最大。但是隨著特征數越大,耗時越大。根據結果,最終選擇最大特征數為5000的情況下,整個系統準確度為94.33%,結果如表1所示。
測試關鍵代碼如下:
gnb = GaussianNB()
gnb.fit(x_train,y_train)
y_pred=gnb.predict(x_test)
最后調用metrics.accuracy_score函數和metrics.confusion_matrix函數,輸出TP、FP、TN、FN。
4.2 支持向量機算法[5]
支持向量機算法(SVM),該算法實現垃圾郵件分類過程中,數據特征提取、訓練集獲取數據模型、測試方法與樸素貝葉斯算法一致。最終在詞袋最大特征數為5000的情況下,整個系統準確度為90.61%,其驗證結果如表2所示。
測試代碼如下:
clf = svm.SVC()
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
最后調用metrics.accuracy_score函數和metrics.confusion_matrix函數,輸出TP、FP、TN、FN。
4.3 多層感知機算法[6]
多層感知機算法(MLP),該算法實現過程中,構造兩層隱藏層,每層節點數分別為5和2。根據詞袋模型,將數據集進行特征提取,按照分配的訓練集和測試集,對于訓練集進行多層感知機算法進行實例化,然后根據數據模型,對測試集進行預測,最后輸出評估結果的準確度和TP、FP、TN、FN4個值。在詞袋最大特征數為5000的情況下,整個系統準確度為98.01%,其驗證結果如表3所示。代碼實現,調用clf.fit(),傳入訓練集數據,然后調用clf.predict(),獲取測試集的結果。最后調用metrics.accuracy_score函數和metrics.confusion_matrix函數,輸出TP、FP、TN、FN。
4.4 卷積神經網絡算法[7]
卷積神經網絡算法(CNN),該算法實現過程中,特征提取采用詞匯表模型,將數據集合隨機分配訓練集合和測試集合。實例化過程中,其中卷積神經網絡模型,使用3個數量為128核,長度分別為3、4、5的一維卷積函數處理數據。使用卷積神經網絡算法在訓練集上訓練,通過對訓練數據進行了5輪訓練,獲取數據模型,使用模型數據在測試集上進行預測,最終實現對測試數據集的準確度為98.30%。代碼實現中,調用tflearn.DNN(),根據網絡,生成model對象。然后調用fit(),設置n_epoch為5,表示5輪訓練,設置batch_size為100,表示一次用100個數據計算參數的更新。
4.5 循環神經網絡算法[8]
循環神經網絡算法(RNN),該算法實現過程中,特征提取及數據處理與循環神經網絡算法一樣。在訓練集實例化循環神經網絡算法過程中,定義循環神經網絡模型,使用最簡單的單層LSTM結構。使用循環神經網絡算法在訓練集上訓練,通過對訓練數據進行了5輪訓練,獲取數據模型,使用模型數據在測試集上進行預測,最終實現對測試數據集的準確度為94.88%。代碼實現中,調用lstm()函數,實現單層LSTM結構。調用tflearn.DNN(),根據網絡,生成model對象。然后調用fit(),設置n_epoch為5,表示5輪訓練,設置batch_size為10,表示一次用10個數據計算參數的更新。
5 結束語
以Enron-Spam數據集為訓練和測試數據集,本文通過詞袋模型和詞匯表模型對數據集進行特征提取,通過NB、SVM、MLP、CNN和RNN,五種機器學習算法實現了垃圾郵件識別。通過比較發現,MLP和CNN的識別率很好,達到了98%以上。同樣,在樸素貝葉斯算法實現的過程中,發現并非是詞袋抽取的單詞個數越多,垃圾郵件的識別率最高,而是有個中間點可以達到最大效果??傊?,隨著機器學習算法的發展,在垃圾郵件識別過程中,機器學習算法的應用會越來越多。
參考文獻:
[1] 羅婧雯.垃圾郵件過濾技術綜述[J].電腦知識與技術,2016,12(14):13-14.
[2] 李敬瑤.反垃圾郵件過濾技術方法的研究[J].福建電腦,2016,32(10):61-62.
[3] Enron-Spam數據集http://www2.aueb.gr/ users/ion/data/enron-spam/(DB/OL).
[4] 彭革.基于樸素貝葉斯算法在垃圾郵件過濾中的研究綜述[J].電腦知識與技術,2020,16(14):244-245,247.
[5] 徐娟,卞良.基于SVM的中文垃圾郵件預測系統研究[J].數字技術與應用,2020,38(1):38-39.
[6] 趙俊生,候圣,王鑫宇,等.基于集成學習的圖像垃圾郵件過濾方法[J].計算機工程與科學,2020,42(6):1049-1059.
[7] 馬義超.基于卷積神經網絡的手寫數字識別算法研究與應用[D].焦作:河南理工大學,2019.
[8] 伍逸凡,朱龍嬌,石俊萍.人工神經網絡在信息過濾中的應用[J].吉首大學學報(自然科學版),2019,40(3):17-22.
【通聯編輯:代影】