1. 引言
近年来,由于计算机技术的快速发展,故障诊断技术广泛的应用于各大企业,但还未取得显著性的进展。有效的故障诊断技术可以提升企业的竞争力,为企业带来可观的经济效益。因此,研究故障诊断技术是非常有必要的。
现在大多数故障诊断的研究都是基于图像的,基于文本的故障诊断研究还是相对较少,本文主要借鉴的是智能医疗诊断的方法。传统的智能故障诊断方法的思想是以疾病的数值表示与专家的推理相结合,包括贝叶斯公式、模糊数学等方法 [1] [2]。接着机器学习的方法被成功地应用到智能医疗诊断领域 [3] [4] [5]。2007年,何凯 [6] 将支持向量机方法运行在智能医疗诊断系统中的应用与研究中,并取得了良好的效果。然而,当类别很多时,单纯地使用支持向量机算法需要更多的训练样本。2015年,林予松等 [7] 基于VSM权重改进算法,以及徐奕枫等 [8] 在2017年做了TF-IDF权重改进算法研究,实现了智能导医系统。当匹配的数据条目比较靠后,该算法将十分耗时。最近,深度学习在文本领域取得很大的进步 [9]。2019年,陈实 [10] 将神经网络应用在中医诊断中,很大程度地提升了准确性和降低了时间成本。
在实际场景中,故障诊断通常具有较强的领域相关性,且故障诊断的文本数据收集较为困难,成本较高。本文使用的数据集主要来源于企业网站报修单上的实际用户故障描述这种类型的文本数据,以期在企业的实际应用中减少故障诊断的时间、人工成本以及提升企业竞争力。由于收集的故障数据集相对较小,且故障数据文本一般都是短文本,在100字以内。所以本文暂未选用深度学习算法。综合考虑数据集大小以及故障诊断的需求和现状,本文主要以余弦相似度算法为主要框架 [7] [8]。考虑到当匹配出错、数据靠后以及数据量较大时,单一使用余弦相似度算法往往无法满足客户的实时需求。本文提出首先采用SVM算法对用户输入的故障描述文本语句进行粗划分,筛选出具有相似特征的大类 [11] [12] [13]。在此基础上,依据粗分类结果,进一步使用余弦相似度算法进行精确匹配 [8] [14],从而选取出匹配相似度最高的故障产生原因和防治措施以反馈客户,帮助客户自助诊断常见的故障问题 [15] [16]。
本文的结构介绍如下,第2部分给出了文本数据预处理以及向量化工作。在第3部分介绍基于SVM的故障粗分类算法的具体实现。在第4部分介绍基于余弦相似度的故障精确匹配。在第5部分将介绍算法的对比实验。最后,在第6部分总结本文方法所取得的效果以及对未来的展望。
2. 文本数据预处理以及向量化
在进行SVM模型处理以及余弦相似度匹配之前,需要对数据集进行预处理工作。数据集由SVM模型训练需要的故障文本数据集以及余弦相似度匹配算法所需要的故障通病现象数据集两部分数据组成(数据集将在第5部分的故障数据介绍部分进行详细介绍)。
2.1. 数据预处理
在进行去停用词和分词两个部分的数据预处理工作时,本文考虑到一般常用百度停用词列表、哈工大停用词表和四川大学机器智能实验室停用词库。因此,使用整理去重后的三者合集作为本文使用的停用词表去停用词。由于Jieba分词准确,速度快。本文使用Jieba分词工具对去停用词后的故障样本集以及故障通病现象数据集进行分词处理,分别用列表格式存储。
2.2. 数据向量化
分别对故障样本集以及故障通病现象数据集的列表格式数据进行向量化处理,本文考虑到故障文本数据集以及故障通病现象数据集的每个文本之间相差较大,因此使用TF-IDF算法 [17] [18] [19] 进行文本向量化处理(算法公式如公式(1)。
(1)
式中
是单词
出现在故障文本
中的频数,
是文本
中出现的所有单词的频数之和,
是含有
的文本数,df是故障文本数据集的全文本数。这样每个故障文本
就可以用向量矩阵的第j列向量表示。
通过Genism模型中的Dictionary统计式中
是单词
出现在故障文本
中的频数以及
是含有
的文本数。然后利用Genism中的TF-IDF模型根据Dictionary统计的
和
,给每个词赋予相应的权重。因为每个句子中所包含的词的个数是不一样,所以在这里用到了Genism模型中的Sparse Matrix Similarity将句子的词向量表示成稀疏矩阵的形式,记作X(在矩阵中,
表示在故障文本dj中权值,
表示文本
的向量化形式)。
(2)
3. 基于SVM的故障粗分类
支持向量机(Support Vector Machine, SVM)是Vapnik在统计学理论基础上提出的一种机器学习算法,在解决小样本、非线性和高维空间的实际问题中有较大优势。它通过构造最优的超平面,使得各样本到超平面的误差总和最小。对于线性可分的样本,它通过间隔最大化函数确定最优超平面。而对于线性不可分的样本,SVM使用核函数将低维空间映射到高维,使样本线性可分。最优超平面由少数的支持向量决定,故SVM在小样本中也能取得不错的效果。
故障诊断的文本数据集属于线性不可分的问题,本文选择SVM算法对故障文本数据集进行分类 [20] [21] [22]。
下面给出算法的具体实现。
本文使用Python语言Sklearn包中的svm.SVC()函数构建故障文本分类器。由于故障数据集一共有八大类故障,因此将svm.SVC()函数中的Decision_Function_Shap参数设置为“OVR”(一对多分类法,One-Versus-Rest)。
故障分类训练输入:将2.2模块得到的故障文本数据集的稀疏矩阵形式,以及用0,1,2,...,7分别表示八大类故障类别组成训练集T(这里只以第0类分类为例,其他类分类以此类推,稀疏矩阵中的每一个列向量为
,将第0类的y值设为1,其他类设置为−1)。
,
选择一个适合的惩罚函数C > 0,构造并求解故障分类的最优化问题:
(3)
使得:
(4)
对其求解后,我们可以得到最优方案
。
计算
,选择
的一个小于C的正分量,并根据此计算:
(5)
之后构建一个超平面
,来获取决策函数:
(6)
最终通过实验发现,当取Kernel = “Linear”,C = 1.5,Decision_Function_Shape = “OVR”时,故障文本分类效果最好(其中Linear表示线性核,OVR代表分类类别为一个类别与其他类别的划分)。SVM分类效果,本文在实验部分给出。
4. 基于余弦相似度的故障精确匹配
余弦相似度算法适合于短文本,而不适合长文本 [20]。因为故障诊断文本数据是短文本数据,故此本文使用余弦相似度进行细化分,做文本的相似度匹配 [21] [22]。余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。如用户输入故障问题文本数据与故障的通病现象文本数据构成的向量a,b。当余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,即故障文本a,b相似,这就叫“余弦相似性”。
在基于余弦相似度的故障相似度匹配算法中,首先利用SVM算法八大类故障分类结果,确定是哪一大类的故障通病现象数据作为余弦相似度匹配数据集。然后执行前面提到的数据预处理以及数据向量化操作将确定大类的故障通病数据集转化为稀疏矩阵格式。再将在SVM算法中已经向量化过的用户输入的故障描述文本向量a与故障通病现象数据集中的稀疏矩阵格式中的每一个文本向量b用余弦相似度算法计算其相似度(算法公式如公式7)。最后,选取相似度最大的故障通病现象文本的产生原因以及防治措施反馈给用户。
(7)
5. 实验结果与分析
5.1. 故障诊断数据介绍
本文实验的数据主要来源于某家幕墙公司提供的近三年的1000份用户报修单中的有效数据。报修单上详细记录了用户对故障问题的描述,以及维修人员所提供的报修类型、产生原因和故障防治措施所组成的数据。这些数据分为两个部分:第一个部分是本文分类所需要的粗划分数据,由用户对故障问题的描述评论以及所属故障大类两个字段组成,如表1所示(表1中类别用数字表示)。

Table 1. The first part of the data samples
表1. 第一部分数据样例
所有的故障包括:“预埋件故障”,“龙骨故障”,“金属幕墙故障”,“玻璃幕墙故障”,“玻璃幕墙窗故障”,“幕墙窗、门、开启扇故障”,“保温、防火、避雷故障”,“打胶(耐候密封胶)故障”等八大类故障。这里选取了其中一个大类中词频最高的前50词别表示如图1所示。

Figure 1. Word cloud for failure data set
图1. 故障数据集的词云
第二部分数据是余弦相似度匹配算法所需的细化分数据集。由于每一大类故障里,根据损坏的方式,严重程度以及部位的不同,对大类里的每一种故障情况其防治措施也截然不同。因此,第二部分数据有以下四个字段,分别为:“故障大类类别”,“通常现象”,“原因”,“防治措施”。这一部分数据是为用户对故障问题的描述评论做相似度匹配,数据样例如表2所示。

Table 2. The second part of the data samples
表2. 第二部分数据样例
5.2. 实验结果及分析
实验选择随机森林、朴素贝叶斯、逻辑回归和SVM四种算法进行故障分类,并采用准确率、召回率和F1三个指标作为模型性能的评估指标。四种算法在三个指标上的分类结果如表3所示。

Table 3. Classification results of four models on three indicators
表3. 四种模型在三个指标上的分类结果
从表3可以看出,SVM模型在所有评价指标上均获得了最好的分类效果,逻辑回归和NB模型次之,随机森林模型最差。实验证明了SVM能够较好地完成基于小数据集线性不可分的多分类任务。因此,本文选择SVM算法进行幕墙的故障诊断分类。
最后将传统的只使用相似度匹配故障诊断算法与先用SVM进行分类然后进行相似度匹配的故障诊断算法进行时间和准确度上的对比,对比结果如表4所示。由表4可以看出,使用SVM和余弦相似度的组合算法比只使用余弦相似度算法的速度提升了将近两倍,而且准确度也提高了三个百分点。

Table 4. Comparison of the running time and accuracy of the two methods
表4. 两种方法的运行时间与准确度对比
6. 结语
本文针对传统故障诊断方法存在的问题,结合智能医疗诊断方法的基础上,设计实现了基于SVM分类和余弦相似度的故障文本相似度匹配的智能故障诊断方式。通过实验证明,该方法取得了良好的效果,并且已经在企业网站上应用,解决了传统的故障诊断方式所存在的问题,为企业节省大量的人力、财力,提升了企业的竞争力。但是,本论文尚有不足之处。以往未有基于文本的故障诊断这方面的研究且故障数据量以及数据种类有限,若以后能有更多的数据集,可以使故障诊断方法更具有说服力。另一方面是由于故障数据量的匮乏,也没有使用深度学习算法进行对比实验。随着以后数据集数量的增加,可以进一步在深度算法上研究。
基金项目
天津市智能制造专项资金项目(201810602,201907206,201907210,20191009);天津市互联网先进制造专项资金项目18ZXRHGX00110。