魏 忠,周 俊,石元兵,黃明浩
(衛(wèi)士通信息產(chǎn)業(yè)股份有限公司,四川 成都 610041)
隨著數(shù)據(jù)泄露事件的日益增多,人們對數(shù)據(jù)安全越來越看重,要做到全面的數(shù)據(jù)安全,首先就需要做到精確的內(nèi)容識別。一種常用的數(shù)據(jù)內(nèi)容識別方法是使用預(yù)定義的關(guān)鍵詞對數(shù)據(jù)內(nèi)容進(jìn)行匹配,根據(jù)匹配的結(jié)果來確定數(shù)據(jù)內(nèi)容類別,從而采取相應(yīng)的安全策略。但是這種識別方法無法提供準(zhǔn)確的內(nèi)容安全態(tài)勢信息,一個問題是人為主觀預(yù)定義的關(guān)鍵詞信息有限,而且很多時候有歧義,這就會帶來錯誤的匹配結(jié)果,比如預(yù)定義關(guān)鍵詞為“密碼”,會匹配出很多涉及輸入密碼的產(chǎn)品使用文檔;另一個問題是關(guān)鍵字匹配的結(jié)果解釋性不強,如多個文檔都匹配了“密碼”關(guān)鍵詞,但是這些文檔可能是完全不同的主題,有的可能是關(guān)于密碼算法,有的僅僅是網(wǎng)站登錄使用介紹。
本文的內(nèi)容態(tài)勢感知方法利用詞向量技術(shù)Word2vec為基準(zhǔn)語料庫的詞語創(chuàng)建向量空間,使用TF-IDF技術(shù)提取出基準(zhǔn)語料庫中的種子關(guān)鍵詞,通過計算向量空間上的余弦距離提取出種子關(guān)鍵詞的關(guān)鍵詞詞集,最后使用關(guān)鍵詞詞集對用戶數(shù)據(jù)進(jìn)行內(nèi)容態(tài)勢感知,從而得到準(zhǔn)確的內(nèi)容態(tài)勢感知信息,很好地解決了上述的問題。
Word2vec是谷歌在2013年提出的一種將詞語表征為數(shù)字向量的自然語言處理技術(shù),是目前應(yīng)用最廣泛的一種詞向量技術(shù),它是一種深度學(xué)習(xí)模型,基于人工神經(jīng)網(wǎng)絡(luò),通過在大規(guī)模語料庫上的訓(xùn)練,利用詞語的上下文信息,可以將一個詞語表征為K維空間上的向量,向量空間上的距離可以用來表示詞語語義上的相似度,越相似的詞語在向量空間中的距離越近,如圖1所示,“歌曲”和“參考文獻(xiàn)”是語義上完全不同的詞語,所以對應(yīng)的詞向量之間的距離將會非常遠(yuǎn),而“歌曲”和“專輯”語義很相關(guān),并且在語料中經(jīng)常一起出現(xiàn),則對應(yīng)的詞向量之間的距離就相對較小。因為Word2vec技術(shù)能夠?qū)υ~語進(jìn)行很好的向量化處理,所以被廣泛地使用在自然語言處理的多種應(yīng)用中,如主題模型[1]、關(guān)鍵詞提取[2]、文本分類、自動摘要[3]等。
圖1 詞向量可視化
Word2vec提供了兩種訓(xùn)練模型,一種是連續(xù)詞袋模型(Continuous Bag-Of-Words,CBOW),另一種是跳詞模型(Skip-gram)[4],如圖2所示,CBOW模型的特點是輸入中間詞的上下文詞語,輸出對中間詞的預(yù)測。skip-gram模型是逆轉(zhuǎn)了CBOW的因果關(guān)系,即輸入中間詞,輸出對上下文詞語的預(yù)測。
圖2 Word2vec模型
當(dāng)使用CBOW模型時,對于每一個詞語,使用該詞語周圍的上下文詞語來預(yù)測當(dāng)前詞語生成的概率。如句子為“今天下午2點鐘小組開會”,設(shè)置N-GRAM窗口為5,則“2點鐘”為中心詞,這個中心詞的上下文為“今天、下午、小組、開會”,將這些上下文詞語的one-hot編碼輸入CBOW模型訓(xùn)練,使用訓(xùn)練誤差來更新神經(jīng)元的權(quán)值和偏移,最終使得“2點鐘”這個詞在輸出層的概率最大。
從這個例子可以看出,CBOW模型有兩個限制條件,一是語料庫要非常大并且準(zhǔn)確,比如類似“x點鐘干xx事情”這樣結(jié)構(gòu)的句子要有多個,這樣才能學(xué)習(xí)出“x點鐘”是時間詞;二是N-GRAM窗口大小的限制,超出窗口的詞就沒法被加入到中心詞的詞向量訓(xùn)練中來,而將N-GRAM窗口擴展得太大會增加深度模型訓(xùn)練的復(fù)雜度,需要通過訓(xùn)練確定的參數(shù)增多了,而Skip-gram模型可以通過跳過某些無關(guān)詞語的方法來解決N-GRAM窗口尺寸不好確定的問題。
如句子為“這場足球賽真是踢得太爛了”,“足球賽”和“太爛”這兩個詞語的關(guān)系更緊密,所以我們可以通過制定skip-gram的數(shù)目為2,跳過“足球賽”的直接相鄰上下文“真是”和“踢得”這兩個詞語,直接使用“足球賽太爛”組合進(jìn)行訓(xùn)練,從而得到“足球賽”和“太爛”這兩個詞的準(zhǔn)確關(guān)系。
因為大規(guī)模語料庫的詞語數(shù)量巨大,很多時候都是百萬級別,如果訓(xùn)練時需要計算出每個詞語在輸出層的概率,則訓(xùn)練會非常慢,為了加快模型的訓(xùn)練速度,谷歌又提出了Hierarchy Softmax和Negative Sampling兩種優(yōu)化算法[5]。Hierarchy Softmax優(yōu)化算法是將輸出層節(jié)點使用二叉樹形式進(jìn)行組織,在輸出層計算概率時通過二叉樹查找,快速從根節(jié)點查找到詞語節(jié)點,從而加快詞語的訓(xùn)練誤差反向傳播權(quán)值更新計算;Negative Sampling優(yōu)化算法是在計算非中心詞(Positive Word)的其他輸出詞(Negative Word)的概率時,不需要計算所有非中心詞的概率,只需要隨機選擇一部分詞語來進(jìn)行權(quán)值更新。
本文將重點介紹CBOW + Hierarchy Softmax組合的訓(xùn)練框架,CBOW + Hierarchy Softmax訓(xùn)練框架的架構(gòu)如圖3所示。
圖3 CBOW+HS訓(xùn)練框架
第一層是輸入層,首先選定一個窗口大小,當(dāng)前詞語為w,CBOW模型的輸入是當(dāng)前詞的上下文窗口內(nèi)的詞語的one-hot編碼。
第二層是隱藏層,如果設(shè)定詞向量為K維,則該層有K個神經(jīng)元,對輸入層的輸入值進(jìn)行權(quán)重計算。
第三層是輸出層,對隱藏層的計算值進(jìn)行Softmax概率計算,如果語料字典共有M個詞語,則輸出層有M個輸出節(jié)點,根據(jù)Hierarchy Softmax優(yōu)化算法,將這M個輸出節(jié)點組織成哈夫曼樹的形式,葉節(jié)點代表語料里所有的詞語。對于任意一個葉節(jié)點,如果規(guī)定左子樹為0,右子樹為1,就會有一個全局的編碼,例如“密碼”這個中心詞的編碼可能為“01001”,在進(jìn)行Softmax計算時,可以根據(jù)這個編碼在二叉樹上快速找到“密碼”這個中心詞對應(yīng)的葉節(jié)點,并根據(jù)計算得到的值進(jìn)行誤差反向傳播來進(jìn)行權(quán)值調(diào)整。
CBOW模型的訓(xùn)練流程:
(1)語料預(yù)處理
中文語料需要進(jìn)行分詞,將句子分解成詞語數(shù)組。而英文語料雖然不需要分詞,但是要處理各種時態(tài),如“plays”和“playing”這兩個詞語形態(tài)雖然不同,但是意思是一樣的,所以要進(jìn)行詞干提取和詞形還原。
(2)構(gòu)造詞典,統(tǒng)計詞頻
遍歷一遍語料中的所有文本,找出所有出現(xiàn)過的詞語,并統(tǒng)計各詞語的出現(xiàn)頻率。
(3)構(gòu)造樹形結(jié)構(gòu)
依照詞語的出現(xiàn)頻率構(gòu)造哈夫曼樹,哈夫曼樹是一棵最優(yōu)二叉樹,每個詞語都是哈夫曼樹的葉子節(jié)點,每個葉子節(jié)點都有一個權(quán)值,葉子節(jié)點的權(quán)值就是詞語出現(xiàn)的頻率。
(4)葉節(jié)點對應(yīng)的二進(jìn)制哈夫曼碼
這個二進(jìn)制碼表示節(jié)點在樹中的位置,能按照編碼從根節(jié)點一步步找到對應(yīng)的葉節(jié)點。
(5)初始化各非葉節(jié)點的中間向量和葉節(jié)點中的詞向量
樹中的各個節(jié)點,都與隱藏層的K個神經(jīng)元連接,每條連接都具有權(quán)值,每個節(jié)點都相當(dāng)于可以用一個K維向量來表示,其中,葉節(jié)點的K維向量就是各詞的詞向量,而非葉結(jié)點中存儲的是中間向量,用于進(jìn)行分類計算。
(6)訓(xùn)練中間向量和詞向量
讀取語料庫中預(yù)處理后的句子對應(yīng)的詞語數(shù)組,根據(jù)輸出層的輸出結(jié)果計算訓(xùn)練誤差,再使用反向傳播算法更新葉子節(jié)點詞向量和非葉子節(jié)點處中間向量的值。對于CBOW模型,首先將詞w附近的n-1個詞的詞向量相加作為系統(tǒng)的輸入,并且按照詞w的二進(jìn)制哈夫曼碼,一步步地在二叉樹上找到對應(yīng)的葉子節(jié)點進(jìn)行分類計算,如果分類計算錯誤,則通過誤差反向傳播算法對向量進(jìn)行修正,最終,當(dāng)訓(xùn)練結(jié)束后,每一個葉子節(jié)點都能夠被正確分類,對應(yīng)的向量也就是詞語在向量空間上的正確表示。
本文提出的基于Word2vec的內(nèi)容態(tài)勢感知技術(shù),可以分為數(shù)據(jù)預(yù)處理、提取關(guān)鍵詞詞集、使用關(guān)鍵詞詞集進(jìn)行內(nèi)容態(tài)勢感知三個階段,總流程圖如圖4所示。
圖4 內(nèi)容態(tài)勢感知流程
第一步:數(shù)據(jù)預(yù)處理。
選取具有典型業(yè)務(wù)特征和應(yīng)用場景的數(shù)據(jù)作為基準(zhǔn)語料庫,在基準(zhǔn)語料庫上建立Word2vec詞向量,詞向量空間的余弦距離就能夠較準(zhǔn)確地反映實際業(yè)務(wù)中詞語之間的相關(guān)程度。因為逗號、句號等特殊字符沒有語義,而“我”、“是”、“的”、“呢”、“哇”等詞語和章節(jié)題目等內(nèi)容對業(yè)務(wù)沒有幫助,如果加入到詞向量訓(xùn)練過程中,會對其他詞語產(chǎn)生干擾,所以需要在基準(zhǔn)語料庫中去除特殊字符,對基準(zhǔn)語料庫進(jìn)行分詞處理并去除停用詞。在本實驗中,選取了與密碼產(chǎn)品相關(guān)的200篇技術(shù)設(shè)計文檔和維基中文百科兩種不同業(yè)務(wù)的數(shù)據(jù)來創(chuàng)建兩個不同的基準(zhǔn)語料庫,分詞使用分詞工具Jieba,使用哈工大停用詞表來去除停用詞。
第二步:提取關(guān)鍵詞詞集。
預(yù)處理后的語料庫通過Word2vec的CBOW模型創(chuàng)建為詞向量,以便后續(xù)通過種子關(guān)鍵詞提取出向量距離較近的詞語形成業(yè)務(wù)關(guān)鍵詞詞集。在本實驗中,使用自然語言處理工具Gensim來創(chuàng)建詞向量,CBOW窗口設(shè)定為5,詞向量維度設(shè)定為300。
TF-IDF是一種常用的關(guān)鍵詞提取方法,TF詞頻(Term Frequency)指的是某一個給定的詞語在某文件中出現(xiàn)的次數(shù),IDF逆文件頻率(Inverse Document Frequency)指的是包含某一個給定詞語的文檔比例的倒數(shù)。一個詞語的TF-IDF越大,表示該詞語在某篇文章中出現(xiàn)次數(shù)越多,同時在其他文章中出現(xiàn)次數(shù)越少,則該詞語就越能夠代表某篇文章,該詞語也就越能被界定為關(guān)鍵詞[6]。但是TF-IDF算法只考慮了詞語的詞頻,沒有考慮詞語的上下文關(guān)系,所以通過TF-IDF算法提取出的多個關(guān)鍵詞之間的語義關(guān)系、相關(guān)程度等信息都無法解釋,相應(yīng)的內(nèi)容態(tài)勢感知結(jié)果的解釋性也就很差。為了解決這個問題,先通過TF-IDF算法對基準(zhǔn)語料庫提取關(guān)鍵詞,將提取出的關(guān)鍵詞作為種子關(guān)鍵詞,然后從Word2vec詞向量空間中根據(jù)余弦距離度量提取出較近的一組詞語作為一個關(guān)鍵詞詞集。本實驗中,基于維基百科中文語料的詞向量模型和密碼產(chǎn)品語料的詞向量模型提取出的種子關(guān)鍵詞和關(guān)鍵詞詞集如表1所示。
表1 詞向量關(guān)鍵詞詞集
從實驗結(jié)果可以看出,單一的種子關(guān)鍵字“密碼”和“算法”對應(yīng)的信息比較單薄,即使某文件多次匹配了這兩個關(guān)鍵詞也不能準(zhǔn)確解釋相關(guān)的內(nèi)容態(tài)勢感知信息,而基于種子關(guān)鍵詞和不同的語料庫提取出的關(guān)鍵詞集合中的多個關(guān)鍵詞具有很強的語義相關(guān)性,而且完整地體現(xiàn)相關(guān)的主題內(nèi)容場景,如維基關(guān)鍵詞詞集反映的是密碼應(yīng)用主題,而產(chǎn)品關(guān)鍵詞詞集反映的是密碼開發(fā)技術(shù)主題。
第三步,使用關(guān)鍵詞詞集進(jìn)行內(nèi)容態(tài)勢感知
將待感知內(nèi)容數(shù)據(jù)進(jìn)行去除停用詞、去除特殊符號、分詞等預(yù)處理操作后,使用提取出的關(guān)鍵詞詞集對內(nèi)容數(shù)據(jù)進(jìn)行精確匹配并對匹配結(jié)果進(jìn)行研判。對于匹配結(jié)果,定義了兩個數(shù)據(jù)指標(biāo),一個是匹配覆蓋率,表示內(nèi)容數(shù)據(jù)匹配了多少個關(guān)鍵詞詞集中的詞語,另一個指標(biāo)是匹配頻度,表示內(nèi)容數(shù)據(jù)匹配了多少次關(guān)鍵詞詞集中的詞語,以基準(zhǔn)語料庫中的平均詞頻作為閾值,匹配覆蓋率越廣,匹配頻度超出基準(zhǔn)閾值越多,說明該內(nèi)容數(shù)據(jù)越具有該基準(zhǔn)語料內(nèi)容特征。
如果用戶數(shù)據(jù)具有多個主要業(yè)務(wù)方向,如電子政務(wù)數(shù)據(jù)可能會有市政規(guī)劃、政策方針、經(jīng)濟分析等主要業(yè)務(wù)方向,可以對這些主要業(yè)務(wù)分別創(chuàng)建基準(zhǔn)語料庫并提取關(guān)鍵詞詞集,再用這些關(guān)鍵詞詞集對用戶數(shù)據(jù)逐一進(jìn)行精確匹配,通過研判匹配結(jié)果中的匹配覆蓋率和匹配頻度就能夠得到用戶數(shù)據(jù)的業(yè)務(wù)方向、數(shù)據(jù)敏感度、數(shù)據(jù)價值度等多種內(nèi)容態(tài)勢感知信息。
為了驗證本文的技術(shù)方案,分別使用維基百科中文語料和公司密碼產(chǎn)品技術(shù)文檔創(chuàng)建基準(zhǔn)詞向量模型,總數(shù)據(jù)量約為1.5G,操作系統(tǒng)為Windows 7環(huán)境,開發(fā)語言使用Python3.6,使用分詞框架Jieba和自然語言處理庫Gensim,硬件環(huán)境使用一臺服務(wù)器。
下面給出一個內(nèi)容臺式感知測試實例,以密碼相關(guān)的科普文章和公司內(nèi)部的密碼產(chǎn)品技術(shù)設(shè)計文檔作為待測試的態(tài)勢感知數(shù)據(jù),關(guān)鍵詞匹配結(jié)果如表2所示。
表2 關(guān)鍵詞匹配結(jié)果
從結(jié)果中看到,在使用單一關(guān)鍵詞進(jìn)行匹配時,不同的內(nèi)容數(shù)據(jù)的匹配結(jié)果沒有太大區(qū)別,但是使用基于不同詞向量模型提取的關(guān)鍵詞詞集的匹配結(jié)果就有了很大的區(qū)別,科普文章在維基中文的關(guān)鍵詞詞集上的匹配覆蓋率和頻度更高,相應(yīng)地,密碼產(chǎn)品技術(shù)設(shè)計文檔在維基中文的關(guān)鍵詞詞集上的匹配指標(biāo)就比較低,這些匹配結(jié)果的差異足以對內(nèi)容數(shù)據(jù)進(jìn)行進(jìn)一步的精確分類和安全研判。
本文通過使用Word2vec詞向量技術(shù)結(jié)合傳統(tǒng)的TF-IDF關(guān)鍵字提取方法,實現(xiàn)了一種關(guān)鍵詞詞集提取方法并應(yīng)用于內(nèi)容態(tài)勢感知。實驗結(jié)果表明提取出的關(guān)鍵詞詞集更加全面并更能反映內(nèi)容主題,使用關(guān)鍵詞詞集能夠得到比較準(zhǔn)確全面的內(nèi)容態(tài)勢感知結(jié)果,大大減少內(nèi)容態(tài)勢感知中虛警的 發(fā)生。