病历智能处理引擎的架构设计、实现和应用

作者简介:

吴大帅,新屿算法工程师,曾供职于宅米网、新达达,从事系统架构设计、算法设计等工作。 
李智慧,《大型网站技术架构:核心原理与案例分析》作者,从事大型网站、分布式系统、大数据方面的研发工作。 
责编:钱曙光(qianshg@csdn.net) 
声明:本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》。


人工智能的到来驱动着诸多领域的变革,但具体如何应用到行业实践中一直是难题,本文介绍了人工智能是如何进一步提高医疗效率的曲折历程,主要以病历智能处理引擎为例。

文本病历的语义解析是进行病历价值挖掘的基础工作,本文介绍一个病历智能处理引擎的设计,针对医疗病历这种特殊的文本,如何确立文本知识结构,如何选择应用自然语言处理算法,针对医疗科研与智能诊疗这个场景,如何根据模板抽取特定的知识信息,如何将该引擎应用于具体的生产系统中。

最近几十年,随着医疗信息化技术的不断发展,积累了大量的病历数据,但是大部分的病历都以无结构或半结构化文本方式存储,这对病历价值的挖掘带来了很大的难度,也难以将这些宝贵的信息应用于医疗科研和智能诊疗等领域,阻碍了智能医疗的发展。

病历智能处理引擎主要目标是将病历文本自动转化为更便于医疗科研和机器学习的知识结构,这是开发所有基于病历的应用的基础,也是智能医疗领域的研究热点之一。

一、病历智能处理引擎设计思路


病历是患者疾病发展以及诊疗的记录,是对采集的资料归纳整理、综合分析并按规定的格式和要求书写的患者医疗健康档案,对医疗、教学、科研以及医院管理有重要的作用。

病历的文本性确定了引擎以NLP(自然语言处理)为核心,医疗科研等实际需求决定了引擎的上层结构,接下来,按照应用NLP的一般思路介绍病历智能处理的过程。

1. 确立文本知识结构

病历结构叙述一般都比较清晰,各种医疗事件描述集中,整体按照不同或相关医疗语义进行句段的过度,这里我们按照原始文本的描述过程,使用递归层级结构来表示中间结果,层级中的节点,按照语法结构来存储具体的医疗事件,方便对医疗事件进行语义提取。层级结构如图1所示。

图1语义递归层级表示


医学标准的不统一以及医学术语口语化是影响病历的共享和统计的重要原因,为了提高病历智能处理引擎的效率,需要将所有的输出标准化,即所有对应同一医学实体的医学表达要统一。这里我们引入了医学知识库作为统一的标准,将所有的抽取结果转化为标准医学叙词或概念code输出。整体结构如图2所示。

图2 医学知识库与词库结构关系


医学知识库的建设繁杂,但是对于医疗业务的可持续发展意义重大,所有基于知识库的工作成果,可以在任何时间任何地点无壁垒解读,持续的放大价值,推动医疗领域的发展。需要注意的是,医疗知识库处在不断的迭代完善过程中,我们在建设知识库的过程中,要充分考虑知识库的扩展性。

2. 应用算法处理病历文本

应用算法处理病历文本的过程,包含以下几个部分。

医学实体标记(分词+标注)

首先,需要分离医学实体,这一步主要应用自然语言处理中的分词算法来实现,分词的算法有多种,每种算法有各自的优劣。我们在实际应用中在业务不同阶段使用了不同的算法,主要考量包括:一是算法的效果是否能达到我们的需要;二是算法底层数据结构是否可以实时更新、实时生效,因为我们无法一开始就建立一个非常完备的医学词库,实际应用时需要可以随时更新分词词库(内存+外部词库),让更新的词项实时生效。

然后,需要对医学实体做标注,这一步相对简单,如果是使用HMM分词,可以使用维特比算法标注,也可以依赖词库标注。我们在实际应用时,将词性改造成“词性+医学实体TAG”的方式,这样可以带来两个好处,一是一般分词工具已经把词性标注集成到分词算法中去了,这样可以省去我们自己标注的工作;二是病历文本的叙述也是遵循中文语法的,所以在做句法分析时,可以将医学实体的通用词性提取出来,然后使用通用的句法分析模型分析处理,避免在去做针对医学领域句法分析语料标注、训练的工作。

构建语义层级

构建语义层级的过程类似人阅读的过程,以句子为单位从左向右读取原始文本,然后由主控系统分析器对句子进行句法+规则分析,得到具体的按语法结构组织的数据,最后在由控制器根据语义建立新的语义节点并加入到新的层级。整体过程如图3所示。

