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