夏宇彬,郑建立,赵逸凡,徐霄玲
(上海理工大学 医疗器械与食品学院, 上海 200093)
自然语言处理是指利用计算机对人类语言进行自动理解和分析[1]。命名实体识别(Named Entity Recognition,NER)是从文本数据中提取出有效信息的自然语言处理技术,主要任务是识别出文本中的人名、地名等专有名称[2]。命名实体识别技术是信息抽取、信息检索、机器翻译、问答系统等多种自然语言处理技术必不可少的组成部分[3]。电子病历中的命名实体主要指体征、疾病、检查和治疗等医学专有名词及相关的修饰词。如某份病历中的“双肺呼吸音清”,其中“双”为体侧,“肺”为部位,“呼吸音”为体征,“清”为定性值,这4个词就是电子病历的命名实体,电子病历的命名实体识别即为对此类词的识别。
条件随机场和隐马尔科夫模型[4]常用于通用领域的命名实体识别。对电子病历命名实体识别的研究主要集中在基于词典和规则的方法,如文献[5]基于UMLS、SNOMED CT和RxNORM开发的cTAKES系统。相比于基于规则的方法,机器学习的方法具有泛化能力强的优点,得到了广泛关注,如文献[6~7]以条件随机场(Conditional Random Fields,CRF)为核心设计实现英文电子病历命名实体识别系统;文献[8]使用条件随机场对疾病、症状和手术操作这3类中文电子病历中的命名实体进行识别。基于机器学习方法存在需要手工定义特征的问题,本文使用基于深度学习的方法进行电子病历的实体识别,能够较好解决此问题。
命名实体识别可以形式化为一个序列标注问题,即对语句中每个字给予一个标签,通过简单的处理即可提取出命名实体。命名实体识别常用的标签集为{B,I,O},其中B表示当前字为实体的开始,I表示当前字位于实体的中间,O表示当前字不是实体的组成部分。
图1 基于深度学习的电子病历命名实体识别算法架构
传统的序列标注方法,如条件随机场需要手动定义大量的特征模板才可取得较好结果,费时费力且泛化能力差。为了省去手动定义特征的过程,本文选择了神经网络进行自动的特征抽取[10]。本文算法的基本架构如图1所示,整个算法总共分为4层:
(1)输入层:表示输入的语句,并将输入语句中每个字通过字典转换成对应的索引序号;
(2)查找表层:将每个字的ID映射为一个多维向量;
(3)网络层:将上层输出进行连接后,使用多层感知机网络或者长短期记忆网络自动计算特征值;
(4)推断层:根据网络层抽取的特征结果,使用维特比算法计算最优路径,得到最终的标注序列。
其中,核心部分为查找表层,网络层和推断层,下文将进行详细描述。
电子病历语句中的每个字从输入层转换成索引后传入查找表层。在查找表层,通过查找操作将每个索引映射到一个多维向量,称为字向量。查找表可以看作为一个矩阵,对于一个固定大小的字典D,查找表为M∈Rd×|D|,其中d为字向量的维度,|D|为字典的大小。
输入语句通过字典映射后生成索引序列,记为c,长度为n,假设任意索引ci对应的字向量为z(ci),则此查找操作可表示为
z(ci)=Meci
(1)
其中,M为查找表,eci为仅在ci位置为1的单位向量。
一般情况下,为了获得更多的局部上下文信息,不可直接将当前字向量作为下一层输入,应将当前字及其前后的字向量进行顺序拼接后作为网络层的输入。假设ci对应的网络层输入为xi,则
xi=z(ci-k1)⊕…⊕z(ci)⊕…⊕z(ci+k2)
(2)
其中,“⊕ ”表示向量的连接操作,k1为左窗口大小,k2为右窗口大小,xi的维度为(k1+k2+1)d。
网络层负责将输入的字向量矩阵进行变换,输出为每个字对每个标签({B,I,O}之一)的得分,得分可表示为矩阵S∈R3×n,网络层的操作可以看成是自动特征抽取的过程。
在电子病历的命名实体识别领域,常用的网络结构有多层感知机、循环神经网络、长短期记忆网络和门控循环单元网络等。本论文选择最常用的两种网络,多层感知机网络和长短期记忆网络作为网络层。
图2 多层感知机基本结构
多层感知机(Multilayer Perceptron,MLP)网络是最简单的神经网络,基本结构如图2所示:相邻两层的神经元之间为全连接结构,对于隐藏层的神经元而言,输入的数据需经过激活函数作用才可输出。在电子病历命名的实体识别中,对于每个输入xi,多层感知机的输出如下
(3)
其中,W1∈RH×(k1+k2+1),b1∈RH,b2∈R3,W2∈R3×H,超参数H为隐藏层单元数,函数g(x)表示sigmoid函数,表达式如下
(4)
长短期记忆(Long Short Term Memory,LSTM)网络。是循环神经网络的一种改进方案。虽然循环神经网络通过引入状态值使得网络具备了序列建模的能力,但是也产生了梯度爆炸和梯度消失的问题。如图3所示,长短期记忆网络通过引入由忘记门、输入门和输出门组成的三态门结构,使得网络具备了对状态值选择性保留和去除的能力,缓解了梯度消失和下降的现象。长短期记忆网络公式为
fi=σ(Wfxxi+Wfhhi-1+WfcCi-1)
ii=σ(Wixxi+Wihhi-1+WicCi-1)
Ci=fi⊙Ci-1+ii⊙φ(Wcxxi+Wchhi-1)
hi=oiφ(Ci)
oi=σ(Woxxi+Wohhi-1+WocCi)
(5)
图3 长短期记忆网络单元图
在电子病历命名实体识别中,对每个输入的xi,经过长短期记忆网络层后还需经过线性变换才可得到最终的输出值,输出值如下式所示
mi=W3oi+b3
(6)
其中,Wfx,Wfh,Wfc∈R×H(k1+k2+1),Wix,Wih,Wic,Wcx∈RH×(k1+k2+1),W3∈R3×H,b3∈R3,Wch,Wox,Woh,Woc∈RH×(k1+k2+1),函数σ(x)为式(4)所示的sigmoid函数,函数Ф(x)为双曲正切函数tanh,符号“⊙”代表矩阵的逐元素相乘。
推断层是根据网络层输出的得分矩阵S寻找一个得分最高序列的过程。由于标签{B,I,O}之间存在着不同程度的依赖关系,如O后不能是I,以及在实体均为2字以上时,B与B相邻的概率很小等等。通过引入一个矩阵A∈R4×3来表征标签之间的依赖程度,称为转移概率矩阵,并将{B,I,O}分别映射到对应编号{0,1,2},矩阵元素Ai,j(0≤i≤3,0≤j≤2)表示从标签i到标签j的转移概率,i=3时表示语句第一个字符对应标签的初始转移概率。
对于给定的电子病历语句c,对应的标注序列有3n种,假定其中一个序列为t,定义s为该序列的得分
(7)
使s值最大的序列即为最优标注序列,记为t*,有
t*=argmax(s(c,t,θ))
(8)
其中,θ为待训练参数的集合。使用维特比算法进行上述最优标记序列的求解。
本文使用最大间隔准则进行算法的训练。最大间隔准则通过增强决策边界的健壮性提高目标函数的分类性能,提供了一种代替极大似然估计的方法[12]。
根据上文所述,多层感知机网络需要训练的参数为θm={W1,b1,W2,b2,M,A},而长短期记忆网络需要训练的参数包括θl={Wfx,Wfh,Wfc,Wix,Wih,Wic,Wcx,Wch,Wox,Woh,Woc,W3,b3,M,A},统一记为θ。假设对于长度为n的电子病历语句c,正确标注序列为t+,当前参数下最优标注序列为t*。定义结构化间隔损失函数Δ(t+,t*)为
(9)
其中,η为间隔系数,I(x)为指示函数,若x为真,函数值为1,否则为0。
给定训练集T,定义带有l2正则化项的模型损失函数J(θ)为
(10)
式中l(θ)为
l(θ)=max(0,s(c,t*,θ)+Δ(t+,t*)-s(c,t+,θe))
(11)
本文使用随机梯度下降的改进算法AdaGrad[13]来最小化损失函数,使用基于minibatch模式的后向传播算法进行训练,batch大小为20,并加入dropout层来防止过拟合[14]。
本文选择了某三甲医院的200份糖尿病患者的入院记录进行实验。首先对电子病历文本进行标注,标出实验所需的命名实体,将其中190份作为训练集,10份作为测试集进行实验。选择Google主导开发的深度学习框架TensorFlow,基于Python语言编写算法程序,在CPU为i7-6700K,GPU为Nvidia GTX 1080,操作系统为Windows7的软硬件环境中进行模型训练和测试。
表1 命名实体识别算法超参数值
对于本文的命名实体识别算法模型,选择表1所示的超参数进行训练。
使用准确率P、召回率R和F1值对实验结果进行评价,公式为
(12)
(13)
(14)
表2 电子病历命名实体识别实验结果
命名实体识别的结果如表2所示,其中CRF是指利用条件随机场模型手动定义了unigram特征后进行命名实体识别的结果。此结果作为基准与深度学习的结果进行比较,MLP+embed与LSTM+embed表示算法模型的查找表层的字向量使用skip-gram模型[15]进行无监督的预训练,训练语料为1 500份糖尿病入院记录。从表2的结果可以看出,在准确率上,CRF模型比MLP效果好,LSTM模型比CRF效果好。预训练字向量对MLP模型的准确率提升有限,但对LSTM模型的准确率提升较明显,提升了5.41%;在召回率上,深度学习模型的效果均比CRF好,在未使用预训练的字向量时,MLP模型优于LSTM模型。使用预训练字向量后,LSTM模型效果优于比MLP模型;在综合评价指标F1上,所有深度学习模型均超过CRF模型,取得最好效果的是使用预训练字向量的LSTM模型,比CRF高7.47%,其他的深度学习模型的F1值相比CRF模型略有提升,总体上证明了深度学习模型比CRF模型更加有效。
通过对表2中的结果数据的分析,可以归纳得到如下结论:(1)在电子病历的命名实体识别领域,深度学习的模型在准确率上和CRF模型差距不大,但是在召回率上和CRF模型相比有较大提升。整体效果上,深度学习模型优于CRF模型;(2)对于具体的深度学习模型,LSTM模型在准确率上高于MLP模型,而MLP在召回率上略高于LSTM模型,总体效果LSTM模型好于MLP模型,表明LSTM模型所添加的序列状态信息对命名实体识别任务有提升效果;(3)当使用预训练的字向量时,LSTM模型无论准确率和召回率均有较大提升,而MLP模型均无明显提升,表明预训练字向量可以算是一种比较有效的语义增强技术,可以一定程度提高实体识别结果。综上所述,对于电子病历的命名实体识别任务来说,基于预训练字向量的LSTM是最优的模型。
本文基于两种神经网络-多层感知机网络和长短期记忆网络实现了电子病历的命名实体识别算法。实验结果显示基于深度学习方法比手动定义特征的CRF效果提升明显,表明了深度学习算法可以有效应用到电子病历命名实体识别领域中。但是,深度学习算法在训练和预测阶段所花时间均长于CRF模型,今后仍需要寻找更好的模型或训练算法,并对现有算法进一步优化。