图3 构建语义层级过程

这里需要注意问题有:

  • 在医学领域,很多表述按照医学惯例是不符合常用的语法的,这部分的结构需要单独处理,如:PT2bN0M0,这里面包含了T肿瘤大小及局部浸润范围、N淋巴结受累情况、M远处转移三种分期指标信息,类似这种领域特有表示,一般需要特殊处理,然后映射到语义层级通用结构,方便后续跟着语义层级的其它信息统一处理。

  • 一个语义节点的开始和结束的界限有时是非常模糊的,这需要我们预先做一个实体词的关联分析模型,以此来辅助判定后续的动作。另外,保证我们的系统针对层级误差有一定的健壮性是非常有必要的。


3. 抽取信息

构建完病历文本的知识结构之后,就是抽取数据进行实际应用的阶段了,主要的步骤包括:构建抽取模版、验证抽取模版、实际抽取数据。

构建抽取模版是确立结构化目标以及定义抽取规则的过程,简单的说就是定义一个Excel表头并制定每一个列字段的数据抽取规则的过程。表头的定义非常简单,例如:姓名、年龄、症状等。抽取规则的定义要相对复杂,需要对语义层级有一定的了解,因为语义层级是一个树状结构,所以对应的抽取规则也是一个层级结构,并且最后一个层级要能真正定位我们关注的数据。

图4是一个规则示例,语义层级的节点的TAG帮助我们定位到具体的语义层级节点,运算规则帮助我们进行匹配运算和对输出结果的逻辑转换,关键值标示了我们要抽取的目标。

图4 单规则结构示意


图5表示我们一个简单的抽取模版的示意,姓名和CT是我们的表头内容,后续是我们每个字段的具体抽取规则链。规则链标示了寻找数据的层级结构,例如:抽取CT信息时要先找到现病史所在语义层级,然后在以此层级为基础找到CT语义层级,进而获取目标信息。

图5抽取模版

需要注意的点:

  • 注意抽取模版和抽取规则的复用。

  • 要同时支持规则组的抽取,以满足的对医疗事件的抽取需求,例如我们的示例模版会将CT的全部信息给抽取出来,但是无法详细的抽取出CT的事件、地点、结果等信息,这时便需要通过规则组先定位到CT语义节点,然后以此节点出发,抽取此CT事件的详细信息。


二、病历智能处理引擎架构


病历智能处理引擎架构主要分为六个子系统,示意如图6:

图6 病历智能处理引擎架构

  • 病历导入系统:负责对各个来源的各种格式的病历数据进行病历文本的提取。

  • 语义层级构建系统:病历文本导入系统后,通过此系统进行语义层级上下文的构建。此系统依赖自然语言处理系统、知识库词库维护系统。

  • 自然语言处理系统:负责对病历文本进行分词、句法分析、语义分析的工作,除了封装通用的处理算法,还定制了医学特有的处理算法。

  • 知识库词库维护系统:负责知识库、词库的维护工作,是自然语言处理系统的基础。

  • CRF(Case Report Format)规则定制系统:负责定制抽取规则。

  • 结构化抽取系统:以语义层级上下文为基础,通过CRF抽取规则进行结构化的抽取。


以上是六个子系统的职责与关系的介绍,每个子系统中又包含了多个职责模块,具体如图7:

图7 病历智能处理引擎模块示意

模块划分主要分为四层,从上到下分别对应病历导入系统、语义层级处理系统、自然语言处理系统以及结构化抽取系统。

这里没有突出知识库词库维护系统以及CRF规则定制系统的具体模块,因为对整个系统来讲,我们仅需要以上两个系统的产出,即词库知识库以及CRF抽取规则。

病历导入的模块主要是为了兼容不同的格式,所以对主流的Word、Excel等做了支持策略,同时为后续的扩展提供了保障。

语义层级处理系统的核心是层级的动作分类器,构建整个语义上下文的骨架。

自然语言处理系统构建填充了语义层级上下文的内容,语义处理管道是主要的处理流,保证了自定义处理的扩展。

结构化抽取系统的核心是抽取器,这里包含了一个任务中心,在此可以对抽取结果进行下载以及查看正在抽取任务的进度。

三、病历智能处理引擎在临床科研自动化中的应用


科研对很多医生而言是一个刚需,评职称需要论文,写论文需要做科研。临床科研的主要方式是选定一个课题,然后选择病历,对病历进行结构处理,录入结构化病历记录表中,再对这些数据进行统计分析,以分析结果得到的统计图表为基本架构,撰写科研论文。

