王月瑤, 胡琴敏, 劉 偉, 陳乃華, 程 潔
1(華東師范大學 計算機科學與軟件工程學院, 上海 200062)
2(騰訊公司 騰訊公司 IEG, 上海 200233)
3(上海智臻智能網絡科技股份有限公司, 上海 201803)
隨著游戲產業的蓬勃發展, 各類游戲層出不絕, 游戲用戶的選擇日漸增多, 穩定的運營與良好的服務漸漸成了游戲能否勝出的重要因素. 而隨著人工智能風潮的掀起, 數據挖掘技術在游戲行業中的應用獲得了廣泛的關注[1]. 越來越多的企業已經意識到了這一點,開始重視起智能化運維服務[2], 從數據中獲取有用的信息, 輔助用戶與維護人員更好地解決問題.
在企業級游戲運維中, 客服人員每天會對游戲用戶的反饋信息進行記錄. 由于游戲發生故障時會產生大量的用戶反饋, 因此工作人員可以從大量的用戶反饋中提煉有效信息, 人工確認后形成游戲故障單, 交由對應的運維人員處理. 每個故障單記錄了一個突發的游戲故障告警事件, 在傳統的告警處理方法中, 一旦發現故障告警事件就會將所有告警信息發送給運維人員.然而, 由于游戲故障原因的多樣性, 告警數據庫信息量巨大[3], 故障發生的同一時間會產生各類告警. 這樣的處理方式實際上忽略了用戶的反饋, 損失了寶貴的信息資源, 同時存在很多告警誤判誤報的問題. 不相關的告警信息會干擾運維人員做原因診斷, 因而告警信息需要進行分析.
在對告警信息的分析中, 過去的研究者已經取得一定的成果. 但他們的工作主要聚焦于利用關聯規則收斂電網的數據[4], 或根據網絡異常流量曲線進行網絡告警的分類[5]. 當然, 針對用戶的反饋信息, 也有研究者根據體驗價值、交易成本和服務質量三個維度建立用戶服務模型[6], 或從中找出用戶忠誠度與價格關系[7].然而, 這些方法都不關注文本信息的分類, 不適用于分析故障的文本信息, 而從用戶反饋中提煉出的文本信息是十分重要的.
因此, 我們提出一種面向運維突發故障告警事件的智能分類算法. 首先, 我們分析故障事件文本的各項特征; 然后, 對文本信息利用半自動構建的語義映射工具進行概率計算; 最終將記錄突發故障事件的文本自動分為三類: 網絡級突發故障、程序主機類突發故障、平臺支付類突發故障. 根據判斷的類別向運維人員發布該類別相關的告警, 排除大類上的誤判, 減少無關告警信息的轟炸.
我們的貢獻在于將情感分類的算法創新性地利用在游戲運維的文本分類上, 并提出了一種語義映射工具供后續企業級的故障文本分類使用.
我們在企業近三年的故障單上做了實驗, 實驗表明: 本文提出的智能分類算法, 對比簡單的基準方法決策樹算法和樸素貝葉斯算法, 準確率分別有13%和9%的提升. 將此智能分類方法應用到企業級業務故障診斷中, 能實現更有針對性地發布告警, 減少告警的誤判, 支撐運維人員更快速準確地去定位故障原因.
本文提出了一種面向故障告警事件的智能分類模型, 去分析描述突發告警事件的文本信息, 從中判斷出故障事件的大類, 收斂無關告警, 減少告警的誤判, 從而使發布告警更具有針對性. 整個模型的結構如圖1所示, 分為以下三個模塊, 分別是數據預處理模塊, 構建映射工具模塊和類情感分類模塊. 第一層數據預處理模塊主要分為數據清洗和jieba分詞. 第二層構建語義映射工具模塊指的是從已標注類別的故障告警事件文本中, 抽取三個類別對應的關鍵詞, 建立每個類別下的運維詞典, 經過人工確認后半自動構建語義映射工具. 第三層類情感分類模塊主要是利用所構建的語義映射工具進行類別分析計算, 選擇概率最高的類別作為最終的告警類別, 完成分類過程.

圖1 告警智能分類模型
描述突發故障事件的文本經過這個智能分類模型,便可自動分類到以下三類故障中: 網絡級突發故障、程序主機類突發故障、平臺支付類突發故障. 分類后能收斂無關告警, 以實現告警信息的針對性發布.
描述游戲故障告警事件的文本是從用戶反饋中提取的信息, 其中包括一些游戲用戶的個人信息和相關問題描述. 這些信息包含很多與故障告警無關的內容,因此需要對數據進行清洗, 并進行jieba分詞[8,9], 從而最終形成描述該故障事件的詞典集合.
假設sentence(j)為清洗后的故障事件j的所有描述語句, word(i)為 sentence(j)中的第 i個描述詞, 數據預處理的方法如下:

