在未来一段时间内,业务定制NLP系统将仍是真正能帮助大型智慧医疗行业达成业务目标的重要系统之一,也是AI落地的主战场之一。
人工智能正处于非常火热的时期,自然语言处理(NLP)领域也令人兴奋了十年。
在阅读理解、语言翻译和创意写作等复杂的任务上,计算机的表现将会和人类一样出色。语言理解能力受益于免费的深度学习库(如Pytext和BERT这样的语言模型),大数据(Hadoop,Spark,Spark NLP),以及云计算(提供GPU和与服务商的NLP服务功能)。
目前市面上做自然语言处理领域的公司有:腾讯、科大讯飞、微软、思必驰、华为等。
在医疗领域,一些应用已经从科幻小说变为现实。
人工智能系统通过了中国和英国的医学执照考试 ,而且它们比普通医生考得更好。最新的系统比初级医生能更好地诊断出55种儿科疾病。
但是,这些系统比第一批计算机视觉深度学习应用(例如研究一个图像)中的一些更难构建,因为它们需要具有更广泛常见的医学知识,要处理更多种类的输入,并且必须理解上下文。
我很幸运能够参与构建医疗领域的NLP系统。
本文旨在分享我学到的一些知识,从而希望能帮助你更快更好地构建类似的系统。
一、什么是NLG,它是如何工作的?
自然语言处理由自然语言理解(NLU)和自然语言生成(NLG)构成。
NLG是计算机的“编写语言”,它将结构化数据转换为文本,以人类语言表达。即能够根据一些关键信息及其在机器内部的表达形式,经过一个规划过程,来自动生成一段高质量的自然语言文本。
如今的数据量巨大,人们根本处理不过来;NLG把数据人性化,帮助人们处理。
NLG系统使用数据分析和人工智能技术来分析复杂的数据集,并采用计算语言学技术在高品质的文字说明来交流分析结果。
NLG的工作原理:输入抽象的命题,然后对你输入的自然语言进行语义分析、语法分析进行语言组织然后生成无限接近你想要的文本。
例子:输入麦当娜,接下来通过NLG自然语言生成:麦当娜 “歌星”
二、NLG算法在智慧医疗领域应用有哪些?
三、NLG算法对患者影响有哪些?
NLG可以用来帮助患者,让他们了解自己的健康状况,并对自身的医疗保健作出更好的选择;NLG还可以帮助患者更好地照顾自己:包括改变生活方式、自我管理慢性疾病、并配合治疗方案。
例如,许多糖尿病患者都有测量血糖水平的传感器,但他们很难利用这些信息来管理他们的糖尿病,因为他们通常看不懂测量结果,所以当他们看到血糖变化时,往往过度反应。NLG系统可以解释和情境化血糖的任何变化,并帮助糖尿病患者作出适当的反应。
四、NLG算法对医护人员影响有哪些?
临床医生最热衷于报告自动化工具,因为他们认为其有两个好处:自动化节省了他们的时间;自动化还意味着更少的错误和遗漏,以及数据的一致性。
我已经在该领域上的几个系统工作过,主要是产生交接报告(护理交接班,第一急救者移交医务人员),并且知道在这个领域许多其他NLG项目。
我觉得使用NLG为临床提供决策支持有很大的潜力,确实有大量的证据表明,临床医生目前来看数据的方式(通过可视化或表格)有时不是很有效。而文本概括可以通过突出显示可视化看不到的重要信息来帮助决策。事实上,自动撰写报告比临床决策支持的卖点更突出。
最重要的是用NLG来加强病人对病情的了解和支持病人,更好的作出治疗方案。
五、NLG构建的一些经验
1. 现成可用的NLP模型不起作用
在系统构建的实践中,为中文构建的现成的NLP库和算法在医疗行业的这种“不同的语言”上会遇到各种挫败。
不仅是因为命名实体识别或实体解析模型会失败,甚至像符号化、词性标注和句子分割这样的基本任务,现成的模型对大多数医疗行业的句子都没用。
再者医疗行业有数百种语言,千万不要去建立通用的医疗NLP系统。现实是,每个子专业和它的沟通形式都和别专业根本不同,你根本无法做到统一通用。
而且,每个医学专业都有很多变化。例如,对于决定是否批准针对MRI的预授权请求,针对植入式脊髓刺激器,需要从预授权表格中查看的项目内容就和别的请求完全不同。另一个例子是在病理学中使用不同的术语来讨论不同类型的癌症。
这些对实际问题会带来影响:我所工作的公司正在进行一个项目,该项目需要训练不同的NLP模型,以从病理报告中提取有关肺癌、乳腺癌和结肠癌的事实。
到目前为止,亚马逊的Comprehend Medical仅关注药物价值的正规化(参见上面最后一个“阿司匹林”的例子)。该服务还具有标准的医疗命名实体识别功能,但不能满足任何特定应用的需求。
我从以下流行的NLP云服务自测,通过几个平台的测试。
IBM Watson NLU
Google Cloud Natural Language
SpaCy Named Entity Visualizer
Azure Text Analytics
Amazon Comprehend(offline)
斯坦福大学Core NLP
进行的一项测试中,上述六个引擎唯一识别出的医学术语(其中只有两个引擎识别了出来)是Tylenol(泰诺)是个产品。
2. 如何自建NLP?
了解到“医疗行业的语言”与人类语言是多么的不同。
以下是我们构建的一些项目内容:
1)基于深度学习的句子分割
虽然分割维基百科文章的句子通常只需要使用正则表达式就可以完成,但处理很多页的临床文档是一个更大的挑战。特别是,算法必须应对页眉和页脚、列表、枚举、标注、两栏格式和其他的格式问题。
2)医疗行业特定的词性标注
不仅需要不同的模型,而且额外的词性标注也被用于医疗行业的模型。之所以这样做是因为它确实提高了医学命名实体识别的准确性。
3)医疗行业特定正规化算法
在实际项目里,命名实体识别自己一般是无用的。从“双眼似乎被感染”里识别“眼睛”和“感染”是医学术语并没有多大用处。
相反,根据标准SNOMED-CT临床术语将整个文本块标记为代码312132001,同时针对用不同方式对描述相同发现进行正规化则更加有用。这使你的应用能基于此代码来构建业务逻辑,而不管它是如何正规化的,或者更确切地说,不管它是如何在原来的文本中被表达的。
3. 从数据标注开始构建项目
构建一个AI系统有一种方法是从构建标注验证数据集。例如,如果你对自动化门诊病例成ICD-10编码感兴趣,请让临床医生定义一些代表性样本,对样本进行脱敏,并让专业的临床编码人员对其进行标注(分配正确的代码)。
如果你有兴趣从放射学报告中提取关键事件或从患者病例中找出被忽视的安全事件,请首先让临床医生定义一些样本,并正确标注。
题外话:你们就会看到各种AI大公司的JD有数据标注师这么一说,标注师的薪资范围比较大,要看行业领域的门槛,比如:医疗行业的会薪资会比较高,也有大部分是兼职的。
这样做通常会在让数据科学团队加入(并浪费很多时间)前提前发现一些“坑”。如果你无法获得足够的数据,或者无法大规模地进行脱敏,那就无法构建可靠的模型。
如果在某些情况下临床医生不能一致同意正确的标注,那么要解决的第一个问题是就临床指南达成一致,而不是让数据科学家参与尝试去自动化这种不一致。
最后,如果你发现自己面临非常不平衡的类别(比如你寻找的是每年只有少数人患病的情况),那么在引入数据科学家之前修改问题的定义可能是明智之举。
标注的验证集以及数据集其目标是使用标准库或云服务来发现它们能达到的满足用户特定需求的最高准确度。
这样做就可以评估下面每项服务的难易程度,包括:训练自定义的模型、定义领域专有的特征、解决方案所需的pipeline步骤和把结果解释给客户。
一旦有了一个有代表性的和已商定并正确标注的验证集,你就可以开始用它来测试现有的库和云服务提供商的服务了。很可能的是,这个测试将立即发现每个产品与你的需求之间的差距。
六、总结
我在本文中,是从对医疗业务框架的拆解出发,对NLP定制型医疗服务各方面的产品设计要点做了简要介绍。
在未来一段时间内,业务定制NLP系统将仍是真正能帮助大型智慧医疗行业达成业务目标的重要系统之一,也是AI落地的主战场之一。