屈子夢
(廣東電網有限責任公司江門供電局,廣東江門529000)
基于文本挖掘技術的信息服務工單分析工具,解決了當前系統運維工作中定位根因繁瑣、解決問題耗時等難題。同時,業界較為成熟的文本挖掘算法以及大數據處理引擎Spark也為該工具的可行性提供了有力的保障。本文將以信息工單數據的流向為依據,介紹服務工單分析工具中的主要模塊,包括:Spark處理數據獲取系統中的重要問題,文本相似度算法計算問題的相似度,生成知識庫。在這當中,問題相似度判斷的準確性將會是實現該工具的難點,同時也是其可用性的重要依據,較高的準確性將會很大程度上提高運維工作的效率。
信息系統中包含大量的工單數據,也意味著這些數據中包含大量有價值的信息。使用Spark數據處理引擎可以有效且快速地對工單進行匯總、分類等各項操作。生成重要問題的數據處理流程如圖1所示。

圖1 工單數據處理流程
在展開數據處理的流程之前,先對Spark作簡單的介紹:Apache Spark是專為大規模數據處理而設計的快速通用的計算引擎,Spark是UC Berkeley AMP Lab(加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用并行框架,Spark擁有Hadoop MapReduce所具有的優點;但不同于MapReduce的是——Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數據挖掘與機器學習等需要迭代的MapReduce的算法。其中,該計算框架最重要的抽象概念就是RDD(Resilient Distributed Dataset),彈性分布式數據集,即圖1中的淺灰色部分。對RDD的操作共分為兩大類:transformation(轉換)和action(動作),本篇論文所討論的數據操作過程也都是這兩大類的子集。這其中蘊含的一個基本概念是,Spark的操作是延遲(lazy)的,即只有action才能真正觸發數據處理流程。
具體地,工單數據的處理流程主要涉及Oracle和Spark兩個組件。
(1)周期性(每月)地從Oracle讀取系統工單數據生成RDD。
(2)對讀取的工單數據做分組,將同類型的系統數據分為一組。在這個過程中涉及的轉換操作是groupBy,一個簡單的方法調用就能將大量的數據分組,這也正是Spark強大的地方。
(3)在這一步中,需要將(2)中的結果進行計數,即計算每個分組中包括的系統個數,需要用到RDD的一種動作count。
(4)對分組系統進行過濾,例如人們只關心當月被用戶提的工單數大于1 000的系統有哪些,該過濾需要用到一種轉換操作filter。到此,就生成了該月的重點系統。
對于每個重點系統中的重點問題,只需要重復上述的(2)(3)(4)三個過程就可以得到結果。讀者這時可能會問,如果現在我關注的重點系統有50個,那上述(2)(3)(4)過程豈不是要執行50次?完全正確!但是,這又是強大的Spark發揮作用的時候,雖然要得到結果確實需要再執行50遍,但這50次執行過程是并發運行的,在資源充足的理想狀態下,我們可以認為執行50次任務的時間和執行一次的時間相等!
Spark處理大數據量的高性能已經被大量的工業以及學術界實踐所證明。針對每月信息系統中大概萬級的工單條數,用三臺虛擬機部署一個Spark環境就足以用分鐘級的耗時將數據處理完畢。相比于人工逐條處理或是單純地在Oracle中使用sql語句處理,效率和準確率都提升得非常明顯!
原始的工單數據在經過Spark的處理后具備了一定的類別性和規范性,但生成的重要問題中仍然存在很多重復的內容。雖然有些工單問題從標題上看并沒有關聯,然而通過將其內容進行比對后就不難發現往往一些工單所反映的是同一個或者同一類問題,這就導致了運維人員還是無法精準且快速地根據這些重要問題制定相應的解決方案。由此就引出了這篇論文所涉及的一個技術關鍵點:計算文本相似度。
顧名思義,文本相似度就是表示兩段文字相似的程度,是屬于自然語言處理的一個重要的課題。實際上我們不難發現,人通過閱讀會很容易發現兩段文字分別表達的是什么內容,也就順理成章地會給出一個相似度的高低。但這件事如果讓機器自動化地去做的話就沒有那么容易了。另外一個相似的例子是,人可以很容易地分辨出一只貓和一只狗,然而機器識別起來依舊很困難。回到文本相似度的問題上來,文本是一種高維的語義空間,如何對其進行抽象分解,從而能夠站在數學角度去量化其相似性?下面主要對信息服務工單分析工具中使用到的兩種度量方法進行說明。
這種相似度計算方式相對簡單,原理也易于理解,就是計算單詞集合之間的交集和并集大小的比例,該值越大,表示兩個文本越相似。在涉及大規模并行計算時,該方法在效率上有一定的優勢。Jaccard相似度公式如下:

舉例:
句子A:“我喜歡看電視,不喜歡看電影。”
句子B:“我不喜歡看電視,也不喜歡看電影。”
分詞去噪后:A=(我,喜歡,看,電視,電影,不);B=(我,喜歡,看,電視,電影,也,不)。
那么根據公式可得:J(A,B)=(我,喜歡,看,電視,電影,不)/(我,喜歡,看,電視,電影,也,不)=6/7=0.86。
余弦相似度即計算兩個向量之間的夾角,夾角越小相似度越高。其公式為:

假定A和B是兩個n維向量,A是[A1,A2,…,An],B是[B1,B2,…,Bn],則根據公式可以計算A與B的夾角余弦。沿用2.2中的例子,計算詞頻如下:
句子A:我1,喜歡2,看2,電視1,電影1,不1,也0。
句子B:我1,喜歡2,看2,電視1,電影1,不2,也1。
生成詞頻向量:句子A為[1,2,2,1,1,1,0],句子B為[1,2,2,1,1,2,1]。使用上述公式,我們便可得到句子A與句子B的夾角余弦,即兩句話的文本相似度可以根據余弦的值去度量。
信息工單數據在經過相似性度量的算法處理后,才能得到真正意義上的重要問題庫,運維人員可以根據這份覆蓋整個信息系統但又精簡、精確的問題庫生成相應的知識庫。為避免重復計算,文本相似性的判斷只是針對問題的主體,并沒有對問題標題作相似性度量。可以說,文本相似性算法的運用是整個信息服務工單分析工具的核心價值。
良好的信息系統建設,可以支撐電網企業業務發展。通過大數據分析與文本相似性算法,掌握信息系統功能缺陷與用戶需求,可以更快、更好地改善系統可靠性、實用性,讓電網企業信息系統運作更加高效,服務用戶。