公式(1)中的clean指的是數據清洗過程, jieba指的是數據分詞過程, 通過公式(1), 將所有的故障事件文本數據進行轉換, 獲得一個分詞后的詞典集合, 進而提供給下一步構建語義映射工具使用.
本文構建的語義映射工具是基于已標注類別的故障文本數據, 采用了 Term Frequency-Inverse Document Frequency (TF-IDF)算法[10]提取文本中相應類別的詞典, 形成智能分類算法的映射工具. TF-IDF由Salton[10]在90年代提出, 并且在文本檢索中不斷發揮著重要作用, TF-IDF的主要思想是指一個詞在特定文檔中出現的頻率越高(TF), 并且在文檔中出現的范圍越廣(IDF), 這個詞就越關鍵權重越高. 其經典計算公式如公式(2)所示:

在公式 (2)中, tj是特征項, tfij指的是 tj在文檔di中出現的次數; idfj表示逆文檔頻率, N 表示總文檔數, nj表示tj的文檔數目. 在本文中利用該算法思想來提取每個類別下每條故障描述中的關鍵詞.
半自動構建語義映射工具的整個過程如圖2所示,主要分為兩步, 首先針對已存在并已讓專家標注類別的故障事件文本, 利用TF-IDF算法提取每個故障事件描述文本中前三名的詞, 構建相應類別的詞典表述, 確保詞典的專業性. 第二步是建立每個類別下的特有詞典, 因為在故障表述中, 不同類別下的故障描述內容可能相同, 不同的詞典可能包含相同詞, 所以需要對比相同詞語在不同詞典下的TF-IDF值, 將這個詞劃分到其TF-IDF值較高的類別詞典中. 同時采用人工確認的方法, 確保詞典的獨特性與正確性.
例如網絡類的故障描述會涉及到“客戶端”這個詞,而程序主機類的故障也會頻繁地提及“客戶端”這個詞.因此“客戶端”這個詞在兩個類別下的TF-IDF值都很高, 被同時選入網絡類的詞典和程序主機類的詞典, 這時通過比較得到“客戶端”在網絡類的TF-IDF總值, 和在程序主機類的TF-IDF總值, 由于“客戶端”這個詞在程序主機類的TF-IDF總值較高, 這個詞被歸為程序主機類詞典, 依次類推, 再通過人工確認最終確定每個類別下的語義映射工具.

圖2 半自動構建語義映射工具
通過以上過程, 我們半自動構建了針對網絡類、程序主機類和平臺充值類這三個類別的語義映射工具,提供給下一過程的分類使用. 該語義映射工具已可以直接使用, 但后續故障描述如果有更新, 可以通過如圖所示的方法將語義映射工具進行擴展.
情感分類中一種常用算法[11]是利用構建好的情感詞典進行情感分類, 分為正向負向和中性的情感. 借鑒這樣的思路, 本文在最后一步利用已經構建好的語義映射工具進行類情感分類, 分類過程如公式(3):

