林 麟
(國能和利時信息技術有限公司,北京 100011)
煤礦應急預案管理系統指平時為應急指揮救援做準備,煤礦突發事故如瓦斯爆炸、火災、水災等災害發生時可以快速進行應急管理、指揮、救援等。但是突發事故一般情況復雜,預案管理系統對預案結構化管理自動化水平不高,導致系統很難根據事故發生的實際情況快速為指揮救援提供可靠的輔助決策支持[1-2]。目前應急預案系統大部分對應急預案的結構化管理采用2種方式:第1種人工按結構化錄入,第2種預案導入之后文字識別,沒有實現真正的對預案自動分析結構化存儲[3-4]。在應急預案系統智能化方面的研究主要集中于基于規則推理(RBR)模型和案例推理(CBR)模型[5]。RBR擅長解決規則明確的問題,由于處理突發事故的規則難以總結和提煉,并且突發事故現場條件千差萬別,RBR在實際運用過程中有很大局限性。CBR擅長解決領域知識缺乏、模型難以建立、存在大量例外與規則的事實的問題,但是這些研究缺少對事故案例特征值定量分析。
針對這些問題本系統采用了網絡爬蟲和基于KNN算法的案例推理技術,通過網絡爬蟲抓取到的大量事故案例利用分詞技術進行自動化分析結構化存儲,為系統建立一套大量高可用的事故案例庫[6];通過基于KNN算法的案例推理技術查找和突發事故相似的歷史事故案例,生成具有指導作用的應急預案參考藍本,提高編制應急預案的科學性、實用性、可靠性[7]。輔助應急人員及時有效地實施應急指揮工作,規范礦山事故災難的應急管理和應急響應程序,增強應對和防范礦山安全生產事故風險和事故災難的能力,最大限度地減少事故災難造成的損失,為全面提升礦山應急救援保障能力提供有力的科學支撐[8]。
網絡爬蟲是一個自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成。Scrapy是用純Python實現一個為了爬取網站數據、提取結構性數據而編寫的應用框架,用戶只需要定制開發幾個模塊就可以輕松的實現一個爬蟲,用來抓取網頁內容以及各種圖片,非常之方便。
1.1.1 基于Scrapy框架的網絡爬蟲技術的原理
Scrapy框架主要由:調度器、下載器、爬蟲、中間件、實體管道和引擎6大組件組成。工作原理如圖1所示:當爬蟲要爬取某URL地址的頁面時,將Request對象提交給引擎。爬蟲讀取URL,并以Parse為回調函數生成Request。Request對象進入調度器按某種算法進行排隊,按順序送往下載器。下載器根據Request對象中的URL地址發送一次HTTP請求到網絡服務器把資源下載下來,并封裝成Response對象遞送給爬蟲的頁面解析函數進行處理。若是解析出實體,則由爬蟲返回的實體存到數據庫或文件中。若是解析出的是鏈接,則把URL交給調度器等待抓取[9-10]。

圖1 Scrapy原理Fig.1 Scrapy schematic diagram
1.1.2 基于Scrapy框架的網絡爬蟲技術的應用
網絡爬蟲事故案例文本:文中以抓取中國煤礦安全網事故案例為例說明案例的文本抓取過程。利用Scrapy框架只需要定義實體類、爬蟲、實體管道。其中①實體類包含文章標題、內容鏈接和內容;②爬蟲包含爬取URL地址,爬蟲規則是從最后一頁到第一頁每頁按正則表達式過濾標題和內容鏈接,網站的字段和實體字段對應關系;③實體管道主要描述下載之后的文本存放位置。定義完成之后,運行爬蟲腳本完成事故案例的抓取和文本存儲。
在事故案例獲取之后,還要考慮網站對事故案例的更新問題,考慮到事故發生的頻率不高,因此對案例的更新時效性要求不強,可以設置定時任務半天或者一天去網站執行爬蟲最新頁。在實體管道中加入增量存儲規則,如存儲到本地的時候判斷文件名稱是否相同,如果相同則不需要抓取,如果名字不同則進行下載存儲,以此實現案例的定期增量爬取。
采用Python分詞庫對案例文本進行結構化存儲:在抓取事故案例之后,需要對案例文本進行分詞處理并結構化存儲,以便于對案例的檢索和分析。文中以瓦斯爆炸類事故案例說明結構化存儲過程。Python的“結巴分詞”支持對中文的分詞,安裝方便,使用簡便。“結巴分詞”支持3種分詞模式,選取搜索引擎模式,可以對文本進行準確分析。步驟如下:①建立停用詞庫,對沒有意義的符號、感嘆詞需要用Stopwords停用詞過濾;②對瓦斯爆炸相關的專業術語需要建立自定義詞典,例如針對事故地點建立自定義字典,如工作面、掘進面、大巷、井筒、主井、副井、回風井、進風井等;③通過對每個案例按照事故類型、事故地點類型、開拓方式、事故等級、礦井瓦斯等級、死亡人數、企業類別、礦井證照情況、礦井性質、礦井生產狀態、瓦斯檢測監控系統、防突措施、響應等級等整理自定義字典內容,建立瓦斯爆炸類事故自定義字典表;④根據字典表獲取事故案例中的關鍵屬性值并結構化存儲在事故案例庫中。
案例推理是由目標案例的提示而得到歷史記憶中的源案例,并由源案例來指導目標案例求解的一種策略,一般分為4個環節:案例檢索、案例復用、解決方案修正和案例保存。其中案例檢索是關鍵環節,它由突發的事故關鍵屬性作為輸入條件,從歷史事故案例庫中去查找相似的事故案例。檢索的最終效果是搜索到的相關案例越少越好,越和突發事故相似越好。本系統案例推理引入K最近鄰(k-Nearest Neighbor,KNN)算法,KNN算法有成熟的理論支撐,是經典機器學習算法之一,常常用來處理人工智能中分類回歸問題,具有對非正態類分布準確性高,易于實現等優點[11-12]。
2.2.1 基于KNN算法的案例推理原理