在这个过程中,最耗费时间和精力的,最容易出错的,就是病历的结构化处理,而这正是前文阐述的病历智能处理引擎的强项,一个使用病历智能处理引擎的的科研过程如下图。

图8 医疗科研的一般过程

新屿作为一家医疗大数据服务公司,为医疗科研过程开发了数款产品,构成了一个医疗科研数据自动化处理平台。整体架构如图9所示。

图9 新屿医疗科研数据自动化处理平台

病历文本通过病历智能处理引擎进行自然语言处理后,处理结果写入科研宝,并使用易统计进行分析,产生分析报表。

四、病历智能处理引擎在智能辅助诊疗中的应用


病历,特别是专家写的病历,本身就是一笔巨大的知识财富,将这些知识进行处理、分析、统计、挖掘,可以构成一个病历知识库,供更多的人共享,即构成一个智能辅助诊疗系统。整体架构如图10所示。

图10 智能辅助诊疗系统架构


病历知识库、循证医学知识库、科研文献知识库、用药知识库共同构成一个辅助诊疗知识库,通过知识匹配搜索引擎对外提供服务。患者或者医生录入病史、检查结果等信息,系统匹配初步诊断结果,搜索诊疗计划,产生多个辅助诊疗建议,供患者和医生进行参考。

目前新屿辅助诊疗系统尚在原型验证阶段,受医疗管理、医学伦理的限制,大规模商业应用目前看来还为时尚早,但是利用大数据技术支持下的智能医疗,实现多专家会诊定制最优诊疗方案是一件值得所有人期待的事。

五、总结


使用传统IT技术,通过信息化手段提高医疗效率的工作已经做了几十年了,医疗机构信息化程度也越来越高,对效能提升、信息快速流通起到了巨大的作用,但是,仅仅通过信息化手段进一步提高效率的空间越来越小,边际效益越来越少。通过引入更多人工智能的因素,辅助医生更快、更准确、更全面地开展医疗与科研工作,将会是下一阶段IT技术的发展趋势,但是新的道路总是曲折的,期待我们共同去探索。


订阅《程序员》(含iOS、Android及印刷版)请访问 http://dingyue.programmer.com.cn

订阅咨询:

  • 在线咨询(QQ):2251809102

  • 电话咨询:010-64351436

  • 更多消息,欢迎关注“程序员编辑部”


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Heron:来自Twitter的新一代流处理引擎应用篇

作者 | 吴惠君,吕能,符茂松责编 | 郭芮【导语】 本文对比了Heron和常见的流处理项目,包括Storm、Flink、Spark Streaming和Kafka Streams,归纳了系统选型的要点。此外实践了Heron的一个案例,以及讨论了Heron在这一年开…

2017 JavaScript 调查报告概述

本文转载自极光日报知乎专栏,地址:https://zhuanlan.zhihu.com/p/32260460简评:最近一份超过 23,000 名开发者参与的关于 JavaScript 的调查报告 - the State of JavaScript 2017 出炉了。内容包含框架的流行趋势、薪资水平等等,感…

python动态_python --动态类型

动态类型(dynamic typing)是Python另一个重要的核心概念。我们之前说过,Python的变量(variable)不需要声明,而在赋值时,变量可以重新赋值为任意值。这些都与动态类型的概念相关。动态类型在我们接触的对象中,有一类特殊的对象&…

微博热点事件背后数据库运维的“功守道”

作者 | 张冬洪责编 | 仲培艺【导语】 微博拥有超过3.76亿月活用户,是当前社会热点事件传播的主要平台。而热点事件往往具有不可预测性和突发性,较短时间内可能带来流量的翻倍增长,甚至更大。如何快速应对突发流量的冲击,确保线上服…

sql devalop连接mysql_SQL-Mysql表结构操作

一 前言本篇内容是关于 基本的数据库操作,建表,表结构修改等内容;学习本篇的基础是知识追寻者以前发布的文章:公众号:知识追寻者知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)二…

云计算平台2017年盘点——真正成为新技术新应用的基础架构

作者简介:吴凯,北京云途腾科技有限责任公司首席运营官,具有20年的IT和软件服务行业管理经验,历任多家著名外资及民营IT企业的核心高级管理职位,是中国云计算专家委员会专家委员,中国开源云联盟及云计算开源…

Spark SQL在100TB上的自适应执行实践

作者:汪愈舟 俞育才 郭晨钊 程浩(英特尔),李元健(百度)责编:钱曙光(qianshgcsdn.net)Spark SQL是Apache Spark最广泛使用的一个组件,它提供了非常友好的…

分包组包 北斗通信_蓝牙mesh底层传输层(分包和组包)

