丁香园大数据 NLP 文章发表于: 2019-12-31

医疗健康领域的短文本解析探索(一)

谈谈医疗健康领域的 Phrase Mining

前言

再来简单回顾一下之前内容,上一篇《 医疗健康领域的短文本解析探索(一)》我们简单的介绍了目前工业界常用的 concept/phrase 的自动化抽取和评估的方法,之后我们又介绍了两种结构化电子病历的方法,第一种构建 MeSH 语义树,对症状原子词进行拆分;第二种使用 multi-view attention based denoising auto encoder(MADAE)模型进行相似度计算,关联到库中已存在主题词上。这篇文章我们一方面继续优化抽取结果,一方面讲一下上一节留下的坑,什么是已经存在的主题词,我们如何确定主题词?

开胃菜

10 月份第五届中国健康信息处理会议(CHIP2019)发布了一个测评任务[1],临床术语标准化任务,和我们最后提到的标准化任务差不多,给定一手术原词,要求给出其对应的手术标准词。如下图所示:

这和我们目前做的内容契合度很高,所以就拿这个数据来练练手。对于信息检索相关的任务,一般思路都会分为 召回精排(或重排 Rerank) 两个阶段,这里我们仅使用过往方法验证一下召回阶段。首先分析一下数据,数据中会存在三种关系, 一对一,一对多,多对一,多对多 主要先解决一对一这个问题,简单回顾一下 MADAE[2]模型。

首先使用简单的 Noise Function 进行数据增强,三层的 Multi-view Encoders,分别为音,字,词三种方式的 embedding 层进行输入。因为严重缺少上下文,就没办法将上下文信息做特征,所以直接用 Denoising Text Embedding 生成向量后的 Top-1 的结果只有 73%。于是我们做了两个改进,首先将 Noise Function 替换为 EDA[3]构建数据集,并且将 Multi-view Encoder 层加入 bert 的,发现效果好了很多,结果如下表所示:

后来发现一对多和多对一的问题在测试集上出现挺多的,我对于一对多的处理方式是将 origin 词中带有’+‘号的进行分割了,导致了最终正确率下降很多。ps:就这个 单侧甲状腺切除伴他叶部分切除术 在测试集上就有 80 个,一定要认真的看数据集合。

简单的说一下后续优化的思路,首先来看一下计算相似度后的结果,key 是原始词,target 是验证集给出的结果,topK 是 BERT+DAE 相似度计算给出的排序结果,我们可以根据 Top-3 的结果构建正负样本,将图中’✓‘做为正样本,图中的’ x‘作为负样本,再构建一个分类器模型,可以用 origin 和 ^target(预测结果)的一些相似度度量的结果作为特征,比方说 jaccard,Edit Distance,word2vec 等等。之后分类的结果对 topK 进行 rerank,一切有趣的玩法请自行开发。

后续看了前三名的 ppt,排名第一的方法是用 LCS 最长公共子序列做粗筛,最后精排直接用 bert 构建分类器。精排过程对于最终信息检索的效果有非常重要的作用,经过精排后,前几名参赛队伍对于数据集的 top1 准确率可以提高到 90%+。如果有兴趣可以[1]邮件联系要数据。

有趣的主菜

命名实体识别是结构化文本最重要的技术之一,可以有效的帮助我们分析用户意图并优化推荐结果,但是在实际应用中存在两个问题:

  1. 如何获取垂直领域或开放领域的高质量标注。
  2. 随着不断积累新的数据也将源源不断的产生,如何使用已有的数据,挖掘出新词并准确的对应到相应的类别。

在保证质量同时又源源不断的获取新的词汇,最简单的方式是找到这个垂直领域的专家,持续不断的对一些非结构化文本进行标注。但是这种方式的成本比较高,而且周期比较长。使用远监督的方式,根据一份质量较高的词典对非结构化文本进行"伪标注",但是在垂直领域由于泛化能力有限,我们没办法保证其命名实体识别的有效性,举个例子,苹果可以是食物,也可以是公司,那么我们在进行远监督对文本做标注时,无法有效的进行区分。

生物医学领域为解决泛化性低这一问题,提出了基于规则和统计的混合分类器模型[9]。使用前缀匹配,拼写规则,N-gram,词性标注和一些上下文相关文法作为特征,使用贝叶斯网络,决策树和朴素贝叶斯等分类器模型进行融合。准确率在该数据集上提升了 1.6 个点,其结果如下所示:

近日看了使用远监督进行命名实体识别一些论文,其中一篇《Distantly Supervised Named Entity Recognition using Positive-Unlabeled Learning》[10-11],作者主要用未标记数据和领域辞典进行 NER 方法,作者将任务表示为对正未标记(PU, Positive-Unlabeled)学习问题,因为词典不能包含句子中的所有实体单词,所以没有采用传统的 BIO,BIESO 标注模式,而是转化为二分类问题,将实体单词映作为正样本,非实体单词作为负样本。在 AdaSampling[12]不断扩充词典数据的同时也在不断的优化 PU 分类器。

