作者简介:

吴大帅,新屿算法工程师,曾供职于宅米网、新达达,从事系统架构设计、算法设计等工作。 
李智慧,《大型网站技术架构:核心原理与案例分析》作者,从事大型网站、分布式系统、大数据方面的研发工作。 
责编:钱曙光(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

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

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

  1. python医学科研中能做什么-非结构化数据-病历智能处理引擎的设计、实现和应用...

    图2 医学知识库与词库结构关系 医学知识库的建设繁杂,但是对于医疗业务的可持续发展意义重大,所有基于知识库的工作成果,可以在任何时间任何地点无壁垒解读,持续的放大价值,推动医疗领域的发展.需要注意的是 ...

  2. 智能风控决策引擎系统架构设计与开发实践

    I.内容提要 风控决策引擎系统从架构设计到开发实践 特征引擎系统及实时计算引擎 模型引擎系统及智能风控引擎 大数据风控-用数据驱动的风控全流程系统构建 II.风控决策引擎介绍 Q:互金领域的风险有哪些 ...

  3. 规则引擎 drools_网易考拉规则引擎平台架构设计与实践

    背景 考拉安全部技术这块目前主要负责两块业务:一个是内审,主要是通过敏感日志管理平台搜集考拉所有后台系统的操作日志,数据导入到es后,结合storm进行实时计算,主要有行为查询.数据监控.事件追溯.风 ...

  4. 网易考拉规则引擎平台架构设计与实践

    此文已由作者肖凡授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 背景 考拉安全部技术这块目前主要负责两块业务:一个是内审,主要是通过敏感日志管理平台搜集考拉所有后台系统的操作 ...

  5. Mesos容器引擎的架构设计和实现解析

    引言:提到容器,大家第一时间都会想到Docker,毕竟Docker是目前最为流行的容器开源项目,它实现了一个容器引擎(Docker engine),并且为容器的创建和管理.容器镜像的生成.分发和下载提 ...

  6. SkeyeVSS视频共享融合赋能平台技术方案之AI视频智能分析中台子系统架构设计

    AI视频智能分析中台子系统解决方案 1.2 系统架构 1.2.1 平台设计思路 AI平台是专门提供人工智能视频分析服务的安全生产预警平台.由人工智能推理中心,算法市场,人工智能计算服务中心,预警中心构 ...

  7. php开发自己的模板引擎,如何用PHP来编写自己的模板引擎 - PHP|模板引擎 - 软件工程|架构设计|网站设计|艺术营销 - 河洛炎黄 - 魏文侯...

    本文的目的不是为了让大家学会如何编写一个完善的模板引擎,只是为了给PHP初学入门者解释模板引擎的原理和作用. PHP模板引擎的作用是为了让表现层逻辑和页面本身分开,让程序员和美工的工作可以相对独立,并 ...

  8. 这是我见过最好的流程引擎架构设计!

    大家好,我是宝哥! 导读:本文为各位分享现代流程引擎的定义与架构设计. 1 什么是流程引擎 流程引擎是一个底层支撑平台,是为提供流程处理而开发设计的.流程引擎和流程应用,以及应用程序的关系如下图所示. ...

  9. 瓜子二手车封宇:瓜子IM智能客服系统数据架构设计

    本文根据封宇在2018年10月18日[第十届中国系统架构师大会(SACC2018)]现场演讲内容整理而成. 讲师介绍: 封宇,瓜子二手车高级技术专家,中国计算机学会专业会员.2017年2月入职瓜子二手 ...

最新文章

  1. shell awk sed tr grep 语法汇总
  2. tableau地图城市数据_优阅达“优分享” | Tableau 2020.4 “地图标记层” 的多种妙用...
  3. linux查看redis索引,linux的redis操作命令
  4. Spring中的自动装配和Autowired
  5. 关于解决service 'sapdp00' not found的办法
  6. 没想到,我们的分布式缓存竟这样把注册中心搞垮!
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的音乐播放系统
  8. ionic安装拍照选照片插件
  9. 自动驾驶 5-3 前馈速度控制 Feedforward Speed Control
  10. Android 开发 | ImageView 与 ImageButton
  11. 手机微信收不到消息提醒,这样设置就能轻松解决
  12. VBA轻松实现多色渐变填充
  13. Java 一个数字、字母、汉字各占几个字节
  14. python 词汇表_使用Counter构建词汇表
  15. 洗地机怎么选?洗地机品牌排行榜
  16. 这些前端资源,你值得拥有
  17. 方方格子excel工具箱 Excel表格处理必备
  18. XDOJ 133-一元稀疏多项式计算器
  19. 用Python制作简单的小游戏
  20. android4.1不支持微信,华为EMUI 4.1(android6.0)手机能否安装微信小程序?

热门文章

  1. cad考试题库绘图题答案_2019年低压电工作业操作证考试最新版题库及答案(一)...
  2. 认清一个人,看这四点就够了
  3. MNTD论文修改20211114(Y Zhou)
  4. 睡眠音频分割及识别问题(七)--接口输入输出讨论
  5. tcp状态机-三次握手-四次挥手以及常见面试题
  6. 【爬虫】爬取带有cookie才能获取网页内容的新闻网站
  7. Almost Arithmetical Progression
  8. Qt5中文乱码解决方案
  9. 蚂蚁金服王旭:开源的意义是把社区往前推进一步
  10. 基于External-DNS的多集群Ingress DNS实践