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