?

詞向量模型對CNN日志異常檢測的性能影響研究*

2024-01-02 07:43閆謙時容曉峰
西安工業大學學報 2023年6期
關鍵詞:日志卷積向量

楊 光,閆謙時,容曉峰

(西安工業大學 計算機科學與工程學院,西安 710021)

當前數字化時代,數據中心承擔著存儲、處理和分發海量數據的關鍵任務,已成為支撐現代科技發展和信息交流不可或缺的基礎設施[1-2]。然而數據中心的系統不可避免的會因自身原因或是受到外部攻擊因素而發生異常,一旦對這些異常未做出及時處理,將會為各行業帶來無法挽回的巨大經濟損失。日志記錄了系統組件和應用程序在運行期間的狀態以及各關鍵節點信息[3],因此可通過日志幫助數據中心的運維人員及時發現系統異常,從而做出相應的措施修復異常,維護系統安全。然而隨著數據中心規模的日益擴大,數據中心的系統每天會產生TB級數量大小的日志文件[4],如何高效準確的從這些大規模日志文件中檢測出異常是面臨的一大挑戰。

當前對于日志異常檢測的研究主要集中在使用機器學習和深度學習兩種技術上?;跈C器學習的日志異常檢測技術從日志特征向量中學習系統正常運行的模式,通過建立適當的特征工程并經過一定數據量訓練后,能夠有效檢測出日志中存在的異常[5-6]。文獻[7]提出了一種使用K原型聚類和K近鄰分類算法的集成方法,通過分析系統日志的特征,應用K原型聚類算法對數據集進行分區,過濾出正常事件,然后設計基于距離特征的KNN分類算法衡量每個異常候選的k個最近鄰從而判別系統異常。文獻[8]在監督機器學習的基礎上通過將每個日志消息與日志模板相關聯表征日志消息的生成模式,然后依據專家經驗從生成模式中提取典型特征學習從而進行異常檢測。文獻[9]提出了一種用于自動發現并挖掘日志中程序不變量的方法,該方法學習日志的正常行為模式,使用聚類算法將相似的日志數據分組在一起,接著對于新的日志事件,通過將其與所有已知的聚類中心進行比較從而判斷異常。文獻[10]構造了以會話ID為行、以日志模板為列的特征矩陣,采用特征提取器對語義相近的日志模板進行合并以減少噪聲干擾,最后應用支持向量機對日志數據是否異常進行判別。雖然上述基于機器學習的日志異常技術已取得一定成效,但由于該技術在特征提取的過程中高度依賴于特定行業內相關人員的專業知識和經驗才能確保提取的特征能夠更準確,這導致在訓練過程中需要花費大量的時間在特征工程上,因此基于機器學習的日志異常檢測技術仍然存在著不足。近年來,作為深度學習技術之一的卷積神經網絡模型(Convolutional Neural Network,CNN),因其能夠對文本中的重要特征自動進行提取學習,大大減少了人們花費在特征工程上的投入[11],現如今CNN已被多數研究者應用于日志的異常檢測。文獻[12]提出一種基于CNN的自動化日志異常檢測方法,通過Word2vec詞向量模型[13]將日志映射為向量,采用卷積層提取日志語句中的關鍵詞信息,結合全連接層對日志進行分類和異常檢測。文獻[14]提出了一種改進的LogEvent2vec算法,其中使用FastText詞向量模型[15]將日志映射為向量,然后輸入到CNN中進行日志異常檢測。文獻[16]提出了一種結合CNN和長短期記憶神經網絡的日志異常檢測方法,該方法利用日志的語義信息,在檢測中自動學習日志序列之間的關系,其中CNN的輸入為日志中每個單詞經GloVe模型[17]轉化后的詞向量。文獻[18]評估了應用在日志異常檢測領域中使用最廣泛的幾種機器學習技術,考慮了日志數據的不平衡問題,提出了一種數據平衡方法以提高現有日志異常檢測模型的性能,其中在基于CNN日志異常檢測評估環節,輸入是經GloVe模型生成的詞向量。文獻[19]提出結合CNN和雙向長短期記憶神經網絡的日志異常檢測方法,在考慮日志鍵顯著時間序列特征基礎上,兼顧日志參數的空間位置特征檢測異常,其中CNN的輸入是經Word2vec模型生成的詞向量。

