任春龙,方 欢,2*
(1.安徽理工大学,安徽 淮南 232001;2.安徽省煤矿安全大数据分析与预警技术工程实验室,安徽 淮南 232001)
现实世界的业务流程会随着时间的推移而发生改变,变化的原因可能包括法规、政策、用户需求和软件维护等,监控每段时期业务流程发生的变化对企业很有价值,可以帮助企业识别系统的业务能力和行为,分辨出不在预期内的异常行为[1]。
早期的流程变化研究主要是变化域定位和变化域传播。在变化域定位的研究中,主要是比较系统日志与参考模型之间的不同之处,以此来定位参考模型需要改变的结构,如文献[2]提出了将几种变化模式和变化支持特征结合起来的变化检测框架,比较实际流程是否遵循参考模型的规范。文献[3]通过给定一个过程模型的变化,利用相应活动的行为轮廓去定位另一个模型中的变化区域。变化域传播在变化域研究的基础上,探究了一个模型的部分流程变化对其全局流程或关联模型产生的影响,如在文献[4]中,提出利用相应活动的行为轮廓特征去确定另一个模型的变化域。文献[5]利用控制流和数据流Petri网模型的变化域去定位融合网的最终变化域。近年来,基于日志的业务流程变化挖掘成为流程变化研究的一个热点,文献[6]提出在已知参考模型和流程变体时,扩展模型使其适应给定的流程变体,未知参考模型时,将给定的流程变体整合到同一模型中。文献[7]在参考模型未知时,利用活动的行为轮廓关系确定变化偏差域,去修复原始日志发现的模型。
深度学习中的自编码器网络在许多领域得到应用[8-11],如文献[12]提出一种关系自编码器模型,可以通过数据自身及其内部关系提取高级特征,减少重构误差,帮助改进分类结果。一些学者将自编码器引入过程挖掘领域,用于预处理以改进过程发现的模型质量。文献[13]利用自编码器网络的异常检测能力去检测日志中的异常迹,文献[14]在事件日志的属性级别上利用自编码器网络检测异常值、重建缺失值,以提高事件日志的质量。
在实现“日志-日志”的活动变化挖掘时,需要比对系统的原始日志信息和实际日志信息,将原始日志记为L his,实际日志记为L act。文献[1]利用不完备系统日志获取L his和L act中的活动行为轮廓关系,比较得到活动的联合发生关系,从而提取出活动的发生不变集,挖掘出系统的变化部分。该方法是在系统日志不含隐变迁的假设下进行的,如果对L his执行变化操作产生L act时加入隐变迁,则基于活动行为轮廓关系的方法就很难检测出发生变化的迹,下面以一个例子来说明。
若有一组事件日志L his={
许多学者利用自编码器可以学习数据整体分布特征的能力,比较输入与输出的特征矩阵去进行异常检测和日志修复。得益于这种将单个迹与整体分布特征进行比较的能力,选择用自编码器去分析实际日志的每条迹是否符合原始日志的分布特征,比较输入迹与输出迹的不同去确定变化操作类型。
定义1(事件、迹、事件日志[15])A是活动集合,σ∈A*是一条迹,即一个事件序列,L∈B(A*)是一个事件日志,即迹的多集。
定义2(变化操作[1])L为一个事件日志,事件迹σ∈L,日志中的活动集合记为S,Delete、Insert和Move分别指活动的删除变化操作、插入变化操作和移动变化操作,并将3种变化操作记为C=(Delete,Insert,Move)。其中Delete、Insert和Move具体操作如下(∀ai∈S,σi∈L(i=1,2,…,n)):
(1)Delete:Delete(σi,ai)是指将活动a i从迹σi中进行删除。
急性阑尾炎是一种常见的外科疾病。该疾病的特征是转移性右下象限疼痛。这种疾病在年轻人中很常见[1-3]。前一天,临床上急性阑尾炎主要是手术切除[4],如果延误诊断和治疗,可能会引起严重并发症。早期症状高热,呕吐等症状严重者将导致穿孔,使患者的健康受到严重影响[5]。因此,在诊所采取合理有效的治疗和护理干预是非常重要的。本研究的目的是调查中医和西医护理干预对急性阑尾炎的临床疗效及其对急性阑尾炎患者生活质量的影响,为临床治疗提供指导。
(2)Insert:Insert(σi,ai)是指将活动a i插入到迹σi中任意位置;Insert(σi,a1,a2,a3)指在迹σi中,将活动a1插入到活动a2和a3之间。
(3)Move:Move(σi,a1,a2,a3)是指在迹σi中将活动a1从当前位置移动到活动a2之后a3之前。
定义3(隐变迁[16])T′是Petri网模型的变迁集合,L′为对应的Petri网模型N=(P,T,F,a i,a o)的事件日志集合,即T′→L′。当∃t∈T′⇏f(t)=l(l∈L′)时,则变迁t被称为隐变迁。
自编码器(autoencoder,AE)是一类在半监督学习和无监督学习中使用的人工神经网络(Artificial Neural Networks,ANNs),其功能是将输入信息作为学习目标,对输入信息进行表征学习(representation learning)[17]。将给定数据集编码成向量X,选用one-hot编码。自编码器网络主要分为编码器和解码器两部分:编码器学习输入向量X,通过编码器的隐藏层对向量X降维,得到隐藏向量Z,该向量表示网络所学习到的输入数据的隐藏表示或潜在模型;解码器通过隐藏层对隐藏向量Z升维,得到重构向量X′,通过反向传播算法调整各个隐藏层的权重,最小化重构向量X′与输入向量X之间的误差(该误差可以由损失函数L(X,X′)[14]表示,如公式(1)所示)以尽可能还原出输入向量X。
采用的网络结构如图1所示,对于隐藏层fc1、fc4设置神经元数量为100,隐藏层fc2、fc3设置神经元数量为50。
图1 自编码器网络结构
自编码器的原理类似于主成分分析(PCA)[18],即将高维数据降维,用低维数据表示输入数据的潜在分布特征。但自编码借助于深层神经网络的非线性特征提取能力,可以获得更好的数据特征,还可以通过解码器尽可能还原出输入向量。选用降噪自编码器(Denoising AutoEncoder,DAE)进行实验,即在将输入添加到自动编码器之前添加噪声,该噪声从μ=0,σ=0.1的高斯分布中取样。
由于自编码器的输入大小是固定的,需要在预处理阶段进行编码时,对所有小于最长迹的迹向量进行零填充,以保证所有的迹向量具有相同的大小。
在过程挖掘领域,许多学者用自编码器来进行异常检测或日志修复。在进行异常检测时,将事件日志输入自编码器,训练完成后,对于每个输入的迹向量X,通过自编码器模型可以得到重构向量X′,重构误差表示输入向量X与重构向量X′之间的距离,即该输入案例与正常分布特征之间的差异程度。训练后的模型能以小于给定阈值的误差再现正常迹,以大于阈值的误差再现异常迹,这样就可以检测出日志中的异常迹。日志修复则在检测出异常迹的基础上,基于重构迹对异常迹的缺失部分进行修复[14]。
受以上方法的启发,将自编码器应用到迹的活动变化挖掘中。上述方法是将被检测日志作为训练集和测试集,而本文将原始日志作为训练集,实际日志作为测试集,利用训练好的模型去检测测试集中的异常迹,这些异常迹即为原始日志中发生变化的迹,图2展示了该方法的流程。
图2 自编码器检测活动变化
检测迹的活动变化时涉及原始日志与实际日志的比较,通过实际日志中发生变化的迹溯源到原始日志中未变化的迹极为重要,自编码器网络在这一方面有着很好的表现。利用原始事件日志去训练自编码器网络,得到的模型能够以很小的误差再现出原始日志的迹。在测试实际日志时,执行变化操作的迹输入到模型中时不能被以很小的误差重现出来,对该迹执行反向变化操作,使其尽可能与原始迹保持一致,将处理后的迹重新输入到模型中,比较筛选重构误差最小的变化操作就可以确定原始迹发生变化的原因。方法步骤如算法1所示。
算法1:自编码器进行变化挖掘
输入:原始事件日志L his,实际事件日志L act,阈值的比例因子α
输出:发生变化的迹σi,执行的变化操作类型:删除(delete)、插入(insert)或移动(move)
针对发生变化的迹的阈值,文献[13]提出一个阈值公式(2),τ表示训练数据集的平均重构误差,α为比例因子,将其设置为1,n表示数据集的迹数量,ei是迹i的重构误差。
利用具体的事件日志描述本方法的检测流程,所选取的原始日志中的迹信息如表1所示,该日志包含四条迹和八个活动。将迹σ1中的活动B删除,对迹σ3的活动F移动到活动G后面,在迹σ4的活动B后面添加活动C,得到实际日志信息如表2所示。
表1 原始日志
表2 实际日志
将表1的日志输入自编码器网络训练,得到一个DAE模型,平均重构误差为2.23,可以作为测试集的阈值。整个流程如图3所示。在将迹转换为特征矩阵时,要对小于最长迹的迹进行零填充,填充方式选择文献[14]所提方法,在头部进行零填充,该日志最长迹的长度为6,需要分别对迹σ2、σ3和σ4填充一行零和两行零,以确保所有的输入矩阵大小一致。
图3 训练模型
在对实际日志测试时,以迹σ4为例,输入的特征矩阵和输出的特征矩阵如图4所示。重构误差大于阈值的迹为发生变化的迹,将输入的特征矩阵与输出的特征矩阵相减并取绝对值,得到误差矩阵,再对误差矩阵的每一行求和,得到一个误差向量,该向量表示迹中每个位置上的活动误差,取该向量中元素的平均值作为阈值,高于阈值表示该位置的活动与原始迹中对应的位置相比发生了变化,最后一个高于阈值的位置一般是发生了变化的位置,下面以一个例子解释该原理。通过表3的对比可以看出,在填充零后,实际迹的第四个位置即活动C发生了变化,导致该位置及其前面位置的活动与原始迹无法对齐,除填充零的位置外,发生变化的位置及其前面位置的误差会高于阈值,如图4中的误差向量(0.65,1.27,1.53,1.78,1.00,0.42),第一个元素表示表3中实际迹的零填充位置,它是小于阈值即平均值1.10的,第二、三、四元素高于阈值,表示对应位置的活动发生变化,最后一个高于阈值元素为第四个元素,表示第四个位置的活动是发生了变化的,与表3表达意思一致。之后对该迹进行三种变化操作以使其重构误差最小,先进行删除操作,将第四个位置的活动即活动C删除,再输入到模型中,得到的重构误差为1.39;接着进行添加操作,根据输出迹的第四个位置的活动B,在输入迹第四个位置即活动C后添加活动B,再输入模型中,得到重构误差为2.74;最后进行移动操作,将误差向量中高于阈值的第一个位置的活动移动到高于阈值的最后一个位置的活动后面,或将误差向量中高于阈值的最后一个位置的活动移动到高于阈值的第一个位置的活动前面,即将活动A移动到活动C后面或将活动C移动到活动A前面,分别输入到模型后取较小的重构误差,得到重构误差为2.34;对实际迹进行删除操作后得到的重构误差最小且小于阈值,所以实际日志变化的原因是对原始日志执行了变化操作Insert(σ4,C,B,E),这与预设的变化操作一致。
图4 检测变化的迹
表3 迹比较
以上讨论了如何检测迹中的Insert变化操作,Delete,Move变化操作也可以由相同方法检测出来,因为一旦执行了变化操作,就会使得该迹的分布特征与原始日志的分布特征有较大差异,检测出变化的迹后,也是根据误差向量和输出的特征矩对迹进行三种变化操作,筛选其中重构误差最小的变化操作就可以确定原始迹中发生的变化操作,所以这两种变化操作不再详细阐述。
本实验数据集选择PLG2工具生成的人工事件日志,该数据集的相关信息如表4所示。部分原始日志信息如表5所示,对该日志添加变化操作后得到的部分实际日志信息如表6所示。
表4 数据集信息
表5 人工事件部分原始日志
表6 人工事件部分实际日志
先利用原始日志训练模型,得到收敛后的平均训练误差为0.0207,将它作为判断测试集是否发生变化的阈值。在对实际日志进行测试时,总共有三条迹的重构误差大于阈值,可以判断它们执行了变化操作。
(1)将迹σ1编码之后输入到模型中,得到的重构误差为6.9702,大于阈值,进行三种变化操作后,对实际迹进行插入操作误差最小,值为0.0034,所以日志发生变化的原因是对原始迹执行操作Delete(σ1,D)。
(2)将迹σ2编码后输入到模型中,获得的重构误差为6.9127,大于阈值,对实际迹进行删除操作得到的重构误差最小,值为0.0030,得出日志发生变化的原因是对原始迹执行操作Insert(σ2,E,E,K)。
(3)将迹σ3编码后输入到模型中,获得的重构误差为3.9921,大于阈值,对实际迹进行移动操作得到的重构误差最小,值为0.0029,所以日志变化原因是对原始迹执行操作Move(σ3,B,C,D)或Move(σ3,C,A,B)。
利用ProM过程挖掘工具中的Inductive Miner算法对事件日志进行建模。原始事件日志ProM仿真图如图5所示,得到的Petri网模型如图6所示,其中黑色方块表示隐变迁,即在系统日志中不被记录的活动,仅仅表示一种流程路径的选择。
图5 人工事件原始日志ProM仿真图
图6 人工事件原始日志Petri模型
图7为人工事件实际日志的ProM仿真图,图8为对应的Petri网模型,相比原始日志的模型,实际日志进行变化操作时,对模型的部分结构添加了隐变迁,使基于活动行为轮廓关系的方法很难检测到这部分添加了隐变迁的结构。但应用自编码器进行检测时有较好的效果。
图7 人工事件实际日志ProM仿真图
图8 人工事件实际日志Petri网模型
比较两个日志的Petri模型和迹信息后,发生变化的迹可以被正确地检测出来,并且可以明确这些迹变化的原因。在对原始日志执行操作Delete(σ1,D)后,比较图6和图8的Petri模型,可以发现实际日志的模型在代表活动D的变迁处添加了一个隐变迁,使得部分迹中活动D可以被跳过,并且活动D与其他活动之间的行为轮廓关系没有发生改变,所以这样的操作比较难被发现,但在本方法中可以被很好的检测出来。
本方法的检测效果依赖于自编码器网络模型对原始日志的拟合程度,如果训练误差很小、模型能很好地拟合出日志中的大部分迹,则对实际日志的检测效果很好;如果训练误差很大、模型不能拟合出日志中的部分迹,则对实际日志测试时,虽然能检测出变化的迹,但是对实际迹执行变化操作时不能正确地还原回原始迹,会导致判断变化操作类型时出现错误。
当事件日志中迹的活动变化没有引起活动行为轮廓变化时,基于行为轮廓的方法就很难检测出迹发生变化的原因,在这种情况下,如何挖掘出系统中的迹变化是一个有意义的研究。本文在现有研究基础上,利用自编码器网络拟合和检测的能力,挖掘出系统日志中的Delete、Insert和Move变化操作,并利用Pytroch平台验证所提方法的检测能力和表现效果。