基于BERT和非自回归的医疗知识抽取
2023-03-21马志龙
于 清,马志龙,徐 春
(新疆财经大学信息管理学院,新疆 乌鲁木齐 830012)
0 引 言
实体识别和关系抽取是信息抽取领域中的核心任务,而医疗领域相对于其他领域,具有实体和关系数量较多、种类繁杂、命名不规则等难点[1]。如何从医疗文本中提取知识是医疗领域的热点问题。电子病历中蕴含着大量真实且与病人密切相关的医疗信息,从中有效提取实体及其关系,对构建医疗知识图谱、医疗问答、辅助决策具有重要的现实意义[2-4]。
目前,在实体关系抽取任务中,基于循环神经网络[5]和卷积神经网络[6]等神经网络技术[7-8]的深度学习架构日渐成熟,并逐渐被应用于医疗领域中。Uzuner等[9]根据出院摘要,首次对医疗语义关系进行分类研究。Sunil 等[10]首次将CNN 模型运用到电子病历的关系抽取中,但此方法不适于距离较远的实体间的识别和抽取。2019 年,谷歌基于Transformer 模型提出了BERT 网络模型[11],并且在关系抽取的相关工作中取得了良好效果。
为进一步提高关系抽取的效果,一些学者开始融合多种方法进行实体识别和关系抽取。Zhang 等[12]在BERT 模型的基础上,提出了基于Bi-LSTM-CRF的关系抽取优化方法,成功从临床乳腺癌文档中提取出相关概念及属性。Christopoulou 等[13]引入注意力机制和Transform 网络,实现药物-药物在句子内和句子间关系的提取和分类。武小平等[14]针对中文以词为单位的特性,提出了改进的BERT(wwm)-CNN 模型,实现心血管疾病领域的实体识别及关系抽取。李丽双等[15]针对位置向量噪声和语义表达匮乏等问题,提出了基于BiLSTM-CNN 的关系抽取模型,取得了i2B2/VA语料的最优结果。
以上方法均将实体识别和关系抽取分开处理,属于流水线方法,虽然取得了较好的成果,但这些方法忽视了2 个子任务之间的相关性,会产生误差传播[16],最终影响关系抽取的效果。为解决此问题,相关学者将2 个子任务融合成一个任务,进行联合学习。Getoor 等[17]提出了一种基于线性规划的全局推理方法,运用分类器抽取句子中可能存在的实体和关系,指出实体识别和关系抽取是密切相关的。联合学习方法可以分为参数共享和序列标注2 种,且大多数研究集中在通用领域。Miwa等[18]首次将实体识别和关系抽取作为一个任务进行研究,提出了结合树结构的BiLSTM-RNN 模型,通过二者参数共享进行关系抽取,但存在实体冗余问题。Zheng 等[19]提出了一种基于序列标注的联合学习模型,有效地缓解了参数共享方法存在的实体关系冗余问题。Xu等[20]将关系抽取问题视为序列标注问题,采用BiLSTMs-CRF 相结合的深度学习模型,高效地检测出医学概念-属性关系对。Parsaeimehr 等[21]提出了一种基于深度学习的联合识别体系,克服了误差传播的影响。以上联合学习方法虽然提高了实体关系抽取的效果,但均无法解决重叠三元组问题。
电子病历中包含大量半结构化和非结构化信息,文本中的三元组重叠可以分为2 类:EPO 指一个实体对之间具有多种关系,例如“患者因反复腹痛,伴反酸、嗳气在我院完善相关检查后确诊胃体胃窦癌。”中存在三元组(胃体胃窦癌,症状,腹痛)、(胃体胃窦癌,并发症,腹痛);SEO 指一个实体存在于多个三元组中,例如“患者患胃窦溃疡,因中下腹疼痛进行胃镜检查。”句子中存在三元组(胃窦溃疡,检查,胃镜)、(胃窦溃疡,症状,中下腹疼痛),这种多种关系和共享实体的存在增加了知识抽取任务的难度,传统方法很难学习这种关系。为解决三元组重叠问题,Wei等[22]提出了CASREL 模型,采用级联二进制标注方法,将关系推理建模为句子中头实体到尾实体的映射函数,但存在曝光偏差问题。Wang 等[23]提出了TPLinker 模型,采用多头标注方法实现了单阶段联合学习,能够解决实体重叠和暴露偏差问题,但该方法需要设计复杂的标注模式。Zeng 等[24]提出了一种基于复制机制的seq2seq 模型,可以利用该机制对重叠的实体进行复制,并根据不同的实体重叠类型,采用统一解码器和多个解码器进行解码,能够有效解决关系抽取中的实体重叠问题,但会产生大量无效的实体对。Cabot等[25]将三元组分解成文本序列,以自回归方法为基础,提出了基于BART 的联合学习模型,但采用自回归解码的方法,需要考虑多个三元组的提取顺序,而文本中的三元组本质上没有顺序。
本文以seq2seq 模型为框架,运用基于BERT 和非自回归的联合学习模型实现实体识别和关系抽取,并构建医疗知识图谱。本文主要工作如下:
1)BERT 预训练语言模型结合上下文语义信息动态生成特征向量,能够有效解决电子病历中的一词多义问题。
2)采用基于Transformer 的非自回归方法实现并行解码,并根据头尾实体开始和结束的位置索引进行标记,能够有效缓解三元组重叠问题。
3)运用电子病历数据进行实验分析,结果表明,本文提出的基于BERT 和非自回归的知识抽取方法,效果优于现有模型。
1 模型介绍
本文将实体识别和关系抽取看作一个任务进行联合学习,模型结构如图1 所示,主要包括3 个部分。首先运用BERT 模型对句子进行编码;然后运用基于Transformer的非自回归方法解码,根据解码结果进行关系预测(包括Ø 共有6 种关系类型),并进一步融合编码信息进行实体抽取;最后,根据二部匹配损失函数计算损失值。
图1 模型结构
联合实体关系抽取的目标是识别原始句子中所有可能的关系三元组,对于给定句子X,目标三元组Y的条件概率如式(1)所示:其中,pL(n|X)对目标三元组的大小进行建模,i表示句子中三元组数量,p(Yi|X,Yj≠i;θ)表示目标三元组Yi不仅与给定的句子X相关,还与其他三元组Yj≠i相关。
1.1 BERT编码层
BERT 模型主要包含输入层、编码层和输出层,其基本结构如图2 所示。BERT 的输入向量由词特征、句子特征和位置特征组成,且句首、句尾分别增加[CLS]和[SEP]标志,用于分隔2 个句子。编码层由多个相同的Transformer层组成,向量通过多头自注意力(Multi-Head Self-Attention)层,传输到前馈神经网络(Feed-Forward Network)中,最终的输出结果表示为:
图2 BERT模型结构
其中,l是句子长度,d是BERT模型中隐藏层数量。
BERT 模型是基于双向Transformer 编码的预训练模型,能够较好地解决一词多义的问题,例如,句子“患者因右上腹隐痛,行胸腹部CT 检查”中,2 个“腹”表示不同的含义,其输入形式如图3所示。
图3 BERT模型的输入形式
1.2 非自回归解码层
多数seq2seq模型将获取关系三元组看作序列生成问题,利用自回归模型逐个解码。与公式(1)相比,自回归方法识别句子X中目标三元组Y的条件概率如式(2)所示:
其中,p(Yi|X,Yj<i;θ)表示目标三元组Yi与给定的句子X和已生成的三元组Yj<i相关,说明自回归解码需要用已生成的词来预测下一个位置的词,无法实现并行解码[26],解码速度比较慢。针对此问题,本文使用基于Transformer的非自回归方法,打破了解码时的顺序要求,可以并行解码整个句子,对比如图4 所示。从图4(a)中可以看出,自回归模型解码时,词是依次递归生成的,要生成长度为N的句子,需要经过N次解码层;而图4(b)中的非自回归模型则可以一次生成所有词,只需经过1 次解码层,减少了经过解码层的次数,提高了解码效率。
图4 自回归与非自回归模型对比
非自回归解码层由N个相同的Transformer 层组成,如图1 所示。解码层的输入是初始化后的目标文本向量,输入向量通过线性变换得到表示目标字的Q矩阵、表示上下文各个字的K矩阵以及表示目标字与上下文各个字的原始矩阵V,并通过计算放缩点积求得自注意力值,如公式(3)所示,经过i次计算后获得一个与原始字向量长度相同的增强语义向量,作为多头自注意力层的输出,如公式(4)、公式(5)所示;然后运用多头相互注意机制与BERT 层的输出编码融合,根据BERT 层的输出H计算得到K、V,根据上一个解码器的输出计算Q,后续计算方法与式(3)~式(5)一致,得到输出向量G∈Rm×d;最后,通过前馈网络将输出向量解码为关系类型和实体,得到最终预测的三元组。
其中,Q、K、V表示输入的字向量矩阵,dk表示输入维度,WiQ、WiK、WiV表示headi的权重矩阵,W0表示附加权重矩阵。
本文根据头尾实体开始和结束的位置索引进行三元组抽取,且将并发症、检查、症状、常用药物、治疗方式和Ø这6种关系类型分别赋值为0~5,三元组可表示为Y=(r,sstart,send,ostart,oend)。例如,句子“患者患胃窦溃疡,因中下腹疼痛进行胃镜检查。”中存在的三元组(胃窦溃疡,检查,胃镜)、(胃窦溃疡,症状,中下腹疼痛),可以表示为(1,3,6,16,17)、(2,3,6,9,13),其中,实体“胃窦溃疡”可以重复抽取。该方法类似Span标注,但不需要对头尾实体进行标注,而是直接利用实体的位置索引为标记,能够有效解决三元组重叠问题。
假设给定一个输出向量g∈Rd,经过关系预测和首尾实体预测,可得到最终的预测三元组=(pr,ps-start,ps-end,po-start,po-end),具体如式(6)~式(10)所示:
1)关系预测:
其中,Wr∈Rt×d,t是关系类型(包括空集Ø)的总数,d是BERT模型中隐藏层数量。
2)首尾实体预测:通过softmax 分类器预测头尾实体开始和结束的位置索引,如式(7)~式(10)所示:
其中,Wi∈Rd×d和vi∈Rd是可学习的参数。
1.3 二部匹配损失函数
损失函数表示样本真实值与模型预测值之间的误差[27],适用于评价模型性能的优劣。交叉熵损失法是衡量关系抽取模型优劣的主要方法,但该方法对预测值的排列顺序很敏感,而非自回归解码采用并行解码的方法,打破了对预测值的顺序要求。因此,本文运用二部匹配法以在预测三元组和真实三元组之间产生最优匹配,该方法计算损失值时,与预测值的排列顺序无关。计算二部匹配损失值分为2 个步骤:寻找最佳匹配和计算损失函数。
1)寻找预测三元组的最佳匹配。
与指派问题类似,该问题可看作寻找m个预测三元组和m个真实三元组之间的最佳匹配方法,如图5所示,此类问题可以用匈牙利算法求解。首先,计算每个真实三元组Y和预测三元组之间的成对匹配代价,如公式(11)所示:
图5 三元组匹配示例
其中,i,j=0,1,…,m-1,是三元组集合中的第i或j个三元组;ri∈{0,1,…,5},代表不同关系类型;sistart、siend、oistart、oiend是第i个真实三元组中头实体或尾实体开始或结束的位置索引;m为解码层一次性输出三元组的数量,不足m以Ø填充。
根据公式(11),能够以最小代价找到预测三元组集合的最佳匹配策略,如公式(12)所示:
2)计算损失函数。
运用负对数似然计算最优匹配情况下的损失值,由式(6)~式(10)可知,预测三元组得到是关系及实体的概率分布,概率越接近1,函数值越接近0,可得到损失函数的最小值,如式(13)所示:
其中,a*(i)是最优匹配策略中,真实三元组集合中第i个三元组对应的预测三元组。
2 实验分析
2.1 数据来源
本文运用新疆某医院消化内科的电子病历,经过人工检查选取586条数据,将文本按句拆分成4252个句子,并进行人工标注,标注示例如下:{"sentText": "患者患有胃窦炎,因上腹部隐痛入院行上消化道钡餐检查。", "relationMentions": [{"em1Text":"胃窦炎","em2Text": " 上 腹 部 隐 痛", "label": " 症 状"},{"em1Text": "胃窦炎", "em2Text": "上消化道钡餐", "label": "检查"}]}。将标注后句子按3:1:1 比例随机划分为训练集、测试集和验证集。
本文实体类型和实体关系各有5 种,具体释义如表1所示,数据集中关系类型统计如表2所示。
表1 实体关系释义
表2 关系类型统计
2.2 实验设置
本模型是基于编程工具Python 3.8.5,以PyTorch 1.8.1 为框架开发的。基于BERT-base-Chinese 预训练模型,使用Adam W 优化器对模型参数进行自适应学习,具体参数设置如表3所示。
表3 参数设置
2.3 实体关系抽取结果分析
1)评价指标。
本实验采用召回率Recall、精确率Precision 和F1值来评价联合关系抽取模型的性能,各评价指标的计算方法如下:
其中,TP表示预测正确的三元组数量;FP表示预测错误的三元组数量;FN 表示数据集中的相关三元组但没有被模型识别的数量。
2)实验结果分析。
图6 所示为本实验测试集的Precision、Recall 和F1 值随训练周期的变化情况,其中,F1 值在第43 个训练周期达到最高值。图7 所示为本实验训练集的损失值随训练周期的变化,可以看出经过50 次迭代后,损失值最终实现收敛。
图6 模型的Precision、Recall和F1值
图7 模型损失值
3)模型综合对比及分析。
为了对本文模型进行更加客观的评价,运用相同的数据集将本文模型与以下模型进行实验对比,对比结果如表4所示。
表4 不同模型实验结果对比
BERT-BiLSTM 模型:一种流水线关系抽取方法,运用BIO 方法标注实体,经过BERT 模型提取特征,使用BiLSTM网络进行关系抽取。
BERT-BiLSTM-Seq2Seq 模型:一种联合学习模型,选用BIEO 方法标注实体,运用BERT 模型获得编码向量,然后运用BiLSTM网络进行解码。
WDec 模型[28]:提出了一种新的表示方法,将三元组及其开头用特殊标记分割,运用基于指针网络的解码器,并引入“复制”机制,能够从句子中找到实体重叠三元组和多个标记实体的三元组。
CasRel 模型:一种联合学习模型,采用级联二进制标注方法,第一阶段识别所有可能的头实体,然后由特定标注器识别所有可能的关系和尾实体。
从表4 可以看出,BERT+非自回归模型的精确率、召回率和F1 值是最优的。与BERT-BiLSTM 流水线模型相比,本文模型的F1 值提高了0.09,其余2 个联合学习的F1 值也均有提高,原因在于流水线模型中关系抽取的结果严重依赖实体识别的结果,而联合学习模型增强了实体识别与关系抽取2 个任务之间的联系,能够缓解错误传播。与BERT-BiLSTMSeq2Seq 模型相比,本文模型的F1 值提高了0.04,原因在于BiLSTM 解码是自回归解码方法,而本文提出的基于Transformer 的非自回归方法,是一种并行解码,解码时不需要依赖上一个词的信息。与WDec 模型相比,本文模型的F1 值提高了0.07,原因在于WDec 模型在编码层运用CNN 模型,而本文运用BERT 模型进行编码,能够融合上下文信息,充分挖掘文本信息;WDec 模型的解码器结果会输出到整个词汇表,因此解码器会从词汇表中预测当前句子中不存在的标记,导致特殊标记及关系标记的抽取错误,生成错误的三元组,而本文根据头尾实体开始和结束的位置索引进行三元组抽取,能够有效标识实体和关系。与CasRel 模型相比,本文模型的F1 值提高了0.03,原因在于CasRel模型解码时对于识别出来的每一个头实体,要遍历所有的关系,导致需要判断大量冗余关系,且关系和尾实体抽取的准确性依赖于头实体抽取是否正确,而本文运用以Transformer架构为基础的并行解码器,能够同时抽取关系和实体,能够减少误差累计,更大限度地捕捉电子病历复杂的实体和关系分布。
4)抽取重叠三元组的结果分析。
将三元组分为Normal、EPO、SEO 这3类。Normal指不存在重叠的三元组,结果如图8 所示。在正常三元组中,各模型的FI 值差距不大;在抽取重叠三元组时,运用BIO 标注的BERT-BiLSTM 模型和BIEO 标注的BERT-BiLSTM-Seq2Seq模型与本文模型均有较大差距,因为这2 种方法基于就近原则进行标注,导致抽取结果较差;WDec 模型在于引进“复制”机制来复制重叠实体,但该方法会产生许多无效实体对,即2个实体间没有有效关系;CasRel 模型生成三元组时,头实体的开始和结束位置用相同标记,当存在多个头实体会出现多个标记,则采用就近原则,导致重叠三元组识别存在误差。
图8 不同模型抽取不同类型三元组的F1值
3 知识可视化
目前,知识存储的数据库主要有关系型数据库与图数据库。其中,图数据库用节点、边以及属性进行数据存储和展示,并且具有自然伸展的特点,能够更简洁地表达知识。Neo4j 是一种常用图数据库,能够通过Cypher语句来导入和查询数据,语法简洁,功能强大。对于大规模导入数据,Neo4j 还提供了py2neo库,可以通过Python编程快速将大量实体和关系导入数据库。在抽取出电子病历中的医学实体及实体间的关系后,将结果导入Neo4j 图数据库中,构建面向消化内科的医疗知识图谱。该知识图谱由2516 个实体节点和9894 个关系对组成。知识图谱构建完成后,可以通过Cypher 语言进行查询,获得所需的知识。
患者可以通过医疗知识图谱进行查询,如图9 所示,患有“胆汁性肝硬化”的病人,可以通过查询了解自己可以进行哪种治疗,知道服用哪种药能够缓解症状,并且能够知道“胆汁性肝硬化”能引起哪些并发症,及时预防并发症的产生。知识图谱也能够为医生提供辅助决策,如图10 所示,医生在为有“上腹部包块”“肝星状细胞增生”“肝结节”等症状的患者诊断时,可以通过“肝纤四项”“肝脏疾病超声诊断”等检查方法,诊断患者是否患有“肝纤维化”。
图9 胆汁性肝硬化的部分知识图谱
4 结束语
针对误差累计、一词多义和三元组重叠等问题,本文提出了一种基于BERT 和非自回归的联合实体关系抽取模型,加强实体识别与关系抽取间的相关性。首先,运用BERT 模型作为编码层捕捉上下文信息,较好地解决医疗实体一词多义的问题;然后,采用非自回归的方法直接解码,提出以头尾实体开始和结束的位置索引作为标记的方法有效抽取重叠三元组;最后,将生成的三元组导入Neo4j 数据库中,实现了相关疾病、症状、检查等知识的联系和查询功能。下一步工作将开展数据和知识双驱动的实体关系抽取研究,目前的研究仅依赖电子病历内部特征,是以数据驱动的方法,但忽略了专家知识。因此,拟将医学知识库引入关系抽取过程中,增加实体关系抽取结果的可解释性和专业性。