[周琴芳 吳丹 宋志博]
智能運維(Artificial Intelligence for IT Operations,AIOps)是將人工智能與運維相結合,通過機器學習的方法來提升運維效率。目前的智能運維通過算法能夠實現(xiàn)識別故障類型、根因分析以及業(yè)務流量預測等功能[1]。事件管理作為AIOps工作流程的重要部分,目的是通過盡快減輕任何問題來減少對系統(tǒng)造成的影響。以前關于事件管理的工作主要集中在兩個挑戰(zhàn)上:事件篩選[2]和診斷[3]。在這里,篩選是指識別事件并將其發(fā)送給能解決這個問題的團隊。Chen等人[4]做了一項實證研究,他們發(fā)現(xiàn)高達60%的事件是被錯誤地篩選。他們提出了一種深度學習方法:DeepCT,它主要是利用事件數(shù)據(jù)(標題、摘要、評論)和環(huán)境因素對事件進行分類。
事件管理中的一個關鍵挑戰(zhàn)在于缺乏這些事件的結構化表示[5]。這些事件來源比較廣泛,可能是客戶、工程師,甚至自動化監(jiān)控系統(tǒng)產(chǎn)生。它們大多是非結構化的,包含多種類型的信息,如事件元數(shù)據(jù)、描述、堆棧跟蹤、shell腳本輸出、圖像等。因此,運維工程師需要花費大量的精力手動解析詳細的事件描述來理解問題,定位關鍵信息以
緩解問題,并最終讓適當?shù)膱F隊來解決問題。
因此,在這項工作中,我們解決了從服務事件中提取關鍵信息實體的問題。這種關鍵信息實體將為自動化流程(如日志提取和健康檢查)開辟道路,從而減少運維工程師所花費的精力。提取出的實體還可以幫助建立更好的模型來執(zhí)行下游任務如分類和根本原因分析。
理想情況下,實體抽取框架應該具備以下特點。
(1)它應該是無監(jiān)督的,因為注釋大量的訓練數(shù)據(jù)是費力和昂貴的。而且服務的獨特詞匯表是未知的。
(2)它應該是與領域無關的,以便能夠擴展到高容量和大量的信息實體類型。與網(wǎng)絡領域不同的是,在網(wǎng)絡領域中只有一小部分關鍵實體,如人、地點和組織,對于一些事件。我們無法先驗地知道這些事件中的實體。
(3)它應該是可擴展的,這樣就可以將這些技術應用于其他服務的事件,甚至其他數(shù)據(jù)集,如漏洞報告。這是至關重要的,因為每個服務(例如計算、網(wǎng)絡、存儲)都有其獨特的詞匯和術語。
為此本文提出一個新穎的通用關鍵信息實體提?。║NER)模型,這是一個以無監(jiān)督方式從服務事件中提取實體的框架,它有3個特性:無監(jiān)督、與領域無關和可擴展。本文其余部分組織如下:第2節(jié)介紹了事件生命周期,第3節(jié)概述通用關鍵信息實體提?。║NER)框架,第4節(jié)詳細介紹通用關鍵信息實體提?。║NER)框架的各個模塊,第5節(jié)為UNER模型訓練和評估,第6節(jié)總結了全文的研究工作。
事件被定義為產(chǎn)品或服務的意外中斷或退化,從而對客戶造成影響。例如,連接緩慢、超時、崩潰等都可能構成事故。事件管理流程定義了事件從創(chuàng)建到關閉所經(jīng)歷的各個步驟。故障和事件是非常不同的,事件可能會也可能不會導致故障。此外,事件經(jīng)常需要應對事件的開發(fā)人員參與。大多數(shù)在線服務都有自己特定的事件管理協(xié)議。這個生命周期流程圖是一個通用的過程。事件生命周期如圖1所示。
圖1 事件生命周期示意圖
事件管理過程大致分為4個階段。第一階段是告警階段,通常,當服務監(jiān)視到的指標性能方面(例如,響應慢、傳輸速度慢、系統(tǒng)掛起或崩潰等)低于預定義的可接受級別時,就會觸發(fā)警報。這就引出了第二階段——介入階段。在此階段,首先創(chuàng)建事件工單,然后分配給對應的團隊。這個將事件關聯(lián)到對應團隊的過程是自動的,基于經(jīng)驗判斷或者系統(tǒng)設置。該團隊與相關的工程師合作調查事件,或者將其重新分配給一個更合適的團隊。這個過程被稱為事件分類,這里主要是確定合適的團隊來介入這個事件。分類后就進入調查階段,被分配的團隊要緩解事件帶來的影響和根本原因分析。然后,把識別出的錯誤(如果有的話)提交給工程師團隊進行修復。在最后階段——修復階段,事件被解決和系統(tǒng)中對應的故障被修復。本文主要的工作是利用無監(jiān)督的方式從服務事件描述中提取實體信息,應用于介入和分析階段。
事件管理是高效運行大規(guī)模服務的關鍵之一?,F(xiàn)有的事故管理工作主要集中在事故分類方面。最先進的事件分類方法采用新穎的深度學習方法,這種方法以原始的非結構化的事件描述作為輸入[4]。本文的工作主要集中在從這些非結構化事件中提取關鍵信息實體。基于這些信息實體,可以通過自動化手動流程(如在本節(jié)結尾的示例中所描述的,對標識的資源運行自動健康檢查),來減少工程師的排查時間。與此同時還可以為事件分類等任務構建更簡單更好的機器學習模型。
為了解決事件管理的挑戰(zhàn),我們設計了UNER框架。這是從服務事件中提取關鍵信息實體的自動化方法。這個框架是基于命名實體識別(NER)任務的,命名實體識別(NER)任務在信息檢索(IR)領域已經(jīng)得到了很好的研究。命名實體識別被定義為解析非結構化文本的任務,不僅檢測實體,而且將它們分類到特定的類別。實體可以是給定類型或類別的任何文本塊。例如,下面是新聞標題的命名實體識別(NER)任務的輸入和輸出:
輸入:2021年北京環(huán)球影城累計接待游客210萬人次
輸出:[2021年 時間][北京 地名][環(huán)球影城 組織機構]累計接待游客[210萬 數(shù)目]人次。
本文提出的UNER框架不僅能夠從事件中提取關鍵信息,而且能夠將它們歸類為特定的實體。例如,能識別出文本中的一個GUID標識,并且基于上下文的信息將這個GUID分類為具體某個實體比如資源代號,這有利于引導工程師去分析可能是某個資源出現(xiàn)問題了。基于提取出來的實體對執(zhí)行諸如分類等任務的其他模型也有用。因此,與文本摘要提取等其他解決方案相比,實體抽取方案更適合于事件管理場景。
任何監(jiān)督機器學習的一個關鍵限制是需要大量的標記數(shù)據(jù),這種標記的產(chǎn)生需要大量的人力成本。在服務事件中,由于缺乏現(xiàn)有的訓練數(shù)據(jù)使我們無法使用任何監(jiān)督或半監(jiān)督技術。UNER使用句法模式匹配提取器,它利用事件描述中的鍵值對和表格結構這兩種模式來引導訓練數(shù)據(jù)。然后,采用標注擴充的方式來標注到這些模式之外的訓練數(shù)據(jù)。UNER框架是一個多任務深度學習模型,該模型能夠從非結構化事件描述中提取命名實體,并且獲得了很高的準確性。該模型不僅利用了語義特征,而且還利用私有標記的數(shù)據(jù)類型(如GUID、URI、布爾值、數(shù)值、IP地址等)。UNER模型中的實體類型如表1所示。
表1 UNER模型中的實體類型
這一節(jié)將詳細描述實現(xiàn)UNER的命名實體識別流程的方法。UNER命名實體識別流程如圖2所示。
圖2 UNER命名實體識別流程圖
從數(shù)據(jù)清洗過程開始,接著是無監(jiān)督數(shù)據(jù)標注。然后描述了標注擴充過程和深度學習模型的結構。
服務事件的報告來自各種各樣的源頭,如外部客戶、功能工程師甚至自動化監(jiān)控系統(tǒng)。信息可以有各種形式,如文本語句、會話、堆棧跟蹤、shell腳本、圖像等,所有這些都使得事件信息是非結構化的并且可讀性差。所以要求對原始數(shù)據(jù)進行清洗,首先裁剪事件描述中超過兩列的表并使用正則表達式和解析器去掉超文本標記語言(HTML)標記。在這個過程中,使用換行符將信息分割成句子。接下來,通過清理多余的空格來處理單個句子并進行分詞。
本文中一個主要的挑戰(zhàn)是缺少可用于監(jiān)督訓練命名實體識別(NER)任務的標簽數(shù)據(jù)集。手動標注數(shù)據(jù)的開銷是非常大,因為實體類型是未知的,而且在不同的服務中也有所不同。因此,UNER使用無監(jiān)督框架來創(chuàng)建標注語料庫。以下是為命名實體抽取自動生成標注語料庫的步驟:
(1)實體類型標注:如上所述,既沒有預先存在的標注數(shù)據(jù)集,也沒有預定義的實體類型集。因此,在這個階段,首先確定一個候選實體集。然后,清理該實體集合并消除噪聲實體。最后得到一個用于標記事件數(shù)據(jù)的實體集合。
步驟1A(候選實體的確定):由于沒有先驗的實體類型列表,首先使用一組無需人工識別的候選實體名稱和值對來做引導。為此,使用事件描述中常見的一些結構模式構建了模式提取器:
鍵值對:該模式通常在事件描述中用于指定各種實體,其中實體類型(鍵)和值通過分隔符(如‘:’)連接。例如,“狀態(tài)碼:401”或“問題類型:虛擬機(VM)未找到”。用分隔符分割句子,并提取前半部分作為實體類型,后半部分作為實體值。
表格:表格也經(jīng)常出現(xiàn)在事件描述中,這些表格經(jīng)常是由機器人或監(jiān)控服務創(chuàng)建的。在一個包含兩列的html表格中,通常提取第一列的值作為實體類型,第二列的值作為實體值。
上述常見的模式用于在解析數(shù)據(jù)集之后提取實體-值對的候選集。值得注意的是,上面列出的模式并不構成一個詳盡的實體集。使用弱監(jiān)督等方法,可以使更多的模式用來生成標記數(shù)據(jù)。
步驟1B(候選實體的排除):通過步驟1A獲得了初步的實體名稱和值的候選集合。由于這些模式比較簡單,滿足這些模式而提取出的候選集是有噪聲的,首先過濾掉了包含符號或數(shù)字的候選實體名稱,然后從候選實體名稱中提取n元字節(jié)片段(n的取值是1到3),并取出現(xiàn)頻率最高的K個n元字節(jié)片段。這里,K是一個參數(shù),用來檢索固定數(shù)量的實體類型。在這個過程中,較少出現(xiàn)和有噪聲的候選實體類型,如“令牌獲取啟動”和“數(shù)據(jù)庫連接”,將要被去除。此外,使用這種n元字節(jié)片段方法能處理實體-值的變體問題,如[“我的訂閱Id”,“6572”]和[“這個訂閱Id”,“6572”]將被轉換為[“訂閱Id”,“6572”],因為“訂閱Id”是候選集中常見的3元字節(jié)片段。
執(zhí)行上述步驟后,確定了以n元字節(jié)片段表示的最終實體類型集合?;谶@個集合,對數(shù)據(jù)集中出現(xiàn)的這些n元字節(jié)片段都進行一次標記。使用無監(jiān)督方法提取實體的例子請參見表1。
(2)數(shù)據(jù)類型標注:對于精煉后的實體候選集,接下來我們使用內置Python內置函數(shù)(如“isnumeric”)和自定義正則表達式來推斷實體值的數(shù)據(jù)類型。除了實體類型標記之外,這個步驟還在UNER的多任務學習模型中得到利用,在該模型中,我們聯(lián)合訓練以預測實體類型和數(shù)據(jù)類型。這些任務是互補的,有助于提高每個單獨預測任務的準確性?;谂c服務工程師的討論,我們定義了如下數(shù)據(jù)類型:
① 基本類型:數(shù)字,布爾,字母,字母數(shù)字,非字母數(shù)字
② 復雜類型:GUID,URI, IP 地址
③ 其他類型
為了推斷給定實體的數(shù)據(jù)類型,對數(shù)據(jù)集中出現(xiàn)的每一個命名實體進行計算。然后,使用最常見的類型來解決沖突。例如,如果“虛擬 IP”實體通常被指定為IP地址,由于噪聲或虛擬值的原因,有時被指定為布爾值,但仍能正確地推斷其數(shù)據(jù)類型為IP地址。
對于無監(jiān)督標記,我們使用模式提取器和弱監(jiān)督方式引導訓練數(shù)據(jù)。即使產(chǎn)生了優(yōu)化后的實體數(shù)據(jù)集,但是召回率將受到影響,原因是實體可能不在所選鍵值或表格模式的上下文中。在缺乏真實數(shù)據(jù)或標記數(shù)據(jù)的情況下,這是一個難以解決的問題。因此,為了避免深度學習模型在用于引導標記數(shù)據(jù)的特定模式上過擬合,我們希望將標簽一般化或多樣化。
利用標簽擴充的處理來解決這一挑戰(zhàn)。具體操作是擴充過程中提取的實體值,并將它們的類型傳播到整個語料庫。例如,如果IP地址“127.0.0.1”被提取為“源IP”實體,我們將把語料庫中所有未標記的“127.0.0.1”標記為“源IP”實體。這會存在一些特定的邊緣情況需要處理。例如,我們不能把這個技術用于布爾數(shù)據(jù)類型的實體。它也不適用于那些值是描述性的實體。最后,在擴充過程中,同一特定值在不同地方出現(xiàn)可能被標記為不同的實體,根據(jù)這些不同的實體在整個語料庫中出現(xiàn)的頻率,選擇頻率最大的那個實體來標記這個值。
前幾節(jié)解釋了UNER流程的各個階段,如圖2所示,這些階段完成了自動化創(chuàng)建標記數(shù)據(jù)的重要任務。在這里,我們提出了一種新的基于transformer的多任務深度學習模型,進一步強化了實體提取。該模型同時解決了兩個實體識別任務-實體類型識別和數(shù)據(jù)類型識別。該模型使用了一種架構,該架構共享兩個任務的一些通用參數(shù)和層,但也具有特定于任務的層。架構網(wǎng)絡結構如圖3所示。
圖3 網(wǎng)絡結構圖
首先使用預先的詞元分析器(tokenizer)將事件描述進行詞元化,并根據(jù)詞表轉化獨熱碼向量形式(one-hot)。然后再通過嵌入層(Embedding)轉換為詞級向量。嵌入層主要是減少one-hot向量的稀疏度,并強化詞之間的語義關系。詞向量序列由tranformer encoder層進行特征學習。然后,我們?yōu)檫@兩個任務設置了不同的層。最后,條件隨機場(Conditional Random Fields:CRF)層生成有效的輸出標簽序列。在執(zhí)行反向傳播的時候,我們組合了訓練種的損失函數(shù)(loss functions),評估精度、召回率和F1指標。在以下小節(jié)中,我們描述了模型中使用的重要層和方法。
4.4.1 Tokenizer
Tokenizer主要用于文本的預處理,能夠將句子級文本轉化為詞級的文本,然后用于接下來的詞向量轉化。在中文任務中,一般是將整個文本切成字(英文任務中,一般是切成詞word,為了統(tǒng)一描述,后續(xù)都用詞表示),然后根據(jù)詞表ID生成one-hot形式的向量。例如:文本“網(wǎng)絡”,假設詞表大小是4(實際詞表維度比例子大的多)是:
4.4.2 Embedding 層
使用One-hot 方法編碼的向量會存在兩個典型的問題:高維稀疏和缺乏詞級關聯(lián)性。
高維稀疏:假設我們的詞表包含12 000個詞,當時用One-hot編碼時,每一個詞會被一個包含12 000個整數(shù)的向量來表示,其中11 999個數(shù)字是0,要是詞典再大一點的話這種方法的計算效率比較低下。
缺乏詞級關聯(lián)性:在文本語義表訴中,詞與詞之間是具有一定關聯(lián)性的,但是one-hot向量之間是完全正交的,沒辦法表征詞間關聯(lián)性。
為了解決上述問題,引入Embedding層,Embedding層可以通過One-hot向量與Embedding矩陣相乘來實現(xiàn)。還是以文本“網(wǎng)絡”舉例:
Embedding矩陣參數(shù)通過網(wǎng)絡訓練學習后,更能表征詞級特性。
4.4.3 transformer
最近幾年,transformers在NLP領域得到極大的應用。本文也采用了transformer作為主要特征提取結構。transformer可以通過堆疊多個transformer block組成,本文堆疊了12個block,每個block中有2個子模塊:自注意力模塊和前向模型。transformer block基本結構如圖4所示。
自注意力模塊可以使得模型更加關注到實體部分,注意力模塊效果如圖5所示。
圖 4 transformer block
圖5 注意力模塊效果展示
自注意力模塊的實現(xiàn)方式可以參考論文[9]。
4.4.4 CRF
簡單地使用隱藏狀態(tài)表示(ht)作為單詞特征,在單詞級別做出獨立的標簽決策,這種方法沒有考慮到命名實體識別等任務中輸出標簽之間的固有依賴關系。我們的NER任務也有類似的特點,因此UNER最開始的時候就考慮到一些強文本結構特征,例如鍵-值對(key-value )中的":"分割符,html表格標記等。為了學習這些依賴關系,以及將它們推廣到更加一般化的場景,我們采用CRF來做標簽決策。
這里 A 表示轉移得分矩陣,Ai,j是從 tag i到 tag j的轉換分數(shù)。得分s進一步通過歸一化操作,轉化成正確的輸出序列y在所有可能的輸出序列Y的概率值。模型的目標就是最大化這個概率值。在從輸入序列抽取實體的過程中,我們預測具有最高得分的輸出序列作為輸出結果。
4.4.5 多任務學習
Caruana等人將多任務學習(MTL)定義為一種通過使用相關任務之間共享的基礎公共信息來改進模型泛化的方法。MTL的一些著名應用是多類和多標簽分類。在文本分類和序列標注任務中,MTL可以通過聯(lián)合學習來提高單個任務的性能。在UNER中,命名實體識別是主要任務。在這個任務中,模型主要從文本中出現(xiàn)實體的上下文來進行學習。但是我們也注意到,結合預測數(shù)據(jù)類型當作輔助任務,能夠間接地強化模型的訓練。例如,輸入文本“源IP地址是127.0.0.1”,我們的模型更準確地將127.0.0.1識別為實體類型源IP地址,因為它同樣被識別為IP地址的數(shù)據(jù)類型。這種設計強化了源IP地址都是IP地址數(shù)據(jù)類型這一特征模式,提高了模型的預測能力。如圖3所示,我們使用了多頭的網(wǎng)絡架構,其中transform層生成的低層特征是共享的,而其他層是任務特定的。我們將實體類型預測定義為主要任務,將數(shù)據(jù)類型預測定義為輔助任務。最初分別計算和兩個任務的損耗,然后將其合并為。參數(shù)loss_weights=(α,β)用于控制主任務和輔助任務之間的重要性。
我們使用 Python 3.7.4和PaddlePaddle 2.3.1來完成模型的搭建及訓練。模型的超參設置如下:詞嵌入層的維度是512,transformer采用了12個block堆疊,最長的序列長度限制在512。這些超參能夠得到一個效果魯棒并且參數(shù)量也中等的模型。我們的模型在Ubuntu 16.04 LTS 64位系統(tǒng)機器上訓練,機器搭載了一塊Nvidia Tesla v100 GPU,顯存是16 GB。不同模型的驗證效果如表2所示。
表2 驗證結果
我們在內部系統(tǒng)上收集了2個月的歷史事件數(shù)據(jù)。我們將模型和兩個基線模型,BiLSTM CRF和具有注意機制的BiLSTM CRF進行比較。這兩個基線模型在NER和其他自然語言處理任務上目前是先進的。我們在固定的測試集上進行評估,這些測試集是通過無監(jiān)督自動標注獲取的。我們確保測試集和訓練集之間沒有交集。我們使用平均精度、召回率和F1指標來評估和比較NER任務上的模型。如表2所示,我們觀察到,基線BiLSTM CRF(有和沒有注意力機制)的F1平均得分約為0.88。而UNER的多任務模型的F1平均得分較高,約為0.96,即F1提升了8.7%。我們還觀察到平均召回率高達0.95,反映了從描述中提取大量相關信息的強大能力,這將直接影響到理解問題和查找資源的準確性。通過測試集上被錯誤標注的樣本,我們進一步分析模型的泛化能力。我們觀察到,由于自動標注工具特征提取器的局限性,一些FPs實際上模型預測是正確的,但是在測試集中被錯誤標注了。FP樣例如表3所示。
表3 FP樣例
讓我們以表3中的示例1為例。在這里,無監(jiān)督標注工具只能將“2AA3BC0-79861abc-a98b-443fd7245e6”標注為訂閱ID,而不能將“vaopnuk vnet sc”標記為vnet名稱。UNER能夠從從語句中抽取出2個實體,證明它泛化能力不僅僅只是文本上的固定結構。第2行顯示了一個類似的假陽性示例,提取192.168.0.5作為IP地址。
事件管理是構建和運營大規(guī)模云服務的關鍵部分。在本文中,我們提出了UNER,能夠無監(jiān)督生成標注數(shù)據(jù),算法網(wǎng)絡結構結合了transformer和CRF,可以從事件報告中抽取實體信息。我們在內部運維系統(tǒng)中對UNER進行了評估。我們的評估表明,即使UNER是完全無監(jiān)督的,但它從非結構化事件數(shù)據(jù)中學習實體類型的精度高達0.96。此外,我們的多任務模型架構在實體提取方面優(yōu)于現(xiàn)有的一些基線模型。未來我們可以進一步利用抽取的實體信息,構建更精確的關鍵事件管理任務模型,如分類等。