随着医疗信息化建设的普及,医疗大数据这个词在过去一段时间如明星一般吸引着医疗界、学术界、工业界以及政府机构广泛关注的目光。数据之中,临床电子病历无可厚非地成为了这股浪潮中被关注的焦点,很多有识之士异口同声:“这是一个巨大的宝藏”。
我们要医疗AI大发展,靠什么?我们要真实世界数据研究,靠什么?一切都离不开以临床电子病历为代表的医疗大数据。然而,宝藏在那里,可通往宝藏之路并不平坦,很多寻宝人都曾经历“看得见,却摸不着”的痛楚。
这是为什么呢?数据不开放、数据孤岛、数据隐私、伦理问题等等都是背后的原因。但在这里,我们重点看其中的技术问题。
技术层面上,当前的瓶颈问题在于:海量的医疗数据对计算机而言并不可计算。通俗的解释是:这些以文本为主的电子病历数据虽然可以让专业人士看懂,但计算机理解不了,也就没法发挥其计算能力,就更别提到应用端的价值体现。
举个例子,若想知道国内排名前十的肿瘤医院收治的、没有家族病史的肺部恶性肿瘤患者总数,数学上看起来足够简单,但即便这些医院真把数据贡献出来也未必数的准。
为什么?家族病史都藏在病历中的一段段的自然语言文本中,要让计算机先把它们识别出来,这事靠人力可就“劳民伤财”了。
可即使识别出来也还不够,如果我们的计算机不知道“非小细胞肺癌”就是一种肺部恶性肿瘤,那计算机仍不会去数这个数。这只是一个再普通不过的例子,在通往数据宝藏之路上,为了让数据可计算,隐藏的陷阱常常让寻宝人跌倒。可是比跌倒更可怕的,是有些陷阱能把寻宝人迷晕,让其沉浸在寻到宝的幻觉中不自知,拿着石头当金子,最后害人害己,贻笑大方。
我们在这里具体讨论的是在临床电子病历自然语言处理上的三个陷阱和一些识别陷进的方案,分别是:数据质量问题、数据结构化问题、数据标准化问题。配合前边的例子,这些几乎是在电子病历为代表的医疗大数据寻宝路上的必过之关卡。
数据质量问题
先聊数据质量问题。临床电子病历的质量真的有问题,如果这些问题不解决,我们随后的许多努力就将白白浪费。无论数据的信息提取和标准化做的多好,无论构建出多么美妙的AI模型,因为原始数据是错的,得到的所有模型和结论也就跟着错了。
图片来源:https://www.123rf.com.cn
那么数据质量有什么问题呢?举些个例子,如果我们发现一个患者的诊断结论为卵巢癌,而患者性别为男,还会用这个数据做进一步的临床研究吗?如果我们发现病理报告汇总中当天来检查的二十多个患者的生日全部是同一天,这得是多么大的“缘分”?如果我们发现肺炎患者大面积缺失血常规检查的结果;如果我们发现…这一切都会导致我们的数据产出错误的结论。
因此,在所有的NLP技术模型构建之前,先要想办法发现这些问题。不难看出,上述例证有一个共同的特点,即与正常的医学逻辑、HIT逻辑、常识逻辑相违背。
当然,有足够经验的医生可以发现并判断这里大部分问题,但在海量的电子病历中靠人工发现的办法肯定不靠谱。因此,自动化的数据质量问题发现就变得很重要了。于是很自然的就要构造符号化的数据质控知识库,基本上采用基于一阶逻辑的数理逻辑表达,配合上概率就可以做到。这里真正的难点是数据质控规则的构建,包括质控规则的人工定义与符号化,自动化的质控规则挖掘与人工校验。
知识库的构建一定是来源于数据的,不是“拍脑袋”想出来的。上边提到的数据质量问题得到一定程度的解决以后,就到了和我们后边要介绍的自然语言处理技术非常相关的质量问题了,就是标注数据的质量问题。大部分AI模型的构建是需要人工标注的数据的,这里就包括针对临床电子病历的结构化算法和归一化算法模型训练。
这里最难的还不是标注工作的工作量本身,而是标注的标准问题。有些词的实体类别判断和词的边界切分很难达成共识。
比如:一个术语词究竟是一种“症状名称”还是一种“疾病名称”?这一辩论常常被专业的医学标注人员所争执。
此外,我们需要标注的结论往往不是直接从电子病历的文本中识别出来的,而是要经过一系列的逻辑判断得到的一个“新词”。
举个例子,在患者的“一述五史”中,我们需要提取一个字段名称叫做“是否有吸烟史”,因此我们需要标注的结论是“是”或者“否”,而这两个字在病历中是不直接出现的,那就需要拆解逻辑,要明确从病例中识别出什么,最终判断这个是否吸烟的结论。
而究竟要从病例中识别出哪些词语?如何判断这些词语间的关系从而得到一个最后标注结论?一切都需要标注的标准和标注人员的共识才能保证质量。
这个问题的难点在于:我们需要标注判断的字段数量不是几个,几十个,而是数千个。仅针对数据的标注标准问题,就有大量的工作要做,并且要结合实际需要的科研及应用场景来做。这需要非常多的专家资源支持和大量的数据使用过程中积累的经验才能做到。
只有这些做到了,我们的机器学习算法才能发挥作用,对病历中的自然语言做到真正的理解从而得到正确的模型。
由此可见,在自然语言处理的算法之前,已经有很多挑战性的问题需要提前解决,而这些问题解决的好坏,已经极大的影响后面的算法设计与执行。
解决了这些,我们再来开始讨论自然语言处理的实际技术问题。
病历结构化问题
假设数据质量治理好了,接下来要让数据可计算,第一个问题就是要从电子病历的自然语言文本中提取出我们想要的关键内容。如从不同章节中识别诊断名称,药品名称,用药计量,肿瘤部位,肿瘤大小,手术名称等。
做自然语言处理的同仁一眼就看能这是实体识别(NER)和关系分类问题。这块技术已经比较成熟,尤其是CNN+Bi-LSTM+CRF及其各种变种算法,再用上BERT,是不是可以解决所有问题?
但这种机器学习方法在这个领域是否真的是一剂万能良药呢?很遗憾,虽然这是一系列好方法,但把主要精力放在这些模型上并非最明智的选择。
我们分析一下原因,文本中实体的识别,也就是我们说的NER问题基本上靠两类信息的建模:第一类是让计算机认识一个词,比如一见到“血管减压术”,就知道这极有可能是一种手术名称;第二类是上下文信息,因为很多词或术语具有很强的歧义性,需要根据上下文语境判断这个词是否在这里代表了其它的意思而并不是我们需要识别的实体名称。
医疗信息的NLP领域与传统NER解决的诸如人名,地名,机构名等的识别不同的是,医疗术语的歧义性并不是很强,而且上下文提供的信息相对偏弱。因此让计算机本身就认识一个词比利用上下文的判断就显得更加重要。
于是,比设计复杂模型、拼命的调整参数显得更加实用的是:构建出一个针对目标实体的词表。
由于临床中目前为止术语的使用并不规范,想要事先靠专业知识直接把词表定义好是一件很难的事情。那么,如何从海量医疗文本中挖掘所需要的词表就变得很重要了。
不难发现,词表的挖掘一定程度上是依赖于实体的识别,而实体识别效果的好坏又依赖于词表的覆盖和构建质量。因此,这并不是两个独立的过程,实体识别与词表的挖掘是需要迭代式的同时展开的。
在迭代的过程中,要有足够大量的文本数据。我们想挖掘的词表要曾经出现在这些文本中才有可能被挖掘出来,而且为保证词表质量和产出效率,这个过程还需要人机的协同并使用主动学习的方式进行采样。
对于临床电子病历的结构化,实体的识别仅仅是第一步。这是因为,真正需要结构化的内容会远比能从病历里边直接识别出来的实体更加复杂。这里还需要实体间关系的判定和很强的医学逻辑推理,最终产出一个需要的字段。
举个例子,对于乳腺癌患者的病历,医生常常不会在病例中显式写明当前患者的分期,但这又是临床研究中非常重要的字段。这种情况下,我们就需要从病理报告中识别出肿瘤原发病灶大小和淋巴结转移部位及个数等并且准确判断出他们之间的关系,从影像检查报告中识别出远处转移、淋巴结转移及肿瘤周边浸润信息,按照NCCN指南对TNM分期的定义,分别基于肿瘤大小及周边浸润信息推理T分期,淋巴结转移部位及个数推理N分期,远处部位输出M分期……通过一系列的医学逻辑推理,最终得到患者完整的TNM分期。
因此,对于临床电子病历的结构化,我们需要准确的实体识别,针对识别出的基础实体进行关系判定。例如,我们必须弄清识别出的多个个数究竟哪一个是针对淋巴转移的。因此,最后经过医学逻辑的知识推理才能完成一个高质量的复杂字段。
图片来源:https://www.123rf.com.cn
那么,能否采用端对端的模型呢?如果有大量的标注语料,端对端模型的训练确实可实现比较好的效果,但是数据标注的成本不可忽视,毕竟我们要处理的是成百上千的目标字段。
另外,端对端的机器学习模型在实际应用中最大的一个弊端是其“黑盒效应”。如果发现了错误,工作人员无法判断错误出现在哪个环节,很难下手去修正错误。
在实际应用中,我们建议将基于词表构建和识别模型构建结合的方式进行实体识别;通过关系分类的机器学习模型与规则模型混合的方式进行关系判定;再经过医学逻辑的知识库经过知识推理来实现高质量的电子病历结构化。这个过程是符号知识与统计机器学习算法集成在一起的系统工程。
病历标准化问题
信息提取工作完成,也就是电子病历的结构化工作做好了。是不是数据可计算性得到解决了呢?还没时间庆祝,因为数据依然不可用。下一个棘手的问题已经等在那了。这就是识别出的实体的标准化问题,也称为术语归一化问题。
这里不讨论通过正则表达式就可以解决的格式标准化问题,比如时间日期的表达,用药剂量的单位统一等问题。重点讨论需要自然语言的语义信息和知识才能做到的术语标准化。
举个例子,“双侧交感神经链切断术” 是一种手术名称,而在某个手术标准表中其标准表达方式是 “交感神经或神经节的切断术”。如果我们不能把各种不同的表达方式归结到一些标准的说法,就真的会出现前边提到过的数数数不准的问题。
临床病历中术语表达不标准这个问题有多严重?如果给医生一个医疗术语名称,让医生自己想各种可能的等价或下位提法,医生能想出多少个?在临床实践中,轻松找出几十个提法的比较多见,几百个的也不少,如果见到上千个的也不用吃惊,因为它是真实的存在。
从自然语言处理的角度看,这似乎是一个典型的实体链接问题。然而,一般的实体链接问题在标准目标实体部分往往有充足的相关描述信息,而且待标准化的实体也会有足够的相关描述用于帮助模型的训练。但在医疗术语的标准化这个问题中,很多标准术语表只有这个术语名称本身,并没有其它信息可用,这给我们的很多标准算法带来了极大的挑战。
于是,这要求我们一边要充分利用医疗术语本身的字面信息,另一方面要构建每个标准术语的相关描述型信息用于计算其与非标准化临床用语间的关系。
这里边有两个关键字,一个是“知识”,一个是“特征”。对于字面信息的使用主要依靠的是知识。举个例子,标准术语体系中有一个词叫做“面神经微血管减压术”,而实际在临床病历中我们更常见的是非标准化的提法,比如“左侧三叉、面、后组颅神经MVD”。
在这个例子中,如果我们的计算机掌握着知识知道左侧三叉包含于面神经,微血管减压术与MVD所指基本无异,那么我们已经判断计算机已经可以判断的八九不离十了。
另一方面,如果我们知道了每个手术主要针对哪些疾病,哪些人群,这些人治疗后的常规用药等信息,都可以当作特征通过机器学习的方法将临床术语与标准术语关联起来。
抓住这两点是解决这个问题的关键,具体方法上,有生成模型,翻译模型,规则体系,语义相似度计算等等,但无论采用哪种模型方法,都离不开诸如上例中的身体部位本体知识等知识形式,同样也离不开来自真实病历,医学典籍,互联网等信息来源的实体描述所产生的特征。
另外,这个问题的另一个大挑战是长尾问题,很多非标准术语出现的次数很少,所以要求我们算法是迭代进行的。当被归结到标准词的术语数量越大,我们所获得的标准词特征表达就越丰富,相关知识也就越完备,对长尾的覆盖能力也就越强。
需要标准化的术语类型非常多,除了上边举例的手术,还有诊断,检查,检验,药品,症状等等。但无论哪一类,其基本方法和道理都是类似的,既需要知识,同时也需要丰富的特征和机器学习的模型用来刻画里边深藏的语义。
其它问题
除了以上谈到的挑战问题,在具体临床电子病历处理任务执行落地的过程中,还有很多陷阱需要迈过。这里推荐几个大家并不陌生而且行之有效的机器学习框架。它们看似无奇但十分重要,可以让我们的工作效率和效果大幅提升。
第一个是针对数据标注的主动学习;第二个是针对跨医疗机构数据处理场景的迁移学习;第三个是对数据进行进一步挖掘应用的联邦学习。让我们一个一个简单解释一下他们为什么重要。希望能给实际应用中遇到的具体困难带来一些启发。
1、主动学习问题
众说周知,要训练机器学习模型,离不开高质量标注的训练数据,临床电子病历也是如此。医疗领域的数据标注是个复杂的工作,这里边对医学专业知识的要求是非常高的,有些情况甚至需多位资深临床专家共同判断才能达成共识。
这意味着临床电子病历文本数据标注的成本和很多人人都可以理解的通用领域文本标注相比会更高。因此标注数据需要精选才行,每一条标注数据都应该有其代表性,还要积累到一定数量形成统计意义且拟合真实数据分布。
这个时候,“主动学习”就变得非常重要了。“主动学习”可以在数据标注平台上根据无标注数据的分布情况,结合已经初步预训练的算法模型在新标注数据上边的表现,来动态决定下一步需要标注的样本。这一过程经常是在无监督学习和半监督学习的框架下进行的。
2、迁移学习问题
如果真的动手处理过多家医疗机构的临床电子病历数据就会发现,各个医疗机构之间——甚至同一家医疗机构的同一个科室内的不同医生之间——在病历书写上的习惯不尽相同。
这不光体现在用词上,还体现在语言的模式上。这意味着我们在一个医疗机构训练出来的NLP模型,放在另外一个机构数据上边,其表现可能会大相径庭。
如果每家医疗机构的数据都重新标注,我们就会再一次面临成本高企问题,这里的成本不仅仅是标注的人力,还有非常昂贵的时间投入。这个时候一种可以把已经有过很多标注数据的场地训练的模型迁移到另一个只有少量标注数据的新场地就变得尤为重要了,这也是迁移学习在这个问题上的重要价值。
技术层面有意思的一点是,传统的迁移学习模型往往定义一个原始域(source domain)和一个目标域(target domain),在给定的两个域上边进行模型迁移。而实际情况是,我们需要处理的医疗机构一旦数量多起来,就会出现多个source domains和多个target domains。而他们数据之间用语与语言模式的相似程度,是可以通过语言模型和词表挖掘等方式度量的。
这种情况下,我们需要处理的数据源就会形成一张网,我们的模型就会在这张网上边流转起来,模型就像“课程学习”一样先走到最可迁移的部分,然后逐步扩散,各个域都可以相互影响,最终形成了一个新的网络优化问题。这个问题在这里不做更深入介绍。
3、联邦学习问题
正如前边提到的,我们经常要同时处理多家医疗机构的数据,用于自然语言处理模型的训练。但医疗数据有着极高的敏感性,包括数据的权属问题、数据的隐私问题、数据的合规问题等等,都要求我们要在保证数据绝对安全、合规的前提下进行机器学习模型的训练。
那么如何做到呢?联邦学习的框架和方法在这里将起到关键作用。在数据绝对安全隔离的前提下,如何在每个医疗机构的私有云进行模型训练,而将模型参数汇总、优化、分发进行整体优化。
基于以上介绍的几类机器学习方法和思路,在实际问题的解决中经常要几类框架方法混合使用。而如何综合运用这些方法达到低成本可以解决问题的程度,就需要在工程实践中不断地探索和积累经验了。
总结
大规模临床电子病历要真的发挥其价值需要解决很多问题。上边提到过的数据质量治理问题、数据结构化信息提取问题、数据归一标准化问题都非常难以处理。这些问题的解决单纯靠人工是无法规模化的,必须用自然语言处理技术作为支撑。这里不仅需要自然语言处理的算法技术、计算技巧和工程能力,更需要很强的医学背景知识。所以要采用知识工程与机器学习相结合的技术。
为了让更多的研究者参与进来,我们分别在中文信息学会的两个专委会年会:CCKS和 CHIP上与清华大学和哈尔滨工业大学一起组织了相关评测任务,开放了部分无敏感信息的人工改造模拟数据。所有的评测任务都将循序渐进的越来越逼近真实应用场景。
比如在CCKS2018的评测任务中,我们采用同分布的训练和测试数据集进行电子病历结构化任务评测,将这个实际问题简化成一个可以相对容易建模的算法问题。而在CHIP2018我们增加了难度,测试集与训练集的分布并不相同,这给有监督学习带来了更大的挑战也更接近实际的场景。
在CCKS2019的评测任务中,我们新增了无标注数据,这为半监督学习带来了可能,并保持了实际中常见的数据分布不一致情况。在接下来,我们将继续发布数据标准化等任务,让整个问题的各个挑战环节逐步的全面开放出来。
所有的评测任务数据将通过OPENKG等组织转化为长期维护、更新的线上评测。希望医疗界,学术界,工业界的各界同仁可以一同迎接挑战,推动学术研究,最后推动基于真实世界数据的医学进步,实现绿色医疗。
关于作者
闫峻,医渡云首席人工智能科学家。曾任微软亚洲研究院资深研究经理;哈佛大学医学院访问学者研究助理;多个国际期刊的审稿人、顶级国际会议程序委员会委员,资深委员。
他的博士毕业于北京大学数学学院信息科学系,曾任微软北京大学联合实验室副主任、CCKS 工业论坛主席、世界人工智能技术大会青年科学家论坛主席,中山大学博士生导师、人民大学工程硕士导师。
在加入医渡云后,闫峻担任医渡云首席人工智能科学家,深耕NLP,拥有丰富的人工智能应用经验。