王月瑤, 胡琴敏, 劉 偉, 陳乃華, 程 潔
1(華東師范大學(xué) 計(jì)算機(jī)科學(xué)與軟件工程學(xué)院, 上海 200062)
2(騰訊公司 騰訊公司 IEG, 上海 200233)
3(上海智臻智能網(wǎng)絡(luò)科技股份有限公司, 上海 201803)
隨著游戲產(chǎn)業(yè)的蓬勃發(fā)展, 各類游戲?qū)映霾唤^, 游戲用戶的選擇日漸增多, 穩(wěn)定的運(yùn)營(yíng)與良好的服務(wù)漸漸成了游戲能否勝出的重要因素. 而隨著人工智能風(fēng)潮的掀起, 數(shù)據(jù)挖掘技術(shù)在游戲行業(yè)中的應(yīng)用獲得了廣泛的關(guān)注[1]. 越來(lái)越多的企業(yè)已經(jīng)意識(shí)到了這一點(diǎn),開(kāi)始重視起智能化運(yùn)維服務(wù)[2], 從數(shù)據(jù)中獲取有用的信息, 輔助用戶與維護(hù)人員更好地解決問(wèn)題.
在企業(yè)級(jí)游戲運(yùn)維中, 客服人員每天會(huì)對(duì)游戲用戶的反饋信息進(jìn)行記錄. 由于游戲發(fā)生故障時(shí)會(huì)產(chǎn)生大量的用戶反饋, 因此工作人員可以從大量的用戶反饋中提煉有效信息, 人工確認(rèn)后形成游戲故障單, 交由對(duì)應(yīng)的運(yùn)維人員處理. 每個(gè)故障單記錄了一個(gè)突發(fā)的游戲故障告警事件, 在傳統(tǒng)的告警處理方法中, 一旦發(fā)現(xiàn)故障告警事件就會(huì)將所有告警信息發(fā)送給運(yùn)維人員.然而, 由于游戲故障原因的多樣性, 告警數(shù)據(jù)庫(kù)信息量巨大[3], 故障發(fā)生的同一時(shí)間會(huì)產(chǎn)生各類告警. 這樣的處理方式實(shí)際上忽略了用戶的反饋, 損失了寶貴的信息資源, 同時(shí)存在很多告警誤判誤報(bào)的問(wèn)題. 不相關(guān)的告警信息會(huì)干擾運(yùn)維人員做原因診斷, 因而告警信息需要進(jìn)行分析.
在對(duì)告警信息的分析中, 過(guò)去的研究者已經(jīng)取得一定的成果. 但他們的工作主要聚焦于利用關(guān)聯(lián)規(guī)則收斂電網(wǎng)的數(shù)據(jù)[4], 或根據(jù)網(wǎng)絡(luò)異常流量曲線進(jìn)行網(wǎng)絡(luò)告警的分類[5]. 當(dāng)然, 針對(duì)用戶的反饋信息, 也有研究者根據(jù)體驗(yàn)價(jià)值、交易成本和服務(wù)質(zhì)量三個(gè)維度建立用戶服務(wù)模型[6], 或從中找出用戶忠誠(chéng)度與價(jià)格關(guān)系[7].然而, 這些方法都不關(guān)注文本信息的分類, 不適用于分析故障的文本信息, 而從用戶反饋中提煉出的文本信息是十分重要的.
因此, 我們提出一種面向運(yùn)維突發(fā)故障告警事件的智能分類算法. 首先, 我們分析故障事件文本的各項(xiàng)特征; 然后, 對(duì)文本信息利用半自動(dòng)構(gòu)建的語(yǔ)義映射工具進(jìn)行概率計(jì)算; 最終將記錄突發(fā)故障事件的文本自動(dòng)分為三類: 網(wǎng)絡(luò)級(jí)突發(fā)故障、程序主機(jī)類突發(fā)故障、平臺(tái)支付類突發(fā)故障. 根據(jù)判斷的類別向運(yùn)維人員發(fā)布該類別相關(guān)的告警, 排除大類上的誤判, 減少無(wú)關(guān)告警信息的轟炸.
我們的貢獻(xiàn)在于將情感分類的算法創(chuàng)新性地利用在游戲運(yùn)維的文本分類上, 并提出了一種語(yǔ)義映射工具供后續(xù)企業(yè)級(jí)的故障文本分類使用.
我們?cè)谄髽I(yè)近三年的故障單上做了實(shí)驗(yàn), 實(shí)驗(yàn)表明: 本文提出的智能分類算法, 對(duì)比簡(jiǎn)單的基準(zhǔn)方法決策樹算法和樸素貝葉斯算法, 準(zhǔn)確率分別有13%和9%的提升. 將此智能分類方法應(yīng)用到企業(yè)級(jí)業(yè)務(wù)故障診斷中, 能實(shí)現(xiàn)更有針對(duì)性地發(fā)布告警, 減少告警的誤判, 支撐運(yùn)維人員更快速準(zhǔn)確地去定位故障原因.
本文提出了一種面向故障告警事件的智能分類模型, 去分析描述突發(fā)告警事件的文本信息, 從中判斷出故障事件的大類, 收斂無(wú)關(guān)告警, 減少告警的誤判, 從而使發(fā)布告警更具有針對(duì)性. 整個(gè)模型的結(jié)構(gòu)如圖1所示, 分為以下三個(gè)模塊, 分別是數(shù)據(jù)預(yù)處理模塊, 構(gòu)建映射工具模塊和類情感分類模塊. 第一層數(shù)據(jù)預(yù)處理模塊主要分為數(shù)據(jù)清洗和jieba分詞. 第二層構(gòu)建語(yǔ)義映射工具模塊指的是從已標(biāo)注類別的故障告警事件文本中, 抽取三個(gè)類別對(duì)應(yīng)的關(guān)鍵詞, 建立每個(gè)類別下的運(yùn)維詞典, 經(jīng)過(guò)人工確認(rèn)后半自動(dòng)構(gòu)建語(yǔ)義映射工具. 第三層類情感分類模塊主要是利用所構(gòu)建的語(yǔ)義映射工具進(jìn)行類別分析計(jì)算, 選擇概率最高的類別作為最終的告警類別, 完成分類過(guò)程.
圖1 告警智能分類模型
描述突發(fā)故障事件的文本經(jīng)過(guò)這個(gè)智能分類模型,便可自動(dòng)分類到以下三類故障中: 網(wǎng)絡(luò)級(jí)突發(fā)故障、程序主機(jī)類突發(fā)故障、平臺(tái)支付類突發(fā)故障. 分類后能收斂無(wú)關(guān)告警, 以實(shí)現(xiàn)告警信息的針對(duì)性發(fā)布.
描述游戲故障告警事件的文本是從用戶反饋中提取的信息, 其中包括一些游戲用戶的個(gè)人信息和相關(guān)問(wèn)題描述. 這些信息包含很多與故障告警無(wú)關(guān)的內(nèi)容,因此需要對(duì)數(shù)據(jù)進(jìn)行清洗, 并進(jìn)行jieba分詞[8,9], 從而最終形成描述該故障事件的詞典集合.
假設(shè)sentence(j)為清洗后的故障事件j的所有描述語(yǔ)句, word(i)為 sentence(j)中的第 i個(gè)描述詞, 數(shù)據(jù)預(yù)處理的方法如下:
公式(1)中的clean指的是數(shù)據(jù)清洗過(guò)程, jieba指的是數(shù)據(jù)分詞過(guò)程, 通過(guò)公式(1), 將所有的故障事件文本數(shù)據(jù)進(jìn)行轉(zhuǎn)換, 獲得一個(gè)分詞后的詞典集合, 進(jìn)而提供給下一步構(gòu)建語(yǔ)義映射工具使用.
本文構(gòu)建的語(yǔ)義映射工具是基于已標(biāo)注類別的故障文本數(shù)據(jù), 采用了 Term Frequency-Inverse Document Frequency (TF-IDF)算法[10]提取文本中相應(yīng)類別的詞典, 形成智能分類算法的映射工具. TF-IDF由Salton[10]在90年代提出, 并且在文本檢索中不斷發(fā)揮著重要作用, TF-IDF的主要思想是指一個(gè)詞在特定文檔中出現(xiàn)的頻率越高(TF), 并且在文檔中出現(xiàn)的范圍越廣(IDF), 這個(gè)詞就越關(guān)鍵權(quán)重越高. 其經(jīng)典計(jì)算公式如公式(2)所示:
在公式 (2)中, tj是特征項(xiàng), tfij指的是 tj在文檔di中出現(xiàn)的次數(shù); idfj表示逆文檔頻率, N 表示總文檔數(shù), nj表示tj的文檔數(shù)目. 在本文中利用該算法思想來(lái)提取每個(gè)類別下每條故障描述中的關(guān)鍵詞.
半自動(dòng)構(gòu)建語(yǔ)義映射工具的整個(gè)過(guò)程如圖2所示,主要分為兩步, 首先針對(duì)已存在并已讓專家標(biāo)注類別的故障事件文本, 利用TF-IDF算法提取每個(gè)故障事件描述文本中前三名的詞, 構(gòu)建相應(yīng)類別的詞典表述, 確保詞典的專業(yè)性. 第二步是建立每個(gè)類別下的特有詞典, 因?yàn)樵诠收媳硎鲋? 不同類別下的故障描述內(nèi)容可能相同, 不同的詞典可能包含相同詞, 所以需要對(duì)比相同詞語(yǔ)在不同詞典下的TF-IDF值, 將這個(gè)詞劃分到其TF-IDF值較高的類別詞典中. 同時(shí)采用人工確認(rèn)的方法, 確保詞典的獨(dú)特性與正確性.
例如網(wǎng)絡(luò)類的故障描述會(huì)涉及到“客戶端”這個(gè)詞,而程序主機(jī)類的故障也會(huì)頻繁地提及“客戶端”這個(gè)詞.因此“客戶端”這個(gè)詞在兩個(gè)類別下的TF-IDF值都很高, 被同時(shí)選入網(wǎng)絡(luò)類的詞典和程序主機(jī)類的詞典, 這時(shí)通過(guò)比較得到“客戶端”在網(wǎng)絡(luò)類的TF-IDF總值, 和在程序主機(jī)類的TF-IDF總值, 由于“客戶端”這個(gè)詞在程序主機(jī)類的TF-IDF總值較高, 這個(gè)詞被歸為程序主機(jī)類詞典, 依次類推, 再通過(guò)人工確認(rèn)最終確定每個(gè)類別下的語(yǔ)義映射工具.
圖2 半自動(dòng)構(gòu)建語(yǔ)義映射工具
通過(guò)以上過(guò)程, 我們半自動(dòng)構(gòu)建了針對(duì)網(wǎng)絡(luò)類、程序主機(jī)類和平臺(tái)充值類這三個(gè)類別的語(yǔ)義映射工具,提供給下一過(guò)程的分類使用. 該語(yǔ)義映射工具已可以直接使用, 但后續(xù)故障描述如果有更新, 可以通過(guò)如圖所示的方法將語(yǔ)義映射工具進(jìn)行擴(kuò)展.
情感分類中一種常用算法[11]是利用構(gòu)建好的情感詞典進(jìn)行情感分類, 分為正向負(fù)向和中性的情感. 借鑒這樣的思路, 本文在最后一步利用已經(jīng)構(gòu)建好的語(yǔ)義映射工具進(jìn)行類情感分類, 分類過(guò)程如公式(3):
應(yīng)用以上公式進(jìn)行類情感分類, Pk為每個(gè)類別下的概率, k對(duì)應(yīng)各個(gè)類別的順序(網(wǎng)絡(luò)類順序?yàn)?, 程序主機(jī)類順序?yàn)?, 平臺(tái)充值類順序?yàn)?, Classk為半自動(dòng)構(gòu)建語(yǔ)義映射工具中詞典的類別, 此處標(biāo)記網(wǎng)絡(luò)類詞典為Class1, 程序主機(jī)類詞典為Class2, 平臺(tái)充值類詞典為Class3, Label指最終分類形成的類別.
首先, 將每個(gè)故障事件中文本sentencej分詞后的詞典wordi通過(guò)語(yǔ)義映射工具映射, 計(jì)算該故障事件文本屬于每個(gè)類別的概率. 每個(gè)類別下的概率Pk是通過(guò)映射到每個(gè)類別Classk的個(gè)數(shù), 除以該故障事件sentencej的長(zhǎng)度.
然后, 比較每個(gè)類別下的概率Pk大小, 如果是網(wǎng)絡(luò)類 P1的概率最高, 則判斷為網(wǎng)絡(luò)類, Label為 1. 如果程序主機(jī)類概率P2最高, 則為程序主機(jī)類, Label為2.如果平臺(tái)充值類的概率P3最高, 則為平臺(tái)充值類,Label為3. 如果存在相同的概率, 這樣的情況占極少數(shù), 允許這一小部分的容錯(cuò), 考慮到程序主機(jī)類的故障最多, 因而相同概率被標(biāo)記程序主機(jī)類, Label為 2, 由此完成分類的這個(gè)過(guò)程.
在企業(yè)級(jí)的應(yīng)用中, 面向游戲故障告警事件的智能分類算法可以直接應(yīng)用在游戲運(yùn)維平臺(tái)上, 排除大類的故障, 發(fā)布與類別相關(guān)的告警, 收斂無(wú)關(guān)告警.
在應(yīng)用場(chǎng)景中, 接入該智能分類算法作為一層濾網(wǎng), 運(yùn)維平臺(tái)在建立新的故障單文本后, 可以直接利用已構(gòu)建的語(yǔ)義映射工具, 自動(dòng)判斷平臺(tái)上新形成的故障單文本類別, 根據(jù)類別自動(dòng)去尋找類相關(guān)的告警, 收斂無(wú)關(guān)告警, 將相關(guān)告警推送給運(yùn)維人員, 整體過(guò)程自動(dòng)化方便快捷, 不需要人工干預(yù), 實(shí)現(xiàn)案例見(jiàn)圖3.
圖3 智能分類算法的應(yīng)用案例
在后續(xù)的使用中, 由于語(yǔ)義映射工具是可更改擴(kuò)展的, 因而可以根據(jù)實(shí)際需求, 三個(gè)月或半年更新一次語(yǔ)義映射工具, 保證及時(shí)性和有效性.
我們?cè)谄髽I(yè)近三年的歷史故障事件單上做實(shí)驗(yàn),歷史故障單由專家標(biāo)記類別, 實(shí)驗(yàn)數(shù)據(jù)集為去除專家標(biāo)記為自定義類別無(wú)法區(qū)分的單據(jù), 共有2456條故障事件文本. 在該數(shù)據(jù)集上, 我們應(yīng)用了本文提出的智能分類算法, 同時(shí)與決策樹分類算法[12]與樸素貝葉斯分類算法[13]做對(duì)比. 實(shí)驗(yàn)結(jié)果采用了準(zhǔn)確率、召回率、F1值這三個(gè)評(píng)價(jià)指標(biāo).
整個(gè)數(shù)據(jù)集為企業(yè)近三年的歷史故障事件單, 是企業(yè)的私有數(shù)據(jù)積累, 歷史故障事件單由客服反饋收集, 數(shù)據(jù)集均以文本形式呈現(xiàn), 包含故障單號(hào)、故障來(lái)源、故障標(biāo)題、故障描述、以及發(fā)生時(shí)間這幾個(gè)字段.在本文實(shí)驗(yàn)中, 我們抽取故障描述與內(nèi)容作為用戶反饋的文本信息進(jìn)行分類.
實(shí)驗(yàn)前期準(zhǔn)備為對(duì)故障文本數(shù)據(jù)的預(yù)處理, 以及專家需要對(duì)故障單人工標(biāo)記. 數(shù)據(jù)預(yù)處理過(guò)程為對(duì)數(shù)據(jù)清洗后, 利用 Python的 jieba包[8]進(jìn)行分詞, 并在分詞中加了自定義的詞典, 修改了一些錯(cuò)誤的分詞. 實(shí)驗(yàn)的評(píng)價(jià)指標(biāo)為準(zhǔn)確率(Precision Rate)[14], 召回率(Recall Rate)[15], F1 值[15], 相關(guān)的公式如 (4)所示:
公式中, tp是將正類預(yù)測(cè)為正類數(shù), fn是將正類預(yù)測(cè)為負(fù)類數(shù), fp是將負(fù)類預(yù)測(cè)為正類數(shù).
本文在各項(xiàng)評(píng)價(jià)指標(biāo)下, 測(cè)試了智能分類算法, 以及對(duì)比了簡(jiǎn)單的機(jī)器學(xué)習(xí)算法: 決策樹算法與樸素貝葉斯算法.
在文本分類中, 通常采用的做法是對(duì)文本進(jìn)行向量化后, 利用監(jiān)督學(xué)習(xí)的算法來(lái)分類. 監(jiān)督學(xué)習(xí)算法中常用的是決策樹算法與樸素貝葉斯算法, 文獻(xiàn)[16]介紹了利用決策樹進(jìn)行文本分類的多種方法, 文獻(xiàn)[17]闡述了樸素貝葉斯在文本分類中的應(yīng)用與改進(jìn). 這兩種方法在文本分類中均被證明了有效性. 因此本文的對(duì)比實(shí)驗(yàn)首先采用TFIDF文檔特征權(quán)志表示[18]對(duì)文本進(jìn)行向量化, 然后采用決策樹算法與樸素貝葉斯算法. 由于兩者均是監(jiān)督學(xué)習(xí), 需要將數(shù)據(jù)集進(jìn)行劃分, 本文采用四六分. 隨機(jī)抽取相同60%的數(shù)據(jù)作為訓(xùn)練集, 抽取相同40%的數(shù)據(jù)作為測(cè)試集.
由于智能分類算法為無(wú)監(jiān)督算法, 因此需要在抽取的相同測(cè)試集上驗(yàn)證各項(xiàng)指標(biāo), 所有的實(shí)驗(yàn)在同一數(shù)據(jù)集上利用相同評(píng)價(jià)指標(biāo)進(jìn)行. 智能分類與決策樹文本分類、樸素貝葉斯文本分類的實(shí)驗(yàn)結(jié)果如表1所示, 我們將在下一小節(jié)對(duì)實(shí)驗(yàn)結(jié)果做出進(jìn)一步的分析.
表1 智能分類與決策樹、樸素貝葉斯分類算法的比較
如表1所示, 對(duì)比的三個(gè)算法在網(wǎng)絡(luò)類、主機(jī)程序類、平臺(tái)充值類、平均/總體(avg/total)均有對(duì)應(yīng)評(píng)價(jià)指標(biāo)的結(jié)果, 表格每一列分別對(duì)應(yīng)類別、準(zhǔn)確率、召回率、F1值以及所支持的實(shí)驗(yàn)數(shù)目(Support).Support是實(shí)驗(yàn)支持的數(shù)目, 相同的測(cè)試集共計(jì)983條故障文本: 包括網(wǎng)絡(luò)類文本170條, 主機(jī)程序類文本為536條, 平臺(tái)充值類文本277條. 各項(xiàng)評(píng)價(jià)指標(biāo)的結(jié)果均在表1中可見(jiàn).
在較為常用的評(píng)價(jià)指標(biāo)avg/total準(zhǔn)確率上, 本文提出的智能分類算法比決策樹文本分類要高出13%,而比樸素貝葉斯高出9%.
整體的avg/total的實(shí)驗(yàn)結(jié)果對(duì)比如圖4所示, 可以看出目前智能分類算法在故障事件文本中的應(yīng)用是簡(jiǎn)單而有效的, 智能分類在準(zhǔn)確率、召回率、以及F1值上, 均比決策樹分類與樸素貝葉斯分類要高.
圖4 實(shí)驗(yàn)結(jié)果對(duì)比圖
同時(shí), 本文提出的智能分類算法基于半自動(dòng)構(gòu)建的語(yǔ)義映射工具, 是無(wú)監(jiān)督的學(xué)習(xí)算法. 我們可以將智能分類算法應(yīng)用在全部的數(shù)據(jù)集上, 測(cè)試總體的實(shí)驗(yàn)效果. 此時(shí)數(shù)據(jù)集支持的數(shù)目為數(shù)據(jù)集全部數(shù)目2456條文本.為了進(jìn)一步驗(yàn)證智能分類算法的有效性,在這里我們也加入了無(wú)監(jiān)督學(xué)習(xí)算法的實(shí)驗(yàn)對(duì)比, 經(jīng)常被采用的無(wú)監(jiān)督學(xué)習(xí)算法主要是K-means分類[19]算法和DBSCAN分類算法[20], 由于K-means分類算法需要人工指定類別數(shù)N, 若直接將N設(shè)置為3加入了太多人工干擾的成分, 因此在這里無(wú)監(jiān)督的對(duì)比實(shí)驗(yàn)選用DBSCAN分類算法, DBSCAN的參數(shù)eps選用比較常用的0.5.
在整個(gè)實(shí)驗(yàn)集上, 采用相同的評(píng)價(jià)指標(biāo), 智能分類得出的總體結(jié)果如表2所示.
表2 智能分類在整體數(shù)據(jù)集的結(jié)果
從上表可以看出, 智能分類算法在整個(gè)數(shù)據(jù)集上的avg/ total準(zhǔn)確率為66%, 比無(wú)監(jiān)督的分類算法DBSCAN算法準(zhǔn)確率高12%, 進(jìn)一步證明了智能分類算法的有效性, 并且, 分類錯(cuò)誤的主要在平臺(tái)充值類,由于故障描述來(lái)自用戶反饋存在語(yǔ)義模糊的問(wèn)題, 這類問(wèn)題只有運(yùn)維專家能夠發(fā)現(xiàn), 因而目前的準(zhǔn)確率已基本可以在實(shí)際場(chǎng)景中應(yīng)用, 去處理新生成的故障單,減少一部分告警誤判.
針對(duì)故障告警文本, 本文提出一種智能分類算法,創(chuàng)新性地將類情感分類的思路應(yīng)用在了處理故障文本上, 能夠挖掘用戶反饋的意圖, 減少對(duì)告警的誤判, 發(fā)布更具有針對(duì)性的告警, 輔助運(yùn)維人員做故障診斷. 該算法在企業(yè)級(jí)的應(yīng)用中能實(shí)現(xiàn)較好的效果, 并具有擴(kuò)展性. 實(shí)驗(yàn)證明本文提出的智能分類算法, 與簡(jiǎn)單的監(jiān)督學(xué)習(xí)算法以及無(wú)監(jiān)督學(xué)習(xí)算法相比, 更適用于故障事件文本中.
但告警智能分類算法不涉及文本語(yǔ)義上的識(shí)別,另外由于游戲故障文本記錄并不廣泛, 因而采用實(shí)驗(yàn)的數(shù)據(jù)集還不夠充分. 在后續(xù)工作中, 可以關(guān)注文本語(yǔ)義上的問(wèn)題, 使文本分類結(jié)果更準(zhǔn)確, 更靠近人類的思維. 同時(shí)尋找挖掘更多相關(guān)數(shù)據(jù)集, 進(jìn)一步分析驗(yàn)證智能分類算法的效果.