劉 聰,王永利,周子韜,猶 鋒,張才俊
1.南京理工大學(xué) 計算機(jī)科學(xué)與工程學(xué)院,南京 210094
2.南瑞集團(tuán)有限公司/國網(wǎng)電力科學(xué)研究院有限公司,江蘇瑞中數(shù)據(jù)股份有限公司,南京 210094
3.國家電網(wǎng)有限公司客戶服務(wù)中心,南京 210094
近年來,我國境內(nèi)暴力恐怖襲擊事件的發(fā)生頻率有所上升,嚴(yán)重影響了社會秩序和人民生活。
目前敏感信息的識別主要包括了文本、圖像、音頻、視頻等文件格式中敏感信息的識別,其中,應(yīng)用較為廣泛的是文本中敏感信息的識別。傳統(tǒng)敏感信息的識別主要是實(shí)現(xiàn)諸如人名、地名、機(jī)構(gòu)名等命名實(shí)體的識別,或者是通過詞典匹配實(shí)現(xiàn)敏感信息的識別。然而傳統(tǒng)敏感信息識別方法忽略了上下文語境和關(guān)鍵詞詞性給敏感信息的識別帶來的影響,例如:實(shí)例1“李明準(zhǔn)備國慶期間去天安門旅游”和實(shí)例2“李明準(zhǔn)備國慶期間去天安門安置炸彈”,傳統(tǒng)敏感信息識別方法將“天安門”定義為敏感詞,最終識別所得的結(jié)果為兩個實(shí)例都是敏感信息。然而結(jié)合上下文語境而言,實(shí)例1并不是敏感信息,傳統(tǒng)敏感信息識別方法出現(xiàn)了誤報,將非敏感信息識別為敏感信息。在敏感信息識別過程中,結(jié)果的誤報和漏報對敏感信息識別的精確度都造成了一定的損傷。此外,文本中往往存在許多與敏感信息識別結(jié)果不相關(guān)的文本信息,傳統(tǒng)的敏感信息識別方法將與識別結(jié)果不相關(guān)的信息納入識別范圍,不僅占用了大量的空間,還降低了敏感信息識別的性能。
文本的表示可以分為對詞語的表示以及對文本的表示,詞語的表示通常分為兩種:One-hot 表示、詞向量表示。One-hot 表示是基于規(guī)則、統(tǒng)計學(xué)習(xí)模型中最常見的詞語表示方法[1],但是One-hot表示方法得到的詞向量十分稀疏,向量維度過高,可能導(dǎo)致維數(shù)災(zāi)難。詞袋模型(Bag of Words,BOW)是一種向量空間模型,在該模型中,文本被視為無序的詞匯集合[2]。詞袋模型僅僅記錄每個單詞在文檔中出現(xiàn)的頻率,且不會考慮單詞出現(xiàn)的順序,因而忽略了語法和詞匯之間的順序關(guān)系。向量空間模型(Vector Space Model,VSM)是一種將文本表示為向量的代數(shù)模型[3],該模型的向量空間上的相似度可以表示語義的相似度,然而該模型忽略了詞語的位置關(guān)系。通過上述文獻(xiàn)可以得知,在傳統(tǒng)的文本表示方法中,特征工程至關(guān)重要。神經(jīng)網(wǎng)絡(luò)語言模型(Neural Network Language Model,NNLM)是神經(jīng)網(wǎng)絡(luò)語言模型的經(jīng)典之作[4],該模型訓(xùn)練得到的詞向量滿足“上下文相似時,詞向量也相似”的特性,其缺點(diǎn)在于參數(shù)規(guī)模大,算法的時間復(fù)雜度高。文獻(xiàn)[5]提出了Glove(Global Vectors for Word Representation)模型,該模型通過把一個單詞表達(dá)成一個實(shí)數(shù)組成的向量,捕捉單詞之間的語義特性,但是該模型在訓(xùn)練過程中需要使用全局信息,耗費(fèi)大量內(nèi)存。Mikolov 等人[6]提出了CBOW 和Skip-gram 兩種模型進(jìn)行詞語的分布式表示,這就是Word2vec的原理。這兩種模型通過減少訓(xùn)練過程中所需要的參數(shù),從而避免過擬合,在保證詞向量質(zhì)量的同時,提升了訓(xùn)練效率,節(jié)省了內(nèi)存空間。受文獻(xiàn)[1-6]的啟發(fā),為了有效捕獲單詞之間的語義特性,保留待識別文本的完備性,同時避免詞向量的訓(xùn)練過程過于復(fù)雜,本文基于Word2vec表示方法進(jìn)行文本的向量化表示。
針對文本相似度的計算,文獻(xiàn)[7]提出了N-gram相似度識別方法,N-gram是給定文本序列的前n項(xiàng)子序列,通過計算每一個單詞的N-gram值來計算單詞之間的相似度。但是該方法忽略了文本的上下文信息,不能反映文本潛在語義。文獻(xiàn)[8]提出了一種考慮語義和詞序的句子相似度計算方法,該方法通過計算兩個句子的語義相似度和詞序相似度,最后加權(quán)得到兩個句子的最終相似度。文獻(xiàn)[9]提出了一種基于VSM的文本相似度計算方法,并以加權(quán)的方式對傳統(tǒng)的TF-IDF 算法的權(quán)重計算方法進(jìn)行改進(jìn)。文獻(xiàn)[10]基于改進(jìn)型VSM 結(jié)合余弦相似度的文本相似度計算方法和HowNet文本相似度計算方法,實(shí)現(xiàn)了基于改進(jìn)型VSM-HowNet融合相似度算法。文獻(xiàn)[11]提出了一種漢明距離的文本相似度計算方法,通過把文本表示0/1 向量,并計算編輯距離,最終得到文本的相似度。文獻(xiàn)[12]綜合TF-IDF 算法以及HowNet 的語義信息,利用漢明距離實(shí)現(xiàn)了文本相似度的計算。文獻(xiàn)[13]通過考慮單詞之間的語義關(guān)系,使用語義資源來減少維度,使用反向索引過濾出候選文檔集,最終提出一種基于語義向量空間模型的文本相似性計算方法VSI-Cilin。文獻(xiàn)[14]建立了基于神經(jīng)網(wǎng)絡(luò)的詞向量模型,對搜狐、世界新聞等中文語料庫進(jìn)行訓(xùn)練,提出了一種利用詞向量的計算文本語義相似度的方法。文獻(xiàn)[15]提出了一種基于詞向量的微博事件跟蹤方法,利用詞向量計算出詞與詞之間的語義相似度,提高了微博之間語義相似度的準(zhǔn)確性。
針對傳統(tǒng)文本相似度方法識別效率較低的問題,本文提出對文本進(jìn)行敏感觸發(fā)事件抽取,并根據(jù)敏感觸發(fā)事件中關(guān)鍵詞的詞性對文本相似度識別算法進(jìn)行改進(jìn),最終識別文本中的暴恐敏感信息。本文所做的貢獻(xiàn)如下:(1)定義詞性選擇、敏感觸發(fā)事件抽取的概念,在中文文本中通過敏感觸發(fā)事件的抽取,獲得詞匯層面和句子層面的事件特征;(2)結(jié)合敏感觸發(fā)事件的特征改進(jìn)文本余弦相似度算法,降低敏感信息識別過程中出現(xiàn)的誤報率、漏報率,提高敏感信息識別的性能。
傳統(tǒng)的敏感信息識別方法忽略了詞性、文本語境框架以及詞序等對識別精確度造成的影響。此外,對文本中所有內(nèi)容進(jìn)行識別需要耗費(fèi)大量的時間、空間。針對上述問題,針對暴恐敏感信息,本文提出將文本中的動詞、名詞構(gòu)成的詞性序列作為敏感觸發(fā)事件,將詞性序列中待識別的詞語定義為關(guān)鍵詞。結(jié)合敏感觸發(fā)事件中詞性序列的種類以及關(guān)鍵詞的詞性改進(jìn)文本相似度算法,最終實(shí)現(xiàn)準(zhǔn)確且高效地識別暴恐敏感信息。
暴恐敏感信息識別的流程如圖1所示,主要有兩個階段,暴恐敏感詞典構(gòu)建階段和暴恐敏感信息識別階段。暴恐敏感詞典構(gòu)建階段主要步驟包括擴(kuò)充語料庫,分詞處理,將文本訓(xùn)練成詞向量,構(gòu)建暴恐敏感詞典。暴恐敏感信息識別階段主要由兩個部分構(gòu)成:構(gòu)建敏感觸發(fā)事件,結(jié)合詞性改進(jìn)文本相似度算法。
圖1 敏感信息識別流程圖
在中文文本敏感信息識別過程中,對文本的預(yù)處理是必要階段。文本預(yù)處理操作包括:對文本進(jìn)行分詞、去停用詞、詞性標(biāo)注、詞性選擇等。整個文本預(yù)處理的流程如圖2所示。
圖2 文本預(yù)處理流程
在文本預(yù)處理過程中,首先對文本進(jìn)行分詞處理,然后根據(jù)停用詞表去掉分詞結(jié)果中的停用詞。在去除分詞結(jié)果的停用詞之后,進(jìn)行詞性標(biāo)注和詞性選擇,選擇出文本識別所需的關(guān)鍵詞。
定義1(詞性選擇)為了通過詞性篩選提取詞匯層面和句子層面的事件特征,定義詞性選擇為通過關(guān)鍵詞的詞性對關(guān)鍵詞進(jìn)行篩選,最終得到構(gòu)建敏感觸發(fā)事件的關(guān)鍵詞。
中文文本由九種基本短語組成:名詞短語np、動詞短語vp、形容詞短語ap、副詞短語dp、數(shù)詞短語mp、區(qū)別詞短語bp、地點(diǎn)短語sp、時間短語tp、準(zhǔn)數(shù)詞短語mbar。其中,地點(diǎn)短語sp、時間短語tp 可作為是名詞短語np 的子類,而名詞短語np、動詞短語vp、形容詞短語ap、副詞短語dp 是中文文本中四類最常見的短語。區(qū)別詞短語bp可視為形容詞短語ap的子類,數(shù)詞短語mp描述了漢語中比較特殊的名量、動量、時量和指量結(jié)構(gòu),準(zhǔn)數(shù)詞短語mbar的設(shè)定是為了解決目前的數(shù)詞切分規(guī)范與句法分析的銜接問題。在上述的基本短語中,名詞短語和動詞短語對暴恐敏感信息的識別十分重要,為了提高敏感信息識別的精確度和效率,通過磁性選擇進(jìn)行敏感觸發(fā)事件的抽取。
在完成文本預(yù)處理操作之后,將預(yù)處理所得到詞性序列用于敏感觸發(fā)事件抽取。
定義2(敏感觸發(fā)事件抽取)敏感觸發(fā)事件(Sensitive Trigger Event,STE)是指在敏感信息識別過程中,判斷文本是否是敏感信息的決定性事件。敏感觸發(fā)事件抽取(Sensitive Trigger Event Extraction,STEE)通過抽取出詞匯層面和句子層面的事件特征,最終獲取文本的敏感觸發(fā)事件。
采用確定有窮自動機(jī)(Daterministic Finite Automata,DFA)表示敏感觸發(fā)事件的抽取過程,STEE可表示為一個抽象的計算模型:E=(W,Σ,f,S,Z),其中,W表示敏感觸發(fā)事件的狀態(tài)集合,即經(jīng)過文本預(yù)處理獲得的文本內(nèi)容;Σ表示經(jīng)過預(yù)處理后關(guān)鍵詞詞性的輸入集合;f表示敏感觸發(fā)事件的抽取函數(shù),是W×Σ→W上的映射,如f(wi,a)=wj(wi∈W,wj∈W),即當(dāng)前狀態(tài)為wi,當(dāng)輸入的關(guān)鍵詞的詞性為a時,則會轉(zhuǎn)移到狀態(tài)wj;S∈W表示初始狀態(tài)集合,包括動詞狀態(tài)、名詞狀態(tài)兩種;Z是終態(tài)集合,即敏感觸發(fā)事件的兩種類型:名動詞詞性序列、動名詞詞性序列。
針對文本中反恐、暴亂等敏感信息的識別,將敏感觸發(fā)事件分為兩種:動名詞詞性序列和名動詞詞性序列。將分類規(guī)則定義如下。
定義3(敏感觸發(fā)事件分類規(guī)則)詞性序列以動詞開始,之后由名詞、動詞構(gòu)成的詞性序列稱為動名詞詞性序列;以名詞開始,之后由動詞、名詞構(gòu)成的詞性序列稱為名動詞詞性序列。
將動名詞詞性序列表示為X=v(n*|v*|(n|v)*|ε),動名詞詞性序列觸發(fā)事件可能出現(xiàn)以下幾種情況:
(1)動名詞詞性序列中的動詞是敏感詞,則該詞性序列中動詞作為敏感信息的觸發(fā)事件,包含該動詞的文本則為敏感信息。例如“放火”“殺人”“砍殺”“開槍”等。
(2)動名詞詞性序列中的動詞不是敏感詞,則有以下幾種情況:
①若不存在敏感名詞,則該文本不為敏感信息。例如“買蘋果”。
②若存在敏感名詞,且敏感名詞之后沒有動詞,則該文本為敏感信息。例如“扔炸彈”。
③若存在敏感名詞,且敏感名詞之后存在動詞,則該文本不為敏感信息。例如“去天安門旅游”。
動名詞詞性序列模板如表1所示。
表1 動名詞詞性序列模板
將名動詞詞性序列表示為X=n(n*|v*|(n|v)*|ε),名動詞詞性序列和動名詞詞性序列存在區(qū)別,名動詞詞性序列中可能出現(xiàn)以下幾種情況:
(1)名動詞詞性序列中只有名詞,文本的敏感性由名詞的敏感性決定。若名詞中含有敏感詞,則文本為敏感信息;若名詞中不含敏感詞,則文本不為敏感信息。例如“槍支彈藥”“本·拉登、李明”“香蕉蘋果”。
(2)名動詞詞性序列中含有一個或者多個名詞、動詞,則有以下幾種情況:
①若動詞中含有敏感詞,則該詞性序列為敏感信息。例如“李明要?dú)⑷恕薄?/p>
②若動詞中不含有敏感詞,且名詞中含有敏感詞,則該文本為敏感信息,例如“本拉登坐飛機(jī)”。
③若動詞中不含敏感詞,且名詞中也不含有敏感詞,則該文本不為敏感信息,例如“李明坐飛機(jī)”。
名動詞詞性序列模板如表2所示。
表2 名動詞詞性序列模板
在網(wǎng)絡(luò)文本中,暴力、反恐信息主要是由名詞和動詞所構(gòu)成的短文本。
通過敏感觸發(fā)事件的抽取,提取出詞匯層面和句子層面的事件特征,抽取敏感觸發(fā)事件的目的是獲得對敏感信息識別貢獻(xiàn)較大的信息。敏感觸發(fā)事件的抽取不僅保留了文本語義的完備性,還減少了因忽略上下文語境而造成的識別結(jié)果的誤報、漏報等,降低了無關(guān)信息對敏感信息識別性能的影響。
在實(shí)現(xiàn)敏感觸發(fā)事件的抽取之后,通過計算敏感觸發(fā)事件與暴恐敏感詞典之間的文本相似度實(shí)現(xiàn)敏感信息的識別。
在傳統(tǒng)的文本相似度算法中,不同詞性的關(guān)鍵詞權(quán)值都一樣,然而關(guān)鍵詞的不同詞性對敏感信息識別的貢獻(xiàn)度是不同的。因?yàn)槊~、動詞在暴恐敏感信息識別的過程中貢獻(xiàn)度不同,所以應(yīng)當(dāng)具有不同的權(quán)值。因此本文提出一種結(jié)合敏感觸發(fā)事件中關(guān)鍵詞詞性的文本相似度算法(Text Similarity Algorithm Combining Part of Speech,STEAP),該算法有助于提高文本相似度計算的準(zhǔn)確性,從而提高敏感信息識別的準(zhǔn)確性。結(jié)合敏感觸發(fā)事件中詞性信息的改進(jìn)后文本相似度(敏感度)計算公式如下:
式中,n為待識別文本中提取出來的詞性序列的關(guān)鍵詞個數(shù),γ為權(quán)重系數(shù),且滿足條件α,β,δ,μ∈(0,1);C(wi)為敏感詞wi的詞向量,C(wj)為待識別文本中關(guān)鍵詞wj的詞向量,cosθij為敏感詞wi和關(guān)鍵詞wj的詞向量相似度,計算公式為:
結(jié)合敏感觸發(fā)事件中關(guān)鍵詞詞性的文本相似度算法偽代碼如下所示:
在STEAP 算法中,輸入內(nèi)容為待識別的文本。該算法首先利用Word2vec 模型對語料進(jìn)行訓(xùn)練,然后構(gòu)建暴恐敏感詞典d1=(w1,w2,…,wm),并用詞向量C(wi)表示暴恐敏感詞典中的各個敏感詞。隨后構(gòu)建敏感觸發(fā)事件d2=(w1,w2,…,wn),利用STEW 算法為敏感觸發(fā)事件中的關(guān)鍵詞分配權(quán)重,用詞向量C(wj)表示敏感觸發(fā)事件。然后利用WTW算法計算詞向量C(wi)和詞向量C(wj)的相似度。最后利用公式(1)計算敏感度,獲得待識別文本的敏感度。
敏感觸發(fā)事件中關(guān)鍵詞權(quán)重計算算法的偽代碼如下所示:
在STEW算法中,輸入是敏感觸發(fā)事件d2,根據(jù)定義3 對敏感觸發(fā)事件d2進(jìn)行分類,根據(jù)d2的種類以及關(guān)鍵詞的類型為敏感觸發(fā)事件中關(guān)鍵詞分配權(quán)重,權(quán)重的分配規(guī)則如公式(2)所示。
敏感觸發(fā)事件和暴恐詞典中敏感詞的相似度計算算法偽代碼如下所示:
WTW算法中,輸入詞向量C(wi)、C(wj),首先計算關(guān)鍵詞與敏感詞典中各敏感詞的相似度,然后取最大值,然后利用公式(1)計算敏感度。
根據(jù)STEW算法,敏感觸發(fā)事件中關(guān)鍵詞的權(quán)重的計算時間復(fù)雜度為O(n),根據(jù)WTW 算法,敏感觸發(fā)事件和暴恐敏感詞典中關(guān)鍵詞的相似度的計算時間復(fù)雜度為O(n×m)。因?yàn)楸┛置舾性~典中關(guān)鍵詞個數(shù)遠(yuǎn)大于1,所以STEAP算法的時間復(fù)雜度為O(n×m),其中n表示敏感觸發(fā)事件中詞語的數(shù)量,m表示敏感詞典中詞語的數(shù)量。
為了使敏感信息的識別更加準(zhǔn)確,需要盡可能完善暴恐敏感詞典。在構(gòu)建暴恐敏感詞典的過程中,將人民網(wǎng)、臺灣品聰網(wǎng)站、新浪微博的相關(guān)報道以及相關(guān)的評論作為本文數(shù)據(jù)的來源,在通過爬蟲技術(shù)獲得數(shù)據(jù)以后,根據(jù)近20年發(fā)生的暴恐事件進(jìn)行文本的篩選,將暴恐事件集中的部分地區(qū)、民族、背后勢力、使用武器等作為篩選因素,最終得到有效語料58 000條。
將獲取的有效語料對Wiki 語料庫進(jìn)行擴(kuò)充,然后進(jìn)行文本預(yù)處理,再利用Word2vec 對擴(kuò)充后的語料進(jìn)行訓(xùn)練,用以完善暴恐敏感詞典。敏感詞是指能夠用來判斷文本是否含有敏感信息的詞語。針對暴恐事件,暴恐敏感詞典主要由人名、地名、機(jī)構(gòu)名,暴恐事件中出現(xiàn)的武器、民族、動詞等,以及網(wǎng)絡(luò)中相關(guān)的隱晦表達(dá)詞、網(wǎng)絡(luò)用語等構(gòu)成。
本文從爬取的語料中選取70%的數(shù)據(jù)用于敏感詞典的構(gòu)建,剩下的30%的數(shù)據(jù)用于敏感詞典的測試和完善。首先將常見的敏感詞添加到敏感詞典,然后根據(jù)同義詞詞林對自定義的敏感詞詞典進(jìn)行同義詞擴(kuò)展,再通過Word2vec 對語料進(jìn)行訓(xùn)練得到對應(yīng)的詞向量,然后通過余弦相似度計算獲得與敏感詞相似度最高的前10個數(shù)據(jù)的信息,添加到敏感詞典中。利用Word2vec 訓(xùn)練時對應(yīng)的參數(shù)為:特征向量的維度size為300,上下文的窗口 window 為 10,訓(xùn)練并行數(shù) worker 為 4,參數(shù)sg=0,表示選擇CBOW 算法,為防止漏檢一些出現(xiàn)頻率極低的敏感詞,將min_count的值設(shè)置為0。最終得到的暴恐敏感詞典中一共含有敏感詞8 267 個,其中名詞5 105個,動詞3 162個。
實(shí)現(xiàn)暴恐敏感信息的識別,除了構(gòu)建并完善暴恐敏感詞典之外,還有STEAP 算法敏感閾值的確定。敏感閾值是能最精確識別出敏感信息時的文本相似度,將相似度0.50作為敏感閾值的底部初始值,取長度0.05為間隔單位,每次實(shí)驗(yàn)增加一個間隔單位。將每次的值設(shè)定為待選閾值,通過計算該閾值條件下實(shí)驗(yàn)的準(zhǔn)確率(precision)、召回率(recall)和F1 值三個指標(biāo)對STEAP算法的敏感閾值進(jìn)行確定,統(tǒng)計計算后取精確度最高的待選閾值為最終實(shí)際使用閾值。實(shí)驗(yàn)結(jié)果如圖3所示。
圖3 通過實(shí)驗(yàn)獲得最佳閾值
由實(shí)驗(yàn)結(jié)果可知,敏感信息識別的精確率、召回率隨著閾值的改變呈現(xiàn)不同的變化趨勢。就精確率而言,當(dāng)閾值小于0.85 時,精確率呈遞增趨勢;當(dāng)閾值大于0.85時,精確率呈遞減趨勢;所以當(dāng)閾值為0.85時,敏感信息識別的精確率最高,為87%。就召回率而言,當(dāng)閾值小于0.80時,召回率呈上升趨勢;當(dāng)閾值大于0.80時,召回率呈下降趨勢。本文將F1值作為最佳閾值選擇的最終指標(biāo),經(jīng)過多次反復(fù)實(shí)驗(yàn)得知,當(dāng)閾值為0.80時,所得F1 值最大,為0.862 1,對應(yīng)的識別精確率為86.36%,所以最終STEAP算法的敏感閾值為0.80。
為了測試STEAP 算法識別敏感信息方面的性能,文本在17 400條文本測試集上進(jìn)行多次實(shí)驗(yàn),將本文提出的方法與其他幾種方法在敏感信息識別的精確率和召回率上進(jìn)行對比,實(shí)驗(yàn)結(jié)果如圖4所示。這幾種方法分別為:字典法、基于Word2vec 的余弦相似度算法(記為余弦相似度算法)、基于TF-IDF 的余弦相似度算法(記為TF-IDF算法)。
圖4 敏感信息識別實(shí)驗(yàn)結(jié)果
從圖4中可以看出,字典法在敏感信息識別實(shí)驗(yàn)中精確率和召回率最低,該方法過多依賴于所構(gòu)建的敏感詞典的大小?;赪ord2vec的余弦相似度算法與基于TF-IDF的余弦相似度算法識別的精確率和召回率均比字典法高出了許多,這說明余弦相似度算法在文本的相似度識別方面具有較好的效果。STEAP 算法對基于Word2vec 的余弦相似度算法進(jìn)行改進(jìn),通過識別文本中由名詞、動詞構(gòu)建詞性序列來識別文本中的暴恐?jǐn)?shù)據(jù),最終識別的精確率和召回率都高于前三種算法。
本文提出一種結(jié)合詞性的文本相似度算法STEAP。該方法首先通過詞性選擇對文本進(jìn)行過濾篩選,然后針對文本中的暴恐敏感信息構(gòu)建以名詞、動詞為主的詞性序列,將其作為敏感觸發(fā)事件。最后結(jié)合詞性序列對基于Word2vec 的余弦相似度算法進(jìn)行改進(jìn),得到STEAP算法。
實(shí)驗(yàn)結(jié)果表明本文提出的STEAP算法與傳統(tǒng)的敏感信息識別方法相比,最終識別的精確率和召回率都更高,并且對于敏感信息的識別更加有效,降低敏感信息識別過程中出現(xiàn)的誤報率、漏報率,提高敏感信息識別的性能。
在接下來的研究中,為了更加精確地識別出文本中的敏感信息,將利用深度學(xué)習(xí)方法研究基于情感分析的敏感信息識別方法。