MiME: Multilevel Medical Embedding of Electronic Health Records for Predictive Healthcare

在这里插入图片描述
原文

摘要

  使用电子病历的许多医学健康预测任务重,深度学习模型展示出了非常杰出的表现。但是这些模型大都需要大量的训练数据,以超过其他大多数医疗系统的能力。一些外部资源,比如医学本体,经常被用作桥接数据量的约束,但是通常因为不一样的术语,导致这种方法还不能投入使用。为了解决数据不充足的挑战,我们利用了电子病例数据的特有的多层结构,尤其是医疗代码之间的编码关系。我们提出了个多层级医疗潜入Multilevel Medical Embedding ( MiME ),这个模型可以学习电子病历(EHR)数据的多层级嵌入,同时,在不需要额外标签的情况下,依赖EHR结构去做辅助医疗预测任务。我们分析了两种预测任务,心力衰竭预测和连续性疾病预测,在这两个任务中,MiME在各种评价设置中,都表现好于目前的基础方法。尤其是MiME在各种不同大小的数据集中预测心力衰竭的表现好于各种基线。尤其是在最小的数据集上,MiME表现最为出色(PR-AUC比最好的基线提升15%), 证明了他对EHR数据多层结构的有效建模的能力。

1 介绍

电子病历数据的急剧增加,激发了深度学模型的使用,并且在疾病诊断、疾病检测和风险预测方面表现非常杰出。然而训练出理想的深度学习模型需要大量的数据(即 每一个患者的大量病历记录,和每个病历记录的各种特征)。尤其是针对那些没有被广泛关注的服务(比如 重症监护病房ICU )和 条件不允许的情况下,大多数的健康系统都没有获得这么大量的数据来足以优化模型使之表现优异。

外在资源,尤其是医疗本体,已经被用做来解决数据不充足的问题。比如,医疗代码的潜在嵌入(比如 医疗代码)能够通过一种将图中自身和邻居节点嵌入的凸组合学习来实现。然而没有制定标准,或者是术语的特殊使用,或者是从一个健康系统的电子病历向其他的系统进行映射太过复杂,医疗本体没办法获取,也不能直接使用。例如,很多诊所仍然使用他们对药物和在试验中自己制定的术语, 这导致了没能和标准医疗本体的术语保持一致,比如Anatomical Therapeutic Chemical (ATC) Classification system和 Logical Observation Identifiers Names and Codes (LOINC) 这两项工作。

作为替代方案,我们探究了如何利用电子病历EHR数据的潜在多层级结构来提高学习效率。多层的EHR数据结构,从患者开始,然后是visit,然后是visit的diagnosis编码,这些都是跟治疗的顺序关联的(比如 medication,procedure)。电子病历的多层级结构,提供了有影响效果的多层级关系,尤其在diagnosis编码和treatment编码之间。例如,一个发烧diagnosis,会引起一系列的treatment,比如 acetaminophen (药物medication),和IV fluid 打点滴(procedure)。我们对在这种少量数据的情况下是否可以利用这种分层结构去获得一个健壮的模型进行了实验。据我们所知,还没有人在利用电子病历多层结构方面开展研究工作。然而,他们将电子病历数据处理成互相独立的编码,这就忽略了visit过程中医疗编码之间的潜在多层级关系。

我们提出了一种多层级的医疗潜入模型MiME, 同时讲电子病历固有的层级结构转换成了多层级的嵌入,并用在辅助疾病预测任务重反映出这种潜在的层级结构不需要额外的标记。对医疗编码的潜在结构进行建模,使得我们更准确的捕获不同患者状态的不同模式。辅助诊断任务讲EHR数据的分层次知识注入到了嵌入过程中,致使主任务可以从相关的辅助任务中借用预测能力。我们分析了两种预测任务, heart failure prediction and sequential disease prediction 心力衰竭和时序性疾病(我也不知道是啥玩意), 其中,MIME在不同的评估设置中的表现都超过了当前的基线。尤其在不同数据量的数据集中对心力衰竭预测MiME的表现超过了所有的基线模型。尤其是在最小的数据集上,MiME表现异常突出(与最好的基线相比,PR-AUC获得了15%的提升),证明了这种模型有能力对电子病历数据的多层级结构有效建模。

2 方法