應用以上公式進行類情感分類, Pk為每個類別下的概率, k對應各個類別的順序(網絡類順序為1, 程序主機類順序為2, 平臺充值類順序為3, Classk為半自動構建語義映射工具中詞典的類別, 此處標記網絡類詞典為Class1, 程序主機類詞典為Class2, 平臺充值類詞典為Class3, Label指最終分類形成的類別.
首先, 將每個故障事件中文本sentencej分詞后的詞典wordi通過語義映射工具映射, 計算該故障事件文本屬于每個類別的概率. 每個類別下的概率Pk是通過映射到每個類別Classk的個數, 除以該故障事件sentencej的長度.
然后, 比較每個類別下的概率Pk大小, 如果是網絡類 P1的概率最高, 則判斷為網絡類, Label為 1. 如果程序主機類概率P2最高, 則為程序主機類, Label為2.如果平臺充值類的概率P3最高, 則為平臺充值類,Label為3. 如果存在相同的概率, 這樣的情況占極少數, 允許這一小部分的容錯, 考慮到程序主機類的故障最多, 因而相同概率被標記程序主機類, Label為 2, 由此完成分類的這個過程.
在企業級的應用中, 面向游戲故障告警事件的智能分類算法可以直接應用在游戲運維平臺上, 排除大類的故障, 發布與類別相關的告警, 收斂無關告警.
在應用場景中, 接入該智能分類算法作為一層濾網, 運維平臺在建立新的故障單文本后, 可以直接利用已構建的語義映射工具, 自動判斷平臺上新形成的故障單文本類別, 根據類別自動去尋找類相關的告警, 收斂無關告警, 將相關告警推送給運維人員, 整體過程自動化方便快捷, 不需要人工干預, 實現案例見圖3.

圖3 智能分類算法的應用案例
在后續的使用中, 由于語義映射工具是可更改擴展的, 因而可以根據實際需求, 三個月或半年更新一次語義映射工具, 保證及時性和有效性.
我們在企業近三年的歷史故障事件單上做實驗,歷史故障單由專家標記類別, 實驗數據集為去除專家標記為自定義類別無法區分的單據, 共有2456條故障事件文本. 在該數據集上, 我們應用了本文提出的智能分類算法, 同時與決策樹分類算法[12]與樸素貝葉斯分類算法[13]做對比. 實驗結果采用了準確率、召回率、F1值這三個評價指標.
整個數據集為企業近三年的歷史故障事件單, 是企業的私有數據積累, 歷史故障事件單由客服反饋收集, 數據集均以文本形式呈現, 包含故障單號、故障來源、故障標題、故障描述、以及發生時間這幾個字段.在本文實驗中, 我們抽取故障描述與內容作為用戶反饋的文本信息進行分類.
實驗前期準備為對故障文本數據的預處理, 以及專家需要對故障單人工標記. 數據預處理過程為對數據清洗后, 利用 Python的 jieba包[8]進行分詞, 并在分詞中加了自定義的詞典, 修改了一些錯誤的分詞. 實驗的評價指標為準確率(Precision Rate)[14], 召回率(Recall Rate)[15], F1 值[15], 相關的公式如 (4)所示:

公式中, tp是將正類預測為正類數, fn是將正類預測為負類數, fp是將負類預測為正類數.
本文在各項評價指標下, 測試了智能分類算法, 以及對比了簡單的機器學習算法: 決策樹算法與樸素貝葉斯算法.
在文本分類中, 通常采用的做法是對文本進行向量化后, 利用監督學習的算法來分類. 監督學習算法中常用的是決策樹算法與樸素貝葉斯算法, 文獻[16]介紹了利用決策樹進行文本分類的多種方法, 文獻[17]闡述了樸素貝葉斯在文本分類中的應用與改進. 這兩種方法在文本分類中均被證明了有效性. 因此本文的對比實驗首先采用TFIDF文檔特征權志表示[18]對文本進行向量化, 然后采用決策樹算法與樸素貝葉斯算法. 由于兩者均是監督學習, 需要將數據集進行劃分, 本文采用四六分. 隨機抽取相同60%的數據作為訓練集, 抽取相同40%的數據作為測試集.
由于智能分類算法為無監督算法, 因此需要在抽取的相同測試集上驗證各項指標, 所有的實驗在同一數據集上利用相同評價指標進行. 智能分類與決策樹文本分類、樸素貝葉斯文本分類的實驗結果如表1所示, 我們將在下一小節對實驗結果做出進一步的分析.

表1 智能分類與決策樹、樸素貝葉斯分類算法的比較
如表1所示, 對比的三個算法在網絡類、主機程序類、平臺充值類、平均/總體(avg/total)均有對應評價指標的結果, 表格每一列分別對應類別、準確率、召回率、F1值以及所支持的實驗數目(Support).Support是實驗支持的數目, 相同的測試集共計983條故障文本: 包括網絡類文本170條, 主機程序類文本為536條, 平臺充值類文本277條. 各項評價指標的結果均在表1中可見.
在較為常用的評價指標avg/total準確率上, 本文提出的智能分類算法比決策樹文本分類要高出13%,而比樸素貝葉斯高出9%.
整體的avg/total的實驗結果對比如圖4所示, 可以看出目前智能分類算法在故障事件文本中的應用是簡單而有效的, 智能分類在準確率、召回率、以及F1值上, 均比決策樹分類與樸素貝葉斯分類要高.

圖4 實驗結果對比圖
同時, 本文提出的智能分類算法基于半自動構建的語義映射工具, 是無監督的學習算法. 我們可以將智能分類算法應用在全部的數據集上, 測試總體的實驗效果. 此時數據集支持的數目為數據集全部數目2456條文本.為了進一步驗證智能分類算法的有效性,在這里我們也加入了無監督學習算法的實驗對比, 經常被采用的無監督學習算法主要是K-means分類[19]算法和DBSCAN分類算法[20], 由于K-means分類算法需要人工指定類別數N, 若直接將N設置為3加入了太多人工干擾的成分, 因此在這里無監督的對比實驗選用DBSCAN分類算法, DBSCAN的參數eps選用比較常用的0.5.
在整個實驗集上, 采用相同的評價指標, 智能分類得出的總體結果如表2所示.

表2 智能分類在整體數據集的結果
從上表可以看出, 智能分類算法在整個數據集上的avg/ total準確率為66%, 比無監督的分類算法DBSCAN算法準確率高12%, 進一步證明了智能分類算法的有效性, 并且, 分類錯誤的主要在平臺充值類,由于故障描述來自用戶反饋存在語義模糊的問題, 這類問題只有運維專家能夠發現, 因而目前的準確率已基本可以在實際場景中應用, 去處理新生成的故障單,減少一部分告警誤判.
針對故障告警文本, 本文提出一種智能分類算法,創新性地將類情感分類的思路應用在了處理故障文本上, 能夠挖掘用戶反饋的意圖, 減少對告警的誤判, 發布更具有針對性的告警, 輔助運維人員做故障診斷. 該算法在企業級的應用中能實現較好的效果, 并具有擴展性. 實驗證明本文提出的智能分類算法, 與簡單的監督學習算法以及無監督學習算法相比, 更適用于故障事件文本中.
但告警智能分類算法不涉及文本語義上的識別,另外由于游戲故障文本記錄并不廣泛, 因而采用實驗的數據集還不夠充分. 在后續工作中, 可以關注文本語義上的問題, 使文本分類結果更準確, 更靠近人類的思維. 同時尋找挖掘更多相關數據集, 進一步分析驗證智能分類算法的效果.