石鳳貴
摘要:隨著科技的快速發(fā)展,手持終端已成為我們?nèi)粘I詈凸ぷ髦胁豢苫蛉钡囊徊糠?。信息技術(shù)正在不斷改變我們的工作和生活,但信息安全問(wèn)題也給我們的信息和財(cái)產(chǎn)安全帶來(lái)了威脅,垃圾短信層出不窮。對(duì)于垃圾短信,應(yīng)該構(gòu)建一種智能化的攔截和過(guò)濾機(jī)制進(jìn)行自動(dòng)識(shí)別處理。本文介紹了機(jī)器學(xué)習(xí)算法和中文信息處理技術(shù)并構(gòu)建了短信識(shí)別應(yīng)用。
關(guān)鍵詞:機(jī)器學(xué)習(xí);樸素貝葉斯;Scikit-Leam;垃圾短信
中圖分類號(hào):TP181
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)03-0202-03
當(dāng)前,信息技術(shù)正處于高速發(fā)展階段,各類詐騙電話、詐騙短信、垃圾短信層出不窮,這些垃圾類短信直接威脅到人們的日常生活和工作,稍有不慎就會(huì)導(dǎo)致經(jīng)濟(jì)損失。對(duì)于對(duì)這些垃圾信息識(shí)別能力較差的人群更容易上當(dāng)受騙。盡管現(xiàn)在出現(xiàn)了各類垃圾短信識(shí)別軟件,但對(duì)信息不能進(jìn)行個(gè)性化攔截,大多還是依賴于黑白名單,識(shí)別攔截垃圾短信需要更加智能化。
短信內(nèi)容屬于中文本數(shù)據(jù),對(duì)垃圾短信應(yīng)采用文本處理和分類技術(shù)進(jìn)行文本挖掘。機(jī)器學(xué)習(xí)是一門多領(lǐng)域交叉學(xué)科,主要涉及概率與統(tǒng)計(jì)、計(jì)算機(jī)算法等,研究計(jì)算機(jī)模擬人類學(xué)習(xí)獲取新知識(shí)和技能,改進(jìn)知識(shí)結(jié)構(gòu)和性能。機(jī)器學(xué)習(xí)是人工智能的核心,人工智能通過(guò)機(jī)器學(xué)習(xí)得意實(shí)現(xiàn)。機(jī)器學(xué)習(xí)的研究主要包括決策樹、隨機(jī)森林、人工神經(jīng)網(wǎng)絡(luò)、貝葉斯、支持向量機(jī)等。
本文介紹了使用機(jī)器學(xué)習(xí)方法來(lái)智能化識(shí)別垃圾短信,包括樸素貝葉斯算法、Sciki-Learn機(jī)器學(xué)習(xí)算法庫(kù)、TF-IDF、分類模型構(gòu)建及測(cè)試評(píng)估。
1 機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)是計(jì)算機(jī)科學(xué)與人工智能的重要分支領(lǐng)域。計(jì)算機(jī)通過(guò)“數(shù)據(jù)”學(xué)習(xí),“數(shù)據(jù)”相當(dāng)于人的經(jīng)驗(yàn),通過(guò)學(xué)習(xí)這些經(jīng)驗(yàn)數(shù)據(jù)生成一個(gè)算法模型,對(duì)于新的數(shù)據(jù)可以利用生成的模型進(jìn)行判斷,這就是機(jī)器學(xué)習(xí)。機(jī)器學(xué)習(xí)就是從數(shù)據(jù)中產(chǎn)生模型的算法。數(shù)據(jù)集中的每條記錄是對(duì)一個(gè)事件或?qū)ο蟮拿枋?,稱為樣本。從數(shù)據(jù)中獲得模型的過(guò)程稱為訓(xùn)練即學(xué)習(xí),這個(gè)過(guò)程中使用的數(shù)據(jù)稱為訓(xùn)練數(shù)據(jù)。模型有時(shí)也稱為學(xué)習(xí)器,
機(jī)器學(xué)習(xí)過(guò)程如圖1所示。
Python Scikit-Leam庫(kù)封裝了多種機(jī)器學(xué)習(xí)算法,提供各種機(jī)器學(xué)習(xí)算法接口,可以讓用戶簡(jiǎn)單、高效地進(jìn)行數(shù)據(jù)挖掘和數(shù)據(jù)分析。本文使用Scikit-Learn進(jìn)行垃圾短信文本數(shù)據(jù)分析。
2 樸素貝葉斯算法
樸素貝葉斯算法是一種分類算法,用于構(gòu)建分類模型即分類器,允許使用概率給出一組特征來(lái)預(yù)測(cè)一個(gè)類,需要的訓(xùn)練比較少。樸素貝葉斯是一種運(yùn)用廣泛,分類效果比較突出的分類方法,特別是在處理文本分類任務(wù),是一種分類效果比較好的方法。
3.1貝葉斯定理
3 相關(guān)關(guān)鍵技術(shù)
3.1 中文分詞
中文語(yǔ)句結(jié)構(gòu)復(fù)雜,語(yǔ)句中詞語(yǔ)沒(méi)有明顯的分隔符號(hào)。詞是構(gòu)成中文語(yǔ)句的基本單元,詞語(yǔ)之間緊密連接在一起組成語(yǔ)句。因此,理解語(yǔ)句需要先理解詞語(yǔ),分詞質(zhì)量的高低直接影響文本分詞效果。目前,中文分詞技術(shù)不斷完善,主要的分詞工具有NLPIR (Natural Language Processing&Information Re-trieval)、THULAC f THU LexicalAnalvzer for Chinese)、jieba分詞和Snow NLP等分詞器[2]。使用時(shí),根據(jù)項(xiàng)目應(yīng)用場(chǎng)景選用合適的中文分詞器。
文本的分類,基本上是基于詞袋模型,也就是一個(gè)文本中包含多少詞以及各個(gè)詞的頻率。對(duì)于英文,其天生的句子空格可以很容易分割單詞。但是中文就得先進(jìn)行分詞處理,也就是將一個(gè)完整的中文分割為一個(gè)一個(gè)詞。Python提供了第三方模塊-jieba分詞來(lái)對(duì)中文進(jìn)行分詞。
jieba中文分詞基于前綴詞典實(shí)現(xiàn)高效詞圖掃描,對(duì)句子中所有可能生成詞情況構(gòu)成有向無(wú)環(huán)圖(DAG),采用動(dòng)態(tài)查找最大概率路徑,切分出基于詞頻的最大切分組合。對(duì)于未登陸詞,采用漢字成詞HMM模型即隱馬爾科夫模型。對(duì)于停用詞,可以自定義。jieba分詞器被廣泛應(yīng)用在中文分詞,用Python語(yǔ)言開發(fā)的開源免費(fèi)分詞工具,同時(shí)根據(jù)文本內(nèi)容可以自定義詞典和修改詞典。因此,本文采用jieba中文分詞器對(duì)短信內(nèi)容進(jìn)行分詞。
3.2 特征提取
特征數(shù)據(jù)表示輸入的數(shù)據(jù),目標(biāo)數(shù)據(jù)則是輸入數(shù)據(jù)的屬性,本文中,短信內(nèi)容就是特征數(shù)據(jù),短信的分類就是目標(biāo)數(shù)據(jù)。本文使用機(jī)器學(xué)習(xí)Scikit-Leam算法庫(kù)實(shí)現(xiàn)應(yīng)用。從文本中提取特征,需要利用到Scikit-Learn中的CountVectorizer0方法和TfidfTransformer0方法。CountVectorizer0用于將文本從標(biāo)量轉(zhuǎn)換為向量,Tfidfl ransformer0則將向量文本轉(zhuǎn)換為tf-idf矩陣。
3.3 TF-IDF
TF-IDF(Term Frequency - Inverse Document Frequency)為“詞頻一逆文本頻率”,包括TF和IDF兩部分。TF為“詞頻”即文本中詞的出現(xiàn)頻率統(tǒng)計(jì),作為文本特征。IDF為“逆文本頻率”,反應(yīng)一個(gè)詞在所有文檔中出現(xiàn)的頻率。如果一個(gè)詞在多個(gè)文本中出現(xiàn),則IDF值低;如果一個(gè)詞在較少的文本中出現(xiàn),則IDF值高;如果一個(gè)詞在所有文本中均出現(xiàn),則IDF值為0。IDF基本計(jì)算公式如公式10所示,N表示語(yǔ)料庫(kù)中文本數(shù),Ⅳ(x)表示其中包含詞x的文本數(shù):
4 應(yīng)用實(shí)現(xiàn)
4.1 對(duì)短信內(nèi)容進(jìn)行分詞
jieba中文分詞支持三種模式[3]:
1)全模式
seg_list= jieba.cut(”我來(lái)到北京清華大學(xué)”,cut_aIl=True)
print(”全模式:”+”/¨.join(seg_list》
分詞結(jié)果:我/來(lái)到/北京/清華/清華大學(xué)/華大/大學(xué)
2)精確模式
seg_list= jieba.cut(”我來(lái)到北京清華大學(xué)”,cut_aIl=False)
print(”精準(zhǔn)模式:”+”/”.join(seg_list》
分詞結(jié)果:我/來(lái)到/北京/清華大學(xué)
默認(rèn)模式是精確模式
3)搜索引擎模式
seg_list= jieba. cut_for_search('小明碩士畢業(yè)于中國(guó)科學(xué)院計(jì)算所,后在日本京都大學(xué)深造”)
print(”,”.join(seg_list》
分詞結(jié)果:小明,碩士,畢業(yè),于,中國(guó),科學(xué),學(xué)院,科學(xué)院,中國(guó)科學(xué)院,計(jì)算,計(jì)算所,后,在,日本,京都,大學(xué),日本京都大學(xué),深造
本文分詞模式采用默認(rèn),語(yǔ)料中增加一列存放分詞結(jié)果:
data= pd.read_csv(r”./data/rubmessage. csv”, encoding= 'utf_8,sep=,,)#導(dǎo)入短信數(shù)據(jù)
data[,分詞短信]-data[,短信內(nèi)容].apply(lambda x:””.join(jieba.cut(x》)
data.head0#顯示前5個(gè)樣本
4.2 特征提取及分割數(shù)據(jù)集
特征數(shù)據(jù)表示輸入的數(shù)據(jù),目標(biāo)數(shù)據(jù)則是輸入數(shù)據(jù)的屬性。短信內(nèi)容就是特征數(shù)據(jù),短信的分類就是目標(biāo)數(shù)據(jù)。代碼如下:
x= data[”分詞短信”].values
y= data[,分類,].values
使用skleam的分割模塊分割出訓(xùn)練集和測(cè)試集,直接使用train_test_split0:
x_train, x_test. y_train. y_test=train_test_split(x,y,test_size=0.11
4.3 文本特征數(shù)字化
from sklearn. feature_extraction. text import TfidfTransformer,CountVectorizer
#定義向量轉(zhuǎn)換器和TF-IDF轉(zhuǎn)換器
vectorizer= CountVectorizer0
tfidf_transformer= TfidfTransformer0
#訓(xùn)練集數(shù)字化
x_train_termcounts= vectorizer.fit_transform(x_train)
x_train_tfidf
=
tfidf_ transformer.fit_transform(x_train_termcounts)
#測(cè)試集數(shù)字化
x—test termcounts= vectorizer.transform(x_test)
x_test_tfidf= tfidf_transformer.transform(x_test_termcounts)
4.4 模型構(gòu)建、測(cè)試及評(píng)估
1)構(gòu)建樸素貝葉斯分類模型并訓(xùn)練
from sklearn.naive_bayes import MultinomialNB
classifier= MultinomialNB O.fit(x_train_tfidf, y_train)
2)測(cè)試模型
predicted_categories= classifier.predict(x_test_tfidf)
print(predicted_categories)
結(jié)果:
[0 00001000000000000000000100000000 0 0 0000000 0 0 0 0 0 000000 0 0 0 1 0 0000000 0 00 0]
3)評(píng)估模型
from sklearn.metrics import accuracy_score print(”準(zhǔn)確率:”,accuracy_score(y_test,predicted_c ategories》
評(píng)估結(jié)果:
準(zhǔn)確率:0.9420289855072463
參考文獻(xiàn):
[1]劉秋陽(yáng),林澤鋒,欒青青.基于樸素貝葉斯算法的垃圾短信智能識(shí)別系統(tǒng)[J].電腦知識(shí)與技術(shù),2016,12(12):190-192.
[2]賴文輝,喬宇鵬.基于詞向量和卷積神經(jīng)網(wǎng)絡(luò)的垃圾短信識(shí)別方法[J].計(jì)算機(jī)應(yīng)用,2018,38(9):2469-2476.
[3]結(jié)巴中文分詞[EB/OL].https://github.com/fxsjy/jieba.