王锐光,吴 际,刘 超,杨海燕
(北京航空航天大学 计算机学院,北京 100191)
众所周知,许多安全关键系统变得规模化、复杂化和高度耦合化,如航空发动机、汽车车辆、化学系统、电力系统、风能转换系统和工业电子设备等等.所以,对可能存在工艺异常和设备故障的系统,其可靠性和安全性的要求越来越高.简单的异常可能会损坏部分功能,从而造成经济损失甚至巨大的人员伤亡,故尽可能早地检测和识别潜在异常并实施容错操作以最小化性能降级和避免危险情况是至关重要的.随着航空业的飞速发展,航空公司的飞行安全需求不断提高,但飞机结构愈加复杂,同一故障可能由多种因素引起,设备之间关联的多变性,使得维修人员难以通过传统的基于故障诊断规则[1]和基于专家系统的故障诊断方式[2]得到准确的结论,更先进的监控手段和故障诊断技术应逐渐应用到复杂系统中.
故障诊断的目标是提供关于故障更加详尽的描述信息,包括但不限于故障检测、故障原因判断、故障定位及故障恢复等[3].一旦检测到故障,维修人员就需要根据经验判断故障原因,从而提出故障修复方案.故障原因是故障诊断的首要目标,确定故障原因之后才能进行相应的故障排除措施,及时地避免更大的经济损失和伤亡.
由于飞机等系统的结构、性质和先验知识难以在短期内获得,基于知识和基于模型的故障诊断难以进行下去.而使用基于数据驱动的故障诊断方法不需要完整的系统模型,只要求可靠的定量或定性数据,这使得该类故障诊断方法变得切实可行.许多学者已经提出几种性能较好的基于数据的故障诊断方法,如:文献[4]首先利用自助重采样方法对原始样本进行处理,基于不同样本的自助子集分别去训练不同的神经网络,最后对所有网络的诊断结果进行综合,从而提高了故障诊断的可靠性;文献[5]在配电系统的故障诊断中利用主成分分析法对训练样本进行降维,然后利用支持向量机和神经网络方法实现故障分类,达到了较好的分类精度;文献[6]研究了以复杂工业过程为重点的故障分类问题,为了进行多故障分类,研究了基本的支持向量机以及主成分分析方法,实验表明:标准主成分分析法仍然有令人满意的结果,而且计算量较少.
近年来,航空维修企业已经有相当规模的维修经验数据积累,大部分企业将该类维修经验用于专家系统的构建中[7].航空维修企业的数据包括非结构化数据和结构化数据两种,其中:结构化数据容易直接用于计算和分析;而非结构化数据可以用于分析,也可以通过自然语言处理等方法转换为结构化数据.Chiu C等人[8]提出了基于案例推理的方法,使用历史非结构化维修案例数据,并采用遗传算法增强相似性函数性能的方法来检索相似案例,达到了较好的效果.李青等人[9]开发了基于案例推理和分词替换的故障诊断系统,通过标准词典的词条替换,将人为描述转换为更标准的格式,使语义类似的案例达到更高的相似度.文献[10]采用主题模型对高铁车载设备故障文本信息进行特征提取,基于贝叶斯网络对故障进行分类,达到了较好的诊断准确性.文献[11]中,针对汽车领域在故障诊断期间形成的大量文本数据,提出一种基于本体的文本挖掘技术的知识发现方法,使用诊断本体来发现最佳的实践经验以用来修复知识,该方法在现实工业中的基于 Web的分布式架构中成功应用.文献[12]中,针对铁路维修部门的故障文本数据,提出了基于双层特征提取的文本挖掘方法,在语法层次上使用基于卡方统计的特征选择来解决样本不均衡问题,之后,在语义层次上使用基于Dirichlet分配的特征选择,以将数据降维至低维主题空间,并通过铁路公司收集的铁路维护数据验证了其性能.Zhao等人[13]提出了一种基于文本挖掘技术的铁路车载设备故障诊断方法.该方法使用主题模型从维修记录中提取故障特征,同时采用贝叶斯网络调整故障诊断的不确定性和复杂性,最后,充分利用专家知识和数据以推导出合适的贝叶斯网络结构.该方法通过武广高速铁路信号系统的实际数据验证了正确性.
在文本特征提取方面,传统的方式一般有词袋模型(bag of words,简称BOW)或向量空间模型(vector space model).除此之外,在特征权重方面,主要是经典的 TF-IDF[14]以及其他扩展方法.词袋模型的最大问题是维度和稀疏性很高,词与词之间相互独立,忽视了上下文关系,因此需要特征选择、降维等方法降低维度,通过特征权重增加稠密性.而向量空间模型虽然克服了词袋模型在高纬度上的缺点,但训练该类模型需要庞大的语料才能很好地反映词与词之间的上下文关系.本文首先提出一种迭代式的故障诊断基本过程,通过不断积累维修日志,提高故障诊断的准确度;其次,在传统文本特征提取技术的基础上,基于领域内信息,提出一种基于卷积神经网络的字符级文本特征提取方法,在样本量较少的情况下,取得了较好的效果;最后,使用随机森林模型结合其他故障特征判别飞机设备故障原因,从而达到了较好的故障原因分类精度.
本文第2节介绍随机森林模型的理论基础.第3节介绍基于维修日志的故障诊断基本过程.第4节提出基于卷积神经网络的小样本字符级文本特征提取方法.第 5节设计实验验证随机森林算法的优越性,说明本文方案的有效性.第6节对本文工作进行总结并提出后续研究方向.
随机森林(random forest,简称RF)[15]是基于多决策树的Bagging类集成学习算法,通过自助(bootstrap)重采样技术且并行训练多个基分类器来降低学习算法的方差,从而得到良好的分类性能.随机森林算法在故障分类领域中应用较多[16-18],原因主要有:参数数量较少,不需要大量的调参工作;由于 Bagging的集成思想,所以不必担心过拟合现象的发生;对缺失值较多的数据能够很好地适用;能通过训练得到特征的重要程度;作为树结构,对多分类任务有良好的适应性;对于文本等高维数据具有良好的处理能力等.由于飞机维修日志经过结构化以后维度较高、且缺失值较多,所以采用随机森林算法作为主要的故障原因判别方法.
随机森林由所有决策树经过投票决定每个输入样本X的类别.每棵决策树{h(x,θi),i=1,2,…,k}依赖于θi,且θi是独立同分布的随机向量.而生成每棵决策树时的随机性,使得整体的泛化误差既依赖于单棵树的分类性能,也依赖于各决策树之间的相关关系.随机森林算法主要分为决策树的生成和随机森林投票两个步骤.
决策树分类是一种从杂乱无章的数据集中学习出树状表示形式的分类规则的方法.随机森林使用 CART分类树作为基决策树,使用自助重采样技术生成每一棵决策树分类器.单棵决策树的生成过程如下描述[19].
1)对原始训练集,使用有放回抽样的方式随机抽取训练样本,每个训练集大小约为原始训练集的2/3.
2)为每个bootstrap训练集建立CART决策树,一共产生nt棵决策树,从而构成一片“森林”.
3)随机选择数据集中的特征.假设训练数据集中有M个特征,从中随机选择m(m 其中,p(j|t)表示样本点在节点t处属于j类的概率.基尼指数越大,表明在节点t处的样本数据越均匀,所含信息就越少. 4)每棵决策树都最大可能地进行生长而不进行剪枝. 每棵决策树由节点和有向边组成,节点有两种类型:内部节点表示一个特征或属性,叶节点表示一个类别.图1展示了决策树的结构,其中,A1,A2是内部节点,表示特征或属性;C1~C3是叶节点,表示类别. Fig.1 Decision tree structure图1 决策树的结构 随机森林在面对分类问题时,一般采取的是简单投票法.测试数据输入到每个基决策树中进行分类,最终的类别由各个基决策树的分类情况决定,取分类得票数最多的那一类作为最终结果.即对于测试数据X,每棵决策树预测该数据的类别为C,则随机森林的投票决策公式如下: 其中,nt表示基决策树的总数,I(*)表示示性函数,表示类别C在树si上的分类结果,表示叶节点个数. 基于维修日志的故障诊断的核心思想是:通过机器学习方法,利用飞机历史维修经验,为新的故障诊断提供依据和参考.诊断过程如图2所示,包括故障数据转换、故障原因判断、故障原因修正和故障案例添加等步骤. 1)故障数据转换:由于故障案例包含故障现象、故障位置等均为维修人员用自然语言书写的文字记录,无法直接计算,故采用词频-逆文本频率、独热编码等方法将非结构化的文本转化为结构化数据,形成待预测故障. 2)故障原因判断:通过随机森林等机器学习模型对测试故障样本的故障原因进行诊断,并显示给维修人员作为故障诊断的参考依据. 3)故障原因修正:通过专家的经验对测试故障样本的故障原因进行修正,对预测错误的故障原因进行修正,形成正确的故障原因,以作为新的数据训练故障诊断模型,提高预测的准确率. 4)故障案例添加:将修正的故障样本添加到已有的故障库中,每隔一定时间,迭代地训练新的故障库,以提高故障诊断模型的预测准确率. Fig.2 Fault diagnosis process based on maintenance log图2 基于维修日志的故障诊断过程 航空维修数据一般为模块化的非结构化的文字记录,维修人员观察飞机设备的故障现象等故障信息之后,用专门的测试设备对疑似故障部件进行测试,根据维修经验进行故障诊断并记录在故障数据库中.本文采用的航空维修数据是针对波音737-300近7年的故障诊断记录,该数据来自于某合作单位,数据的样例见表1. Table 1 Maintenance log of Boeing 737-300表1 波音737-300维修日志 该维修数据的维修机型均为波音 737-300,一共统计了 3架飞机的维修情况,但只有 1架飞机拥有 2010年~2016年近 7年的维修数据,另外两架只包含部分年份的维修数据.在数据库中,维修人员记录故障现象、故障失常码、故障件位置、故障所属系统、工作时次和故障原因.其中,故障现象为故障发生时维修人员看到的故障情况,并通过文字记录的形式存入到数据库中.由于维修人员的更替,这种文字记录形式不统一,不同的维修人员对同一故障现象的记录可能会有差异.故障失常码为故障发生时对故障表现的简要总结,包括工作不正常、灯不亮、不指示、噪音大等.故障件位置是故障发生时故障设备所处飞机的位置,有前机身、前设备舱、机翼、客舱等等.系统表示了该种故障现象发生在飞机的哪种系统中,如自动驾驶设备、电气装置、信号系统等等.工作时次表示了故障部件已经工作的时长,以小时为单位.故障原因为本文方法预测的目标,主要包括传感器故障、灯组件故障、电路故障、电门故障、机件内部故障等11个故障原因. 故障现象作为维修人员观察故障特征的主要记录手段,揭示了故障表现与故障原因的内在关系.但维修记录中的文字描述缺乏统一的描述规范,同一故障现象的描述方式可能有所不同.并且由于维修人员不断更换,文字记录的方式往往伴随着随机性.设计一种能够从自然语言文本中提取核心特征的方法,是做故障诊断任务之前的关键.文献[20]在预训练的词向量上直接使用一个简单的卷积网络用于句子级别的分类任务中,并在4种领域问题如情感分析、问题分类等做了验证,证明卷积神经网络能够较好地提取文本的特征.文献[21]使用英文字符为单位的卷积网络实现文本分类,在与传统模型和深度学习模型进行比较实验的过程中,表明了字符级卷积网络可以获得具有竞争力的结果,但该种方法的缺陷在于需要大量的语料库的支持才能获得较好的效果.文献[22]在语义匹配领域中提出了一种不需要先验知识的卷积神经网络模型,通过使用卷积来代表两个句子的层次结构并捕获丰富的匹配模式,可以应用于不同性质和不同语言的匹配任务中,通过实验证明了对各种匹配任务的有效性及相对于其他模型的优越性.故本文采用卷积神经网络对该类文本进行结构化转换. 卷积神经网络主要结构如图3所示,该结构将“故障原因”作为目标进行训练,以字向量为输入方式,最终通过全连接层间接得到故障现象中维度固定的文本向量.下面主要讲解神经网络各层的作用. Fig.3 Convolutional neural network structure图3 卷积神经网络结构 1. 统计故障现象中出现过的所有文字并建立词汇表.故障现象中包含大量航空领域中的领域故障词,将词汇表中的文字依出现次数进行排序,并为每个文字分配一个序号,出现次数更多的文字,其排序更为靠前(添加特殊字符〈UNK〉作为未出现在该词汇表中的字).为排序在前nvocab_size位的词汇建立大小为nvocab_size×nembed_dim的词汇表,并随机初始化我们的输入——字向量.其中,nembed_dim为字向量的维度. 2. 由于故障现象描述中文字的数量不一致,为了保持统一,选择一个合适的大小nseq_length作为该句中需要提取的字向量个数,从而构建句子向量矩阵.如果句子中的字数较少,则补全为空;如果句子中的字数较多,直接截断前nseq_length个字. 3. 选择一维卷积核提取句子特征,核大小为nkernel_size,选择nkernel_nums个卷积核构建卷积层,对句子向量矩阵做卷积运算.卷积运算是将核权重与窗口大小为的字向量相乘,并得到新的特征,计算公式如下: 4. 使用最大池化层提取每行的最大值作为该卷积核提取出来的特征,形成nkernel_nums大小的池化层,并与全连接层相连,其中,使用 dropout随机失活等正则化方式防止过拟合.该全连接层代表着整个句子经过卷积核的特征提取后的向量表示. 5. 将全连接层与softmax层相连,softmax层的维度为故障原因类别个数,将属于某一类的故障原因的索引设置为1,其他设置为0. 6. 输入故障现象和故障原因,训练整个神经网络,得到更能反映领域知识的文本向量. 在采用合适的正则化策略与激活函数之后,该类方法能够在全连接层提取故障现象中最能反映故障原因的文本特征,从而将该特征作为故障现象的文本特征与其他领域特征进行拼接,得到合适的结构化文本.该类方法不仅可以提取到表示层次较深的文本特征,而且可以降低文本表示的维度,得到紧凑稠密的文本表示. 独热编码(one-hot encoding)又称为一位有效编码,它使用N位向量表达N个词是否出现,第i个位置为1表示第i个词在文本中出现.从计算机体系结构角度来看,其实对N个不变状态采用N位寄存器来保存,每个寄存器只保存1种状态,并且在任意时刻只有1个寄存器有对应的状态. 其他特征取值范围固定,所以采用独热编码的方式将每一行的相应特征转换为向量的格式用于计算.如故障件位置包括后机身、机翼、客舱、起落架舱等 7个位置,加上记录为空的字段,转换为独热编码即为 8维向量.将故障失常码、故障件位置、系统这3个特征均做独热编码处理. “工作时次”表示设备到故障为止的正常运行的小时数,原数据为浮点数格式,为了防止过拟合,将其分为10个子范围,并采用独热编码转换为向量的格式用于计算. 图4展示了基于维修日志数据的基于随机森林算法的故障诊断过程. Fig.4 Fault diagnosis process based on random forest图4 基于随机森林的故障诊断流程 整个过程的步骤如下. 1)获取经过文本处理后的原始故障样本训练集(xi,yi)N×M,xi表示第i个故障样本的特征向量,yi表示该故障样本的真实故障原因,N表示故障样本数,M表示特征数. 2)将原始故障样本训练集分为nt个自助训练集,根据上述的随机森林构建方法构建nt棵基决策树. 3)将测试故障样本输入到构建的随机森林模型中,每棵基决策树分别判断该故障样本的故障原因. 4)利用投票法综合考虑所有基决策树的分类结果,由公式(3)得出该故障样本的故障原因. 实验的数据集来自于真实的波音737-300飞机维修日志,该数据集记录了近7年的故障诊断记录,包括飞机编号、故障发现日期、故障现象、系统、工作时次、故障失常码和故障原因等信息.其中,飞机编号在本实验中没有作用,与故障原因关系不大,故在实验中删除该列.故障发现日期将作为故障样本训练的基准,迭代地训练诊断模型.原始数据集中,故障原因中有些记录为冗余信息,有些记录不够明确,仅仅通过原始故障原因无法有效完成故障诊断模型的建立,因此通过对故障原因类别的梳理,对其记录中的主要信息提取整理,最终得到处理后的故障原因,见表2.数据集共有故障样本1 272个,而故障原因作为预测的目标,其样本数分布见表3. Table 2 Partial aircraft failure raw data表2 部分飞机故障原始数据 Table 3 Number of samples for each failure reason表3 各故障原因样本数 卷积神经网络虽然能够较好地提取领域内的字向量特征,但与其他文本特征提取方法相比,模型的复杂程度更高,需要调节的参数也变得更多.本文中采用的参数调节方式主要使用训练集中的故障现象去尽可能得到最佳的故障原因预测精度,参数调节过程中定义的参数搜索域见表4. Table 4 Convolutional neural network parameter search domain表4 卷积神经网络参数搜索域 参数调节过程的评价指标为准确率,经过若干次随机搜索,取达到最高准确率的超参数作为模型的超参数来使用,并使用该模型得到的故障现象文本表示与其他领域特征结合并用于随机森林模型中. 分类问题中常用的评价指标是准确率和召回率,除此之外,本文还采用了F1值作为综合考虑准确率和召回率的评价指标.上述指标均是数值越大,表示模型效果越好. 为了让随机森林算法在该数据集上达到最好的效果,需要调整算法的超参数使其更适合该类数据.随机森林算法主要包括两个参数:随机选择的特征数m和基决策树数目nt. 随机选择的特征数m为每棵树的节点在进行分裂时需要考虑的特征数量,它是随机森林算法中对准确率预测比较重要的参数.调整m的取值,随机森林的性能会随之变化.本文通过实验来确定最佳的特征数m:首先固定基决策树个数nt为100,调整m的取值,观察随机森林在该数据集上的F1值变化,选择F1值最大时的m值作为本文实验中m的取值.图5展示了随机森林与不同m值之间的关系,由于数据维度较高,故m值代表取原始特征数的比例,取值范围为0.1~1.0.由图5可知,当m值为0.1时效果最好. 随机森林是由许多基决策树组成,基决策树的数量与随机森林的预测性能有较大的关系.基决策树数量足够多,随机森林才能达到更高的误差上界.但若基决策树数量过多,随机森林的训练时间也会变长且容易造成过拟合,在测试数据集上表现不佳.本文通过实验确定最佳的nt,首先固定m值为0.1,选择不同的nt在数据集上进行训练,调整nt的取值观察随机森林在该数据集上的F1值变化,选择F1值最大时的nt值作为本文实验的取值.图6展示了随机森林与不同nt值之间的关系,取值范围nt=[20,50,100,150,200,300,500,750,1000].由图6可知,当nt为500时效果最好. Fig.5 F1 value corresponding to differentmvalues图5 不同m值对应的F1值 Fig.6 F1 value corresponding to differentntvalues图6 不同nt值对应的F1值 文本的实验分为 3部分:第 1部分使用上述讨论的超参数对故障训练样本进行迭代式地学习,将次年的故障样本作为测试集,逐年添加故障样本,观察随机森林模型在测试集上的预测能力;第 2部分将随机森林模型与其他机器学习算法在该数据集上作对比,观察随机森林相比于其他算法的优越性;第 3部分对比不同的文本特征提取方式在同一模型下对模型准确程度的影响. 首先,观察随机森林模型在迭代式地学习中获得的提升幅度.把故障数据逐年递增式地输入到超参数已定的随机森林算法中,测试集选择次年的数据,比如2010年~2012年的数据作为训练集,则2013年的故障样本便作为测试集,观察平均准确率、平均召回率和平均F1值的变化.最终的实验结果见表5. Table 5 Iterative training classification result表5 迭代训练的分类结果 由表5中我们可以明显观察到,随着故障样本迭代式地增多,3个模型评价指标都随之增长,在故障年份为2010年~2015年时,3个模型评价指标均为最高,达到了82%左右.由此可以证明,随着故障库中故障样本的增加,模型的预测能力确实有了显著的提高. 现把2010年~2015年的故障数据全部输入到超参数已定的随机森林算法中,预测2016年的故障样本的故障原因,观察各个故障原因在该算法下的分类性能.最终的实验结果见表6. Table 6 Random forest classification result表6 随机森林分类结果 在表6中我们观察到,在准确率方面,电路故障最低,其他故障的预测准确率都在70%以上,其中,计算机故障和设备烧蚀故障的分类准确率最高,都超过了 90%;在召回率方面,设备老化最低,没有超过 70%,而电阻故障和设备烧蚀故障的召回率均超过了90%;F1值在一定程度上反映了学习器在准确率和召回率上取得双高的比例,电路故障、灯组件故障和设备老化故障的F1值最低,没有超过80%,F1值最大的为设备烧蚀故障,达到了93%.可以看到,在对维修日志数据的分类预测问题上,随机森林有较好的分类效果. 在不同模型的对比实验方面,我们采用逻辑回归、朴素贝叶斯、决策树、支持向量机和k近邻算法与随机森林算法进行对比.其中,逻辑回归使用“l2”正则化,朴素贝叶斯使用多项式模型,决策树使用CART决策树,支持向量机核函数使用高斯核函数,k近邻的距离度量方式选择欧氏距离.经过参数调整以后,各个模型的最佳实验结果见表7. Table 7 Comparative experimental results of different algorithms表7 不同算法的对比实验结果 由表7可知,其他5种算法的预测性能均没有随机森林强,其中,k近邻的效果最差.这是因为除了字特征可能具有可以衡量的距离以外,其他特征并不具有明显的距离概念,并且在高维数据下采用欧式距离可能达不到很好的度量效果.而逻辑回归和朴素贝叶斯的效果都低于 70%,在该类数据上的效果比较差.决策树的效果要稍好一些,可能是因为决策树模型与传统上专家在进行故障诊断时所依据的故障树规则比较相似,所以达到了比较好的效果.而支持向量机在面对小样本集时也能发挥其良好泛化性能的特点.随机森林结合了决策树模型的优点,同时通过Bagging集成的方式降低了算法的泛化误差,获得了最优的效果. 最后比较不同文本特征提取方式对模型性能的影响,分别采用直接独热编码的词袋模型、TF-IDF、基于维基百科语料训练的分布式词向量、基于故障现象小样本语料训练的分布式词向量和本文提出的字向量特征,并使用同一参数的随机森林模型进行预测,观察效果.实验结果见表8.从结果中可以看到,直接使用词袋模型的独热编码方式由于无法提取文本特征的上下文特征和领域特征,效果最差;而 TF-IDF,Word2Vec+维基百科语料的准确度比较接近;而 Word2Vec+故障现象语料的准确度也较差,这是因为故障现象语料较少,直接使用上下文关系预测词向量的方式效果较差;而采用卷积神经网络提取基于字符级的字向量特征的方法比其他方法在总体性能上更好,平均各项指标比 Word2Vec+维基百科语料要高 0.03,从而可以说明采用卷积神经网络的文本特征提取方式对文本特征提取更加充分,更能反映与故障原因的关系. Table 8 Comparative experimental results of different text features表8 不同文本特征的对比实验结果 针对目前维修日志数据无法充分利用的问题,本文首先提出一种迭代式的故障诊断基本过程,然后提出一种基于卷积神经网络对非结构化文本使用字向量提取文本特征的方法,最后使用随机森林算法对长期积累下来的飞机故障日志数据建立故障原因分类器,并通过实验验证了文本特征提取方式和随机森林算法的有效性.并且如果后续有更多的故障日志数据作为支撑,可直接使用本文阐述的故障诊断过程,通过迭代的方式不断地提高故障诊断模型的预测精度,帮助维修人员尽快确定故障原因,节省维修人员的时间成本.但是随着维修日志的不断增多,维修日志语料库也在不断增多,有必要继续比较本文提出的文本特征提取方式与基于上下文关系的文本特征提取方式的优劣.同时,有必要解决样本量较少且样本不均衡等问题,这是我们下一步的研究方向.2.2 随机森林投票
3 基于维修日志的故障诊断基本过程
4 文本特征提取方法
4.1 基于卷积神经网络的文本特征提取方法
4.2 基于独热编码的文本转换方法
4.3 基于随机森林的故障诊断步骤
5 实验设计与结果
5.1 数据集
5.2 卷积神经网络参数调整
5.3 评价指标与模型参数
5.4 实验结果分析
6 结 论