許駒雄,李敏波,2,劉孟珂,曹志月,唐 波,葛 浩
1(復旦大學 軟件學院,上海 200438)
2(復旦大學 上海市數據科學重點實驗室,上海 200438)
3(濰柴動力股份有限公司,濰坊 261061)
隨著智能制造時代的到來,越來越多的制造企業(yè)和服務商都開始搭建基于產品全生命周期的物理信息系統(tǒng)用于采集產品的設計、采購、加工、裝配、測試和售后返修等過程數據及結果數據,例如發(fā)動機裝配檔案,出廠測試階段的試車數據、售后返修的故障維修報告等. 這些數據蘊含了豐富的價值,但廠商們缺乏有效的技術手段,無法從數據和知識層面指導發(fā)動機的故障診斷和維修工作[1].
目前的工業(yè)領域故障診斷方法大多基于生產過程中的狀態(tài)數據,通過構建傳感器獲取的特征數據和機器狀態(tài)之間的關系,將故障診斷問題轉化為模式識別問題,在制造業(yè)[2]、電力[3]等領域都有諸多應用. 但由于維修信息中具有大量的文本信息,如何提取其中蘊涵的領域知識是需要深入研究的課題[4].
隨著人工智能的飛速發(fā)展,知識圖譜逐漸成為工業(yè)界和學術界研究的重點,廣泛應用于醫(yī)療[5]、教育[6]等領域. 在制造業(yè)領域,西門子提出了領域知識圖譜計劃[7],博世構建了底盤系統(tǒng)控制相關數據的大型知識圖譜[8]. 知識圖譜通過三元組描述數據之間的關系,這種結構化的表示降低了從中提取信息的難度. 與此同時,利用知識抽取相關技術將非結構化數據構建成知識圖譜,可以將文本信息用接近人類認知的格式保存,從而挖掘數據蘊含的價值.
在知識圖譜的自動化構建方面,關鍵技術包括命名實體識別、關系抽取和實體對齊等. 目前具有代表性的工作有Huang 等人提出的雙向長短時記憶網絡(bidirectional long short term memory,BiLSTM)配合條件隨機場(conditional random field,CRF)的模型[9].Qiu 等人使用空洞卷積加強模型的上下文信息編碼能力和運行速度[10]. Yan 等人將相對距離驅動的注意力機制引入Transformer 模型,以提高其在命名實體識別中的表現[11]. Li 等人提出一種多粒度點陣框架,實現了提取中文文本關系的任務[12]. Sun 等人提出了一種基于嵌入實體對齊的引導方法,迭代地將可能的實體對齊標記為訓練數據,以學習面向對齊的圖嵌入[13]. Cao 等人將圖卷積神經網絡和注意力機制引入實體對齊任務,以獲得表示知識圖中實體分布的連接實體的重要性權重[14].
在知識圖譜應用方面,目前基于知識圖譜的個性化推薦技術主要分為基于路徑和基于圖嵌入兩種. Zhao等人引入元圖概念獲取知識圖中更豐富的語義信息[15].Zhu 等人使用知識圖中實體間的關系鏈接來傳播用戶偏好并了解其潛在偏好[16]. Wang 等人提出一種順序學習框架,通過特征學習得到實體向量和關系向量,利用CNN 融合得到用戶向量和物品向量[17]. Zhang 等人將知識學習和協(xié)同過濾的目標函數結合進行聯合學習[18].Wang 等人使用聯合學習框架來計算多跳響應[19],并在后續(xù)工作中提出多任務學習框架交替學習圖嵌入和推薦算法,同時利用了兩個任務的互補信息[20].
然而,通過文獻調研和與制造業(yè)廠商交流發(fā)現,在制造業(yè)領域應用知識圖譜還存在諸多不確定性,缺乏系統(tǒng)的研究. 例如,廠商們對制造業(yè)知識圖譜的應用前景有所懷疑,并且不確定如何將其應用到產品設計、裝配、售后等流程. 此外,目前還缺乏一個有效的、系統(tǒng)的從發(fā)動機故障數據端到端構建與應用知識圖譜的流程. 因此,本文的主要工作如下:
1)將知識圖譜引入柴油發(fā)動機故障領域,提出發(fā)動機故障知識圖譜(engine fault knowledge graph,EFKG). 分析發(fā)動機故障診斷領域的業(yè)務規(guī)則和數據特點,設計領域知識圖譜的構建流程和本體,基于真實數據集構建EFKG.
2)針對維修數據中知識抽取準確率較低的問題,構建領域詞典,標注語料集,從多維度對比現有的基于深度學習的實體抽取方法,得出最好的發(fā)動機維修數據命名實體識別方案.
3)設計實體相關性評價指標FF-IEF (fault frequencyinverse event frequency)和基于知識圖譜的輔助決策模型,并開發(fā)原型系統(tǒng),提供知識抽取、檢索、輔助決策等功能.
本文對柴油發(fā)動機故障領域知識圖譜的構建和應用進行研究. 實驗結果表明,本文的方法能有效地從發(fā)動機故障數據集中抽取知識,有助于提高信息檢索和售后維修效率.
在發(fā)動機故障診斷領域,存在許多案例形式的故障維修數據,與故障診斷相關的知識需從案例中挖掘,例如故障現象、故障原因、故障狀態(tài)、故障部位等. 由于該領域作為傳統(tǒng)制造業(yè),專業(yè)知識存在一定的封閉性,數據質量和應用也存在一定問題,目前與知識圖譜相關的研究較少. 本文針對發(fā)動機故障領域的數據特點和業(yè)務邏輯,自頂向下構建知識圖譜,整體流程如圖1 所示.
圖1 EFKG 構建流程
具體構建流程如下:
1)根據領域專家提供的發(fā)動機故障診斷業(yè)務規(guī)則和數據特點設計知識圖譜模式層.
2)制定映射規(guī)則對結構化數據進行轉換; 從非結構化文本中通過實體識別技術抽取實體,并與其他實體進行關聯.
3)通過實體對齊對實體進行規(guī)范化處理,根據模式層關聯關系生成三元組.
4)計算實體相關性指標,與三元組存儲于圖數據庫中.
5)利用貝葉斯推理模型進行故障診斷.
本文使用數據來源于濰柴動力股份有限公司近年來的生產故障(加工、試車、裝配等)和售后維修報告,包括維修信息、發(fā)動機信息、故障信息等,其格式涵蓋結構化和非結構化數據. 每條維修記錄對應一個柴油發(fā)動機故障案例,并通過外鍵與發(fā)動機信息和故障信息等外表關聯. 其中維修處理過程為非結構化文本,故障信息和發(fā)動機參數為結構化數據.
EFKG 的重要用途之一是提高維修效率,即輔助工程師定位故障位點和故障類型,因此故障部位和故障狀態(tài)是核心實體,整體模式層設計如圖2 所示.
圖2 EFKG 模式層設計
發(fā)動機故障維修報告為工作人員手工填寫的自然文本,通常包括“客戶反映-問題定位-解決方法”流程,如表1 所示,下劃線部分為需要抽取的信息,包括維修信息、發(fā)動機信息、故障信息等.
表1 非結構化數據實例
在發(fā)動機故障領域,目前并無公開的訓練語料庫,需自行標注和構建數據集. 為解決訓練集規(guī)模小、部分領域詞匯一詞多義的問題,本文基于目前主流使用的BiLSTM-CRF[9]方法,將BERT[21]預訓練模型作為詞向量輸入,可以較好地緩解上述問題,學習到更準確的語義向量. 模型的整體結構如圖3 所示.
圖3 BERT-BiLSTM-CRF 模型
本文對5 488 條發(fā)動機維修數據進行人工標注,構建了發(fā)動機維修數據集,如表2 所示.
表2 實驗數據集大小及劃分
本文采取BIO 和BIOES 兩種標注方法. BIO 的標注方案將詞語分成兩類,一類是目標實體,由B 和I 組成,分別代表目標實體的第一個詞語和其他詞語,O 表示該詞語不屬于目標實體. BIOES 的B、I、E 分別表示實體的開始、中間和結束部分,S 表示實體為單個字詞,O 表示該部分不是實體.
在標注數據集中,實體類型共分為4 種: 故障現象(description,DES)、故障部位(location,LOC)、故障狀態(tài)(status,STA)和維修建議(suggestion,SUG). 故障現象是指客戶向維修站點反映的發(fā)動機故障表現,如“發(fā)動機啟動困難”; 故障部位是指經檢查后確定的問題起因件,如“向心球軸承”“增壓器”等; 故障狀態(tài)是指起因件出現的具體問題,例如“(增壓器)拉殼”“(油封)漏油”等; 維修建議是指維修人員解決故障的操作,如“更換”氣缸蓋墊片等. 各類實體的標注情況如表3 所示.
表3 實體標注情況
標注示例如表4 所示.
表4 標注示例
實驗結果見本文第2 節(jié).
維修報告為工作人員手工填寫,無法保證數據的規(guī)范和實用性,常出現共指現象,如“發(fā)動機無力”和“功率不足”指代同一問題. 同時由于數據經過OCR 處理,存在中英文字符識別出錯的情況,如電子控制單元ECU 識別成EC0,類似的異常數據需要進行消除和修復.
本文采用計算相似度的方法進行實體對齊,定義好相似度函數和閾值后,將實體間相似度得分大于設定閾值的實體對只保留其中一個實體,并更新圖譜中的三元組,用保留后的實體替換被對齊的實體. 本文采用編輯距離和Jaccard 相關系數法進行實體相似度計算.
1)編輯距離: 對一個單詞或詞語可以采取插入、刪除或替換字符3 種方式. 將一個單詞(詞語)通過這3 種操作方式轉換為另一個單詞需要的最小操作次數,即為編輯距離.
2)Jaccard 相關系數法: Jaccard 系數描述了兩個有限樣本集的相似性,定義為兩個集合的交集與并集之比. 該比值越大,說明兩個集合越相似; 該比值越小,說明兩個集合差異越大,相似性越低. Jaccard 相關系數的計算方法如式(1)所示.
實體對齊流程如下所示. 由于相似度計算僅考慮文本的字面相似性,而忽略了語義,因此該方法不能保證實體對齊的完全正確,可能存在錯誤對齊或遺漏對齊的情況. 由于本文涉及的實體主要與發(fā)動機故障信息相關,實體種類和數量相對較少,因此對實體對齊結果進行人工校對與完善.
算法1. 實體對齊算法輸入: 所有故障實體,相似度閾值s輸出: 對齊后的實體和關系1. Function EntityAligned(engineFailNodes)2. for uniNode in engineFailNodes:3. for alignedNode in engineFailNodes:4. if uniNode == alignedNode : continue;5. uniAttrList ← uniNode.attrs 6. aliAttrList ← alignedNode.attrs 7. sim ← simComp(uniAttrList,aliAttrList)8. if sim <= s : continue;9. for hasConnect(uniNode,alignedNode):10. node.relation = uniNode
在EFKG 中,一條三元組并非絕對正確或錯誤的.例如“發(fā)動機震動大”這一故障現象,可能由于“軸承卡滯”導致,也可能由 “減震器損壞”引起. 為了描述一條三元組在EFKG 中的重要程度,本文參考TF-IDF (term frequency-inverse document frequency)的思想,設計了發(fā)動機故障實體相關性指標FF-IEF (fault frequencyinverse event frequency).
對于EFKG 中的一條三元組(hij,ri,tij),故障頻率(FF)衡量尾實體在給定頭實體條件下出現的概率,如式(2)所示.
其中,N(hij,tij)表示該條三元組出現的次數,可從維修數據集中統(tǒng)計并作為三元組的屬性存儲.Hi表示頭實體hij所屬的實體類別(故障現象、故障部位等).
逆向事件頻率(IEF)衡量尾實體對頭實體的區(qū)分程度,定義為頭實體所屬類別的元組總數與該頭實體所在元組數的比值,如式(3)所示.
其中,|{(hik,ri,tij):hik∈Hi,?k}|表示尾實體為tij的三元組集合.
FF-IEF指標同時衡量三元組的出現頻率和區(qū)分程度,定義如式(4)所示.
該指標可有效衡量尾實體對于頭實體的重要程度,可用于信息檢索和推薦等應用. 在EFKG 中,一條三元組可被描述為<(h,r,t),M>,其中h表示頭實體,r表示關系,t表示尾實體,M包含3 個屬性值: 出現頻率N,故障頻率FF和逆向事件頻率IEF.
2.1.1 評價指標
本文使用準確率(Precision)、召回率(Recall)和F1 值作為模型的評估指標. 計算公式如下:
其中,TP為正確預測的實體數,FP為預測錯誤的實體數,FN為沒有識別出的實體數.
2.1.2 實驗設置
實體識別實驗基于PyTorch 進行搭建,具體的環(huán)境配置參數等如表5 所示.
表5 實驗環(huán)境
本實驗采用BERT-Base 模型,該模型使用Bi-Transformer 關注語義上下文,在多項NLP 任務中表現良好. 其他模型參數如表6 所示.
表6 參數設置
2.1.3 實驗結果
實驗采取層次抽樣的方法構建訓練集、驗證集和測試集,數據劃分情況見上文表2. 不同模型、不同標注粒度和標注方案的實驗結果如表7 所示.
表7 不同維度的3 種模型實體識別情況 (%)
可以看到,采用BERT-BiLSTM-CRF 模型和基于詞的BIOES 標注方案得到的命名實體識別效果最好,F1 值為90.25%.
基于詞和基于字是兩種不同的標注粒度. 由于中文的詞之間沒有嚴格的界限,且自動化的分詞工具有一定誤差,因此在通用領域中,基于字的標注粒度更為主流. 但對于發(fā)動機故障領域而言,領域詞典能保證較高的分詞準確率,并且詞向量相比字向量能包含更準確的語義信息,因此整體而言,基于詞的標注方案優(yōu)于基于字的方案.
從標注方案角度而言,3 種模型的結果都是BIOES優(yōu)于BIO 方案,即更細致化的標注能給命名實體識別帶來更好的效果. 例如,“發(fā)動機”一詞在BIO 方案下會被標注成“B_LOC”,其后可能存在“共軌管(I_LOC)”或其他類型的標注,對整體的識別造成困難; 而在BIOES方案中,“發(fā)動機”直接標注成“S_LOC”,實體邊界更清晰,有利于識別效果提升.
本實驗中,不同實體類別的識別效果如表8 所示.
表8 不同標注類別的實體識別情況 (%)
可以看到,在發(fā)動機維修數據中,維修建議與故障現象的整體識別效果較好,主要由于其結構性較強,一般由兩三個詞概括而成,如“漏油”“動力不足”等. 而故障部位和故障狀態(tài)實體的準確度較低,則由于其在句子中出現的位置較隨機,且上下文信息不確定性較強,在小數據集上表現一般.
輔助決策模型即在給定發(fā)動機信息和表現的情況下,推薦其可能出現的故障原因. 以故障部位為例,根據樸素貝葉斯定理,給定發(fā)動機當前狀態(tài)S,任意一個故障部位FLi出現問題的概率如式(8)所示.
其中,S={Mileage,Model,PrdUse,FalutSym,···}為給定發(fā)動機的參數信息,J=P(S1,S2,···,S|S|)為參數集合S的聯合分布.
對于一臺給定的發(fā)動機,J值是固定的,可將其忽略.P(FLi)為該部位發(fā)生故障的先驗概率,P(Sk|FLi)即三元組<(h,r,t),M>的FF值(見式(2)),其中h為FLi,t為Sk. 因此,該值均可以從三元組的屬性中直接獲取.
對于一個故障部位,可能存在多個故障狀態(tài)FS,任意一個故障狀態(tài)FSj的概率如式(9)所示.
其中,S為發(fā)動機的參數集合,J=P(FLi,S1,S2,···,S|S|)表示S和FLi的聯合分布,且對于不同的故障狀態(tài)該值固定. 類似的,P(FS j),P(Sk|FS j)和P(FLi|FS j)可從對應的三元組屬性中直接獲取.
故障原因FR由故障部位FL和故障狀態(tài)FS聯合表示,如式(10)所示.
為了評估該輔助決策模型的有效性,本文將其與XGBoost[22]和LightGBM[23]進行對比. 實驗為一個多分類任務,即給定發(fā)動機信息,預測其故障原因. 在實驗前,本文對數據集做了一些預處理,如缺失值填充、連續(xù)值離散化、離散特征編碼等.
發(fā)動機故障原因有數百種,遵循帕累托原理,即大多數事故是由少數原因引起的,并且由于長尾分布,某些故障原因的樣本數較小,直接在全體數據集上運行分類模型效果較差. 因此,本文構建了多個數據集用于測試模型在不同故障原因類別數下的性能,如表9.
表9 不同故障原因類別數據集
根據故障原因類別數,將這些數據集稱為FR(20),FR(30),FR(50)和FR(100). 本文使用Recall@5 作為評價指標,實驗結果如表10 所示.
表10 不同模型的Recall@5 值
可以看到,本文設計的輔助決策模型性能比直接在原始數據集上運行多分類模型的效果更好.
本文基于構建后的知識圖譜,設計并實現了EFKG原型系統(tǒng),主要提供以下功能.
1)知識抽取
廠商們在歷年的發(fā)動機故障維修工作中已積累大量歷史售后數據,并以文本的形式存儲,然而目前難以利用海量的非結構化數據. 知識抽取從非結構化數據中自動化識別故障實體,將數據轉化為知識,并以三元組的方式存儲,有利于后續(xù)的檢索和診斷功能.
2)知識檢索
基于歷史故障信息獲取故障和故障之間的相似性一直是領域研究重點. 利用知識圖譜對實體進行相關性評價指標排序,可以幫助工作人員充分挖掘歷史故障信息中包含的價值.
3)輔助診斷
發(fā)動機結構的復雜性導致其故障難以避免,而在不拆解發(fā)動機的情況下很難預測其故障原因. 本文利用知識圖譜提供先驗知識,利用基于貝葉斯推理的輔助決策系統(tǒng)確定故障原因,有助于在拆解前提高發(fā)動機故障診斷的效率和準確性.
系統(tǒng)總體架構如圖4 所示.
圖4 系統(tǒng)總體架構
系統(tǒng)包括數據持久層、控制層和視圖層. 數據持久層使用Neo4j 圖數據庫和MongoDB 非關系型數據庫分別保存三元組和算法模型. 控制層采用Django 框架,通過RESTful 風格的API 接收前端查詢請求,生成Neo4j數據庫的DQL 語句后,通過Py2neo 接口調用Neo4j 的引擎,并將結果返回給前端展示. 對于MongoDB 的算法模型(實體識別、輔助故障診斷)調用也通過控制層進行. 視圖層負責前端頁面展示,使用JavaScript 和Echart工具完成圖表繪制,并提供較為簡潔的交互功能.
系統(tǒng)從近年來濰柴公司數十萬條柴油發(fā)動機售后維修報告中抽取12534 個實體和408972 條三元組,存儲在Neo4j 圖數據庫中,部分示例如圖5 所示.
圖5 圖數據庫示例
實體識別模塊負責從輸入語句中識別發(fā)動機故障實體,如圖6 所示. 當前端頁面輸入發(fā)動機維修相關語句時,后臺調用已訓練好的模型進行實體識別,并將標注結果返回到前端(藍色字體標識),鼠標點擊對應文本可查看其所屬的實體類別. 該模塊實現了維修報告的自動化錄入.
圖6 實體識別模塊
實體查詢模塊可查詢實體與實體間的關系,也可直接輸入Cypher 查詢語言進行更靈活的自定義查詢,如圖7 所示,查詢“前排氣歧管”,返回與之相關的實體和關系并進行可視化展示. 前端頁面通過Echarts 渲染,點擊實體或關系可以查看對應三元組的屬性.
圖7 實體查詢模塊
相關實體會在下方以表格形式展示,并通過FF-IEF指標排序. 圖8 展示了與“活塞”相關的部分故障現象,“發(fā)動機機油耗高”現象與該部位的FF-IEF 值為2.07,說明二者相關性較高.
圖8 實體相關性列表
輔助診斷模塊自定義輸入發(fā)動機特征(里程、型號、用途、故障現象等),特征數可通過“新增條件”按鈕控制,通過調用基于貝葉斯的輔助診斷模型預測其可能出現的故障原因,如圖9 所示.
圖9 輔助診斷模塊
為解決發(fā)動機維修過程中極度依賴維修人員個人經驗、缺乏定量事實依據等問題,本文利用發(fā)動機故障報告構建發(fā)動機維修領域知識圖譜,深度挖掘設備之間共性問題,從數據和知識層面指導發(fā)動機故障診斷和維修工作,主要成果如下.
1)建立了從真實發(fā)動機維修數據集中構建知識圖譜的系統(tǒng)流程和本體設計,構建了發(fā)動機故障知識圖譜EFKG,共包含12534 個實體和408972 條三元組.
2)對發(fā)動機維修領域文本做了較全面的命名實體識別對比實驗. 整體而言,BERT-BiLSTM-CRF 模型基于詞的標注粒度和BIOES 標注方案效果更好.
3)設計了實體相關性評價指標FF-IEF 和基于貝葉斯推理的輔助決策模型,相比基于機器學習的多分類模型取得更好的推理效果.
4)設計并實現EFKG 原型系統(tǒng),基于Neo4j 圖數據庫存儲和Django Web 框架,實現了查詢和可視化等功能,為EFKG 的落地應用提供技術參考.
后續(xù)研究一方面可聚焦在整個發(fā)動機維修領域的大規(guī)模數據集的構建,另一方面可在故障原因推理模型中,考慮擴充數據來源和影響因素,提高推理效果.
致謝
感謝濰柴動力股份有限公司張明國工程師的支持.