從基于CNN的日志異常檢測研究中可以發現,在異常檢測之前需要利用詞向量模型將日志中的每個單詞映射為向量作為模型的輸入[20-21],這是必要的預處理步驟。當前不同研究者采用不同的詞向量模型來實現日志的向量化,然而選擇的詞向量模型是否是最優選擇,不同詞向量模型是否會對后續CNN日志異常檢測的性能產生影響,目前還缺少相應對比分析。因此,文中設計基于CNN的日志異常檢測模型,在預處理階段基于訓練日志采用研究現狀中的三種不同詞向量模型構建詞向量字典,利用詞向量字典將測試日志向量化輸入到CNN中,比較CNN各項性能指標以選擇最優詞向量模型提高CNN日志異常檢測的性能表現。最后結合實驗分析了詞向量模型影響CNN日志異常檢測性能差異的因素。

1 詞向量模型

1.1 Word2vec模型

Word2vec是文中采用的第一種詞向量模型,其通過對日志文本建模,利用滑動窗口內單詞的上下文來學習日志單詞之間的語義和關聯性,將日志單詞轉換為向量表示。在Word2Vec模型中,主要包含兩種形式:基于連續詞袋模型(Continuous Bag of Words ,CBOW)和跳字模型(Skip-Gram),這兩種模型結構均由輸入層(INPUT)、投影層(PROJECTION)和輸出層(OUTPUT)組成。

CBOW模型框架如圖1(左圖)所示,通過訓練與日志中某一個特定詞wt上下文相關的2k個詞wt-k,wt-k+1,…,wt-1+k,wt+k來獲得wt的詞向量,而Skip-Gram則通過訓練某一個日志特定詞wt獲得該特定詞對應上下文相關的日志詞向量,模型框架如圖1(右圖)所示。

圖1 CBOW模型(左)和Skip-Gram模型(右)

對于 CBOW 模型,輸入為日志特征詞 wt上下文相關詞所對應的詞向量,由one-hot表示,經過求和并由投影層映射到嵌入空間中,接著由輸出層使用Softmax預測當前的日志特征詞wt,其公式為

(1)

(2)

式中:con(w)為詞語w的上下文相關詞;x為con(wt)的詞向量求和并經投影層映射后的向量;e′(wt) 為詞的輸出向量,即所對應的日志特征詞wt關于上下文的詞向量。Skip-Gram模型的原理與上述過程類似。

1.2 GloVe模型

GloVe是文中采用的第二種詞向量模型,其結合日志文本的全局共現信息和局部上下文信息,通過使用記錄了日志單詞在上下文中出現頻率的共現矩陣,對共現矩陣進行分解和優化從而得到日志單詞的詞向量表示。共現矩陣X的定義為

(3)

式中:(wk,i)為日志單詞i在日志單詞wk的上下文中出現的次數。之后需要采用最小化目標函數將共現矩陣轉化為日志單詞的向量表示,最小化目標函數的公式為

(4)

式中:|V|為詞表大小;wi和wj分別為日志單詞i和日志單詞j的詞向量;Xij為日志單詞j在日志單詞i上下文中出現的次數;bi和bj為偏置項,用于調整日志單詞詞頻對日志詞向量的影響;f(xij)代表權重函數,公式為

(5)

通過最小化目標函數,GloVe模型可以學習到每個日志單詞的向量表示,使得相似日志單詞在向量空間中更加接近。

1.3 FastText模型

