工程地质资料检索系统的设计和应用
2022-03-16朱泳标
杨 科,朱泳标,李 娜
(中铁二院工程集团有限责任公司,四川 成都 610031)
0 引 言
铁路工程地质勘察阶段中会产生大量资料,这些资料在施工建设期作为线路、路基、桥梁、隧道等专业设计依据之一,同时是铁路工程项目的关键基础资料。围绕铁路工程地质资料一体化、标准化建设已持续多年,随着铁路工程建设项目稳步增长,资料数量逐年增加,对资料的查阅暴露出响应速度慢、资料类型繁多、格式不统一等问题,传统的归档查询已经越来越难以满足管理和使用要求,利用信息化前沿技术,对传统的查询系统进行智能化改造已经刻不容缓。分布式检索平台是大数据生态圈中重要的组成部分,依托分布式横向扩展和倒排索引技术,不仅支持处理PB级海量数据检索,还能提高检索效率,将耗时控制在毫秒级。该文借助分布式检索平台,对工程地质资料查询过程中的难点、痛点进行问题分析,并通过大数据优化设计,实现了一套工程地质资料检索系统。
1 问题描述
1.1 检索资料的广度问题
工程地质专业主要为设计专业提供基础数据,传统上,地质人员通过模板整理资料,并提交给其他专业设计人员。设计人员在参考资料的时候,按照习惯和模板约束,在众多资料里逐层手动搜索,找到想要的文档或图像。在数据量大的情况下,这种方式效率较为低下,对于设计人员而言,所有资料应该是一种“平面化”的数据,自己只需要输入搜索关键字,就能从这些平面化数据中得到想要的结果。
例如想搜索某条线路里某段范围内的“风化带”资料,那么包括“风化带”的所有资料应该以评分高低返回给用户,评分越高的资料代表其更接近用户的检索意图。但现实是,工程地质资料分为地质说明书、地质平面图、纵横断面图、试验结果表等类型,包括了Office、AutoCAD、PDF、文本文件、图像等多种格式,要在此多源异构、非结构化的数据背景下,完成海量数据检索,且结果要高度贴合用户意图,就需要在“平面化”资料一侧覆盖所有文件格式,将其转换、加载为文本。在检索引擎一侧支持服务的水平扩展,为海量数据的实时检索提供基础支撑。
1.2 检索资料的深度问题
对地质资料的检索和应用还存在更深层次的挖掘问题,即怎么从简单的资料里获取更多的信息,比如加入位置信息能够方便用户从地图上直观发现该资料,加入线路和工点信息则帮助用户缩小检索范围,从而提高检索的效率、精度。从信息论的角度来看,更多的信息,能使检索的不确定性减少。增加信息量的方式,就是挖掘隐藏在已有资料之间的上下文信息。资料原作者在编写过程中,存在没有明确写入事件发生的地点和时间的情况,究其原因可能是当时编写环境就暗含了这些信息,也可能是资料存储的路径包含了这些信息,但是随着文件上传到中心平台,被分布式系统分块、冗余到各个服务器后,上下文信息在转移过程丢失。检索资料的深度问题,即如何利用技术手段和分析算法还原这些信息的问题。
1.3 检索资料的存储问题
工程地质资料通常存储在磁盘阵列(RAID)上,依靠RAID的冗余能力实现资料的妥善存储。但是在对数据进行挖掘和分析的情况下,磁盘阵列和分析系统位于不同的I/O会导致传输量大、延迟高等问题,海量数据则会将该问题更加放大。另一方面,需要基于RAID搭建文件服务,在用户检索到某份资料并想下载的时候,需要从业务服务切换到文件系统服务,进一步增加了延迟,影响用户体验。
2 设计实现
为了解决上述问题,该文设计和实现了基于分布式检索引擎的工程地质资料检索系统,重点解决了从海量异构资料中结构化文档资料、挖掘隐藏信息,并将原始资料妥善存储在检索系统内部的问题,提供了一个用户友好、性能强大的资料检索解决方案。
2.1 搜索引擎选型
Elasticsearch是一个基于Apache Lucene的分布式搜索引擎,它在Lucene支持的功能之上,提供了在节点管理、节点发现、建索引、查询的功能,并提供了对开发友好的 REST API,能够较快实现多源异构数据的交换。Elasticsearch采用倒排索引技术,词组全文检索的准确度、效率都远高于同类产品,并且作为分布式原生架构,其水平扩展的配置简单,可以做到按需扩容,即使作为单点部署,在海量数据下仍然保持高响应速度和高吞吐率。
国内已有很多学者将Elasticsearch用于各个行业,解决了很多业务系统的检索问题。结合工程地质资料特点,以及对广度、深度和存储问题的综合分析,选择以Elasticsearch作为基础平台开发搭建地质资料检索系统。
2.2 元数据设计
元数据是描述数据的数据,是数据属性的结构化信息,为数据的挖掘提供模板。从系统分析的角度来看,元数据约束了工程地质资料应具备的信息量,也为检索系统定义了基本的数据结构。良好设计的元数据,能够帮助检索缩小范围、提高命中率。
按照用户对资料检索的使用习惯,结合对工程地质资料的分析,该文将元数据分为两大类,第一类是对资料分类的描述。资料分类是本系统最大的变量,不仅新工程的纳入会增加分类数量,旧有的分类也会随着系统使用而更新关键字,因此,分类元数据应该设计为一个全局的、可维护的基础字典,最终形成如表1所示的结构。
表1 资料分类元数据设计
资料分类在系统上线前,通过梳理既有资料,统计得到资料分类的关键词组,再组织地质人员和相关专家对关键词组进行筛选后,将筛选结果存入Elasticsearch。
第二类是对资料数据的描述,是资料在系统内部的组织方式。用户的检索方式不局限于文字信息检索,还包括地图选点等方式以位置信息搜索资料。资料数据元数据设计为如表2所示的结构。
表2 资料数据结构元数据设计
资料数据在系统上线后,通过资料上传页面,由用户批量导入资料。系统将对资料进行预处理、结构化、文本挖掘,得到元数据约束的信息,并存入Elasticsearch。
2.3 资料预处理
资料预处理是对工程地质原始资料进行数据清洗和转换的过程,以确保入库资料的有效性。通过对各类资料的分析,发现大部分资料具备元数据要求信息量,以Word格式的“地质说明书”为例,其中包括了线路、里程和地质信息,而dwg格式的“横断面图”则包括了日期、线路、里程信息,但是不少文档仍然需要一个或者多个信息才能补全元数据结构。同时还存在少数资料,特别是一些数据缓存文件,只是作为数据计算过程的中间结果,不具备检索的意义,应通过数据清洗将这类资料过滤掉。清洗的方法包括后缀名过滤、对文件名进行正则表达式搜索淘汰。由于地质资料这类非结构化数据需要对文件内容进行文本抽取后才能结构化,因此很难在预处理阶段应用数据合法性检查、一致性检查等结构化的清洗方法,对数据进行补全和纠正将放在对文本进行抽取、结构化之后。
数据转换主要针对Office文件,特别是Office 2007之前的格式,这些文件不能被脚本语言直接抽取出文字,需要转换为docx、xlsx等格式才能被后续流程处理。预处理流程如图1所示。
图1 数据预处理流程
2.4 文本抽取与结构化
文本抽取是整个系统的核心,设计的难点在于需要一套运行在Linux服务器上,自动化抽取多种资料格式的集成处理程序。考虑到系统将会使用到多种前沿技术,以及对Linux系统的支持,程序由Python语言实现能够很好地“粘合”这些不同技术。
在数据预处理流程后,地质资料可以分为四种类型,第一类是Office文档,包括Word、PowerPoint、Excel格式。第二类是PDF文档,主要包括图像和文字两大类内容。第三类是CAD文件,通常为dwg格式,主要内容包括了平面图和纵横断面图。最后一类是图像,包括岩芯和踏勘现场图像,这类文件不仅数据量特别大,而且对工程地质人员的工作开展有极大的帮助,是重要的工程地质资料。另外需要考虑后续应用过程中,更多的资料类型加入检索,在设计阶段,遵循对修改封闭,对扩展开放的原则,采用工厂方法模式,根据输入文档的格式,设计不同的工厂类处理不同的地质资料。以目前的四类资料为主,每个工厂类生成如下产品:
(1)Office文件的抽取。
Python中有多个库可以对Office 2007以后的版本进行全文提取,而图像、样式等信息将会被丢弃,只获取所有文本内容、作者和编辑时间。
(2)PDF文件的抽取。
根据对地质PDF文件的研究,发现具有文本抽取价值的文件,大多数是文本型的,在Linux中有多个可执行程序,可以将其中的文本提取出来,使用Python的subprocess库,启动子进程来处理PDF文件,提取出的文字存入缓存文件,再由Python脚本获取。
(3)CAD文件的抽取。
目前已经有多个商业或开源的库可以处理CAD文件,在Linux上可以选择的控件比较少,libdxfrw开源了对大多数版本CAD的解析,并支持Linux上GCC编译。编写独立的Linux可执行程序,调用相关函数从dwg文件对象(AcDbObject)的文本区域提取出所有文字,存入缓存文件,再由Python脚本访问缓存文件得到文本内容。
(4)图像的抽取。
图像目前是处理最为耗时的一类资料。主要思路是通过目标检测算法找到图像中的实体,并根据这些实体能够得到语义上的联系。该文通过卷积神经网络和YOLO V3训练了地质资料中常见的一些实体,例如岩芯中的泥土、岩石、钻孔岩芯等,生成了一个可以识别这些实体的模型。在对图像进行处理中,首先读取该模型对图像中的实体进行检测,再对检测到的所有实体进行去重,最后根据这些实体查询实体关系字典,得到图像的分类。例如,一张图像通过实体检测,得到了多个泥土、泥岩、钻孔岩芯框实体,通过查询实体关系字典,这张图像很可能就是现场的钻孔岩芯图。
文本抽取的类设计如图2所示,仅以Office文件和图像抽取为例。
图2 文本抽取工厂方法类图
原始文件经过文本抽取后,得到原始文本、作者、编辑时间等元数据约束的信息。还需要对原始文本结构化处理,为后续的挖掘提供关键字、词频等重要信息。但文本结构化本身是一个复杂流程,应根据待获取的信息,将该流程分解为多个较小的子流程,逐步降低复杂度,具体流程如下:
(1)去除停用词,利用地勘语料库进行中文分词,统计前20个词频较高的词组并缓存。
(2)调用中文文本摘要算法进行单文本摘要,对应元数据的“摘要”信息。
(3)对原始文本进行正则表达式搜索,得到线路里程信息。里程信息通常是以CK、DK、D1K、D2K冠号开始,加上1 000以内的数字组成,由起始里程和终止里程成对出现,如DK11+123~DK15+789。原始文本中可能包括多个里程信息对,通常出现频率最高的才是真正里程信息,但是为了防止关键信息丢失,所有里程文字和出现频率作为键值对一起缓存,便于后续挖掘处理。
(4)对于图像这类特殊资料,不参与分词或摘要流程,直接将图像抽取后得到实体名称作为词组缓存。
经过文本抽取和结构化后,元数据要求的大多数信息已经具备,剩下较为隐蔽的信息等待挖掘。
2.5 隐藏信息挖掘
隐藏信息是指不明确写入资料,或者需要对资料进行多次处理后才能得到的信息。结构化后的原始文本中可能包括了线路、工点、资料类型等关键信息,但是存在命名不一致、二义性等问题,另外图像资料则可能不包含上述任何信息。因此,应在结构化后应用聚类、相似度算法尽量挖掘出线路、位置等关键信息。
(1)时间聚类,找到资料的时间轴。
在资料中包括了众多时间,有踏勘时间、编写时间、汇报时间,文档本身还具备最近编辑时间,在这诸多时间中,哪一个时间更具备参考意义。当完成文本结构化后,不妨对单个文档进行升维,将其映射到本次上传的所有文本中的时间维度中,因为用户的使用习惯往往同一批文件属于同期所做工作的汇编。然后再对所有时间进行K-means聚类,最后将单个文档里的所有时间,与聚类各个分簇中心计算欧氏距离,距离最短的时间往往更具备代表性,能够体现该资料在时间轴上,与同批次文件编写的强关联性,选择该时间作为本资料的编辑时间。图3表示了只对时间信息中的日期进行聚类后的结果。图4为时间信息挖掘流程。
图3 同批次资料内含时间信息聚类示意图
图4 时间信息挖掘流程
(2)坐标反算结合非极大值抑制,分析资料的位置信息。
由于工程地质资料都采用投影坐标作为项目坐标,每个项目中央子午线和投影高是不同的,必须通过坐标转换系统,对资料的项目坐标进行坐标反算,得到其GPS坐标,这个坐标是对资料最精确的位置描述,可以直接作为位置信息进行存储。但是很多资料并不具备项目坐标,而是里程信息,并且一个资料内含多个里程信息,在前一步骤中,已经得到了多对和多个里程作为候选信息,消除重叠的找到最佳的里程即能完善该资料的位置信息。具体做法是利用坐标转换系统将其转换为GPS坐标,再沿线路方向建立笛卡尔坐标系,围绕GPS坐标形成一个矩形,每个矩形具备一个分数值,即该里程对的词频,如图6所示,沿线路方向,将里程信息对转换为左右两个GPS坐标点,默认500米作为矩形高度,单个里程则为500米的正方形。图中深色的矩形为当前词频最高的里程信息,计算剩余的矩形和该矩形的重叠区域(IOU),当IOU大于预设值,则淘汰该里程信息。再在小于预设值的里程信息里选择词频最高的,进行下一次循环,如图中可以得到两对里程信息,其对应的GPS坐标以空格分隔存储到“位置信息”中。
图5 位置信息挖掘流程
图6 非极大值抑制算法获取最佳里程示意图
(3)相似度算法,挖掘资料的分类信息。
在结构化处理后,已经具备了单个资料词组到词频的映射,查询Elasticsearch中的文档分类数据,将分类中的词组词频映射取出,两者计算余弦相似度,最相似的分类即为该资料分类,最后存储到“类型信息”中。文档分类数据也需要定时更新维护,通过同类文档的关键字的聚合,在专家的建议确认下,逐步提高模型的准确性。由图7可见,随着同类文档的数量增加,单个文档与同类文档的相似度越来越大,虽然数量达到一定量后,相似度有所下降,这是由于更多的关键字加入会降低相似度,但是整体保持了较高的相似度,保证了文档分类的准确率。
图7 单个资料与相同分类资料的余弦相似度折线图
在完成所有隐藏信息挖掘后,将原始文件通过BASE64编码转换成字符串,对应到元数据中的“原始文件”,便于用户在检索到该资料后,快速的解码并下载。该方式也可以最大化利用分布式系统的性能,防止文件下载的单点故障。
3 结束语
该文引入分布式搜索引擎,结合软件设计模式和数据挖掘方法,实现了工程地质资料检索系统,该系统已经在中铁二院地勘岩土工程设计研究院的多个项目组投入使用,并在兄弟设计单位中得到应用验证。根据反馈,该系统支持资料格式多、检索命中率高、检索速度快、使用简单的特点得到了用户的肯定,从根本上改变了传统资料检索的使用方式,提高了地质、设计人员的工作效率。
随着川藏线、成渝中线等重大铁路工程项目的推进,该系统将为广大地质人员、工程设计人员的工作、科研提供有力帮助。