当前位置:文档之家› 如何利用自然语言处理技术实现电子病历后结构化-刘帆

如何利用自然语言处理技术实现电子病历后结构化-刘帆

表示不知道具体是什么表示推测的大概意思接下来开始下午拓导课的第一个报告,首先呢,我们有请,北京大学人民医院的信息中心刘帆主任来给我们作报告。

刘帆主任呢,大家可能会比较熟悉,每年都非常活跃,他在医院做了非常多的信息化的建设工作,而且积累了非常多的经验,同时呢,他们院的很多工作在国内都是很领先的,让我们欢迎刘帆主任。

非常高兴在刘海一主任的专场有机会跟大家汇报下,我们最近在电子病历方面结构化的一些工作新进展。

因为今天讲的涉及内容需要做三元分析,就是如何运用新的方法来帮我们做电子病历的结构化。

因为本身呢,这也是比较新的东西,然后理论性比较强。

所以把今天要讲的东西分成了两部分。

第一部分呢,对我们所做的工作做一个概况的介绍,之后由我的同事,我的合作伙伴,北京医渡云科技有限公司的“何值”,他来帮我们做一些演示。

我们也专门为今天的会议做了一些在线的事实分析。

今天讲的课题是如何利用自然语言分析的技术来实现电子病历后结构化,大家都知道病历的发展其实很早,早在公元6世纪的希腊,而中国汉代的初期就有著名的内科医生开始记病历了;但是呢,这个病历沿用至今也是医院或者医教研管理,包括卫生统计和法律的一个重要依据文档。

当我们谈起病历时,其实病历有3个最主要的功能:第一个是存储功能,第二呢是传播功能,第三个则是病历本身数据的职能。

那么数据职能对我们有什么帮助?我们为什么要做结构化?大量的、海量的数据中获取,我们如何做医疗病历的指控,如何来帮助我们做临床数据的挖掘、科研分析以及做一些基本的卫生统计。

那么我们可以看到,现在我们说“病历”这个概念的时候,我们不是单纯的在说电子病历本的数据工具,而是网页电子病历,这个页面要包含病人在医院发生的所有临床活动的记录,当然这有些是来自我们传统病历厂商手写的文书,或者说非Touch文书,有的大部分来自我们各个医技系统的数据。

在此种情况下,我们五六年前就开始尝试在医院创建CDR数据中心,当时我们对整个临床数据的概念还是比较模糊的,我们希望能搭建一个SCII码,然后能把所有临床的数据都放进去;就现在的系统而言,是“13+1”。

13个本身已经结构化很好的临床数据源,再加上一个非结构化的临床数据源。

这个非结构化的数据源,就是我们一直都苦恼的,传统电子病历软件里面产生的大量文本信息。

其实对大部分的数据来讲,这是药品的数据字典表,在这个药品的数据字典表这只是四分之一,本身就已经涵盖了很多药品的信息,那其实在做医院管理或者说科研分析的时候,如何没有这种这么详细的结构化数据,很多事情是做不到的。

那好,我们在做非结构数据这一块应该包含多少活动记录?通过参考国家卫生部的电子病历基本架构和数据标准,把我们7个领域、16类活动的62个活动记录,都纳入非结构化的电子病历文档。

当我们把所有非结构化的东西进行总结,我们会发现有62个临床文档,还有其他的一些数据锁还有大量的数据源。

我们对于这种非结构的数据是怎么录入的呢?其实可以分为3个阶段:最开始的时候,我们都是手写病历;迄今为止病案统计室里面那些手写病历等珍贵资料,我们如何将其变成信息化?这是一个非常困难的问题。

很多医院只是对其进行扫描,简单的解决了存储问题和传播问题;但数据的利用问题还是解决不了。

后来,我们利用word文档,单机版开始写病历;还有电子病历软件开始写病历。

我们现在在电子病历软件里面写的东西是什么?我们可以看到写了3种东西,要么是自然语言,要么就是半结构化,要么就是结构化的表单式模板。