FastText是文中采用的第三種詞向量模型,基于子詞表示詞向量。對于每個日志子詞,FastText 模型都有一個對應的日志子詞向量,在構建日志詞向量時,FastText 將日志詞向量表示成日志子詞向量的加權和,其中日志子詞向量的權重是由其出現的次數或出現的頻率來決定。FastText模型的結構與Word2vec模型的CBOW結構類似,同樣是由輸入層、隱藏層、輸出層這三層結構組成,模型在做輸出時采用分層 Softmax并使用哈夫曼編碼對輸出進行處理來降低運算的復雜度。FastText模型的目標函數為

(6)

式中:N為語料庫數量;yn為第n個輸入文本對應的類別;f(x)為softmax損失函數;為文本的歸一化處理值;A和B分別為模型訓練過程中通過學習得到的權重矩陣。最終訓練得到輸入層到隱藏層的權重參數就是日志的詞向量。

2 日志異常檢測

2.1 日志異常檢測流程

日志異常檢測流程的第一步是預處理階段。圖2是由HDFS、BGL、OpenSSH三種不同類型系統產生的日志樣例數據。

圖2 日志樣例數據

由圖2可以看出,一條日志由消息頭和消息內容兩部分組成。消息頭包含了如時間戳、消息類型、消息級別等信息。消息內容則是一種沒有格式約束的文本,由常量部分和變量部分組成,其中,常量部分在系統運行過程中保持不變,變量部分會隨著系統運行而發生動態變化。由于原始日志是一種復雜的非結構化特征數據,存在著消息頭以及變量等較多的冗余信息和噪聲,因此在預處理階段需要利用日志解析算法對原始日志進行結構化并去除無關的冗余信息和噪聲[22-24],得到日志模板用以后續流程的進行。例如對HDFS其中的一個日志條目“081109 213009 2207 INFO dfs.DataNode$PacketResponder:PacketResponder 1 for block blk_38865049064139660 terminating”,經解析得到日志模板為“PacketResponder * for block * terminating”。日志模板不能直接被檢測模型所識別,仍需繼續進行相應的處理,通過將日志模板中的單詞進行小寫轉化,并刪除其中的換行符、空格、下劃線等特殊字符,輸入到詞向量模型中構建詞向量字典,利用詞向量字典對日志單詞進行向量映射,最終得到符合檢測模型的標準輸入形式。

預處理階段完成后進入到特征提取階段。通過將預處理后的訓練日志輸入到設計好的檢測模型中,模型依據訓練日志的標簽(例如標簽值為1代表正常的日志條目,標簽值為0代表異常的日志條目),自動學習提取日志數據中存在的特征,并通過多次迭代以減少訓練時的損失[25]。訓練完成后保存損失率最小的一次模型的權重參數,然后利用測試日志繼續對模型進行相應的參數調整,當模型在測試日志中也具有較好的表現且各項性能指標趨近于穩定時,即可將此時的模型用于最終異常檢測階段的使用。

特征提取階段完成后進入到異常檢測階段。通過對待檢測日志數據進行預處理然后輸入到異常檢測模型中,模型根據訓練階段學習到的特征,結合待檢測日志的特征以判斷當前日志是否異常。

2.2 基于CNN的日志異常檢測模型

設計的CNN日志異常檢測模型結構如圖3所示,其中包括輸入層,卷積層、池化層、全連接層四個重要部分。

圖3 CNN日志異常檢測模型結構

輸入層輸入的是經預處理后得到的日志向量矩陣,矩陣大小為w*h,其中w為每個日志模板中的字符數量,h為詞向量模型生成的日志詞向量維度。

卷積層通過將卷積核與日志向量矩陣中的不同位置進行卷積,從而提取日志數據的局部特征。卷積層通常包括多個卷積核,每個卷積核可提取到不同的特征,卷積核的大小和數量可通過實驗進行設置調整。卷積層還包括一個偏置項和一個激活函數,通過偏置項和激活函數可增加模型的表達能力,卷積層的計算公式為

(7)

