万 莹,孙连英,赵 平,王金锋,涂 帅
(1.北京联合大学 智慧城市学院,北京 100101;2.北京联合大学 城市轨道交通与物流学院,北京 100101)
近年来,如何快速有效地抽取海量数据中的有用信息,已成为一种关键的竞争力。关系分类即识别文本中两个实体之间的语义关系[1],其在多种自然语言处理任务(例如,信息抽取、问答系统、自动知识库构建等)中发挥着至关重要的作用,是自然语言处理重要的主题之一。
传统的关系分类方法常用的有两种, 基于规则的方法和基于特征向量的方法[2],这两种方法都需要手动设计特征,复杂度高、耗时长,并且难以捕获文本语义特征,泛化能力差。近年来,深度学习已经应用于关系分类,尤其卷积神经网络(convolutional neural networks, CNN)、循环神经网络(recurrent neural network,RNN)、长短期记忆网络(long short-term memory,LSTM)被广泛应用于关系分类中并取得了出色表现。最早Liu等[3]首次使用CNN,并结合词汇特征用于关系分类任务,在ACE2005数据集上取得的性能比当时最先进的基于核的方法提高了9%。之后,CNN、RNN、注意力机制等被广泛用于关系分类任务。Zeng D等[4]通过将词嵌入向量(word embedding,WE)和位置嵌入向量(position embedding,PE)输入CNN来提取词汇级别和句子级别特征,将这两个级别特征连接到单个向量,并将其送入softmax层进行分类预测。Santos等[5]提出一种卷积神经网络(CR-CNN)用于关系分类任务,该模型不再使用交叉熵损失函数,而是提出了一种成对排名损失函数(pairwise ranking loss function),该损失函数成功减少了其他类(other类)的影响。Zhang等[6]使用了一个简单的基于RNN的模型,在KBP37数据集上取得了比CNN模型更好的性能。Socher等[7]针对单字向量空间模型无法捕获长短语含义,提出一个用于语义组合递归神经网络模型(MV-RNN)用于关系分类模型,该模型可以学习任意长度的短语和句子的成分向量表示。宋睿等[8]综合卷积网络抽取局部特征的优势和循环网络在时序依赖中的建模能力,提出了卷积循环神经网络(CRNN)用于关系分类任务。虽然RNN适用于解决长距离依赖问题,但是其存在梯度消失问题,为了解决这些问题,Zhou等[9]提出了基于注意力的双向长短期记忆网络(Att-BLSTM)用于关系分类任务。Wang等[1]提出了一种依赖多级注意力机制的CNN模型用于关系分类,并提出一种新的损失函数(pair-wise margin-based objective function)。该模型在SemEval-2010任务8数据集上测试,F1值高达88%。Zhang等[10]提出了将CNN与LSTM相结合的BiLSTM-CNN模型,用于关系分类任务。Guo等[11]提出一种结合RNN和CNN的网络模型(Att-RCNN)用于关系分类任务,该模型利用RNN提取单词的上下文表示,利用CNN获取句子特征,同时采用单词级注意力机制和句子级注意机制来增强关键词特征,并在SemEval-2010任务8、SemEval-2018任务8和KBP-37数据集上验证了模型性能。刘峰等[2]提出了基于多头注意力机制(multi-head attention)和双向长短期记忆网络(Bi-LSTM)相结合的模型,并在词向量和位置向量的基础上引入了依存句法特征和相对核心谓词依赖特征,用于关系分类任务。
最近,预训练语言模型如OpenAI GPT[12]、BERT[13]、RoBERTa[14]、DistilBERT[15]等已经被证明可以有效改善自然语言处理任务,如在序列标注、问答系统、句子关系推断等许多自然语言处理任务中获得了优异的效果,并开始应用于实体关系分类任务中。Shi P[16]等首次将BERT用于关系抽取和语义角色标注任务,并结合LSTM提出BERT-LSTM模型,在TACRED测试集上取得最优性能。Wu S[17]等提出利用预训练BERT语言模型结合目标实体的信息来解决关系分类任务的方法(R-BERT),该方法在SemEval-2010任务8数据集上Macro-F1值高达89.25%。
本文提出一种基于EC_BERT的实体关系分类方法, 利用BERT获取句子特征表示向量,并结合两个特定目标实体以及实体上下文语句信息,送入简单神经网络进行关系分类。首先,为了定位两个目标实体,在句子中两个实体前后插入特殊标记符号,然后经过分词送入BERT训练微调;其次,获取两个目标实体信息以及实体上下文语句信息。对于BERT的输出嵌入,从中提取两个实体的输出嵌入、第一个实体之前的文本输出嵌入、两个实体之间的文本输出嵌入、第二个实体之后的文本输出嵌入以及句子编码,分别平均之后进行连接,送入多层神经网络进行关系分类。此外,针对BERT的改进模型RoBERTa、DistilBERT进行同样的实验,并都在SemEval-2010任务8数据集和KBP-37数据集上进行测试和对比,验证该方法的可行性和泛化性。
关系分类用于挖掘文本数据中实体之间的关系,实体关系可以使用一个三元组来描述
The is an integral part of our .
其中,这两个指示符表明committee是第一个实体,表明organization是第二个实体,两个实体的关系是部分-整体关系(component-whole(e1,e2)),用三元组可以表示为
本文提出的基于EC_BERT的实体关系分类方法,将文本数据经过BERT获取句子特征向量表示,结合目标实体信息以及实体上下文语句信息、句子编码,分别平均后进行全连接,以预测目标实体间的关系。
BERT本质是一种可微调的双向Transformer[18]编码器,其摒弃了RNN 的循环网络结构,把Transformer 编码器当作模型的主体结构,主要利用自注意力手段对句子进行建模[19]。与从左到右或从右到左的语言模型不同,BERT使用屏蔽语言模型(masked language model, MLM)对模型参数进行训练,MLM从输入中随机屏蔽某些词语,根据上下文预测被屏蔽词语对应的原始词汇ID,从而能够融合左右上下文来预训练深层双向特征表示。
同时,BERT使用“next sentence prediction”任务来联合预训练文本对表示,其模型结构如图1所示。
图1 BERT模型结构
BERT的输入表示应能够在一个标记序列中表示单个文本语句和一对文本语句。每个Token的输入表示由相应Token嵌入向量、段嵌入向量和位置嵌入向量之和构成。在每个序列的开头加上特殊标记“[CLS]”,BERT输出的与第一个标记相对应的最终隐藏状态用作分类任务的句子表示。如果任务中有两个句子,则使用“[SEP]”将两个句子分开。其输入表示如图2所示[13]。
图2 BERT输入表示
实体关系分类是判断句子中两个实体属于哪种关系类型。为了使BERT能够捕获两个实体的位置信息以及实体上下文语句信息,对于具有两个实体e1和e2的句子,在第一个实体e1之前和之后插入特殊符号“$”,在第二个实体e2之前和之后插入特殊符号“#”,同时在句子的开始位置插入“[CLS]”符号,在句子结尾插入“[SEP]”符号。例如,具有两个实体“pieces”和“stories”的句子,在插入特殊符号之后变为:
[CLS]Many of his literary $ pieces $ narrate and mention # stories # that took place in Lipa.[SEP]
本文中基于EC_BERT的实体关系分类模型结构如图3所示。给定具有两个实体e1和e2的句子S,插入特殊符号后为S′,假设S′从BERT输出的最终隐藏状态向量为H,假设H1至Hi-2是S中第一个实体e1之前的内容经BERT输出的最终隐藏状态向量,Hi至Hj是实体e1经BERT输出的最终隐藏状态向量,Hj+2至Hk-2是S中两个实体e1和e2之间的内容经BERT输出的最终隐藏状态向量,Hk至Hm是实体e2经BERT输出的最终隐藏状态向量,Hm+2至Hn是S中第二个实体e2之后的内容经BERT输出的最终隐藏状态向量。对以上获取的五个隐藏状态向量分别执行平均运算,然后经激活函数(即tanh())和全连接层之后获取对应的矢量表示分别为H′A、H′e1、H′B、H′e2、H′C,如式(1)~式(5)所示。
图3 模型结构
其中,令We1=We2,be1=be2,即对于两个实体使用相同的参数学习。令WA=WB=Wc,bA=bB=bC,即对句子中除两个实体的其余部分使用相同的参数学习。对于特殊符号[SEP]经BERT输出的最终隐藏状态向量Hn+1,不做操作,而对特殊符号[CLS]经BERT输出的最终隐藏状态向量H0,同样对其执行激活函数和全连接层操作,如式(6)所示。
H′0=W0[tanh(H0)]+b0
(6)
由于实体在语句中的位置各有不同,以上情况并不能适用所有句子,以下针对三种特殊情况举例说明处理方法。
首先针对实体在句首情况,如以下语句:
[CLS]$Roundworms $ or ascarids are caused by an intestinal # parasite # called Toxocara canis.[SEP]
由于实体“Roundworms”位于句首,实体之前没有词语,此时令
H′A=WA[tanh(H0)]+bA
(7)
其次,针对两个实体e1和e2紧挨着的情况,例如以下语句:
[CLS]$ Red grape $ # wine # is an alcoholic fruit drink of between 10 and 14% alcoholic strength.[SEP]
由于实体“Red grape”和“wine”之间没有词语,此时令
(8)
最后,针对实体在句尾情况,例如以下语句:
[CLS]A $ witch $ is able to change events by using # magic #.[SEP]
令
H′C=Wc[tanh(Hn+1)]+bC
(9)
矩阵W0,WA,We1,WB,We2,Wc具有相同的维度,即W0∈Rd×d,WA∈Rd×d,We1∈Rd×d,WB∈Rd×d,We2∈Rd×d,Wc∈Rd×d,其中d是BERT输出的隐藏状态向量的大小。
最后,将H′0、H′A、H′e1、H′B、H′e2、H′C连接起来,经全连接层,然后送入Softmax层进行分类,如式(10)、式(11)所示。
其中,Wh∈RL×6d,L是实体关系的种类数量,p是概率,式中bA,be1,bB,be2,bC,bh,b0是全连接层中的偏置向量。
训练过程中,使用交叉熵作为损失函数,同时为防止出现过拟合现象,在每个激活函数之后、全连接层之前添加Dropout层。
为了验证模型性能,本文在两个数据集上评估模型: SemEval-2010任务8数据集和KBP-37数据集。
2.1.1 SemEval-2010任务8数据集
SemEval-2010任务8数据集共有10 717条人工标注的实体和关系类型数据,每条数据包括两个实体e1和e2,以及句子对应的实体关系类型,其中8 000条训练数据,2 717条测试数据,包括9种实体关系类型和1个其他类(Other类),9个实体关系类型是有方向的,即Cause-Effect(e1,e2)和Cause-Effect(e2,e1)关系类型不同,总共19种关系类型。SemEval-2010任务8数据集的具体关系类型如表1所示。
表1 SemEval-2010任务8数据集关系类型
2.1.2 KBP-37数据集
KBP-37数据集共有21 046条人工标注的实体和关系类型数据,其中15 917条训练数据,1 724条验证数据,3 405条测试数据,共包括18个具有方向的实体关系类型和1个无关系类(no_relation类),总共有37个关系类型。KBP-37数据集的具体关系类型如表2所示。
表2 KBP-37数据集关系类型
2.1.3 数据集对比
SemEval-2010任务8数据集和KBP-37数据集中句子长度分布如表3所示,可以看到,SemEval-2010任务8数据集中长句子的比例很小,这表明:仅在SemEval-2010 任务8数据集上实验,并不能充分证明模型的优势。与SemEval-2010任务8数据集相比,KBP-37数据集的关系类型数量更多,句子更长,而且KBP-37数据集中更多的实体是由多个单词组成,而不是一个单词。KBP-37数据集的测试集中虽然仅提供一种关系作为答案,但不能保证每个数据仅存在一种关系类型。
表3 数据集句子长度分布
实验训练过程中采用Macro-F1值作为模型性能评价指标。表4为二分类结果的混淆矩阵。
表4 二分类结果混淆矩阵
查准率P和查全率R分别定义为:
若要计算Macro-F1值,需先根据每个关系类型的二分类混淆矩阵分别计算出其对应的查准率和查全率,记为(P1,R1),(P2,R2),…,(PL,RL),然后计算Macro-P,Macro-R以及Macro-F1,如式(14)~式(16)所示。
(16)
模型训练完成后,在SemEval-2010 任务 8测试集上使用官方评分脚本进行评分,官方评分标准只对9种关系类型(不包括“other”)计算Macro-F1值,并考虑方向性。在KBP-37测试集上,采用Macro-F1值进行评分,考虑方向性并包括无关系类(no_relation类)。
实验使用的硬件设备如下: 处理器为Intel® CoreTMi9-9900K CPU @3.6 GHz,内存32 GB,系统为64位Ubuntu 18.04.3 LTS操作系统,运行环境Python 3.6,运行软件PyCharm,两块NVIDIA GeForce RTX 2080 Ti GPU,硬盘大小200 GB。本文实验均使用PyTorch框架编码完成。
本文实验中采用了BERT的两种预训练模型: BERT-Base-Uncased和BERT-Large-Uncased,为便于实验对比分析,分别将对应的模型记为EC-BERT-Base和EC-BERT-Large。同时,针对BERT的改进模型RoBERTa、Distil/BERT,也在SemEval-2010任务8数据集和KBP-37数据集上使用本文模型结构进行了实验,即将本文模型结构中的BERT分别替换为RoBERTa和Distil/BERT,其余部分结构不变。对于RoBERTa也采用两种预训练模型: RoBERTa-Base和RoBERTa-Large,分别将对应模型记为EC-RoBERTa-Base和EC-RoBERTa-Large。Distil/BERT的预训练模型对应本文模型记为EC-Distil/BERT。为了与文献[17]提出的R-BERT进行对比实验,本文对R-BERT进行了代码复原,为便于区分,将复原的R-BERT记为EC-R-BERT,其对应参数和文献[17]保持一致。网络模型优化方法都采用AdamW,在两个数据集上模型训练参数分别如表5、表6所示。
表5 SemEval-2010任务8数据集上模型主要参数
表6 KBP-37数据集上模型主要参数
本文对比文献的实验结果均出自其论文原文,实验对比结果如表7所示。
表7 实验对比结果
从表7可以看出,在两个数据集上,基于BERT的模型或基于改进BERT的模型性能均超过了基于CNN、RNN、LSTM的模型,验证了 BERT对于实体关系分类的优势。在SemEval-2010任务8数据集和KBP-37数据集上,EC-BERT-Base模型的F1值比EC-R-BERT模型分别高出0.22和1.74,验证了本文模型设计的有效性。在两个数据集上,EC-BERT-Large模型的F1值高过所有对比方法,在SemEval-2010任务8数据上比以前的最佳方案高出0.44,在KBP-37数据集上比以前最佳方案高出4.09,证明了本文方法的可行性。
本文针对预训练模型BERT在多种自然语言处理领域下的分类/序列标注任务上的良好表现,将其推广到实体关系分类任务,提出一种基于EC_BERT的实体关系分类方法。该方法利用BERT获取句子特征表示向量,并结合两个目标实体信息以及实体上下文语句信息进行关系分类。在SemEval-2010任务8数据集与KBP-37数据集上进行测试,实验结果证明,该方法相较于其他关系分类模型,性能有一定的提升。下一步,将考虑如何把预训练模型BERT应用到实体与关系联合抽取任务上。