屈子夢(mèng)
(廣東電網(wǎng)有限責(zé)任公司江門供電局,廣東江門529000)
基于文本挖掘技術(shù)的信息服務(wù)工單分析工具,解決了當(dāng)前系統(tǒng)運(yùn)維工作中定位根因繁瑣、解決問題耗時(shí)等難題。同時(shí),業(yè)界較為成熟的文本挖掘算法以及大數(shù)據(jù)處理引擎Spark也為該工具的可行性提供了有力的保障。本文將以信息工單數(shù)據(jù)的流向?yàn)橐罁?jù),介紹服務(wù)工單分析工具中的主要模塊,包括:Spark處理數(shù)據(jù)獲取系統(tǒng)中的重要問題,文本相似度算法計(jì)算問題的相似度,生成知識(shí)庫(kù)。在這當(dāng)中,問題相似度判斷的準(zhǔn)確性將會(huì)是實(shí)現(xiàn)該工具的難點(diǎn),同時(shí)也是其可用性的重要依據(jù),較高的準(zhǔn)確性將會(huì)很大程度上提高運(yùn)維工作的效率。
信息系統(tǒng)中包含大量的工單數(shù)據(jù),也意味著這些數(shù)據(jù)中包含大量有價(jià)值的信息。使用Spark數(shù)據(jù)處理引擎可以有效且快速地對(duì)工單進(jìn)行匯總、分類等各項(xiàng)操作。生成重要問題的數(shù)據(jù)處理流程如圖1所示。
圖1 工單數(shù)據(jù)處理流程
在展開數(shù)據(jù)處理的流程之前,先對(duì)Spark作簡(jiǎn)單的介紹:Apache Spark是專為大規(guī)模數(shù)據(jù)處理而設(shè)計(jì)的快速通用的計(jì)算引擎,Spark是UC Berkeley AMP Lab(加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室)所開源的類Hadoop MapReduce的通用并行框架,Spark擁有Hadoop MapReduce所具有的優(yōu)點(diǎn);但不同于MapReduce的是——Job中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的MapReduce的算法。其中,該計(jì)算框架最重要的抽象概念就是RDD(Resilient Distributed Dataset),彈性分布式數(shù)據(jù)集,即圖1中的淺灰色部分。對(duì)RDD的操作共分為兩大類:transformation(轉(zhuǎn)換)和action(動(dòng)作),本篇論文所討論的數(shù)據(jù)操作過程也都是這兩大類的子集。這其中蘊(yùn)含的一個(gè)基本概念是,Spark的操作是延遲(lazy)的,即只有action才能真正觸發(fā)數(shù)據(jù)處理流程。
具體地,工單數(shù)據(jù)的處理流程主要涉及Oracle和Spark兩個(gè)組件。
(1)周期性(每月)地從Oracle讀取系統(tǒng)工單數(shù)據(jù)生成RDD。
(2)對(duì)讀取的工單數(shù)據(jù)做分組,將同類型的系統(tǒng)數(shù)據(jù)分為一組。在這個(gè)過程中涉及的轉(zhuǎn)換操作是groupBy,一個(gè)簡(jiǎn)單的方法調(diào)用就能將大量的數(shù)據(jù)分組,這也正是Spark強(qiáng)大的地方。
(3)在這一步中,需要將(2)中的結(jié)果進(jìn)行計(jì)數(shù),即計(jì)算每個(gè)分組中包括的系統(tǒng)個(gè)數(shù),需要用到RDD的一種動(dòng)作count。
(4)對(duì)分組系統(tǒng)進(jìn)行過濾,例如人們只關(guān)心當(dāng)月被用戶提的工單數(shù)大于1 000的系統(tǒng)有哪些,該過濾需要用到一種轉(zhuǎn)換操作filter。到此,就生成了該月的重點(diǎn)系統(tǒng)。
對(duì)于每個(gè)重點(diǎn)系統(tǒng)中的重點(diǎn)問題,只需要重復(fù)上述的(2)(3)(4)三個(gè)過程就可以得到結(jié)果。讀者這時(shí)可能會(huì)問,如果現(xiàn)在我關(guān)注的重點(diǎn)系統(tǒng)有50個(gè),那上述(2)(3)(4)過程豈不是要執(zhí)行50次?完全正確!但是,這又是強(qiáng)大的Spark發(fā)揮作用的時(shí)候,雖然要得到結(jié)果確實(shí)需要再執(zhí)行50遍,但這50次執(zhí)行過程是并發(fā)運(yùn)行的,在資源充足的理想狀態(tài)下,我們可以認(rèn)為執(zhí)行50次任務(wù)的時(shí)間和執(zhí)行一次的時(shí)間相等!
Spark處理大數(shù)據(jù)量的高性能已經(jīng)被大量的工業(yè)以及學(xué)術(shù)界實(shí)踐所證明。針對(duì)每月信息系統(tǒng)中大概萬級(jí)的工單條數(shù),用三臺(tái)虛擬機(jī)部署一個(gè)Spark環(huán)境就足以用分鐘級(jí)的耗時(shí)將數(shù)據(jù)處理完畢。相比于人工逐條處理或是單純地在Oracle中使用sql語句處理,效率和準(zhǔn)確率都提升得非常明顯!
原始的工單數(shù)據(jù)在經(jīng)過Spark的處理后具備了一定的類別性和規(guī)范性,但生成的重要問題中仍然存在很多重復(fù)的內(nèi)容。雖然有些工單問題從標(biāo)題上看并沒有關(guān)聯(lián),然而通過將其內(nèi)容進(jìn)行比對(duì)后就不難發(fā)現(xiàn)往往一些工單所反映的是同一個(gè)或者同一類問題,這就導(dǎo)致了運(yùn)維人員還是無法精準(zhǔn)且快速地根據(jù)這些重要問題制定相應(yīng)的解決方案。由此就引出了這篇論文所涉及的一個(gè)技術(shù)關(guān)鍵點(diǎn):計(jì)算文本相似度。
顧名思義,文本相似度就是表示兩段文字相似的程度,是屬于自然語言處理的一個(gè)重要的課題。實(shí)際上我們不難發(fā)現(xiàn),人通過閱讀會(huì)很容易發(fā)現(xiàn)兩段文字分別表達(dá)的是什么內(nèi)容,也就順理成章地會(huì)給出一個(gè)相似度的高低。但這件事如果讓機(jī)器自動(dòng)化地去做的話就沒有那么容易了。另外一個(gè)相似的例子是,人可以很容易地分辨出一只貓和一只狗,然而機(jī)器識(shí)別起來依舊很困難?;氐轿谋鞠嗨贫鹊膯栴}上來,文本是一種高維的語義空間,如何對(duì)其進(jìn)行抽象分解,從而能夠站在數(shù)學(xué)角度去量化其相似性?下面主要對(duì)信息服務(wù)工單分析工具中使用到的兩種度量方法進(jìn)行說明。
這種相似度計(jì)算方式相對(duì)簡(jiǎn)單,原理也易于理解,就是計(jì)算單詞集合之間的交集和并集大小的比例,該值越大,表示兩個(gè)文本越相似。在涉及大規(guī)模并行計(jì)算時(shí),該方法在效率上有一定的優(yōu)勢(shì)。Jaccard相似度公式如下:
舉例:
句子A:“我喜歡看電視,不喜歡看電影?!?/p>
句子B:“我不喜歡看電視,也不喜歡看電影。”
分詞去噪后:A=(我,喜歡,看,電視,電影,不);B=(我,喜歡,看,電視,電影,也,不)。
那么根據(jù)公式可得:J(A,B)=(我,喜歡,看,電視,電影,不)/(我,喜歡,看,電視,電影,也,不)=6/7=0.86。
余弦相似度即計(jì)算兩個(gè)向量之間的夾角,夾角越小相似度越高。其公式為:
假定A和B是兩個(gè)n維向量,A是[A1,A2,…,An],B是[B1,B2,…,Bn],則根據(jù)公式可以計(jì)算A與B的夾角余弦。沿用2.2中的例子,計(jì)算詞頻如下:
句子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的夾角余弦,即兩句話的文本相似度可以根據(jù)余弦的值去度量。
信息工單數(shù)據(jù)在經(jīng)過相似性度量的算法處理后,才能得到真正意義上的重要問題庫(kù),運(yùn)維人員可以根據(jù)這份覆蓋整個(gè)信息系統(tǒng)但又精簡(jiǎn)、精確的問題庫(kù)生成相應(yīng)的知識(shí)庫(kù)。為避免重復(fù)計(jì)算,文本相似性的判斷只是針對(duì)問題的主體,并沒有對(duì)問題標(biāo)題作相似性度量??梢哉f,文本相似性算法的運(yùn)用是整個(gè)信息服務(wù)工單分析工具的核心價(jià)值。
良好的信息系統(tǒng)建設(shè),可以支撐電網(wǎng)企業(yè)業(yè)務(wù)發(fā)展。通過大數(shù)據(jù)分析與文本相似性算法,掌握信息系統(tǒng)功能缺陷與用戶需求,可以更快、更好地改善系統(tǒng)可靠性、實(shí)用性,讓電網(wǎng)企業(yè)信息系統(tǒng)運(yùn)作更加高效,服務(wù)用戶。