式中:x為輸入的數據;o為卷積核;b為偏置項;y為卷積層的輸出;i,j為輸出數據的位置;k為輸出通道數;m和n為輸入通道數。卷積過程中使用一維卷積核來提取輸入數據的特征,卷積核的大小設置為a*h,其中a的大小不超過所有日志模板中最短的日志模板字符數量,h同樣為詞向量模型生成的日志詞向量維度。經過卷積核在日志向量上的一維滑動掃描,每個窗口和卷積核進行點乘操作提取特征,例如對于輸入的一段日志文本,其點乘如圖4所示。

圖4 點乘示意圖

將點乘的結果進行累加并加上偏置項,通過激活函數進行非線性變換,常用的激活函數包括 Sigmoid、Tanh、ReLU 等函數,使用最多的是ReLU激活函數,它的收斂速度更快且梯度不會飽和,公式為

(8)

池化層將卷積層得到的每個特征向量進行最大池化,突出重要特征并且達到降維效果,最大池化的公式為

(9)

式中:h為卷積層的輸出;n為卷積核的數量。全連接層將池化層的輸出映射到分類標簽上,并以softmax,relu等作為激活函數預測最終的分類結果。全連接層的公式為

y=Wx+b,

(10)

式中:x為前一層的輸出;W為權重矩陣;b為偏置項;y為全連接層的輸出。在訓練過程中,通過反向傳播算法來更新權重矩陣和偏置項以最小化損失。

3 實驗及分析

3.1 實驗環境

搭建的實驗環境采用Windows 11 Professional 64位操作系統,16 GB內存,處理器為11th Gen Intel(R) Core(TM) i5-11320H @ 3.20 GHz 3.19 GHz,顯卡為NVIDIA GeForce MX450。

3.2 數據集

采用的實驗數據集是目前公開的HDFS日志數據集以及BGL日志數據集。HDFS日志數據集是在Amazon EC2節點上運行并基于hadoop的map-reduce作業生成。原始日志文件大小約為1.5 G,共包含11 197 954條日志記錄,每條日志記錄都包含了時間戳、事件類型、事件描述等信息,其中的16 838條日志數據被標記為異常。BGL日志數據集是由美國國家能源研究科學計算中心提供的一個超級計算機日志數據集。該數據集記錄了在計算機上運行的大量應用程序的日志,包括計算節點的狀態、進程的運行情況、網絡連接等信息。其原始文件大小約為708 M,一共包含4 747 963條日志記錄。同樣每條日志記錄都包含了時間戳、事件類型、事件描述等信息,其中的348 460條日志被標記為異常。

3.3 評價指標

由于日志是一種不平衡數據,存在著正常日志數據量遠大于異常日志數據量的情況,為避免出現測試日志中預測樣本全為正常導致的高準確率現象,文中采用了除Accurary準確率之外,還包括Precision精確率、Recall召回率、F1共四種評價指標。這四種評價指標的計算公式為

(11)

(12)

(13)

(14)

式中:All為總樣本的數量;T為預測正確的樣本數;TP為異常日志數據被模型判定為異常的數量;FP為正常日志數據被模型判定為異常的數量;FN為異常日志數據被模型判定為正常的數量。根據Accurary可了解到檢測模型對日志數據的正確分類情況。根據Recall和Precision可了解到模型的過擬合程度。如果召回率低,則說明有大量的異常日志數據被模型檢測為正常數據,如果精確率低,則說明有大量的正常日志數據被模型檢測為異常數據。F1用來綜合判斷模型的檢測效果,F1值越大,模型對日志的異常檢測效果越好,F1值越小,模型對日志的異常效果越差。

3.4 實驗過程及結果分析

分別選取HDFS以及BGL兩個數據集,按照不同比例將其劃分為訓練日志和測試日志,以分析Word2vec、GloVe、FastText這三種詞向量模型對CNN日志異常檢測的性能影響。

首先對日志數據進行預處理,其中在預處理中的構建詞向量字典環節,設置三種詞向量模型處理的最低詞頻都為1(即對語料庫中出現的所有單詞都進行處理生成詞向量),且生成的詞向量維度都設置為100。預處理階段結束后,將預處理后的日志數據輸入到CNN中進行訓練。文中搭建的CNN模型各項參數詳細設置見表1。