当传输大于15字节的上层传输层PDU时,底层传输层就需要对上层传输层PDU进行分包并重新组包为了减少底层传输层包的数量,这里使用块应答机制。问题:怎么通过块应答机制减少底层传输层包的数量?上层传输层需要分成两个底层传输层PDU的…

别人在忙挖矿,京东架构师却悄悄用区块链搞了件大事

作者介绍: 赵铭,京东商城区块链研发工程师, 主要从事区块链底层研究设计工作,主攻方向为分布式账本结构; 孙海波,目前担任京东Y事业部供应链研发负责人,负责的业务包括订单履约、库存优化、采购…

用sklearn mysql_Sklearn之Linear Regression

import matplotlib.pyplot as pltimport numpy as npfrom sklearn import datasets, linear_modelfrom sklearn.metrics import mean_squared_error, r2_score# 加载糖尿病数据集diabetes datasets.load_diabetes()# 只使用一个特征diabetes_X diabetes.data[:, np.newaxis, …

2017年30个惊艳的Python开源项目

【摘要】本文来自Mybridge,介绍了过去一年里30个惊艳的Python开源项目。点击阅读原文每一个都可以在GitHub上看到更为详细的内容。以下是译文。在过去的一年里,Mybridge AI 比较了近15000个开源Python项目,选择了前30名(概率只有0…

mycloud php5 mysql_mycloud 刷debian乐趣之-owncloud 私有云+芒果云的安装

既然刷了debian了,那么就可以安装很多软件了。这篇文章,我打算讲讲大众化的最初始的配置方案。具体后续优化,例如memcached,https等,可以参考官方文档。第一步、安装apache,#当然,你如果喜欢nginx,也可以的…

关于区块链,程序员需要了解什么

作者 | 曹严明如果说比特币是对传统货币的一种颠覆,那么比特币的基础技术——区块链则是对传统编程范式的一种颠覆。区块链技术被看作是一次Paradigm Shift。也许很多人对 “颠覆”这种说法不以为然,因为现在这个词已经被用滥了(如今哪个好一…

java两个矩阵相乘_java计算两个n阶矩阵相乘

自己是个新手,研究java数据结构,看到两个n阶矩阵相乘的题目,自己就试着写了一个简单的demo,哪里有不好的地方,也希望大家多提提意见,直接上代码了:package com.shujujiegou01;public class JuZh…

混合云异军突起 英特尔的全“芯”体验为企业保驾护航

近几年,混合云在IT界异军突起,各大厂商纷纷布局混合云市场,企业更愿意将数据存放在私有云中,但是同时又希望可以获得公有云的计算资源,在这种情况下混合云被越来越多的采用,它将公有云和私有云进行混合和匹…

搭建java_搭建JAVA环境

1 jdk的获取jdk的获取路径有很多这种,我把我网盘上存的分享个大家,大家直接下载就可以了。http://pan.baidu.com/s/1pLsJLtp(这是一个公开链接,直接打开下载就可以了)。2 jdk的安装(1)单击刚刚下载的安装文件将会弹出欢迎对话框。(2)点击“下…

java数组下标越界_BUG-并行流与数组下标越界-思考与总结

BUG-并行流与数组下标越界-思考与总结今天线上环境报异常,发现了一个之前没注意过的问题,记录一下。1. 异常信息异常信息如下:Caused by: java.lang.ArrayIndexOutOfBoundsExceptionat java.lang.String.getChars(String.java:826)at java.la…

IDC敲黑板啦:未来企业IT以混合云为主

数字化是企业转型的必由之路数字化技术正在融入企业的血液里。IDC 认为,基于第三平台的 46 技术是企业在数字化转型过程中的关键要素:• 4 是指以云计算、大数据、社交商业与移动技术为代表的第三平台技术。• 6 则是基于第三平台智商的 6 大创新加速器。…

Service Mesh 在华为公有云的实践

我们在构建微服务而构建微服务是困难的微服务是一个很大的概念,从团队组织到最佳实践似乎都有实施微服务的一些指导。我们这里只提构建微服务的架构模式,也就是关乎到你用什么样的方式来构建你以微服务架构来组织的应用系统。近些年随着微服务的火热&…

分布式NewSQL数据库实践——民生银行经典案例

前言此前,金融信息化建设主要依托原有集中型 IT 架构进行维护扩展,系统规模及复杂程度呈指数级增长,各类瓶颈逐渐暴露,日益增长的数字金融需求同旧式的系统架构缺陷之间的矛盾愈加凸显。中国人民银行、中国银行保险监督管理委员会…