其实呢,我们从07年开始做电子病历,到现在16年已经接近10年了。

10年来,我个人觉得我一直没有解决一个问题,我们医院是一个纯结构化,还是一个半结构化的?纠结了很长时间。

我想在座的很多同道都在纠结这么一个问题。

很多医院对外宣传说,我们是纯结构化的电子病历;但是我们抿心自问这种纯结构化我们做不到,非常非常的困难。

我们在一开始探索的过程中,我们可以看到我们一直做的是半结构。

我们通过下拉菜单的方式来做这件事情,半结构的初始模板的工作量是非常巨大的,而且其中很多内容是不符合我们临床录入的习惯,因为由于没有一些层基的关系,造成我们的一些采集的数据没有上下文的关系。

比如说,我们采集到一个“黄染”,这个黄染是巩膜黄染还是皮肤黄染我们不知道,因为没有上下文的关系或者说没有数据文档之间的关系,在这种情况下,我们制作了大量的表单式的结构化的病历;但做出这样的病历之后呢,医政部门告诫说这种不符合我们的病历要求,因为这是表头化的病历,表单化不是我们那种“一竖无史”(07分17秒)的病历。

所以这又产生了其他的一些问题。

直到三年前,卫生部门做了电子病历的标准,这标准把所有临床文档分成了临床文档、文档段、数据组和元素四级;在这里面,又涉及了大量的标准元素拓扑。

我们当时觉得此标准出台后,我们应该遵从这样的标准去建立我们的电子病历。

把我们所有的病历、所有写病历的语言,我们归纳成4个结构后,把其中的所有元素再进行一一的归纳。

但是呢,做完之后,在2013年时跟海来公司通过半年多的时间去探索,去做了2个病历,非常简单的2个病历。

这是一个病历的所有元素,我们是花了大量临床大夫的时间,还有医院时间(08分05秒),做完的效果是什么?大家看这个视频,从视频的角度来看,我觉得做得非常的满意,但是事实来讲,花了半年的时候去做一两个病历的模板,显然这件事情是不可持续的,我不可能花那么多的精力在医院做这件事情。

所以大家可以看到,我们在选腹痛的时候,马上显示腹痛项目的所属性,可以看到有6种属性,到底什么位置?什么样的性质?什么时候加强?什么时候会自己加强?哪些加强或者减缓的因素以及如何缓解的?这是我们描述的一种疼痛的时候的所有属性。

当你看到这视频的时候,会觉得这挺好的,应该朝着这个方向去做。

但是呢,我们看后台的知识库,我们花了大量的时间去做,到现在为止,我们也做不下去。

所以,这方面也不再演示了。

这是我们现在医院里面的数据,我们在重新审视电子病历的结构化到底应该怎么做的时候,我们现在重新再看这件事情;我们现在医院的数据很多,有三类数据,有结构化数据,有非结构化数据,还有影像数据。

就人民医院一天的数据而言,一天能产生60个G的数据。

其实包含信息量最大的其实只占一点点,223.4M 的病历文书的文档。

其他的结构化的数据看着很多,其实影像占60%,(09分31秒)检验、检查,其他都占着很多,但正式含有信息量非常大的反而是只占200多M的病历文书文档,只是很小的一部分。

虽然说数量看着不多,但是信息量非常大,关键是如何挖掘出来。

这是我们下一步面临的巨大的一个挑战。

大家都知道,现在说智能的分析,大数据的技术,炒作得多火。

其实呢,就简单一点,如何把这个技术拿到医疗行业,为电子病历的结构化做贡献。

我们可以看到,其实在整个自然语言的处理上,就是两件事。

当然事实上是比较复杂的,现在这是简单的介绍。

第一个是文本如何处理,第二是我们怎么去理解语义,就是机器学习的方法去理解语义。

那第一个文本的处理办法就是要做就是要做分词。

一大块非text的自由文本,如何把它变成一个个分词;这是常规的语言,不是我们的医学语言。

分出来之后,有很多不同的理解。

怎么知道是对的分词还是一个错的分词?这里面又有很多学问。

