朱江,陈涛,李鹤喜,何振威,曾昭德,浦汉军
(1.五邑大学 智能制造学部,广东 江门 529020;2.深圳中集智能科技有限公司,广东 深圳 518057)
压缩机工单记录文档是由压缩机维护人员在维修压缩机后录入到电脑系统中的文本数据,该数据记录了发生故障的设备名称、故障描述、客户需求、对应的故障原因以及相关解决方案等信息. 利用自然语言处理技术从这些文档中自动识别出设备名称和故障描述信息,当同类设备发生相似的故障时,就可以快速诊断故障原因和给出解决方案,提高压缩机维护人员排除故障的效率. 目前,压缩机故障分析领域多根据压缩机运行时的监控数据或震动数据来预测可能出现的故障[1-2],尚缺少一种基于自然语言处理技术的从压缩机工单记录文档中自动识别故障信息的方法. 在其他领域,利用自然语言处理技术对中文文本的信息进行自动识别的相关研究包括:Peng和Dredze[3]研究中文社交媒体上的命名实体识别,发布了包含1 890条微博4类实体标注的中文微博命名实体识别语料,并使用多种预训练的词向量,结合双向LSTM(Long Short-Term Memory) 模型在微博数据集上对人名、地点、组织名和国家名进行了识别. 王月等[4]发布了标注有报警人姓名、报警时间、相关地点和诈骗手段等7类实体的电信诈骗项相关接警处理文本构成的中文命名实体数据集,并使用带有注意力和条件随机场(Conditional Random Field,CRF)的双向 LSTM 微调 BERT(Bidirectional Encoder Representations From Transformers)预训练模型,对案发时间、受害人名、诈骗金额以及处理方式这4类实体进行自动识别,取得了较好的效果. 有鉴于此,本文把基于 BERT预训练模型的微调方法用于压缩机工单文档识别中,以自动识别其中的设备实体和故障描述信息.
BERT预训练模型是采用 Transformer[5]作为预训练模型特征提取的基本单元,模型训练时包含了两种训练任务:一种是从输入句子中随机遮盖一部分词语,然后训练模型根据剩余的词来猜测被遮住的词;另一种是输入句子对后,将训练数据中50%的真实上下句作为正例,剩余的50%句子对的后半句用随机抽取的句子替换作为负例,构造二元分类器进行训练. 预训练好的模型学习并存储了大量人类语言的句法和语义信息.
图1 面向压缩机故障文本的BERT-fine-tune模型框架图
本文在BERT预训练模型上加入全连接层对BERT预训练模型进行微调,构建用于压缩机故障文本的命名实体识别模型,简称 BERT-fine-tune模型①代码网址:https://github.com/xuanzebi/BERT-CH-NER. 其框架图如图 1所示. 其中,模型的输入是向量化的压缩机故障标注文本,位于框架图的下方,由词向量、句子分割向量和字符位置向量3种向量组成. 词向量是对标注好的压缩机故障文本中的词进行向量化后的结果,句子分割向量是输入文本分句后的标志符号,字符位置向量是一个词在句子中的序号,句子中的第一个词序号为0,第二个词序号为 1,以此类推. 模型的主体是采用12层的Transformer在大规模中文语料上训练得到的BERT中文预训练模型②代码网址:https://github.com/google-research/bert. 其输出的向量维度大小为768,多头自注意力层的参数为12,模型总参数大小为110 Mb. 全连接层含有768个隐含单元,输出维度为6的向量,向量的每一维表示压缩机故障标注文本中6类标签的概率. 最后,通过Softmax函数,选择概率最大的标签作为模型的预测结果.
我们从压缩机工单数据中提取出了设备的故障描述、原因分析和解决方案等文本内容,利用标注工具对文本中的设备和故障描述进行人工标注,从而构建了设备实体数据集和故障描述数据集. 在数据集中,文本内容被打上不同的标签,“B-”代表实体的开始,“I-”代表实体的中间和结尾部分,“O”标签代表与实体无关的字符. 在将设备实体数据和故障描述数据输入到模型的过程中,用标签“[CLS]”表示一句话的开始,标签“[SEP]”表示结尾. 由于系统要求每句话的输入长度是固定的,用“[PAD]”标签自动填充输入语句未达到系统设定的最大长度的部分,对于超出最大长度的句子,系统自动去除超出的部分. 这样,从设备实体数据集中输入的标签为“B-设备”、“I-设备”、“O”、“[CLS]”、“[SEP]”和“[PAD]”6类标签;从故障描述数据集中输入的标签为“B-故障”、“I-故障”、“O”、“[CLS]”、“[SEP]”和“[PAD]”6类标签. 最后,分别将设备实体数据集和故障描述数据集输入到 BERT-fine-tune模型中,构建压缩机设备名称自动识别模型和故障描述自动识别模型.
本文按照8:2的比例对数据集进行训练集和测试集的划分,相关统计信息如表1所示.
表1 训练集与测试集的统计信息
本次实验使用精确率、召回率和F1值3种常用指标来评价模型的性能. 计算公式如下:
其中,TP表示正类预测成正类的个数,FP表示正类预测成负类的个数,FN表示负类预测成正类的个数.P表示精确率,即识别出的正确实体个数占识别出的总实体个数的比例.R表示召回率,即识别出的正确实体个数占原始语料中实体个数的比例. 两种指标分别从识别精准度和识别效率两个方面进行评价,本文使用F1值来进行模型识别效果的比对,F1值是综合考虑了精确率P和召回率R的评价指标.F1值越高,即模型的识别效果越好.
BiLSTM+CRF是命名实体识别领域普遍使用的基线方法,该方法通过双向LSTM网络对文本进行编码和解码,在输出层中引入CRF来限制输出标签概率,具有很好的性能和鲁棒性. Lattice LSTM是在 BiLSTM+CRF模型基础上的改进模型,其在很多中文数据集上的命名实体识别效果好于BiLSTM+CRF.
实验使用Python 3.6,Tensorflow 1.13. 微调BERT模型时使用的实验参数为:序列最大长度设置为128,学习率设置为5e-5,批训练大小为16. BiLSTM+CRF与Lattice LSTM模型训练迭代次数为40次,BERT-fine-tune模型训练迭代次数为5次. 在colab实验平台使用GPU模式对模型进行训练.
设备实体数据集上的实验结果如表 2所示. 从表中可以看出,两个对比方法 BiLSTM-CRF和Lattice LSTM的F1值分别达到了85.34%和88.38%,而本文提出的BERT-fune-tune方法的F1值达到了95.05%,比BiLSTM+CRF和Lattice LSTM提高了9.71%和6.67%. 由此可见,该方法比业界普通使用的基线方法能更有效地识别出工单记录文档中的设备实体信息.
表2 设备实体数据集上的实验结果 %
故障描述数据集上的实验结果如表3所示. 从表中可以看出,BERT-fine-tune的表现仍然超过了其他模型,其F1值达到了74.44%,而BiLSTM+CRF和Lattice LSTM的F1值均不到58%. BERT-finetune比BiLSTM+CRF和Lattice LSTM的1F值分别提升了16.85%和16.75%. 实验结果验证了该方法在故障描述识别上也是同样有效的.
表3 故障描述数据集上的实验结果 %
表4分别展示了3种方法对两个设备实体和一段故障描述的识别结果,从表中可以看出,3种方法都能正确识别“O型圈”这样的实体,但当实体中包含有双引号(特殊字符)的时候,BiLSTM+CRF和Lattice LSTM都没有完全正确识别,只有BERT-fine-tune模型正确识别出了该实体. 对于“一二级活塞组装螺钉”这样的设备实体,BiLSTM+CRF模型将其识别成了两个较短的实体,即“一二级活塞”和“螺钉”,而BERT-fine-tune和Lattice LSTM可以正确的识别. 对于比较复杂的故障描述,如“水泵电机过载额定电流1.8 A,实际电流2.3 A”,BERT-fine-tune模型也能正确识别,而BiLSTM+CRF和Lattice LSTM均没有正确识别该故障描述.
表4 3种方法的识别结果展示
本文利用BERT微调模型对压缩机工单记录文档中的故障信息进行分析,自动识别出文档中设备实体和故障描述. 通过对设备实体数据集和故障描述数据集进行识别,F1值分别达到了95.05%和74.44%,比两种基线方法具有更好的识别效果,验证了 BERT-fine-tune方法的有效性. 本文下一步的研究方向包括进一步探索针对结构复杂的长文本故障描述的自动识别方法,探索利用领域知识提升命名实体识别方法的效果,以及将自动识别的故障信息结合该设备发生故障前后的运行数据,以帮助构建更加有效的压缩机故障预测模型等.