马晓宁,赵东阁
(中国民航大学 计算机科学与技术学院,天津 300300)
近年来,随着各行各业的信息化,单纯的地名、时间、机构名等通用性的命名实体识别(named entity recognition,NER)已经不能满足不同领域的信息应用,比如民航信息领域需要识别航空公司、证件、地名、机型等等。随着出行量的增加以及“智慧民航”等口号的提出,民航信息化程度越来越高,需要建立高效的NER方法以满足更下游的任务,比如构建智能问答[1]、知识图谱[2]、语义搜索[3]等。
早期,大部分NER方法是基于规则的,需要人工手写足够多的规则,花费大量的人力物力。其后基于概率或统计学的方法快速发展,比如支持向量机(support vector machine,SVM)[4]、条件随机场(conditional random field,CRF)[5]等,而不同领域的特征也不同,所以统计学方法亦需要繁杂的特征工程。
更加复杂的网络得益于硬件的发展,有了计算环境,NER任务进入深度学习时代,其中主要包括卷积神经网络(convolutional neural networks,CNN)[6]与循环神经网络(recurrent neural network,RNN)及其变种如长短期记忆网络(long short-term memory,LSTM)[7]、循环门单元(gate recurrent unit,GRU)等[8]。基于以上深度网络去做实体预测,许多学者在生物医学[9]、网络推文[10]等领域分别提出了合适的NER模型,近几年来注意力机制域蓬勃发展,也有学者将其应用于实体预测,比如Y Zhu等[11]融合RNN和注意力机制提出了一个字符级别的卷积注意网络,以捕捉来自相邻字符和句子上下文的信息。
随着计算机算力的进一步提升,一些预训练语言模型(pre-trained models,PTMs)涌现出来,它们通过预先在大规模语料库上训练进而应用于一些NLP的下游任务,实验显示均得到了很好的效果,比如自回归语言模型[12](generative pre-training,GPT)的应用和基于注意力的自编码语言模型[13](bidirectional encoder representation from transformers,BERT),而后也在NER中得到应用。
综上,本文使用了预训练语言模型BERT进行语义编码,微调后结合解码模块提出两个基础模型,在此基础上,采用集成学习(ensemble learning)的思想,提出了一种混合了预训练与多模型加权融合的NER方法,为在海量民航信息中抽取有效实体提供了切实可行的解决方案。
民航信息领域目前未有公开的中文语料集,故本文使用Python采集161 580出票网站的民航问答部分,首先使用Requests模块获取网站HTML数据部分,然后使用Beautifulsoup库得到相应的文本数据。
此时得到的文本数据还比较粗糙,使用多种方式对语料进行预处理清洗,包括:①语料中存在大量停用词,所以使用百度开源的停用词库进行过滤,以达到提升文本质量,降低文本维度的作用;②针对采集到的语料信息,删除包含链接、图片、表格等无用内容保存原有的语句顺序;③对数据进行抽样发现,网站回复系统可能提供了一些自动性回复内容,比如“您好!”、“祝您生活愉快”、“关注微信公众号【民航微出行】”等,所以对语料中包含大量重复无用信息进行清洗。
针对经过预处理的语料进行浏览并结合民航信息实际情况,本文一共定义7种实体,包括航司、文件、地点、时间、航班号、行李物品、机型等。
在标注方面,采取BIO(B-begin,I-inside,O-outside)标注法,将每个元素标注为“B-X”、“I-X”或者“O”。其中,B和I分别表示实体的开头和中间,X表示这个实体所属的类别,O表示不属于任何类型,标注示例见表1。
表1 民航信息语料标注示例
将预处理清洗过的数据使用BIO-sequence-label进行标注,得到人工标注的7类实体数量以及示例见表2。
表2 民航信息语料标注统计
对标注好的语料集进行抽样分析,不难发现:①存在一些长实体,比如“中国东方航空公司”、“2021年12月30日”等;②存在大量需要上下文信息才能得到结果的实体,比如“南航持学生证能打折”、“南航是一所好学校”等。所以本文提出第一个基础模型使用双向的长短期记忆网络进行特征提取,以达到同时捕捉输入语料序列上下文特征信息的目的。
本文采取预训练语言模型BERT做语义编码,微调后,与LSTM以及CRF进行组合得到两个基础模型,而后进行加权融合,最后经过后处理矫正进行实体抽取的整个预测过程如图1所示。
图1 实体预测总体流程
2.1.1 BERT+BiLSTM+CRF
引入BERT模型做输出深层特征向量表示,也可以称之为编码层,输出的特征向量表示融合了BERT预训练中包含的语言学知识和收集到的民航语料知识,使用一个双向的LSTM网络提取上下文特征,接下来通过CRF层可以捕捉到不同标签之间的条件转移概率,构成BERT+BiLSTM+CRF组合模型,下文简称BLC模型,具体模型结构如图2所示。
图2 BERT+BiLSTM+CRF模型
2.1.2 BERT+CRF
起源于上下文表示学习的BERT模型本身就能够在一定程度上解决上下文依赖问题,所以在某些情况下,使用BERT做语义编码后直接通过一层概率统计模型得到实体标签,亦能达到很好的效果,国内外的不同的学者也印证了这一点[14,15]。所以本文选取的第二个基础模型即为BERT做语义编码后直接通过一层CRF得到标签结果,下文简称BC模型,模型结构如图3所示。
图3 BERT+CRF模型
引入预训练语言模型能够很好的学习到先验知识,但是由于BERT模型参数量巨大,以及标注人力成本受限,本文数据集在规模方面比起通用性的大型语料库远远不及,易出现过拟合、泛化能力差的情况,同时有学者[16]在研究中也提到了这个问题。所以在样本规模一定的情况下,除采取调整学习率、模型微调的方法之外,本文引入集成学习方法,通过构建并结合多个学习器来完成学习任务。近年来一些如天池赛、Kaggle、DataCastle等数据竞赛也频繁出现使用此种方法进而得到很好效果的现象。具体选取了一种多模型加权融合的方法,提高泛化能力,在两个基础模型之上,综合预测结果如下式所示
H(x)=∑Ti=1wihi
(1)
其中,wi是个体模型hi的相应权重,通常我们要求wi≥0,∑Ti=1wi=1。
从实际角度来看,本文的预测模型输入测试样本后其基础模型输出矩阵M,维度为输入句子长度·标签数量。此处假设BLC模型输出矩阵M1,BC模型输出矩阵为M2,在此基础上对两个模型的输出矩阵进行加权融合,所以最后的结果为
M=aM1+bM2
(2)
其中,a和b是实数,意为分别表示赋予BLC与BC两个基础模型的加权权重,对于单个模型在测试集上表现更好的基础模型赋予更高的加权权重,比如对于本文选取的两个基础模型来讲,平均情况下BLC是优于BC模型的,所以权重a会更大一些。
2018年谷歌公司提出BERT模型[13],很快在NLP领域的11个方向大幅度提高了精度,作为一个编码模块,BERT本质上是通过在海量语料上运行的一种预训练语言模型,在特定的NLP任务当中,可以使用BERT的特征表示作为该任务的词(字)嵌入特征,以替代Word2Vec。
BERT有两大核心的任务需要完成:掩码语言模型(masked language model,MLM)和下一句预测模型(next sentence prediction)。其中前者是指BERT在预训练阶段随机屏蔽掉 15%的标记,根据上下文信息计算得出这些掩盖的标记,并且以一定概率保留词的语义信息,使得信息不至于百分百的被掩盖,从而有效解决了一些专用领域实体边界不明显以及语义复杂的问题。下一句预测模型指的是为每个训练前的样例选择句子A和句子B,而后50%的情况使得B是真的在A后面的下一个句子,50%情况是来自语料库的随机句子,这样一来对于句子级别的任务是非常有益的。
从结构上讲,BERT的核心结构是基于2017年Google[17]提出的Transformer自注意力机制。它抛弃了传统RNN或者说CNN结构,将输入序列中任意位置的距离缩小为一个常量,从计算硬件的角度来讲,它不再是类似RNN这种深度网络的顺序结构,因此具有更好的并行性,符合现有的GPU框架,计算速度会更加的快。具体的,注意力机制首先会计算输入序列中每个词和其它词语的相似度,下一步会对得到的相似度做一个归一化处理,最后得到注意力权重,再把得到的注意力权重进行加权组合,这样会让输入序列中的每个字向量都含有当前句子的其它字向量的信息,计算公式如下
Attention(Q,K,V)=softmax(QKTdk)V
(3)
其中,Q(Query)、K(Key)、V(Value) 这3个矩阵来自同一个输入,首先计算的是Q与K之间的点乘,然后为了防止内积过大,在结果上除以一个尺度标度dk, 其中,dk表示Query和Key的向量维度。最后再利用Softmax操作将其归一化,然后乘矩阵V得到权重求和结果。
为了确保模型关注到更多不同的信息,BERT采用了一种多头自注意力机制,将输入序列中词的多种维度表示为多个头(head),每个头可以从不同的角度进行子空间表征学习,公式如下所示
headi=Attention(QWQi,KWKi,VWVi)
(4)
MutiHead(Q,K,V)=Concati(headi)WO
(5)
其中,WQi、WKi、WVi是3个线性变换的矩阵,随训练不断调整相关参数,i代表head的编号。所以BERT通过完成掩码和下一句预测任务同时使用多头注意力机制,这样不但能够学习到上下文信息,而且能够提取到足够的信息,本文使用BERT进行语义编码,得到字向量,具体结构如图4所示。
图4 BERT模型结构
CLS(special classification embedding)是用于分类的向量,SEP是一个句子的结尾,整个向量转换过程可以写为下式
X=BERT(E,θbert)
(6)
其中,E为模型输入序列的向量矩阵集合,X为BERT输出的字向量矩阵集合,θbert为BERT模型相关参数。
实验采集的文本中常出现长距离依赖关系,仅使用词汇级别的信息识别实体存在一定困难,如“适航关系到航空器的安全性,是飞机服役的必要流程”中,“适航”是一种飞机服役过程中检验安全性的活动,但“适航”单独出现时,存在特征“航”,易被判断为航司,因此,除采用BERT做字向量表示意外,还需要捕捉文本中存在的上下文信息。而作为RNN变形的LSTM,能够捕捉句子级别的信息,它主要包含4个类逻辑门,单个LSTM结构如图5所示。
图5 LSTM结构
其计算过程如下
ft=σ(Wf·[ht-1,xt]+bf)it=σ(Wi·[ht-1,xt]+bi)t=tanh(Wc·[ht-1,xt]+bc)Ct=Ct-1·ft+it·Ctot=σ(Wo·[ht-1,xt]+bo)ht=ot·tanh(Ct)
(7)
其中,it代表输入门,ft代表遗忘门,Ct代表细胞状态,ot代表输出门,使用这3个类逻辑门来保护和控制细胞状态。Wf、Wi、Wc、Wo为不同状态的权重矩阵,bf、bi、bc、bo是不同门的偏置,xt和ht分别为输入和输出,Ct是计算过程中的临时细胞状态,σ为sigmiod激活函数。
由于单向的LSTM网络中信息只能从前往后传,当前节点并不能够访问上文,但在实体识别的过程中,有时候我们需要依赖上文的内容,所以本文采取了一种双向传播的LSTM网络。
考虑到LSTM的输出存在独立性,各个标签之间没有互相约束,会带来的一个缺点就是出现非法标签,比如标签 {B,I,I,O,I,I} 中,标签I理论上只能在标签B之后出现,一种有效的方案就是在BiLSTM层后面接入一个概率统计模型。所以本文中CRF模型起到了两个作用:①在提出的BLC模型中,CRF建模提取句子级别的损失,以弥补LSTM输出标签之间的弱约束性;②在本文提出的BC模型中,作为BERT模型的解码层。
CRF是一种给定输入的随机变量x,求解条件概率P(y|x) 的无向图模型,它可以将序列标注问题看成是一个kn分类问题,用于序列标注时,可以特例化成 Linear-CRF来计算每个时刻的词语类别概率信息,给定句子词语输入序列,为了计算条件概率P我们使用CRF假设,该分布为指数分布,输入之间的关联仅仅发生在了相邻位置,且关联具有指数相加性,由此可得概率结果为
p(y|x)=1Z(x)epx{∑Tt=1w·φ(yt-1,yt,xt)}
(8)
其中,x为输入序列,y为预测标签,w为权重,Z(x) 为归一化函数有
Z(x)=∑y∏Tt=1exp{∑Kk=1wkfk(yt-1,yt,xt)}
(9)
其中,fk为特征函数,那么对于本文的NER任务,给定语料句子x作为输入序列,y为标签变量序列,那么随机变量y的条件概率分布满足马尔科夫性,即构成条件随机场。
为了验证本文提出模型对民航信息语料实体抽取的有效性,本文将召回率(Recall,R)、正确率(Precision,P)以及F1值作为评价指标,其表达公式表达如下
p=识别正确的实体数识别出的所有实体数×100%
(10)
R=识别正确的实体数样本实体总数×100%
(11)
F1=2×P×RP+R×100%
(12)
其中,F1值是准确率P以及召回率R的加权平均结果,使用其衡量模型计算结果能够有效避免准确率与召回率出现矛盾的情况。
在pytorch 1.5的环境下,实验选用了Google开源的中文Base版本的BERT模型,该网络共有12个Block层,12个多头注意力,一共会输出768维的特征向量。由于BERT经过预训练后对下游任务微调时少量学习批次即可收敛到最优,所以将BERT层设置为很小的学习率,另外根据经验,学习率的设置采取动态调整的方法,具体的,从5e-5到5e-6动态调整,每6个批次调整一次,相对BERT来讲,CRF层收敛速度较慢,所以设置较高的学习率,本文中统一设置为BERT层的100倍。为了预防过拟合,本文采取dropout策略。模型融合时选择权重(0.6,0.4),更详细的最佳模型参数设置见表3。
表3 模型最优参数
由于本文数据量较小,故按照小规模数据集划分法,60%数据作为训练集,20%数据作为验证集,20%数据作为测试集。一共设置4个模型。
(1)传统意义上的基线模型BiLSTM+CRF,它是NER领域的经典模型,采取了静态词向量进行训练。
(2)在基线模型上引入的BERT预训练生成词向量输入得到BLC模型。
(3)在BERT预训练模型后加一层概率统计模型解码得到BC模型。
(4)BLC与BC模型进行加权融合后得到的集成模型。
采取准确率、召回率、以及F1值进行评估,实验结果见表4。
表4 各模型识别结果
分析表4结果不难发现,从整体上来讲引入BERT预训练语言模型后,BLC与BC模型均有小幅度提升,比如在传统的BiLSTM+CRF模型之前引入BERT对输入文本进行语义编码,生成字向量,相比仅仅使用BiLSTM+CRF的F1值提升了3.45%,另外仅仅使用BERT作为编码层,后加概率模型CRF层进行解码输出,F1值也相对BiLSTM+CRF提高了1.77%。从召回率角度来看,由于预训练模型在大量语料上进行预先训练,能够学到较多的先验知识,所以相比没有预训练层的模型召回率普遍会高很多。
最后BLC+BC模型进行加权融合后的集成模型,相较于BiLSTM+CRF模型F1值提升了7.1%,相对于本文使用的BC模型提升了3.2%,相对于BLC模型提升了1.43%。
对上述模型不同实体的识别结果进行分析,见表5。
表5 不同实体的F1值结果/%
分析表5不难得出,引入BERT的模型在文件、地点、行李物品等方面都得到了比较好的识别效果,分析原因可能两点,其一是BERT在大规模语料集上预先训练,包含了足够的先验知识;其二是BERT被设计成一个双向的深度模型,加之它的掩码和预测下一句任务使之充分提取了上下文句意,所以在通用性的词语和大部分专用词语上能够得到比较好的效果。但也恰恰是这些原因,对于少部分专用领域词语识别效果存在一定误差。对效果不好的实体识别结果,本文对输入句子和识别结果进行了抽样分析,发现主要存在以下问题:①特殊识别错误的实体,比如句子“从南航南门出发,经过校门口乘坐S1号线能够到到机场”中南航是表示学校,在模型中即可能识别成航司。②存在嵌套实体,比如“厦航纪念品737-8型100架纪念版飞机模型”整个句子是一个长实体,同时内含多个实体。③特殊情况识别错误,比如航班号的书写是有严格规定的,国内航班规则为航司两字加4位数字,国际航班为航司代码加3位数字。④预测结果存在明显错误的实体,比如实体中包含标点符号。
所以针对发现的这些问题做出一些处理校正,主要是通过是否接受结果以及根据词语边界、特性、专用领域特点,使用正则对部分识别错误或者识别不准确的实体加以纠正,具体得做出以下几条纠正策略。
(2)针对嵌套实体,丢弃被嵌套的实体,仅仅保存最长的实体。
(4)针对明显错误的实体直接丢弃。
在测试集上使用上述处理方法进行校正,最终得到预测结果与未修正对比见表6。
表6 处理校正后的预测结果对比/%
结果对比发现,经过对不同错误或者嵌套实体的处理,各个模型识别结果均有小幅度提升,其中本文提出的BLC与BC融合模型的实体预测F1值较未处理矫正之前提升了0.64%。
本文通过引入自编码语言模型BERT生成文本字向量,与传统的神经网络、概率模型组合生成两个基础学习器,将两个学习器采用一种集成学习方法加权融合后预测实体,汲取了基础学习器的优点,最后达到了较高的识别效果,一定程度上改善了BERT在小样本下存在的过拟合问题。最后,针对民航信息领域的文本特征,本文结尾提出一系列辅助修正方法使结果达到更优。在下一步的工作中,将结合扩展不同实体的规则,扩充不同来源的数据集,增加标注文本的数量,以便更好开展下一步知识图谱构建的任务。