KBQA沉思录一种认知两种方法论


     ## 医疗文本结构化:一种新视角

AINLP 2022-10-04 21:11 Posted on 江苏

The following article is from KBQA沉思录 Author zhpmatrix

KBQA沉思录.

读书,写码,思考。

Image

前言:这篇文章中的一些想法在写出来之前,和身边的一群可爱的小伙伴们做了碰撞和讨论,因此也算是共创的结果。

    随着对医疗NLP结构化体系构建的推进,我们对体系本身的认识也在不断地进行演化,这篇文章简要探讨我们近期的一些思考,其中有些思考存在不成熟之处,仅抛砖引玉。

Image

(图片引用自百度灵医智惠)

    围绕医疗NLP,笔者常说的“一种认知,两种方法论”。“一种认知”是指医疗NLP是以结构化能力为核心的NLP应用方向。“两种方法论”分别是能力和内容协同建设,数据和知识双轮驱动。

    回到具体的结构化体系构建,从整体上看,分为能力和内容两个部分。其中,知识图谱作为内容的承载,为能力的构建提供内容支持;能力的输出可以作为知识图谱内容的一部分,同时通过链指实现能力和内容的联动。能力体系也是一个“洋葱”结构,从外到内,分为文书大类,文书小类,段落类别,Span级语义和实体/属性/关系。其中,前四个维度存在国家标准,实体/属性/关系是通过自定义的Schema来描述。

Image

    从上图来看,“洋葱”从外到内,粒度越来越细,语义识别能力的要求越来越强。

    围绕数据中台,这套能力应该基于标准化的计算和存储引擎,成为一种标准化的能力,产出标准化的数据内容,继而支持上游的各种标准化应用。

    针对多层次的结构化体系特点,可以换一种视角来重新观察。假设要回答“入院记录中的现病史的症状实体抽取的评测指标是多少?”,就可以通过建立的三维坐标系,将问题映射为坐标系中的一个具体的点来很容易的回答。通过将Z轴展开,可以继而回答“症状实体类型中“腹泻”这个实体词的“否定”属性的评测指标是多少?”

Image

    因此,关键是坐标系的建立。为了建立坐标系,需要梳理坐标系的维度,维度范围,维度值。在坐标系建立之后,就可以基于一个稳定的测试集,实现一套标准的计算口径,得到坐标系中的每个点的具体值。这个观察视角,可以回答非常多的关于结构化能力体系的各种非常具体的问题。

    在具体的量化分析过程中,考虑不同模型的不同版本,在测试集上预测和真实标注结果,在各个不同维度上的区别,以此形成的经验性的分析方法,可以通过工具化,使得这种能力能够得以沉淀和复用。这也是由上述观察视角带来的一个很直接的想法。

    以百度灵医智惠为例,需要梳理出医学实体类型-属性的具体关系,且这种关系是可枚举的。

Image

    病历字段-核心抽取要素/属性的部分梳理结果如下:

Image

    最终回到核心能力的构建上,一种可能的方式如下:

Image

    每个具体任务的具体解决方案都是相对朴素的,这里不再展开讨论,不过有两个问题需要讨论。

(1)人机协同

    理论上,在每个具体的模块,除了机器的解决方案,还需要人工的配置模块。这里的想法是,首先机器或者模型/规则的解决方案无法有效覆盖复杂的医疗文本结构化的所有情况,通过配置接口,可以将人类的经验或者知识带到一套能力体系中去。如果所有的问题解决都依赖于机器,解决的效率或者ROI可能都并非很高,这里包含解决的速度,解决的效果等。

    另一方面,配置模块的融入,其实开放了一个接口给到更多的角色,使之也能够参与到整个能力体系的演进迭代中,且这种优化是开放可持续的。

    除上之外,人的加入也使得能力体系的进化能够形成闭环,带来“飞轮”效应。

(2)融合策略

    这里主要讨论三个小问题,分别是模型和规则的融合,模块配置化,优先级/组合/冲突解决。

    模型和规则的融合。模型提供泛化能力,规则提供准确能力。同时规则和模型的融合不会显著提升服务推理的RT。融合的目的是能力互补,需要明确在哪些维度上能够实现互补(层次化的能力互补)。

    模块配置化。主要目的是通过可插播,实现灵活配置,提升可扩展的能力。从纵向角度看,单个能力模块内部是可配置的;从横向角度看,不同能力模块是可配置的。

    优先级,组合和冲突解决。主要是指单个能力模块内的问题分析和解决。

    我们经常思考的一个问题是,医疗NLP的结构化边界或者上限在哪里?或者说,如何做出差异性的优势?

    以一段主诉文本的描述“患者头痛3天,伴发烧”为例,从不同的层级来看,我们可以做到如下的输出:

Image

    第一部分按照最小粒度识别的原则输出识别结果,这时的输出结果的业务含义较差。通过一次组合,可以输出相对有意义的识别结果,对应的识别的类型发生变化。如果通过二次组合,则会形成新的类型,并不包含进实体类型列表的类型,这里我们定义为“描述”,但是组合之后的结果同样具有有价值的含义。

    也就是说通过两次组合操作和定义新的类型,我们可以进一步扩展原始识别结果的表达能力。

    另外一个例子是笔者之前的文章中提到的Mendel.ai的工作,给定:

Image

    输出如下:

Image

    具体的输出不再做分析,主要是指输出要素的语义扩展以及要素层次体系的构建。

    除了上述讨论,还有一些有意思的问题还没有深入思考。词块识别和实体识别的一些比较有挑战性的问题,如何有效处理等?

Image

    比如特殊类型文书的处理(评分表,检验,护理文书等),如何融合现有的结构化能力体系?

后记:空杯心态,常做常新。医疗文本的结构化看似已经有前辈做了很多探索,但是本着初学者的心态重新审视做的事情,又会有新的思考和发现。想法还有很多,笔者着急为祖国母亲庆生,来不及写了,祝国泰民安。