网络爬虫和案例推理技术在煤矿智能应急预案系统中的研究及应用*
2021-04-06林麟
林 麟
(国能和利时信息技术有限公司,北京 100011)
0 引言
煤矿应急预案管理系统指平时为应急指挥救援做准备,煤矿突发事故如瓦斯爆炸、火灾、水灾等灾害发生时可以快速进行应急管理、指挥、救援等。但是突发事故一般情况复杂,预案管理系统对预案结构化管理自动化水平不高,导致系统很难根据事故发生的实际情况快速为指挥救援提供可靠的辅助决策支持[1-2]。目前应急预案系统大部分对应急预案的结构化管理采用2种方式:第1种人工按结构化录入,第2种预案导入之后文字识别,没有实现真正的对预案自动分析结构化存储[3-4]。在应急预案系统智能化方面的研究主要集中于基于规则推理(RBR)模型和案例推理(CBR)模型[5]。RBR擅长解决规则明确的问题,由于处理突发事故的规则难以总结和提炼,并且突发事故现场条件千差万别,RBR在实际运用过程中有很大局限性。CBR擅长解决领域知识缺乏、模型难以建立、存在大量例外与规则的事实的问题,但是这些研究缺少对事故案例特征值定量分析。
针对这些问题本系统采用了网络爬虫和基于KNN算法的案例推理技术,通过网络爬虫抓取到的大量事故案例利用分词技术进行自动化分析结构化存储,为系统建立一套大量高可用的事故案例库[6];通过基于KNN算法的案例推理技术查找和突发事故相似的历史事故案例,生成具有指导作用的应急预案参考蓝本,提高编制应急预案的科学性、实用性、可靠性[7]。辅助应急人员及时有效地实施应急指挥工作,规范矿山事故灾难的应急管理和应急响应程序,增强应对和防范矿山安全生产事故风险和事故灾难的能力,最大限度地减少事故灾难造成的损失,为全面提升矿山应急救援保障能力提供有力的科学支撑[8]。
1 网络爬虫和案例推理技术
1.1 网络爬虫技术
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。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停用词过滤;②对瓦斯爆炸相关的专业术语需要建立自定义词典,例如针对事故地点建立自定义字典,如工作面、掘进面、大巷、井筒、主井、副井、回风井、进风井等;③通过对每个案例按照事故类型、事故地点类型、开拓方式、事故等级、矿井瓦斯等级、死亡人数、企业类别、矿井证照情况、矿井性质、矿井生产状态、瓦斯检测监控系统、防突措施、响应等级等整理自定义字典内容,建立瓦斯爆炸类事故自定义字典表;④根据字典表获取事故案例中的关键属性值并结构化存储在事故案例库中。
2.2 案例推理技术的应用
案例推理是由目标案例的提示而得到历史记忆中的源案例,并由源案例来指导目标案例求解的一种策略,一般分为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 煤矿智能化应急预案系统中的实现
本系统设计了数据支持层、专业数据层、用户管理层、模型算法支持层、功能应用层,系统架构图如图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
4 结论
本系统针对不同的网址编写不同的网络爬虫脚本从而获得大量的历史事故案例文本,利用人工智能的分词技术,将事故案例文本进行结构化存储;通过在案例推理中引入KNN算法优化案例检索能力,提高在事故发生后推荐历史相似案例的能力;得到相似案例之后作为参考并结合现场情况进行人工修订预案,通过有针对性的制定预案方案,进行安全隐患排查、应急救援培训,将安全隐患治理从“事后处理”的传统模式逐渐转变到预控层面上,提升应急防范治理能力,降低事故发生的可能性,提升事故发生后的应急管理水平。
本系统的研究成果,提供了一套煤矿智能应急预案平台框架,能根据行业工作环境、日常演练情景及应急预案要求,快速定制出符合行业特性的“真实”工作场景及演练脚本。目前本系统已经在国家能源集团神东煤炭集团得到了推广应用,并且可进一步针对其它板块业务特征进行增强完善,并可逐步发展成煤矿智能应急预案系统、电厂智能应急预案系统、煤化工智能应急预案系统等专业的智能应急预案平台,有广阔的市场前景。