这种半监督方式虽然和监督学习比有一些差距,但是也达到了相对较好的结果。印象深刻的是这篇《HAMNER: Headword Amplified Multi-span Distantly Supervised Method for Domain Specific Named Entity Recognition》这篇文章应用了之前文章中提到的文本结构化方法和名词短语挖掘等技术,来为命名实体识别提供 pseudo annotation。

作者提出了一个 HAMNER:Headword Amplified Multi-span Named Entity Recognition 远监督的方式进行标注。这篇文章旨在减小传统的监督学习方法和远监督之间的差距,文中表明,远监督方法有两个限制条件,第一个就是 oov 问题,挖掘到的新的名词短语,没有一个准确对应的类别,就比方说,ROSAH syndrome,像这个词如果未存在词典中时,我们可以根据它的 headword syndrome 来判断它实际上是一个疾病类型。另一个限制就是远监督方法很可能带来很多不确定的边界问题,举个例子, 我想买一个苹果手机,苹果是 Food 也可以是 Company,苹果手机是 Mobile Phone,因此先确定 mention 的类型再去判断 mention type,并根据其置信度给出更为准确的实体边界。

从流程图中看出,我们远监督所用到词典数据来源有两个,高质量带类别的词典和抽取的 phrase(本文中为 span),对训练数据生成 伪标注 数据。那么 问题 就有了, 如何获得词典之外的 Noun phrase,如何解决同义词和拼写错误问题,文中提到了两个方法,其中一个用的是 Auto Phrase,也就是之前的文章中我们谈过的关于名词短语挖掘的方法[4-7]。抽取到的 phrase 没有类别时,并使用 headword 和 word embedding 计算相似度的方式确定抽取 Noun Phrase 。

输入词典 D,高质量的 phrase,headword 频率的阈值和 headword 相似度阈值,根据 phrase 匹配到的相似度最大值的类别进行记录,phrase 很有可能存在多个类别标签,T 为 phrase 的类别标签集合。在构建伪标签的训练数据时,根据正向最大匹配原则,不允许存在嵌套或重叠。但是允许同一个实体有多个类别。

不仅每一个实体可以有多个类别标签,在构建数据时还要对词实体的每个类别给定一个权重 w,这个权重是根据 Algorithm 1 中最大相似度值进行计算。像图中给出的例子一样,将包含 granuloa cell tumors(phrase) 的句子作为输入层,ELMo, Character Representation 和 Word Embedding 做为 embedding 层,隐藏层为 Bidirectional LSTM,将其最终结果作为 Word Representation 并根据 phrase 的 span 将句子划分为三个部分,每一部分计算一个隐藏的表示,最后将三个结果进行拼接后将最终 EntityType 作为这 phrase 的类别。并且我们可以获得 phrase 在这个类别下的权重 w。

最后一步,根据神经网络模型提供的 phrase 和其所有类型的概率估计,对句子进行划分,因为 phrase 之间位置互相不重叠且不存在嵌套,并且在句子中应该是保留一个固定类别信息,因此对于句子中存在多个 phrase 时,我们根据其最小的联合概率,作为最优解,其中用了动态规划做优化。

一点也不甜的甜点

其实整个方法不难理解,但是内容相对来说还是挺丰富的,首先我们需要有一个在垂直领域一定规模的自定义词典,根据 auto phrase 等名词短语挖掘方法,挖掘一批高质量的名词短语,并且简单的做一些标注后,根据上下文信息构建分类器模型,确定其在每个类别下的条件概率值,概率最大的作为该句子下 phrase 的类别,再计算最小的联合概率结果,使用动态规划,找到最优解,作为最终的伪标注训练数据。这样做的好处是,减少人工标注成本,而且在某些领域下效果近乎于专家标注结果。

这篇文章也是最近刚看到的,其中一些方法我们也在用,并正在尝试着做一些改进,原文在为抽到 phrase 给定类别的时候,使用 headword 和词向量计算相似度。但是词典中会存在 oov 问题,很可能没有 phrase 所对应的 headword 时,可以考虑用一些规则,或者是根据[5]中提到的对症状数据进行标准化的方法,标注一批数据,构建语义树等方式来辅助我们给定 phrase 最终类别。

总结

在 2019CCKS 看到很多医疗研究室做的标注系统,但是都存在一个问题,那就是如何确定优质标注的来源,如果说找医学领域专家进行标注,时间成本很高,而且标注过程相当枯燥,会导致标注时信息缺失或标注错误。

远程监督的方式可以帮助我们减少一定量的人工标注成本, HAMNER 的方法证实了,使用领域词典和挖掘到的名词短语进行伪标注要比单纯使用领域词典的效果要好,并且其 F1 和 Pre 与人工标注结果在某些领域数据集下相差不多。

我们之后将尝试用 HAMNER,语义树,知识图谱实体对齐和一些简单的人工标注等方法来解决构建训练数据问题。使用 HAMNER 对非结构化文本构建伪标注数据,再人工审核伪标注数据的 phrase 类别的词在句子中的边界和类别正确。


引用

[1] http://www.cips-chip.org.cn/evaluation

[2] [IEEE 2018] Chinese Medical Concept Normalization by Using Text and Comorbidity Network Embedding

[3] [EMNLP 2019]EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks

[4] HAMNER: Headword Amplified