圖2 案例推理原理Fig.2 Case reasoning schematic diagram
2.2.2 基于KNN算法的案例推理的應用
KNN算法總結起來是由案例和突發事故的關鍵屬性的差值與權重值的乘積累加的值。通過對每個事故案例提煉總結,提取事故案例的事故類型、事故地點類型、事故時間、礦井開拓方式、礦井瓦斯等級、礦井生產能力值等作為關鍵屬性,每個案例對應屬性值qi,突發事故的每個關鍵屬性值為xi,每個屬性對應災害結果影響的權重值wi,權重值wi來源于示范應用單位一線業務專家,對權重打分再取平均分,最終運用歐式數學距離公式得到歐拉距離值。值最小的k個值對應標記的Label案例作為最相似的k個案例為本次應急響應的預案參考,專家再根據現場綜合信息進行分析判斷,制定高效合理的應急救援方案[13-16]。文中經過調查分析得到關鍵屬性表,見表1。
本系統設計了數據支持層、專業數據層、用戶管理層、模型算法支持層、功能應用層,系統架構圖如圖3所示。其中數據支持層利用人員定位系統、安全監測聯網系統、網絡爬蟲等方式為專業數據層提供數據,專業數據層集中存儲煤礦生產數據、人員數據、事故案例、應急預案、礦井環境等數據,為智能化應急預案提供數據支撐。用戶管理層實現用戶角色權限、組織架構等基本功能。模型算法支持層主要為實現智能應急預案提供專業算法支持,包括基于KNN算法案例推理模型等。功能應用層為系統結合智能化應急預案與現場業務要求開發的各項功能[17-20]。

圖3 系統架構Fig.3 System architecture diagram
本系統從中國煤礦安全網、中華人民共和國應急管理部官網、國家煤礦安全監察局官網、國家安全生產信息網、各省市煤礦安全監管網和安全生產信息網等官方網站上抓取了歷年來發生的關于水災、火災、瓦斯爆炸等常見煤礦災害類型的事故案例。最終將這些網站上9 200多個關于煤礦事故的事故案例以結構化形式存儲到系統。案例庫查詢界面如圖4所示。

圖4 案例查詢Fig.4 Case query graph
系統最終實現的效果如圖5所示,本系統實現了對應急預案的自動分析和結構化存儲,實現了突發事故的相似案例推薦,提高了對突發事故的應急指揮救援輔助決策能力。

圖5 系統首頁Fig.5 System homepage
本系統針對不同的網址編寫不同的網絡爬蟲腳本從而獲得大量的歷史事故案例文本,利用人工智能的分詞技術,將事故案例文本進行結構化存儲;通過在案例推理中引入KNN算法優化案例檢索能力,提高在事故發生后推薦歷史相似案例的能力;得到相似案例之后作為參考并結合現場情況進行人工修訂預案,通過有針對性的制定預案方案,進行安全隱患排查、應急救援培訓,將安全隱患治理從“事后處理”的傳統模式逐漸轉變到預控層面上,提升應急防范治理能力,降低事故發生的可能性,提升事故發生后的應急管理水平。
本系統的研究成果,提供了一套煤礦智能應急預案平臺框架,能根據行業工作環境、日常演練情景及應急預案要求,快速定制出符合行業特性的“真實”工作場景及演練腳本。目前本系統已經在國家能源集團神東煤炭集團得到了推廣應用,并且可進一步針對其它板塊業務特征進行增強完善,并可逐步發展成煤礦智能應急預案系統、電廠智能應急預案系統、煤化工智能應急預案系統等專業的智能應急預案平臺,有廣闊的市場前景。