电子病历数据可以从个性患者的病例中表示成公共的层级结构,其中每个患者的病例都包含了一些列的visit。在典型的visit中,医生会给病人一个diagnosis,然后,根据diagnosis给出要药物治疗或者治疗流程(procedure)。这个过程产生了一系列的treatment(medication或者procedure)编码和 diagnosis与多个treatment编码(图1)之间的关系。设计出的MiME明确的捕获了诊断diagnosis和visit中treatment编码之间的关系。
在这里插入图片描述
图1 对患者一次寻访的象征表示如下,红色代表diagnosis编码,蓝色代表药物或 procedure编码,一次visit包含了一系列的编码和这些编码之间的分层结构和各种关系。例如当 Acetaminophen and IV fluid 某药物和打点滴 都与发烧有关,他们就都作为发烧节点的子节点

2.1 MiME中的符号

在这里插入图片描述
假设每个患者有一个按照时间的visit序列 v1 v2 … vt , 对于每一个visit vt, 包含大量不同的diagnosis Dx 对象 o1t o2t… ovtt, 代表第t次visit的第i个diagnosis 对象oit, 由Dx编码 dit 组成, 并且有一系列相应的treatment(medication或者procedure) Mit和它对应。类似的,对于每一个Mit,包含很多不同的treatment编码 m.为了减少混乱,我们在讨论一次visit的时候,省略代表第t次寻访的上标t。表1概述了文章中要使用的符号。
在这里插入图片描述
在图1中,有5个Dx编码,也就是五个Dx对象 O1 … O5 。 更特别的,第一个Dx对象O1种有d1 =Fatigue作为Dx编码, 但是没有treatment编码。 O2缺有d2=Cough和两个相关联的treatment编码 m21 = Benzonatate和m22 = Acetaminophen。在这种情况下,我们使用g(d2, m21)去捕获Dx编码Cough和treatment编码Benzonatate之间的相互作用,并把输出输入给f(d2, M2)去获得向量来表示Dx对象o2,使用五个Dx对象的嵌入o1,… o5 我们就能得到visit的嵌入v。此外,如果医生给不止一份diagnosis开了相同的药品treatment处理,一些treatment编码(比如 Acetamintophen)能够被不止一个Dx编码共享(比如Cough , Fever)。接下来每一个Dx对象将会包含一份他自己的treatment编码拷贝来附属给他自己,分别表示成m22, m31。

2.2 MiMe的描述

多层级潜入

如之前探讨的,以前的方法通常将一个visit进行展开,Dx编码和treatment编码被塞到了一起,形成一个唯一的visit Vt, 能够被表示成一个二进制的向量xt,在这里插入图片描述每一个维度都是特定的Dx和treatment编码,接下来一个患者的visit序列被编码成:
在这里插入图片描述
在这里,Wx是潜入矩阵,将二进制向量x转化到低纬度的visit表示。σ是非线性激活函数比如sigmoid或者ReLU,h(.)是一个函数,将患者的visit序列映射成表示v0 v1 。。。 vt。 相比而言,MiMe显著的生成visit表示vt,能够塞入任何h(.) 来进行接下来的预测任务。h(.)可以是一个简单的RNN 或者RNN、CNN和attention机制的组合。
在这里插入图片描述
图2 使用MiME的预测模型。编码被嵌入到多层级中:diagnosis层,visit层和patient层。最终预测模型p(y|h)基于patient表示h,这个h是利用了visit表示v0 v1 … ,每个vt的生成使用了MiME框架。如图表示,treatment层,MiME显著的捕获了diagnosis编码和对应treatment编码的潜在关系。当数据量不足够的时候,MiME也使用那些编码当作辅助预测目标去提升自己的泛化能力。

MiME明确的捕获了表现如图1中Dx编码和treatment编码的潜在关系。图2展示了MiME怎样通过自下而上的多层级嵌入方式构建一个表示V(这里省略t)。对于一个Dx对象Oi,一个Dx编码di和它对应的treatment编码Mi被用来获取Oi的表示向量oi,然后在一个visit中多重的Dx对象被嵌入成了o0, … o|v|, 这样轮流的表示一个患者附带这他的visit的嵌入h。MiME的公式如下:
在这里插入图片描述
这里公式1 2 3 描述了MiME的自上而下的风格,分别关联着visit 层 diagnosis层和treatment。