表1 CNN模型參數

表1中詞嵌入維度embedding_dim設置為100維,輸入通道數in_channels為1,輸出通道數out_channels為50,卷積核大小設置為2*100和3*100兩個大小的卷積核。池化層采用最大值池化進一步提取卷積后的特征,模型的輸出維度output_dim設置為1,dropout設置為0.5,學習率設置為0.01,選擇交叉熵損失函數來計算損失,使用Adam優化器來更新網絡模型的參數。模型的訓練迭代次數設置為100,訓練迭代期間保存模型損失率最小時的狀態參數。訓練階段結束后,結合訓練階段得到詞向量字典,將測試日志中的單詞映射為向量,輸入到CNN中觀察不同詞向量模型對應CNN的各項性能指標。

圖5展示了在HDFS和BGL兩種數據集上,分別使用三種不同詞向量模型對應CNN的準確率變化,其中橫坐標是訓練日志量占總日志量的比例,縱坐標是測試日志上CNN的準確率值。從圖中可以觀察到,不論是在HDFS還是BGL數據集上,當訓練日志量占總日志量的10%時,與另外兩種詞向量模型相比,使用FastText模型生成的詞向量,測試日志上對應CNN的準確率都是最低,而使用GloVe模型生成的詞向量,測試日志上對應CNN的準確率都是最高。使用Word2vec模型生成的詞向量,測試日志上對應CNN的準確率介于GloVe和FastText之間,準確率的差異在HDFS日志上的表現更為突出。分析原因是由于相較于BGL日志,HDFS日志更復雜且包含的特征更多。因此訓練日志量較少時導致不同詞向量模型生成的詞向量質量差異較大,從而測試日志上CNN的準確率也具有較大差異。隨著訓練日志量的增加,從圖5觀察到兩種數據集上CNN的準確率都逐漸提高,且在同一數據集上不同的詞向量模型對應CNN的準確率逐漸接近。當訓練日志量增加到占總日志量的70%和80%時,從圖5觀察到在同一數據集上此時三種不同詞向量模型對應CNN的準確率基本接近相同。

圖5 不同詞向量模型對應CNN的準確率變化

除準確率外,文中還對比了其余三種評價指標。分別在兩種數據集上使用10%的訓練日志量,測試日志上不同詞向量模型對應CNN的各項指標如圖6和圖7所示。

圖6 HDFS數據集上的不同詞向量模型對應CNN的各項指標

從圖6可以看出,在HDFS日志數據集上,此時各詞向量模型對應CNN的精確率差異不大且精確率都較高,這表明無論使用哪種詞向量模型,都僅有少量的正常日志文本被CNN模型檢測為異常文本。召回率和F1的差異較為顯著,FastText模型對應CNN的召回率僅有31.34,這使得FastText模型對應CNN的F1值最小。GloVe模型對應CNN的召回率為82.29處于最高,這使得Glove對應CNN的F1值最高,Word2vec模型對應CNN的召回率和F1值介于其余兩個詞向量模型之間。因此在HDFS日志上使用10%的訓練日志量時,測試日志上GloVe模型使得CNN日志異常檢性能最好。

從圖7可以看出,在BGL日志數據集上,此時各詞向量模型對應CNN的精確率和召回率以及F1值都有著明顯的差異。精確率上FastText模型對應CNN的精確率為91.13處于最低,GloVe模型對應CNN的精確率為98.88處于最高,Word2vec模型對應CNN的精確率介于其余兩個詞向量模型之間。召回率上FastText模型對應CNN的召回率為98.96處于最高,Word2vec模型對應CNN的召回率依然介于其余兩個詞向量模型之間,GloVe模型對應CNN的召回率為95.96處于最低。最終的F1值上,GloVe模型97.19的F1值依然處于最高,因此在BGL日志上使用10%的訓練日志量時,測試日志上GloVe模型同樣使得CNN日志異常檢測性能最好。

