许驹雄,李敏波,2,刘孟珂,曹志月,唐 波,葛 浩
1(复旦大学 软件学院,上海 200438)
2(复旦大学 上海市数据科学重点实验室,上海 200438)
3(潍柴动力股份有限公司,潍坊 261061)
随着智能制造时代的到来,越来越多的制造企业和服务商都开始搭建基于产品全生命周期的物理信息系统用于采集产品的设计、采购、加工、装配、测试和售后返修等过程数据及结果数据,例如发动机装配档案,出厂测试阶段的试车数据、售后返修的故障维修报告等. 这些数据蕴含了丰富的价值,但厂商们缺乏有效的技术手段,无法从数据和知识层面指导发动机的故障诊断和维修工作[1].
目前的工业领域故障诊断方法大多基于生产过程中的状态数据,通过构建传感器获取的特征数据和机器状态之间的关系,将故障诊断问题转化为模式识别问题,在制造业[2]、电力[3]等领域都有诸多应用. 但由于维修信息中具有大量的文本信息,如何提取其中蕴涵的领域知识是需要深入研究的课题[4].
随着人工智能的飞速发展,知识图谱逐渐成为工业界和学术界研究的重点,广泛应用于医疗[5]、教育[6]等领域. 在制造业领域,西门子提出了领域知识图谱计划[7],博世构建了底盘系统控制相关数据的大型知识图谱[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 等人将知识学习和协同过滤的目标函数结合进行联合学习[18].Wang 等人使用联合学习框架来计算多跳响应[19],并在后续工作中提出多任务学习框架交替学习图嵌入和推荐算法,同时利用了两个任务的互补信息[20].
然而,通过文献调研和与制造业厂商交流发现,在制造业领域应用知识图谱还存在诸多不确定性,缺乏系统的研究. 例如,厂商们对制造业知识图谱的应用前景有所怀疑,并且不确定如何将其应用到产品设计、装配、售后等流程. 此外,目前还缺乏一个有效的、系统的从发动机故障数据端到端构建与应用知识图谱的流程. 因此,本文的主要工作如下:
1)将知识图谱引入柴油发动机故障领域,提出发动机故障知识图谱(engine fault knowledge graph,EFKG). 分析发动机故障诊断领域的业务规则和数据特点,设计领域知识图谱的构建流程和本体,基于真实数据集构建EFKG.
2)针对维修数据中知识抽取准确率较低的问题,构建领域词典,标注语料集,从多维度对比现有的基于深度学习的实体抽取方法,得出最好的发动机维修数据命名实体识别方案.
3)设计实体相关性评价指标FF-IEF (fault frequencyinverse event frequency)和基于知识图谱的辅助决策模型,并开发原型系统,提供知识抽取、检索、辅助决策等功能.
本文对柴油发动机故障领域知识图谱的构建和应用进行研究. 实验结果表明,本文的方法能有效地从发动机故障数据集中抽取知识,有助于提高信息检索和售后维修效率.
在发动机故障诊断领域,存在许多案例形式的故障维修数据,与故障诊断相关的知识需从案例中挖掘,例如故障现象、故障原因、故障状态、故障部位等. 由于该领域作为传统制造业,专业知识存在一定的封闭性,数据质量和应用也存在一定问题,目前与知识图谱相关的研究较少. 本文针对发动机故障领域的数据特点和业务逻辑,自顶向下构建知识图谱,整体流程如图1 所示.
图1 EFKG 构建流程
具体构建流程如下:
1)根据领域专家提供的发动机故障诊断业务规则和数据特点设计知识图谱模式层.
2)制定映射规则对结构化数据进行转换; 从非结构化文本中通过实体识别技术抽取实体,并与其他实体进行关联.
3)通过实体对齐对实体进行规范化处理,根据模式层关联关系生成三元组.
4)计算实体相关性指标,与三元组存储于图数据库中.
5)利用贝叶斯推理模型进行故障诊断.
本文使用数据来源于潍柴动力股份有限公司近年来的生产故障(加工、试车、装配等)和售后维修报告,包括维修信息、发动机信息、故障信息等,其格式涵盖结构化和非结构化数据. 每条维修记录对应一个柴油发动机故障案例,并通过外键与发动机信息和故障信息等外表关联. 其中维修处理过程为非结构化文本,故障信息和发动机参数为结构化数据.
EFKG 的重要用途之一是提高维修效率,即辅助工程师定位故障位点和故障类型,因此故障部位和故障状态是核心实体,整体模式层设计如图2 所示.
图2 EFKG 模式层设计
发动机故障维修报告为工作人员手工填写的自然文本,通常包括“客户反映-问题定位-解决方法”流程,如表1 所示,下划线部分为需要抽取的信息,包括维修信息、发动机信息、故障信息等.
表1 非结构化数据实例
在发动机故障领域,目前并无公开的训练语料库,需自行标注和构建数据集. 为解决训练集规模小、部分领域词汇一词多义的问题,本文基于目前主流使用的BiLSTM-CRF[9]方法,将BERT[21]预训练模型作为词向量输入,可以较好地缓解上述问题,学习到更准确的语义向量. 模型的整体结构如图3 所示.
图3 BERT-BiLSTM-CRF 模型
本文对5 488 条发动机维修数据进行人工标注,构建了发动机维修数据集,如表2 所示.
表2 实验数据集大小及划分
本文采取BIO 和BIOES 两种标注方法. BIO 的标注方案将词语分成两类,一类是目标实体,由B 和I 组成,分别代表目标实体的第一个词语和其他词语,O 表示该词语不属于目标实体. BIOES 的B、I、E 分别表示实体的开始、中间和结束部分,S 表示实体为单个字词,O 表示该部分不是实体.
在标注数据集中,实体类型共分为4 种: 故障现象(description,DES)、故障部位(location,LOC)、故障状态(status,STA)和维修建议(suggestion,SUG). 故障现象是指客户向维修站点反映的发动机故障表现,如“发动机启动困难”; 故障部位是指经检查后确定的问题起因件,如“向心球轴承”“增压器”等; 故障状态是指起因件出现的具体问题,例如“(增压器)拉壳”“(油封)漏油”等; 维修建议是指维修人员解决故障的操作,如“更换”气缸盖垫片等. 各类实体的标注情况如表3 所示.
表3 实体标注情况
标注示例如表4 所示.
表4 标注示例
实验结果见本文第2 节.
维修报告为工作人员手工填写,无法保证数据的规范和实用性,常出现共指现象,如“发动机无力”和“功率不足”指代同一问题. 同时由于数据经过OCR 处理,存在中英文字符识别出错的情况,如电子控制单元ECU 识别成EC0,类似的异常数据需要进行消除和修复.
本文采用计算相似度的方法进行实体对齐,定义好相似度函数和阈值后,将实体间相似度得分大于设定阈值的实体对只保留其中一个实体,并更新图谱中的三元组,用保留后的实体替换被对齐的实体. 本文采用编辑距离和Jaccard 相关系数法进行实体相似度计算.
1)编辑距离: 对一个单词或词语可以采取插入、删除或替换字符3 种方式. 将一个单词(词语)通过这3 种操作方式转换为另一个单词需要的最小操作次数,即为编辑距离.
2)Jaccard 相关系数法: Jaccard 系数描述了两个有限样本集的相似性,定义为两个集合的交集与并集之比. 该比值越大,说明两个集合越相似; 该比值越小,说明两个集合差异越大,相似性越低. Jaccard 相关系数的计算方法如式(1)所示.
实体对齐流程如下所示. 由于相似度计算仅考虑文本的字面相似性,而忽略了语义,因此该方法不能保证实体对齐的完全正确,可能存在错误对齐或遗漏对齐的情况. 由于本文涉及的实体主要与发动机故障信息相关,实体种类和数量相对较少,因此对实体对齐结果进行人工校对与完善.
算法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 中,一条三元组并非绝对正确或错误的.例如“发动机震动大”这一故障现象,可能由于“轴承卡滞”导致,也可能由 “减震器损坏”引起. 为了描述一条三元组在EFKG 中的重要程度,本文参考TF-IDF (term frequency-inverse document frequency)的思想,设计了发动机故障实体相关性指标FF-IEF (fault frequencyinverse event frequency).
对于EFKG 中的一条三元组(hij,ri,tij),故障频率(FF)衡量尾实体在给定头实体条件下出现的概率,如式(2)所示.
其中,N(hij,tij)表示该条三元组出现的次数,可从维修数据集中统计并作为三元组的属性存储.Hi表示头实体hij所属的实体类别(故障现象、故障部位等).
逆向事件频率(IEF)衡量尾实体对头实体的区分程度,定义为头实体所属类别的元组总数与该头实体所在元组数的比值,如式(3)所示.
其中,|{(hik,ri,tij):hik∈Hi,∀k}|表示尾实体为tij的三元组集合.
FF-IEF指标同时衡量三元组的出现频率和区分程度,定义如式(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 进行搭建,具体的环境配置参数等如表5 所示.
表5 实验环境
本实验采用BERT-Base 模型,该模型使用Bi-Transformer 关注语义上下文,在多项NLP 任务中表现良好. 其他模型参数如表6 所示.
表6 参数设置
2.1.3 实验结果
实验采取层次抽样的方法构建训练集、验证集和测试集,数据划分情况见上文表2. 不同模型、不同标注粒度和标注方案的实验结果如表7 所示.
表7 不同维度的3 种模型实体识别情况 (%)
可以看到,采用BERT-BiLSTM-CRF 模型和基于词的BIOES 标注方案得到的命名实体识别效果最好,F1 值为90.25%.
基于词和基于字是两种不同的标注粒度. 由于中文的词之间没有严格的界限,且自动化的分词工具有一定误差,因此在通用领域中,基于字的标注粒度更为主流. 但对于发动机故障领域而言,领域词典能保证较高的分词准确率,并且词向量相比字向量能包含更准确的语义信息,因此整体而言,基于词的标注方案优于基于字的方案.
从标注方案角度而言,3 种模型的结果都是BIOES优于BIO 方案,即更细致化的标注能给命名实体识别带来更好的效果. 例如,“发动机”一词在BIO 方案下会被标注成“B_LOC”,其后可能存在“共轨管(I_LOC)”或其他类型的标注,对整体的识别造成困难; 而在BIOES方案中,“发动机”直接标注成“S_LOC”,实体边界更清晰,有利于识别效果提升.
本实验中,不同实体类别的识别效果如表8 所示.
表8 不同标注类别的实体识别情况 (%)
可以看到,在发动机维修数据中,维修建议与故障现象的整体识别效果较好,主要由于其结构性较强,一般由两三个词概括而成,如“漏油”“动力不足”等. 而故障部位和故障状态实体的准确度较低,则由于其在句子中出现的位置较随机,且上下文信息不确定性较强,在小数据集上表现一般.
辅助决策模型即在给定发动机信息和表现的情况下,推荐其可能出现的故障原因. 以故障部位为例,根据朴素贝叶斯定理,给定发动机当前状态S,任意一个故障部位FLi出现问题的概率如式(8)所示.
其中,S={Mileage,Model,PrdUse,FalutSym,···}为给定发动机的参数信息,J=P(S1,S2,···,S|S|)为参数集合S的联合分布.
对于一台给定的发动机,J值是固定的,可将其忽略.P(FLi)为该部位发生故障的先验概率,P(Sk|FLi)即三元组<(h,r,t),M>的FF值(见式(2)),其中h为FLi,t为Sk. 因此,该值均可以从三元组的属性中直接获取.
对于一个故障部位,可能存在多个故障状态FS,任意一个故障状态FSj的概率如式(9)所示.
其中,S为发动机的参数集合,J=P(FLi,S1,S2,···,S|S|)表示S和FLi的联合分布,且对于不同的故障状态该值固定. 类似的,P(FS j),P(Sk|FS j)和P(FLi|FS j)可从对应的三元组属性中直接获取.
故障原因FR由故障部位FL和故障状态FS联合表示,如式(10)所示.
为了评估该辅助决策模型的有效性,本文将其与XGBoost[22]和LightGBM[23]进行对比. 实验为一个多分类任务,即给定发动机信息,预测其故障原因. 在实验前,本文对数据集做了一些预处理,如缺失值填充、连续值离散化、离散特征编码等.
发动机故障原因有数百种,遵循帕累托原理,即大多数事故是由少数原因引起的,并且由于长尾分布,某些故障原因的样本数较小,直接在全体数据集上运行分类模型效果较差. 因此,本文构建了多个数据集用于测试模型在不同故障原因类别数下的性能,如表9.
表9 不同故障原因类别数据集
根据故障原因类别数,将这些数据集称为FR(20),FR(30),FR(50)和FR(100). 本文使用Recall@5 作为评价指标,实验结果如表10 所示.
表10 不同模型的Recall@5 值
可以看到,本文设计的辅助决策模型性能比直接在原始数据集上运行多分类模型的效果更好.
本文基于构建后的知识图谱,设计并实现了EFKG原型系统,主要提供以下功能.
1)知识抽取
厂商们在历年的发动机故障维修工作中已积累大量历史售后数据,并以文本的形式存储,然而目前难以利用海量的非结构化数据. 知识抽取从非结构化数据中自动化识别故障实体,将数据转化为知识,并以三元组的方式存储,有利于后续的检索和诊断功能.
2)知识检索
基于历史故障信息获取故障和故障之间的相似性一直是领域研究重点. 利用知识图谱对实体进行相关性评价指标排序,可以帮助工作人员充分挖掘历史故障信息中包含的价值.
3)辅助诊断
发动机结构的复杂性导致其故障难以避免,而在不拆解发动机的情况下很难预测其故障原因. 本文利用知识图谱提供先验知识,利用基于贝叶斯推理的辅助决策系统确定故障原因,有助于在拆解前提高发动机故障诊断的效率和准确性.
系统总体架构如图4 所示.
图4 系统总体架构
系统包括数据持久层、控制层和视图层. 数据持久层使用Neo4j 图数据库和MongoDB 非关系型数据库分别保存三元组和算法模型. 控制层采用Django 框架,通过RESTful 风格的API 接收前端查询请求,生成Neo4j数据库的DQL 语句后,通过Py2neo 接口调用Neo4j 的引擎,并将结果返回给前端展示. 对于MongoDB 的算法模型(实体识别、辅助故障诊断)调用也通过控制层进行. 视图层负责前端页面展示,使用JavaScript 和Echart工具完成图表绘制,并提供较为简洁的交互功能.
系统从近年来潍柴公司数十万条柴油发动机售后维修报告中抽取12534 个实体和408972 条三元组,存储在Neo4j 图数据库中,部分示例如图5 所示.
图5 图数据库示例
实体识别模块负责从输入语句中识别发动机故障实体,如图6 所示. 当前端页面输入发动机维修相关语句时,后台调用已训练好的模型进行实体识别,并将标注结果返回到前端(蓝色字体标识),鼠标点击对应文本可查看其所属的实体类别. 该模块实现了维修报告的自动化录入.
图6 实体识别模块
实体查询模块可查询实体与实体间的关系,也可直接输入Cypher 查询语言进行更灵活的自定义查询,如图7 所示,查询“前排气歧管”,返回与之相关的实体和关系并进行可视化展示. 前端页面通过Echarts 渲染,点击实体或关系可以查看对应三元组的属性.
图7 实体查询模块
相关实体会在下方以表格形式展示,并通过FF-IEF指标排序. 图8 展示了与“活塞”相关的部分故障现象,“发动机机油耗高”现象与该部位的FF-IEF 值为2.07,说明二者相关性较高.
图8 实体相关性列表
辅助诊断模块自定义输入发动机特征(里程、型号、用途、故障现象等),特征数可通过“新增条件”按钮控制,通过调用基于贝叶斯的辅助诊断模型预测其可能出现的故障原因,如图9 所示.
图9 辅助诊断模块
为解决发动机维修过程中极度依赖维修人员个人经验、缺乏定量事实依据等问题,本文利用发动机故障报告构建发动机维修领域知识图谱,深度挖掘设备之间共性问题,从数据和知识层面指导发动机故障诊断和维修工作,主要成果如下.
1)建立了从真实发动机维修数据集中构建知识图谱的系统流程和本体设计,构建了发动机故障知识图谱EFKG,共包含12534 个实体和408972 条三元组.
2)对发动机维修领域文本做了较全面的命名实体识别对比实验. 整体而言,BERT-BiLSTM-CRF 模型基于词的标注粒度和BIOES 标注方案效果更好.
3)设计了实体相关性评价指标FF-IEF 和基于贝叶斯推理的辅助决策模型,相比基于机器学习的多分类模型取得更好的推理效果.
4)设计并实现EFKG 原型系统,基于Neo4j 图数据库存储和Django Web 框架,实现了查询和可视化等功能,为EFKG 的落地应用提供技术参考.
后续研究一方面可聚焦在整个发动机维修领域的大规模数据集的构建,另一方面可在故障原因推理模型中,考虑扩充数据来源和影响因素,提高推理效果.
致谢
感谢潍柴动力股份有限公司张明国工程师的支持.