随着现代医学技术的发展,电子病历广泛使用,从而积累了大量的临床数据,如生命体征[1]、疾病诊断[2]、处方药物[3]、医疗费用[4]等数据。同时,深度学习技术为医疗数据的挖掘和利用提供了新的技术手段,是目前的一个热点研究方向[5-6]。其中,基于电子病历的组合药物推荐算法,能够根据患者病情的变化特征、药物属性及大量药物之间的作用关系,辅助医生制定安全有效的处方[7],具有重要的研究价值。
早期的药物推荐系统多基于规则。李枫林等[8]基于描述逻辑与语义推理向用户推荐合适的抗高血压药物,实现了简单的药物推荐算法。Chen等[9]从患者的诊断、疾病分类、症状、检测结果等医学信息中得出用药规则以推荐药物。深度学习运用到药物推荐系统之后,Gong等[10]将患者的体征、医学诊断、既往用药等信息嵌入一个低维空间,并使用该嵌入表示进行推荐。
注意力机制是在深度学习模型中嵌入的一种特殊结构,用来自动学习和计算输入数据对输出数据的贡献大小。将注意力机制运用到药物推荐算法中能够捕捉患者病历中对当前推荐药物有贡献的内容进行学习。Choi等[11]使用注意力机制学习患者历史就诊的权重,对每次就诊之间的关系进行建模,获得以往就诊对当前药物推荐的贡献矩阵,帮助医生理解模型提供的推荐依据。Ma等[12]使用注意力机制来解决不同就诊时间间隔的临床检测数据对患者诊断的影响,从而提升模型的准确率。
图神经网络能够处理医疗实体间的复杂关系,它在医疗领域的使用方法就是在医疗图数据上进行卷积,包含基于谱方法和基于空间的方法。谱方法是在谱域上进行卷积,首先将图数据上的信号转换到谱域,然后在谱域上进行卷积的定义,再变换到空间域,代表模型为图卷积神经网络(graph convolutional networks,GCN)。空间方法是直接在空间上进行卷积,通过将相邻结点的信息聚合来更新结点的表示,代表模型为图注意力网络(graph attention networks,GAT)。Shang等[13]结合动态记忆网络和循环神经网络来模拟患者电子病历中的时序依赖,使用图卷积网络对药物之间的相互作用进行建模,降低推荐药物间的相互作用率,提升了推荐药物的安全性。Bhoi等[14]在推荐系统中使用图注意力网络对药物间相互作用进行建模,给不同模块量化得分,使得推荐药物具有可解释性。
以往研究未能充分利用药物相互作用知识,忽略医疗本体关系,导致医疗表示稀疏,推荐质量不够高。针对这些问题,本研究提出一种基于图神经网络结合注意力技术的药物推荐算法(graph augmented neural network with attention for medication recommendation,GRAD)。利用该算法构造医疗代码的本体关系图,使用图神经网络学习医疗代码的本体语义信息,丰富医疗代码的表示; 将医疗表示输入结合注意力机制的循环神经网络中捕捉患者历史病历特征; 同时引入药物相互作用知识,学习药物相互作用知识; 并在公开的电子病历数据集上进行多个试验并评估。
1 药物推荐定义1.1 患者病历定义
患者的电子病历可以表示为t次就诊的序列,如图1所示。一位患者的病历表示为P=(x1,x2,…,xt),t为该患者就诊次数。患者的第i次就诊表示为xi=(di,pi,mi),i=1,2,…,t,其中di为患者第i次就诊的国际疾病分类(international classification of diseases,icd-9)[15]诊断代码,如{' 4373',' 43820',' V452' }; pi为一个患者病历中第i次就诊的icd-9手术代码,如{' 3731',' 8872',' 893' }; mi为第i次就诊的药物解剖学、治疗学及化学分类法(anatomical therapeutic chemical,ATC)药物代码,如{' A12C',' A03B',' C01C' }。病历中出现的所有诊断代码、手术代码、药物代码的数量分别用Nd、Np、Nm来表示。
1.2 推荐任务定义以电子病历数据为基础,给定一名患者过去病历记录中的手术代码Pt,Pt=(p1,p2,…,pt),诊断代码Dt,Dt=(d1,d2,…,dt)和历史用药代码Mt-1,Mt-1=(m1,m2,…,mt-1)。引入药物知识和医疗代码的本体信息,将药物推荐当作序列预测任务,通过生成多标签输出yt^∈{0,1}Nm来进行药物推荐。
2 GRAD算法2.1 算法框架描述GRAD算法框架如图2所示。它主要由图嵌入表示模块、患者病历表示模块、历史用药检索模块、药物相互作用模块和输出模块组成。图嵌入表示模块使用图神经网络对手术、诊断、药物本体图进行学习,对医疗代码使用向量表示并输出。患者病历表示模块对患者的历史诊断和手术代码向量使用注意力机制结合循环神经网络进行学习,输出患者历史病历向量qt。历史用药检索模块使用患者病历向量qt与历史用药向量相结合,得到历史用药向量vt。药物相互作用模块使用图卷积神网络学习药物相互作用知识,与患者病历向量qt相结合,得到包含药物相互作用信息的药物向量dt。输出模块对qt、dt、vt 3个向量进行拼接,通过多分类输出得到推荐的药物向量。
2.2 医疗代码的本体图嵌入表示
医疗代码的编码体系结构可以描述为一个树状的分类结构,icd-9编码部分结构表示如图3所示。叶子结点代表icd-9诊断代码,其祖先结点代表具有医学分类概念的医学本体。如C9 413.0(卧位心绞痛)和C10413.1(Prinzmetal氏心绞痛)同属于413下的心绞痛分类,属于410~414缺血性心脏病总分类。通过电子病历中出现的医疗代码,根据编码知识来构造相应的医学本体关系图。使用图神经网络对医学本体树的各结点特征进行学习,使得本体树中的结点特征包含不同关联度的其他结点信息,获得更加全面的表示。最终得到融合医学本体语义信息的医疗代码表示,以用于后续的推荐任务。
使用经过设计的图注意力网络实现消息在icd-9本体图中的传递(图3)。对所有结点初始化,对图中每个结点用一个初始化的向量e*表示,e*∈R64×1。第一步将所有的非叶子结点eiC^-*表示为其自身嵌入表示和其所有子结点的嵌入表示之和,采用图注意力机制的方式进行结合:
式(1)中:σ为一个非线性激活函数(这里使用的是ReLU函数); c(i)为结点i的所有孩子结点集合; αkij为第k个注意力下各个结点的系数,
式(2)中:a为可学习的矩阵向量,a∈R2×64; σLeakyReLU为LeakyReLU激活函数; = 为矩阵的拼接。
第二步对所有叶子结点eiC*)进行嵌入学习,利用图注意力网络将其所有的祖先结点的嵌入表示和自身结点的嵌入表示相结合,
第k个注意力下各个结点的系数
式(4)中:a(i)为叶子结点i的所有祖先结点; σLeakyReLU为LeakyReLU激活函数。图3展示了叶子节点C10通过图注意力网络结合其所属分类本体信息的过程。最终得到了融合本体信息的所有诊断代码表示。
对电子病历中的诊断代码、手术代码和药物代码分别构造icd-9疾病、icd-9手术和ATC药物的医学本体图,再通过图神经网络学习诊断代码、手术代码和药物代码的结构信息。输入患者的医疗代码,得到其医疗代码对应的嵌入表示。于是一位患者的第i次就诊可以表示为(dei,pei,mei)。
2.3 病历学习及药物相互作用检索2.3.1 历史诊断和手术的学习采用结合注意力机制的循环神经网络学习患者历史病历,将患者病历中的诊断、手术表示视作序列,输入循环神经网络。使用注意力机制将历史诊断的隐藏层输出信息结合到当前诊断表示中。将历史诊断信息注意力权重表示为αd,αd[i](1≤i≤t)为第i次就诊权重的量值,
式(5)中:Gα为一个方法,这个方法是将诊断代码的时序向量输入循环神经网络(gate recurrent unit,GRU)并输出; ht为GRU中的一个隐藏层输出; Fα为权重向量的R64×1线性变换函数。同样将诊断代码的时序向量输入循环神经网络Gβ中,并用tanh作为激活函数获得权重βd,
式(6)中:gi为GRU中的隐藏层输出。结合2个诊断权重得到包含历史诊断信息的表示
式(7)中:Symbol TigerDC@为逐元素相乘; rdt∈R64×1。
将手术表示序列输入结合注意力机制的循环神经网络中得到具有历史手术信息的手术表示rpt,连接2个向量通过线性变化输出得到患者历史病历的表示
2.3.2 历史用药检索采用记忆神经网络存储历史用药信息。历史用药以键值对的形式存储,键为结合患者过去诊断和手术的表示向量qi,值是对应使用药物的表示mei。键值对由一对元组〈qi,mei〉(i∈[1,t-1])组成。给定当前就诊结合历史病历的向量qt,计算之前就诊信息的权重
γt=softmax(qt·q1,qt·q2,…,qt·qt-1) (9)
通过注意力γt∈Rt-1得到历史用药向量vt,第i次历史用药向量:
2.3.3 药物相互作用检索和输出引入药物相互作用知识,用邻接矩阵AC表示电子病历中的药物共存关系,用邻接矩阵AD表示药物相互作用关系。采用图卷积神经网络学习药物共现关系和药物相互作用关系,以表示药物相互作用知识。用A*∈RNm×Nm来统一表示邻接矩阵AC和AD,每个A*可以表示为
A*=D-1(A*+I)D-1 (11)
式(11)中:A*为一个对称归一化拉普拉斯矩阵; D为一个对角矩阵; I为一个单位矩阵。然后使用图卷积神经网络来学习每个图中药物之间的关系,将药物的相互作用和共现关系结合到嵌入表示中:
式(12)中:W1C,W2C,W1D,W2D∈R64×64,为参数矩阵。与模型GAMENET[13]不同,本文方法使用从药物本体图输出的药物表示矩阵作为输入。经过学习可以得到药物共现关系图的表示矩阵ZC∈R64×Nm和药物相互作用图的表示矩阵ZD∈R64×Nm。基于这些药物表示和查询向量qt计算注意力
λt=softmax((ZC+w ZD)T·qt) (13)
式(13)中:(ZC+w ZD)T为(ZC+w ZD)的转置矩阵; w∈R,为药物相互作用的权重。得到检索药物相互作用信息的向量
dt=(ZC+w ZD)·λt (14)
将患者的历史诊断及手术表示qt,历史用药的向量vt,药物相互作用的检索结果dt相连接,使用非线性激活函数变换多分类输出,得到推荐的药物向量y^t,y^t∈RNm,当y^t[i]>0.5时则推荐药物i。
2.4 损失函数设置将药物推荐任务视作序列预测的多标签分类问题,使用二元交叉熵损失函数、多标签分类间距损失函数来控制推荐药物的准确率。定义药物相互作用损失函数来衡量推荐药物的相互作用率。
二元交叉熵损失函数定义如下:
式(16)中:T为患者就诊的总次数; yit和y^it分别为第t次就诊的真实用药和算法推荐的药物。定义多标签间距损失函数
式(17)中:U为真实病历使用药物的集合。药物与药物相互作用的损失函数
使用3个超参数γ1、γ2、γ3来联合3个损失函数,
Lcombine=γ1Lbce+γ2Lmulti+γ3LDDI (19)
式(19)中:γ1+γ2+γ3=1。
3 试验设计与结果分析3.1 数据集介绍
本试验使用重症监护医学信息数据库(Medical Information Mark for Intensive Care,MIMIC-Ⅲ)[16]电子病历(Electronic Medical Record,EMR)数据,该数据集是由麻省理工学院计算生理学实验室发布的免费公开的重症监护室数据集。本试验使用该数据库中的诊断单、手术单和处方单数据,筛选患者在进入重症监护室(Intensive Care Unit,ICU)后的24 h内接受的药物,并将药物编码从国家药物代码(National Drug Code,NDC)编码转换为ATC三级编码,并使用icd-9编码实现诊断代码和手术代码的统一。数据集的统计见表1。
3.2 评价指标及训练设置为衡量推荐准确度,使用杰卡德相似系数(Jaccard)(真实药物与推荐药物交集的大小除以并集大小)、F1值(精确率和召回率的调和平均)、精确度调用曲线面积(precision recall area under curve,PRAUC)作为准确率的衡量指标。同时为衡量推荐药物的安全性,定义药物相互作用率RDDI,即推荐组合药物中含有药物相互作用(drug-drug interaction,DDI)药物的比例
式(20)中:N为测试集中患者的数量; Tk为第k个患者的就诊次数。定义相对药物相互作用率ΔDDI,即推荐药物的DDI与电子病历(EMR)数据集中真实DDI的相对百分比
试验将以4:1:1的比例将数据集随机分为训练集、验证集和测试集。超参数在验证集中进行调整,取值分别为γ1=0.98、γ2=0.01、γ3=0.01。GRU和图神经网络中随机失活(dropout)设置为0.4,图注意力网络中注意力个数K为2。使用自适应估计优化器来优化模型的参数,学习率为0.000 4,根据40个训练周期后验证集上的结果选择性能最佳的模型,试验的最终结果为测试集上的结果。所有方法均使用PyTorch 1.7.0软件实现,系统为Ubuntu 18.04,显卡为具有12 GB内存的NVIDIA GEFORCE RTX 2080Ti。
3.3 对比方法介绍逻辑回归(logistic regression,LR)方法使用L2正则化逻辑回归,将医疗代码用多热向量来表示并作为数据输入,使用二分类用于处理多标签输出。RETAIN方法[11]基于两层注意力网络模型学习的药物组合序列,选择过去就诊中重要的临床变量来进行推荐。LEAP方法[17]使用循环神经网络来学习药物间依赖关系,使用基于内容的注意力机制来捕获标签到实例间的映射。GAMENET方法[13]通过存储模块将历史用药和药物相互作用DDI使用图卷积网络集成来降低推荐药物间的相互作用率。PREMIER方法[14]使用注意力机制学习患者历史表示,结合图注意力机制学习药物相互作用来进行安全的药物推荐。
3.4 试验结果及分析3.4.1 不同模型对比试验不同模型对比试验见表2。试验结果表明,在所有方法中,本文方法可以达到最好的效果。本研究提出的方法在Jaccard、PRAUC和F1方面比PREMIER分别高出1.02%、1.09%和1.23%。同时本文方法兼顾药物相互作用,在取前40种药物相互作用情况下和同类深度学习方法对比,本文方法的RDDI较低,为0.070 5。此外本文方法推荐的平均药物数量为14.98种,在与各个深度学习方法对比中最接近病历真实的平均药物数量14.68种。这表明本文算法比其他算法更能有效提高药物推荐的准确率和安全性。LR为机器学习的方法,在F1、PRAUC、Jaccard得分方面不如其他深度学习方法。深度学习方法中LEAP为基于实例的方法,在各项性能指标中低于RETAIN、GAMENET等基于患者历史病历时序序列的方法。这也证实了患者的历史就诊信息对当前药物推荐非常重要。GAMENET和PREMIER方法引入了药物相互作用知识,相比LR、LEAP方法提升了药物推荐的准确率,降低了药物的相互作用率,但这些方法将医疗代码看作独立个体,忽视了医疗代码间的医学知识,各项指标低于本文方法。这表明了结合医疗本体图知识后的算法对药物推荐的准确率和药物相互作用率的控制具有提升作用。
去掉DDI图,不进行药物相互作用检索的模型,在没有药物相互作用知识图的情况下,Jaccard、PRAUC、F1值变动不大,但模型推荐药物中的RDDI变高,达到0.076 7,这说明本文方法中把药物间相互作用关系的知识和具有历史就诊信息的查询向量相结合,降低了推荐药物中的相互作用率,能够有效提高用药安全性。去掉本体图模块,直接用简单的多热编码嵌入矩阵代替医学本体图嵌入进行试验,在没有医疗代码本体结构的嵌入后,F1值下降0.89%,PRAUC下降0.66%,药物推荐的准确率出现明显下降,这表明本研究使用的图神经网络具有对高阶结构特征的编码能力,能够丰富医学本体的嵌入表示,在一定程度上弥补了训练数据稀疏的问题,提高了药物推荐的准确率。
3.4.2 不同就诊次数的试验由于每位患者的就诊次数不同,故应考虑以往就诊次数对药物推荐质量的影响。不同就诊次数下F1值对比如图4所示,LEAP为基于实例的方法,就诊次数的增加对之后的药物推荐没有影响,F1值一直在较低的水平波动。GAMENET为基于历史就诊时序的方法,能够学习患者之前的用药,相比LEAP方法有明显的提升,但随着就诊次数的增加,F1值开始下降。PREMIER相比GAMENET增加了时序注意力机制,提升了F1值,但随着就诊次数的增加,F1值仍然会下降。对于不同的时序长度,本研究使用的算法优于其他比较的方法。本文算法在以就诊次数为分类依据的所有试验中F1值均为最高。特别是对于就诊次数多的患者,与其他方法相比仍能保持较高的准确率,这表明本文方法对患者病历中的长时序依赖具有更好的建模能力。
图4 不同就诊次数下F1值对比
Fig.4 Comparison of F1 value under different number of visits
3.4.3 不同DDI数量试验
关于算法对药物相互作用的效果,本研究还做了进一步的试验。分别使用前40、60、80、100种DDI类型,以探讨在使用不同数量的DDI情况下,本算法及各对比方法受到的影响。不同DDI数量试验结果见表3,RETAIN方法没有引入药物相互作用知识,使得RDDI一直处于较高水平; GAMENET和PREMIER引入了药物相互作用知识,在DDI数量较少时能够控制推荐药物的相互作用率,但随着DDI数量的增加推荐药物的相互作用率快速增加; LEAP是基于实例的方法,推荐药物按照之前的处方进行推荐使得推荐药物的相互作用能控制在较低水平,但在DDI数量取前100时ΔDDI仍会大于0; 本文方法优于对比方法,尽管ΔDDI从-18.48%上升到-0.26%,但考虑到DDI的数量从40变为100,GRAD是唯一能够实现RDDI降低的算法,并且无论DDI类型有多少,ΔDDI始终大于零。这表明在引入药物相互作用知识后本算法能有效降低推荐药物的相互作用率,更具安全性。
4 结 语
本研究提出一种基于图神经网络和注意力机制的药物推荐算法,将每个医学本体当作一个结点,采用图神经网络捕捉其中各个医学本体之间的关系,学习包含医学本体知识的高阶特征; 同时使用注意力来对患者的历史病历进行更高效的建模,引入药物相互作用知识,提供兼顾用药安全的药物推荐。以MIMIC电子病历为数据源的综合试验结果表明,本算法能够提升推荐药物的准确率,并降低推荐药物间的相互作用率。尽管本研究提出的算法取得不错效果,但研究中仍存在一些问题,例如由于数据规模的限制在医学表示时仍存在稀疏性等问题,后期的研究将引入更多的知识以增强医学表示。
- [1] 李鹏飞,鲁法明,包云霞,等.基于医疗过程挖掘与患者体征的药物推荐方法[J].计算机集成制造系统,2020,26(6):1668.
- [2] 张晓博,杨燕,李天瑞,等.基于医疗文本数据聚类的帕金森病早期诊断预测[J].计算机应用,2020,40(10):3088.
- [3] 刘杰,金柳颀,景波.基于药物和疾病特征关联的药物重定位混合推荐算法[J].计算机应用研究,2020,37(3):672.
- [4] 芮晨,李杰,郭栋炜,等.基于LIME-BP神经网络的医疗费用预测研究[J].中国卫生统计,2020,37(5):698.
- [5] 王露潼,王红,宋永强,等.基于FT-LSTM模型的临床事件诊断序列预测研究[J].计算机应用研究,2020,37(10):2961.
- [6] 吴宗友,白昆龙,杨林蕊,等.电子病历文本挖掘研究综述[J].计算机研究与发展,2021,58(3):513.
- [7] 周虎,于跃,张正宇,等.基于电子病历的ADR知识发现与应用模型研究[J].中国卫生事业管理,2020,37(2):81.
- [8] 李枫林,李娜.基于情景的医药信息服务本体建模及规则推理研究[J].情报理论与实践,2016,39(5):120.
- [9] CHEN Z, MARPLE K, SALAZAR E, et al. A physician advisory system for chronic heart failure management based on knowledge patterns[J].Theory & Practice of Logic Programming,2016,16(5):604.
- [10] GONG F, WANG M, WANG H, et al. Smr:medical knowledge graph embedding for safe medicine recommendation[J].Big Data Research,2021,23:100174.
- [11] CHOI E, BAHADORI M T, KULAS J A, et al. RETAIN:an interpretable predictive model for healthcare using reverse time attention mechanism[C]//Proceedings of the 30th International Conference on Neural Information Processing Systems. Barcelona:CAI,2016:3512.
- [12] MA L, ZHANG C, WANG Y, et al. Concare:personalized clinical feature embedding via capturing the healthcare context[C]//Proceedings of the AAAI Conference on Artificial Intelligence. New York:AAAI,2020:833.
- [13] SHANGE J, XIAO C, MA T, et al. GAMENET:graph augmented memory networks for recommending medication combination[C]//Proceedings of the AAAI Conference on Artificial Intelligence. Hawaii:AAAI,2019:1126.
- [14] BHOI S, LI L M, HSU W. PREMIER:personalized recommendation for medical prescriptions from electronic records[EB/OL].(2020-08-28)[2022-05-12].https://arxiv.org/abs/2008.
- [15] SLEE V. The international classification of diseases:ninth revision(icd-9)[J].Annals of Internal Medicine,1978,88(3):424.
- [16] JOHNSON A E W, POLLARD T J, SHEN L, et al. MIMIC-Ⅲ, a freely accessible critical care database[J].Scientific Data,2016,3(1):1.
- [17] ZHANG Y, CHEN R, TANG J, et al. LEAP:learning to prescribe effective and safe treatment combinations for multimorbidity[C]//Proceedings of the 23rd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. New York:ACM,2017:1315.