那现在我们最常用的HanLP,han是我们汉语的汉,HanLP就是自然语言分析。

它有大部分那个开源的东西,在网络上都能找到。

但它是基本用于公共的文书,类似新闻报道,而不是基于医学的语聊库。

医学语言多复杂?现在的医学语言词汇大概有260多万条。

拿一个公共的语言库来作为医学的自然语言分析,显然是解决不了问题的。

在实际书写病历时,不同的医院、中西医、专科与专科之间又存在巨大的差异。

我们想要的是将人类的自然语言转化为机器能识别的形式。

将简单的临床描述变成一个结构化的数据,我们之后能通过检索等途径查询相关内容,这是一个比较困难的事情。

当然了,虽然这事困难,但是并非不可解决。

我们现在的工作,就是初步地尝试解决这问题。

这个问题,第一步,需要把所有临床的数据,其中包括结构化和非结构化的,特别是非结构化的数据,要清洗、分词、归一。

第二则是把医疗词库要先自定义,类似症状体征、药品名称等等都需要提前定义出来;定义之后,采用大数据技术,类似正则匹配、主体规则匹配等技术去匹配相应词汇,匹配之后再做归一处理。

归一之后呢,再通过语义规则、句法分析等,去真正理解大夫所写的内容的意思。

在这个过程中呢,大家能看到几个步骤。

第一个是正确的采集,全面采集了整个活动记录;第二步把活动记录里的东西分词,通过机器拆分成很多数据源的词汇;第三步则是,通过命名实体、正规则、语义规则等等,去构建医学数据库,最后形成通过计算机能够查询分析的结构化的数据。

这就是我们现在在做的事情,几个步骤:清洗、分词、归一、医学命名实体库,然后上下文的匹配和语义的分析。

可以看到这里面我们大量的词汇,代写的词汇。

就诊断,大家都知道ICD-9、ICD-10,但是呢,我们的手写里面有很多都不规范。

切出来的时候,分词乱七八糟。

可以看到光一个肾细胞瘤的各种书写法有很多很多,这跟大夫习惯是一样。

所以一个方面是词切出来了。

第二步,我们把肾细胞癌,这是一个实体的词汇去定义好了,那剩下的怎么去正确的归类,其实是有很多的人工加机器学习办法去保证这是一个准确的。

那所以在这里边,我们也做了一些这种标注,打标记的一些工作,告诉大面积脑梗死是脑梗死的一部分(14分07秒),所以每一两个词汇之间,我们都被去标注a等于b,或a大于b,或b大于a或a不等于b,或者a或者b没有关系,靠人工去标注。

人工标注一段时间以后,自然地计算机就会去学习计算机算法来告诉他这件事情,其实你自己去做这些事情。

那这一点我们可以看到主体,我们把所有的主体词汇都要挑出来,所以我们在这个工作中我们有大量的医学的同事一块来参加,就未来的很多的,我们的计算机的事情不是靠IT的人员能解决的。

这一部分都是医学背景,甚至医学生或者医生,或者工作中高年资医生帮忙来做,症状体征、解剖部位、病变化的方案等,然后我们要分清楚哪些是主体词,哪些是修饰词。

什么叫修饰词?有一个症状,它发生的部位是什么?它的程度是什么?比如说狭窄是主体词、贯穿主体词(15分01秒),轻度狭窄,可能就是一个修饰词,还有我们的时间序列词,我们怎么知道两个词之间,或者两个事件之间、两个词,他们之间时间的关系是什么?等等,那我这边举了一个叫做正规则的一个正则匹配的一个过程,比如说就简单的一个情况,有一个初潮在,通过这个正则匹配的算法,怎么能够找到把变成?(15分17秒)是什么时候?初潮是什么时候?所以这都是我们现在通过数据来进行分析的一个过程,那好大家可以看到,这是我们在实际的,这是一个完整的一个病例,我们的一个限定是,通过系统弄进去以后,马上就可以得出了所有我们想要了解的东西。

相关主题