公式1 一个visit的嵌入v包括了所有Dx对象嵌入序列o, 并通过Wv矩阵转换得到。σ是非线性激活函数比如sigmoid或者ReLU。公式2中oi是聚合了Dx编码di的向量表示r(di)和它对应的traeatment Mi,然后通过Wo转换得到。这种潜在联系被g(di, mij)捕获并加入到r(di),可以认为是关联diagnosis的多个treatment的表示,注意公式1和2 F和G被用作表示skip-connection

公式3中Dx编码的嵌入r(di) 和 treatment编码的嵌入r(mij)被捕获到另一个潜在空间,从而di和它的多个mij的潜在关系可以有效的获得。公式3受到最近的双线性池化技术启发,在附录A中详细探讨。公式3 在公式2中G 也可以认为是r(di)与其g(di, mij)的联系关系的skip-connected。

辅助任务联合训练

患者的嵌入h经常被用作特定的预测任务, 比如心力衰竭预测或者死亡率。h的表示力度来源于对每个visit Vt的捕获 和 对总想函数h(v0 v1 … vt)的建模。因此这项工作就是在建模一个vist Vt。 我们如下执行辅助预测:
在这里插入图片描述
给定Dx对象的嵌入 ot1 ot2 … , 用公式1的方法聚合他们去获得vt, MiME来预测Dx编码dti和关联她得treatment编码 mt ij, 描述如图2。 Ud将z维度映射为|A|维度(diagnosis维度)来预测di(诊断结果), Um将z维度映射到|B|维度(treatment维度)来预测mij(治疗对策)。公式6表示了患者的总visit次数, CE是交叉熵损失函数 lambda是辅助损失系数项,权衡辅助任务和主要任务的系数。对di预测使用softmax,因为只有一个唯一的Dx对象Oi为结果。然而Oi关联的treatment会 为0或者多个,所以使用|B|个sigmoid进行预测每一个treatment编码。(这块我没明白怎么预测treatment的)

辅助任务基于EHR数据的层级结构,并且不需要额外标注工作。潜在的工作导向模型去学习Dx对象的嵌入oi, 也就是特定的编码的表示。正确获visit中的内容是接下来预测任务的基本工作。让模型去学习vt的嵌入,不只是为了目标预测,也是为了让通用基础知识能够使用。

3 实验

公开了代码 https://github.com/mp2893/mime.

3.1 数据源

由shutteer health机构提供的电子病历数据,这份数据集合就是为了研究对未来心脏疾病的预测。包含了30764个中老年患者,从50到85岁。我们抽取了diagnosis编码,medication编码和procedure编码,统计了整个病历和相关顺序。我们使用了临床分类软件 ICD9-CM 去分组 ICD9 diagnosis 编码为 388 个种类。Generic Product Identifier Drug Grou对 药物进行分类为99种类。临床分类软件r Services and Procedures 将 CPT procedure分类为1824种类。编码在自己所属类别内唯一,表2概述了数据情况

在这里插入图片描述

3.2 基础模型

首先我们使用GRU 对不同visit的序列进行映射成一个患者的表示h

  • 原始数据: 唯一的visit Vt 又二进制向量 x t 表示得到。二进制向量x维度关联着visit中各项编码,发声为1 否则为0。(这里看前面2。2 没做太详细的翻译)
  • linear: 把x转换成低纬度向量v
  • sigmoid tanh relu: 看原文吧
  • sigmoid tan relu 看原文吧
    与现有两种embedding方法进行了比较
    Med2Vec 和Gram 各有特点,都没有考虑电子病历的层级关系。

3.3 预测任务

30764个患者 进行了连续18个月的观察之后 在一年内 有一些患心脏病了 有些木有, 然后那他们进行了实验。 把他们患病之前的电子病历全嵌入了,得到每个人的表示h,然后做分类,看是否会患病。
然后阐述了一下 于现有没有考虑层级结构的平铺式的利用数据的嵌入方法,进行了对比,本模型表现贼漂亮,

3.4 实验1:数据量变化

在这里插入图片描述

3.5 实验2:变化 visit的复杂情况

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

4 相关工作

5 结论

他们这玩意好使呗!

感谢

美国国家自然基金资助了,,完了感谢他们一下砸。

参考文献:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值