一、設(shè)計(jì)目標(biāo)
輸出一個(gè)通用化的匹配模型竭钝,可以通過日志內(nèi)容實(shí)現(xiàn)快速識(shí)別,實(shí)現(xiàn)日志快速分類茧泪。
二、設(shè)計(jì)思路
通過現(xiàn)有的部分日志數(shù)據(jù)作為基本訓(xùn)練數(shù)據(jù)穴吹。
通過日志文字進(jìn)行分類,并讓模型進(jìn)行學(xué)習(xí)顷霹,讓模型對(duì)于文字具備識(shí)別能力。
設(shè)計(jì)符合設(shè)計(jì)目標(biāo)的計(jì)算模型。
通過基本驗(yàn)證標(biāo)準(zhǔn)后袍辞,將計(jì)算模型應(yīng)用于日志更新的策略中,實(shí)現(xiàn)快速日志識(shí)別目標(biāo)谎懦。
三、基本實(shí)現(xiàn)策略
1呛谜、提取部分有效的日志數(shù)據(jù)
2、進(jìn)行關(guān)鍵數(shù)據(jù)分析聚凹,劃分?jǐn)?shù)據(jù)列,并提取具備共性的核心關(guān)鍵特征
3、將日志中表現(xiàn)關(guān)鍵指標(biāo)的數(shù)據(jù)作為訓(xùn)練的X和Y
4、在X數(shù)據(jù)中進(jìn)行關(guān)鍵詞的分詞旗们,提取訓(xùn)練所需的詞庫,并形成id數(shù)據(jù)
5、轉(zhuǎn)換X數(shù)據(jù),將數(shù)據(jù)轉(zhuǎn)換為數(shù)據(jù)矩陣
6、設(shè)計(jì)基本計(jì)算模型漓库,形成合理的多層模型彪薛,確保計(jì)算的穩(wěn)定性以及可靠性
7城侧、進(jìn)行多輪驗(yàn)證,直到尋求到最佳模型結(jié)構(gòu)以及訓(xùn)練結(jié)果,并保存炮温。
8棋枕、提取保存的模型,動(dòng)態(tài)刷新es日志數(shù)據(jù)重斑,并使用模型進(jìn)行預(yù)測(cè)
9兵睛、將預(yù)測(cè)結(jié)果批量刷新至es數(shù)據(jù)庫中祖很,實(shí)現(xiàn)日志分類
10假颇、將結(jié)果進(jìn)行二次運(yùn)用于其他分析和問題排查操作中形耗。
四倦踢、核心算法
本系統(tǒng)主要涉及以下幾個(gè)核心算法
1硼一、分詞算法
分詞是本系統(tǒng)的核心需求累澡,有效的分詞能夠幫助模型記憶數(shù)據(jù)含義。最終進(jìn)行預(yù)測(cè)時(shí)哼蛆,可以根據(jù)詞意進(jìn)行理解蕊梧,提高最終識(shí)別的有效性和穩(wěn)定性。
日志分詞的特殊性在于日志文字的復(fù)雜性腮介,往往是中文肥矢、英文、數(shù)字和特殊字符的混合體叠洗。因?yàn)樵谝话阕匀徽Z言處理時(shí)甘改,會(huì)考慮忽略特殊字符,但日志系統(tǒng)中的特殊字符往往具有其含義灭抑,因此實(shí)現(xiàn)分詞時(shí)十艾,保留特殊字符也是尤為重要。也因此腾节,本系統(tǒng)的分詞算法是實(shí)現(xiàn)最終目標(biāo)的第一重要算法忘嫉。
算法涉及主要方法的方法名偽代碼如下:
change_mark_to_sp_word()
first_split_sentence('\W+')
analysis_word_for_chn_and_split_ag()
get_and_save_word_index()
append_word_index_array()
2、有效詞分類算法
有效分詞是分詞系統(tǒng)中一個(gè)比較重要的子算法案腺。主要解決的問題是庆冕,由于在我們的分詞過程中,會(huì)遇到大量特殊的字符劈榨,例如hashcode访递,token等。這些字符在日志中往往不具備分類表意的作用同辣,但在分詞時(shí)拷姿,會(huì)因?yàn)樗牟恢貜?fù)性,形成大量的無效分詞邑闺。而矩陣計(jì)算時(shí)跌前,需要實(shí)現(xiàn)定長(zhǎng)矩陣的計(jì)算才能實(shí)現(xiàn)結(jié)果棕兼,因此必須要控制詞庫的容量在一定范圍內(nèi)陡舅。同時(shí)詞庫的增加也會(huì)增加計(jì)算的復(fù)雜度以及最終預(yù)測(cè)時(shí)的干擾性。
綜上伴挚,務(wù)必在分詞時(shí)靶衍,盡可能排除對(duì)于分類含義讀取無效的字符干擾灾炭,將無效詞不計(jì)入分類中。
本算法以文字形態(tài)表達(dá):
排除以下文字進(jìn)入有效詞庫:
超過特定長(zhǎng)度的字符
唱過特定長(zhǎng)度的數(shù)字
不排除所有中文字符
引入較大的英文詞庫颅眶,并根據(jù)英文詞庫蜈出,對(duì)單詞進(jìn)行有效性劃分。
排除其他特定的無效字符涛酗。
其他字符作為有效字符進(jìn)入到分詞詞庫中铡原。
3、模型構(gòu)建算法
最終的訓(xùn)練和預(yù)測(cè)模型是整個(gè)算法最終落地的環(huán)節(jié)商叹,因此選擇合理的模型是至關(guān)重要的燕刻。
本模型考慮過基于卷積算法的深度卷積文字算法和基于循環(huán)神經(jīng)網(wǎng)絡(luò)的seq2seq模型算法。
基于卷積算法的特點(diǎn)在于模型理解比較簡(jiǎn)單剖笙,訓(xùn)練時(shí)匹配度也比較高而且訓(xùn)練收斂速度快卵洗,但缺陷也非常明顯,基于卷積算法的邏輯在于基于一般詞的特征向量計(jì)算目標(biāo)關(guān)聯(lián)度弥咪,以此判斷計(jì)算結(jié)果和目標(biāo)的有效性过蹂,但一旦模型順序發(fā)生變更以及詞意發(fā)生變更,預(yù)測(cè)結(jié)果會(huì)變得相當(dāng)不穩(wěn)定聚至。但優(yōu)點(diǎn)是
基于循環(huán)神經(jīng)網(wǎng)絡(luò)的seq2seq算法來進(jìn)行計(jì)算酷勺,最大的缺點(diǎn)是計(jì)算速度慢,收斂度遠(yuǎn)不如卷積算法的收斂速度晚岭,但優(yōu)點(diǎn)是根據(jù)詞意進(jìn)行記憶的模型鸥印,明顯更趨于理解句意,更不容易受到環(huán)境變更的影響坦报,穩(wěn)定性也更好库说。
經(jīng)過多次調(diào)整,最終模型結(jié)構(gòu)如下:
Model: "sequential"
Layer (type) Output Shape Param #
embedding (Embedding) (None, 1000, 64) 4480000
dropout (Dropout) (None, 1000, 64) 0
batch_normalization (BatchNo (None, 1000, 64) 256
gru (GRU) (None, 1000, 32) 9408
gru_1 (GRU) (None, 5) 585
Total params: 4,490,249
Trainable params: 4,490,121
Non-trainable params: 128
因?yàn)楸緫?yīng)用目標(biāo)為特定多分類片择,因此分類函數(shù)使用了softmax潜的,損失函數(shù)使用了CategoricalCrossentropy,梯度下降函數(shù)使用Adam函數(shù)字管。
模型中使用了兩次dropout和一次batchNormalization來降低模型訓(xùn)練的擬合度啰挪,提高了模型的適應(yīng)性。
最終測(cè)試集的測(cè)試結(jié)果如下:
test loss 0.09884617477655411
accuracy 0.978004515171051
五嘲叔、實(shí)現(xiàn)平臺(tái)
基于anaconda框架的python3.7版本平臺(tái)實(shí)現(xiàn)亡呵。
基礎(chǔ)環(huán)境依賴了部分es的接口和mysql數(shù)據(jù)庫。
深度學(xué)習(xí)框架采用了tensorflow2.2版本硫戈。
六锰什、實(shí)現(xiàn)結(jié)果
最終實(shí)現(xiàn)結(jié)果的幾個(gè)描述維度:
結(jié)果運(yùn)行設(shè)備的配置為:2.8GHz主頻的CPU,2C8G配置。
1汁胆、平均預(yù)測(cè)速度
在不考慮es性能的情況下梭姓,提取出的數(shù)據(jù)進(jìn)行轉(zhuǎn)換然后預(yù)測(cè)的耗時(shí),約為80-120s每2w條日志(取決于數(shù)據(jù)的長(zhǎng)度和復(fù)雜度)嫩码。
2誉尖、預(yù)測(cè)精度
大約95%左右的預(yù)測(cè)準(zhǔn)確度,識(shí)別誤差更多來自于未學(xué)習(xí)過內(nèi)容的判定偏差铸题,通過擴(kuò)展學(xué)習(xí)范疇可以改善铡恕。
3、語義理解能力
基本實(shí)現(xiàn)了自主語義識(shí)別丢间,經(jīng)過查詢確認(rèn)了部分應(yīng)當(dāng)標(biāo)記為異常的日志數(shù)據(jù)保存時(shí)未作為異常數(shù)據(jù)保存没咙,但仍然被模型識(shí)別為異常,且語句中并不包含常見的關(guān)鍵字千劈,例如ERROR祭刚,異常等。
七墙牌、后續(xù)擴(kuò)展考慮
1涡驮、擴(kuò)展應(yīng)用范圍
因?yàn)楸灸P途邆湟话阈裕虼藨?yīng)用范圍可以從目前的日志范圍擴(kuò)展到更大范圍喜滨,從運(yùn)維到研發(fā)層面捉捅,幫助用戶快速發(fā)現(xiàn)和識(shí)別問題。
2虽风、提升準(zhǔn)確性
通過對(duì)分析數(shù)據(jù)的二次分析棒口,增加學(xué)習(xí)的維度數(shù)據(jù),繼續(xù)訓(xùn)練模型辜膝,提升模型的預(yù)測(cè)準(zhǔn)確度无牵。
3、分類深度分析
在數(shù)據(jù)分析上厂抖,如果繼續(xù)進(jìn)行異常等級(jí)分類茎毁,可以將異常劃分為不同等級(jí),幫助開發(fā)和用戶快速發(fā)現(xiàn)和識(shí)別問題忱辅。
4七蜘、異常統(tǒng)計(jì)
根據(jù)識(shí)別結(jié)果,快速生成特定服務(wù)的異常統(tǒng)計(jì)結(jié)果墙懂,并匯總為報(bào)表橡卤,實(shí)現(xiàn)質(zhì)量報(bào)告以及用戶異常行為報(bào)告等。
5损搬、自動(dòng)文本摘要
根據(jù)語義識(shí)別碧库,形成語義文本摘要扔亥,但本目標(biāo)涉及NLG(自然語言生成),當(dāng)前模型更多為NLP(自然語言處理)谈为。實(shí)現(xiàn)邏輯上仍然有一定偏差,實(shí)現(xiàn)復(fù)雜度會(huì)更高踢关。