通過在HDFS和BGL數據集上的多次實驗發現,當使用30%到80%之間的訓練日志量時,測試日志上不同詞向量模型對應CNN的各項性能指標差異都較小,因此文中選擇部分關鍵性能指標數據展示在表2表3所示。從表2和表3可以明顯的看出,當訓練日志量較少時,使用Glove模型對應CNN日志異常檢性能依然表現最好。隨著訓練日志量的增加,不同詞向量模型對應CNN的精確率、召回率以及F1值的各項指標差異逐漸減小。當訓練日志量增加到占總日志量的80%時,此時不同詞向量模型對應CNN的精確率、召回率以及F1之間的差異基本可忽略不計。

表2 HDFS日志數據集上的CNN各項指標

表3 BGL日志數據集上的CNN各項指標值

綜合以上實驗結果,分析三種詞向量模型使CNN日志異常檢測性能指標變化的原因如下。日志中常常存在由多個單詞組成的特定詞語和術語,并具有特定的語義,由于FastText將單詞拆分為子詞或字符級別的表示,無法直接建模特定詞語短語的整體語義,只能通過子詞的組合來表示,因此在訓練日志量較少的情況下,FastText無法很好地捕捉日志中單詞之間的細粒度關系,導致生成的詞向量質量較低,進而在測試日志上對CNN的性能產生了負面影響。相比之下,GloVe模型因為結合了全局共現信息和局部上下文信息,更好地捕捉到了日志語句中單詞之間的細粒度關系,因此同樣在訓練日志量較少的情況下,GloVe模型生成的詞向量質量更高,更接近于實際語義,從而在測試日志上使得CNN模型的性能最優。Word2vec模型在訓練過程中通過滑動窗口的方式來捕獲單詞之間的細粒度關系,即Word2vec模型更多關注的是窗口內單詞之間的細粒度關系從而生成詞向量,關注點介于FastText模型的單個字符和GloVe模型的全局文本之間,因此在測試日志上Word2vec模型使得CNN的性能表現介于GloVe和FastText模型之間。隨著訓練日志量的增大,其中的訓練樣本逐漸包含了更多的語義和上下文信息,這彌補了詞向量模型在訓練日志量較少時捕獲單詞之間細粒度關系上存在的不足。此時不同的詞向量模型生成的詞向量都逐漸接近于實際語義,因此在測試日志上對應CNN的各項性能指標差異逐漸減小。

4 結 論

設計了基于CNN的日志異常檢測模型,在預處理階段基于訓練日志分別采用不同詞向量模型構建詞向量字典,利用詞向量字典將測試日志中的單詞映射為向量,輸入到CNN中比較其各項性能指標以選擇最優詞向量模型提高CNN日志異常的檢測性能表現。實驗結果表明:當訓練日志量較少時,測試日志上不同詞向量模型對應CNN的性能指標差異較為明顯,其中GloVe模型在兩種數據集上使得CNN分別取得了88.92和97.19 的最高F1值,表明了Glove使得CNN日志異常檢測的性能最好,Word2vec模型在兩種數據集上使得CNN取得的F1值介于另外兩個詞向量模型之間,而FastText模型在兩種數據集上使得CNN僅取得了47.51和94.88的最低F1值,表明了FastText模型使CNN日志異常檢測的性能最差。隨著訓練日志量逐漸增加,測試日志上不同詞向量模型對應CNN性能指標差異逐漸減小,Glove模型使得CNN日志異常檢測的性能依然表現最好。通過文中的對比實驗,優先選擇GloVe模型可提高CNN日志異常檢測的性能表現。

猜你喜歡
日志卷積向量
向量的分解
一名老黨員的工作日志
基于3D-Winograd的快速卷積算法設計及FPGA實現
聚焦“向量與三角”創新題
扶貧日志
從濾波器理解卷積
基于傅里葉域卷積表示的目標跟蹤算法
游學日志
向量垂直在解析幾何中的應用
向量五種“變身” 玩轉圓錐曲線
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合