面向中文电子病历的属性挖掘①

2022-08-31 12:18费超群张书涵李阳阳
高技术通讯 2022年6期
关键词:病历口腔数据库

费超群 张书涵 李阳阳∗∗∗

(∗智能信息处理重点实验室 北京100190)

(∗∗中国科学院计算技术研究所 北京100190)

(∗∗∗中国科学院大学 北京100049)

(∗∗∗∗管理、决策与信息系统重点实验室 北京100190)

(∗∗∗∗∗中国科学院数学与系统科学研究院 北京100190)

0 引言

电子病历(electronic medical record,EMR)已被现代医院广泛使用,但是许多电子病历并未被规范保存。大多数病历还是以无结构化形式被存储在电子文档中。这样的病历常存在以下问题:(1)病历文本中由不同医生对同一症状的表达存在差异;(2)病历文本中常出现不规范表达和噪音等现象。这种病历不便于被再次利用。而将无结构的电子病历转化为结构化的“〈检查项目,检查结果〉对”能有效解决这些问题。这个“对”的第1 项被称为电子病历的属性,第2 项称为该属性对应的属性值。

属性挖掘是属性值对抽取任务中的重要部分,本文的工作就是要从某科室的电子病历中抽取该科室电子病历的属性。

属性与现有工作中的指示性短语不同[1-4],区别包括:(1)它们的目标和任务不同。指示性短语用来表示一组特定文档的特征,而属性则用于表示这些文档中所讨论对象的共同特征。(2)它们在子句中的位置不同。指示性短语出现在子句中任何位置,而属性常出现在子句开头或结尾。(3)属性一定是指示性短语,但是指示性短语不一定是属性。(4)属性在单个文本中不常见,但对于一组文本来说是很常见的。与其不同的是,指示性短语在单个文本和多个文本中都很常见。(5)它们的应用场景不同。指示性短语抽取通常用于信息检索、文本聚类等任务。属性挖掘更适用于知识库构建、领域文本摘要生成等任务。

属性挖掘问题是基于这样的假设,即所有属性,特别是重要属性,会经常出现在一组电子病历中。直观上这是合理的,因为可以作为属性的词或短语在语料库中出现的频率是比较高的。为此,本文提出一种频繁属性挖掘框架。从文本中提取出频繁词模式并对它们进行分组,使用候选属性得分函数,从候选频繁词模式集合中选择得分最高的词模式作为属性。该方法避免了使用监督学习和无监督学习来提取信息的一些缺点。基于中文电子病历的实验结果表明,该方法能够有效地处理属性挖掘问题。

1 相关工作

现有工作中已有一些从类似病历的文本中抽取属性或属性值对的任务。文献[5]从产品描述中抽取“〈产品属性,属性值〉对”,把该抽取任务形式化为多分类问题,并提出半监督学习算法co-EM 来解决此问题。文献[6]从关于某主题的短广告语料库中提取“〈键,值〉对”,将该任务形式化为序列标注问题,并基于人工标注训练集利用监督学习的方法来处理这个问题。文献[7]将产品属性提取问题形式化为命名实体识别任务,并分别借助有监督和半监督方法从eBay 商品标题中提取产品属性。上述工作中提出的方法都在文献[8]归纳的信息抽取方法框架内。而现有的有关属性或属性值对抽取的工作[9-10],也基本按照文献[8]所归纳的几种信息抽取的思路进行,即将属性抽取任务看成是序列标注问题或分类问题。这些工作与本文的工作相似,但他们的研究对象和解决问题的方法与本文不同。

另一种相关工作是类属性提取,其目标集中在构建类的“骨架”上。文献[11]利用引导式的方法,基于种子属性集同时从Web 文档和查询日志中提取类属性。文献[12]引入轻监督的方法,用于从与特定主题相关联的网络搜索查询中提取实体属性。但上述工作在目标和任务上与本文不相同。

频繁模式挖掘的思想在其他领域也有很广泛的应用。文献[13]应用序列模式挖掘来解决广义中心字符串挖掘问题。文献[14]应用序列模式挖掘来处理事件日志中的挖掘。从电子病历中抽取信息的工作最近也有一些研究[15-17],但是这些工作均不涉及属性挖掘,目前还没有专注于基于电子病历的属性挖掘工作。

2 问题定义

序列模式挖掘问题由Agrawal 和Srikant[18]在1995 年提出。他们认为,“序列模式”是纯粹的句法概念,即如果一个符号序列出现得足够频繁,则可称其为序列模式。序列越长,模式就越有价值。本文提出的“属性”概念不仅具有句法特征还有特有的语义规则约束。

频繁的属性与频繁的序列模式有一些相似之处,但两者之间也存在本质区别,特别是在电子病历上。

针对电子病历的文本结构,本文列出基本定义如下。(1)每个文本都是由句号分隔的句子序列。(2)每个句子都是用逗号或分号分隔的子句序列。(3)每个子句都是由词、数字和冒号(最多2 个)组成的序列。(4)每个词在语法上都是汉字字符序列,在语义上是基本意义单元。(5)如果词u的字符序列是词v的字符序列的子序列,则u称为v的子词。(6)如果u是v的(字符或词)子序列,则v是u的(字符或词)超序列。(7)如果u是v的(字符或词)子序列但不等于v,则u是v的(字符或词)真子序列。(8)属性是词序列,用来表示一组文本共同包含的对象的特征。(9)属性值是用于评估属性的数字或文本描述。(10)病历文本是半结构化文本,其中的一些词用来为文本中描述的对象的属性赋值。(11)如果文本的某些部分必须遵循某些预先指定的句法规则,则将其称为半结构化文本。(12)电子病历的大多数子句中,每个子句都由一个属性及其相关的属性值组成。

定义1给定一组电子病历和用户指定的最小支持度阈值,频繁属性挖掘旨在根据一些启发式规则以频繁出现的词序列作为候选属性,并从中选出最合理的属性。

在上述定义中,启发式规则是对电子病历语义的非正式描述,它既包含医学领域知识,又包含医生书写病历的惯例。

词数据库S是元组的集合,其中sid是包含词序列s的记录的序列号。S中不同元组具有不同的序列号sid。如果词序列α是s的词子序列,则称元组包含词序列α。S中词序列α的支持度是S中包含α的元组数,表示为supportS(α)。

定义2设α是病历数据库R中的一个词序列。给定正整数ξ作为支持度阈值,如果supportR(α) ≥ξ,则称α是R中的词模式。

3 语料研究

实验用的中文电子病历由某口腔医院提供,它们分别来自修复科、正畸科和颌面外科。

3.1 属性分类

根据“〈属性,属性值〉对”中相关属性值的类型,可以将属性分为3 类,如表1 所示。

表1 属性类型及示例

二元型属性是指该属性在文本中的取值只有存在或不存在2 种情况;描述型属性是指其属性值是一段描述性的文本;度量型属性的属性值由数字和度量单位组成。

在某些情况下,属性值会插入属性的词序列中。例如,在子句“牙龈无红肿”中,“牙龈红肿”是属性,而“无”是其属性值。对于具有这种结构的子句,可以通过删除插入的属性值并连接剩余的单词以获取属性词。这种插入型的属性值称为插入词。本文所提出的算法也能够适用这种情境。

3.2 属性和属性值的位置关系

属性和属性值在文本中的位置关系可以分为3类。

(1) 属性和值是连续的,如“牙槽嵴吸收轻度,咬合无明显异常”。

(2) 属性和值被冒号分开,如“触痛:无,弹响:无”。

(3) 两层属性,如“中线:上中线:左偏1 mm;下中线:右偏2 mm”。其中,“中线”是父属性,“上中线”和“下中线”是子属性,父属性和子属性通常由冒号隔开。

对于第2 类和第3 类有明显句法规律的情形,仅使用一些句法规则就能抽取到属性,不属于本文所考虑的情形。本文的算法主要面向第1 类文本,即没有句法规律的文本。

4 属性挖掘算法Attrimining

本节介绍面向中文电子病历属性挖掘的算法Attrimining。它包含词模式挖掘、词模式分组和词模式组属性选择3 个阶段。

4.1 词模式挖掘

当前,用于频繁子序列挖掘的主要方法有2种[19],一种是基于Apriori 的方法,例如Apriori-All[18]、广义序列模式(GSP)[20];另一种是模式增长类的方法,例如FreeSpan[21]、PrefixSpan[22]。

由于属性和频繁子序列之间的差异,这些算法都无法直接应用于属性挖掘任务。频繁子序列是自由符号序列,而属性是半结构化的词序列。此外,前者是纯粹的句法概念,而后者在语义上要求领域相关。有证据表明,每个属性都必须由领域专家最终确认。

为应对电子病历中挖掘属性的挑战,本文提出一种新算法Attrimining(见算法1),该算法能够挖掘满足最小支持阈值ξ的属性。Attrimining 有3 个核心概念:前缀、投影和后缀,见定义3~5。

定义3给定词序列W,词序列W′被称为W的前缀,当且仅当存在词序列U(空或非空)满足W=W′°U,其中°是词序列连接符。

定义4给定词序列W,词序列W′被称为W的后缀,当且仅当存在词序列V(空或非空)满足W=V°W′,其中°是词序列连接符。

定义5给定词序列W和P,W的词子序列W′被称为W关于P的投影,当且仅当P是W′的前缀;W′是W的后缀。

例如,给定词序列w1=〈“口腔”,“卫生”,“状况”,“良好”〉。则〈“口腔”〉和〈“口腔”,“卫生”〉都是w1的前缀。〈“卫生”,“状况”,“良好”〉和〈“状况”,“良好”〉都是w1的后缀,同时〈“卫生”,“状况”,“良好”〉是w1关于前缀〈“口腔”〉的投影。

定义6设w是子句数据库C中的词模式。则C|w表示元组的集合,其中,rid表示某病历文本的序号(唯一且可代指该病历),cid是该病历文本中某子句的序号(可代指该子句),proj是w关于病历rid中子句cid的投影。

Attrimining 的3 个步骤:挖掘词模式(算法1 中的第2~11 行)、对词模式进行分组(算法1 中的第12 行)以及从每个组中选择词模式作为属性(算法1 中的第13 行)。在本节中只介绍第1 阶段,后2个阶段将分别在第4.2 节和第4.3 节中详细说明。

给定病历记录数据库R,在R中,每条文本记录都已通过分词器被分割为单词列表。首先通过子例程ObtainClauses获取子句数据库C。子句分隔符,即标点符号逗号“,”、分号“;”、冒号“:”、顿号“、”等是划分子句的依据,可以用于提取第3.2 节中提到的第2 类或第3 类属性,以及帮助构建用于抽取第1 类属性的子句数据库C。

对于C中的每个子句c中的每个词wi,如果wi满足一定条件,则wi是c的前缀,表示为prefixi,而剩下的词将作为prefixi相应的候选后缀。然后,调用GetPostfix以获取prefixi的真实后缀postfixi(指去掉插入词和标点后的候选后缀)。同时,构建prefixi的投影数据库S|prefixi。最终,可以获取所有长度为1的前缀。

下一步,检查prefixList_1 中的每个前缀prefixj。如果supportR(prefixj) ≥ξ,即未重复的rid数目大于ξ,则表示prefixj是词模式,将其添加到wp_all中。然后调用WPFinding(见子例程1)基于前缀prefixj及其投影数据库S|prefixj来抽取长度大于1的词模式。同时,基于prefixj创建一个AETrie(将在4.2 节中进行说明)节点AENode并将其添加到AETrieList,以记录基于前缀递归生成词模式的过程。

接下来,举例演示Attrimining 如何抽取词模式并构建AETrie。假设有表2 中所示的病历记录数据库R,令ξ=2。

表2 病历数据库R

通过调用ObtainClauses(R)从R中获取子句数据库,其中的部分展示在表3 中。以表3 中的几个子句为例,从中挖掘词模式的过程呈现在图1 中。从表3 中,可以挖掘到的词模式包括〈“口腔”〉,〈“口腔”,“卫生”〉,〈“口腔”,“卫生”,“状况”〉,〈“口腔”,“卫生”,“状况”,“良好”〉,〈“卫生”〉,〈“卫生”,“状况”〉,〈“卫生”,“状况”,“良好”〉,〈“状况”〉,〈“状况”,“良好”〉。

表3 病历子句数据库

图1 词模式生成过程图解

4.2 基于AETrie 的词模式分组

Attrimining 的第2 个阶段是词模式分组,即根据AETire将wp_all中的词模式进行分组。AETire的构造是伴随着词模式的生成一起进行的。分组的目的是从组中选择最合理的候选属性,并排除不能作为属性的词模式。

AETire具有以下特性:

(1) 所有节点都是长度为1 且满足ξ的词模式。

(2) 从节点的任意祖先到其自身的路径也是词模式。

(4) 根节点到叶节点的路径上的所有子路径可表示的词模式都被划分到同一组。

假设有一个AETrie,见图2。根节点是〈“口腔”〉,叶节点是〈“情况”〉,〈“一般”〉,〈“良好”〉。根据AETrie的性质,在路径〈“口腔”〉→〈“一般”〉→〈“情况”〉中,可以得到以下词模式:〈“口腔”〉,〈“一般”〉,〈“情况”〉,〈“口腔”,“一般”〉,〈“一般”,“情况”〉,〈“口腔”,“一般”,“情况”〉。这些词模式将被划分在相同的组。

图2 AETrie 示例

当一个AETrie是其他AETrie的子树时,将它们进行合并。

4.3 基于AScore 的词模式组属性选择

Attrimining 的第3 个阶段是从词模式组中选择最合理的词模式作为属性。

根据对病历数据库的以下观察:(1)如果词模式的支持度越大,它越有可能是属性;(2)如果词模式的长度越长,它越有可能是属性;(3)如果词模式越接近子句的最左边,它越有可能是属性。因此,影响词模式wp作为属性的3 个因素分别为wp的支持度support(wp)、wp的长度len(wp)、以及wp的平均最左距离(average most left distance,AMLD)AMLD(wp)。综合这3 个因素,本文设计了得分函数AScore(wp),用于计算词模式wp作为属性的得分,如式(1)所示。

其中,AMLD是wp在其关联子句中的平均最左距离(most left distance,MLD)。MLD(wp) 是指词模式最左边的词与原始子句中最左边的词之间的距离。设最小MLD值为1,len(wp) 表示wp中词的数量。

假设有子句c=〈“口腔”,“卫生”,“状况”,“良好”〉,从c中抽取的词模式中有:〈“口腔”,“卫生”,“状况”〉,〈“卫生”,“状况””〉,〈“状况”,“良好”〉,它们对应的MLD分别为1、2、3。

从表3 所示的子句中,可以得到一个词模式组,其中的部分见表4。以第2 个词模式wp2=〈“口腔”,“卫生”〉为例,来计算wp2的AScore得分。wp2的支持度是4,长度是2,在它原始子句中的所有MLD都是1。根据式(1),AScore(wp2)=4 ×2/((1+1 +1 +1)/4)=8。在这组中,〈“口腔”,“卫生”,“状况”〉的AScore得分最高。因此,“口腔卫生状况”就被选择作为该组的属性。

表4 词模式和AScore 得分

另外,由于中文的书写惯例,一些词模式不应作为候选属性。为此,Attrimining 中也添加了一些启发式规则,如下:

(1) 长度为1 且只包含一个字符的词模式不能作为属性。

(2) 长度为1 且AMLD值较高的词模式不能作为属性。

(3) 如果词模式在AETrie中是根节点,且有多个子节点,则不能作为属性。

4.4 时间和空间复杂度分析

Attrimining 算法的主要时间消耗在前缀生成阶段。假设病历数据库中子句的数量为NC,每个子句的平均单词数是则算法的时间复杂度为。在实际场景下,病历数据库中,每个子句所含有的词数一般都比较少,也即

Attrimining 在运行时的内存消耗主要在前缀投影库的构建和AEtrie的构建过程中。前缀和其投影数据库的构建的空间复杂度为。假设构建的前缀数量为Nprefix,显然,即构建AETrie的空间复杂度小于,据此推断算法整体的空间复杂度为

5 实验和评估

本节通过几组实验来验证Attrimining 算法的有效性,以及影响其性能的关键因素。实验平台为Windows 10,内存为20 GB;处理器型号为Intel Core(TM) i7-4990,算法实现语言和版本为Python 2.7。

5.1 病历库预处理

原始电子病历存在以下问题。(1)表达不统一。如数字“1”存在多个形式的表达:“1”、“I”和“一”等。(2)测量单位不统一。如单位“度”存在有“度”、“°”等表示形式。(3)中文和英文标点符号混合。如括号中文形式“(”和英文形式”(”。(4)“ t”、“ ”或其他特殊符号出现在不合适的位置。这些问题会影响分词和抽取性能,因此必须对语料库进行规范化:包括统一单位、统一表达、统一中英文标点等。

5.2 实验结果与评估

本文使用Jieba(http:∥pypi.org/project/jieba/)分词器在中文口腔医学词典的帮助下对电子病历进行分词;再使用Attrimining 从病历库中提取属性。实验对象为分别从修复科、正畸科和颌面外科中随机抽取的各200 个病历。在口腔医生的帮助下,对实验病历进行标注,得到黄金数据集,也即每个科室的“黄金”属性。首先展示从3 个科室抽取的AScore得分排行前10 的属性,如表5 所示。

表5 3 个科室AScore 得分前10 的属性

本文使用精确度(P)、召回率(R)和F1 值作为基本的评估标准。并考虑以下因素:(1)抽取的候选属性与标准属性之间存在部分匹配。例如“形态对称”是抽取出来的候选属性,但其标准属性是“髁突形态对称”。此种情况下,该候选属性被判定为是部分正确的。(2)存在无效属性。当黄金标准集中的某些属性在实验数据集中出现的次数小于阈值ξ时,Attrimining 显然无法适用,这类属性被视为无效属性。为评估因素1 中“部分匹配正确”的属性,本文设计一些“部分(Part)”评估指标,如表6 中的“完全和部分准确率”所示。该指标表示部分和完全正确的候选属性数量与标准属性数量的比值。为评估因素2 中的无效属性,本文设计“高频(Frequent-most)”指标,即只与高频的黄金属性(在病历中出现次数大于等于阈值)进行比较,来评估Attrimining 在高频场景中的表现。如表6 中的“高频完全准确率”所示。该指标表示完全正确的属性数量占高频标准属性数量的比例。最终,本文提出12 个指标作为本次实验的评估标准,见表6。

表6 评估标准

表7 呈现3 个科室病历的实验评估结果。在所有实验中设置支持度ξ=2。结果表明,本文算法在不同科室的实验数据集上都有很好的效果,尤其是在颌面外科数据集上。

表7 3 个科室评估结果

5.3 与基准方法的比较

由于未在相关文献中找到应用于和本文类似的中文数据集的属性挖掘任务的方法,为此,本文设计一种基于规则的属性抽取方法,即使用正则表达式来抽取属性,作为基准比较方法。

在基于规则的实验中首先统计词频,然后结合高频词和语法结构设计抽取规则。其中使用的几条规则如下:“ <位置>∗? [无|不] <症状>+”,“ <项目>:”,“ <项目>[约]∗? mm”。

修复科和颌面外科的病历被用于此次的比较实验,对比结果见表8。

表8 与基准的比较评估结果

在完全准确率(FP)、部分和完全准确率(FPP)、完全召回率(FR)、部分和完全召回率(FPR)等指标上与基准方法的比较结果显示,Attrimining 在多数指标上都优于基准方法。

5.4 算法运行时间耗费评估

本文使用正畸科的数据集来评估Attrimining 算法在不同大小数据集下的时间耗费,结果见图3。当实验数据较少时(<140),时间耗费呈多项式的变化;而当实验数据较大时(>140),时间耗费呈接近线性的变化。从算法时间复杂度公式可以看出,当和NC差距不大时,时间耗费应该呈现多项式的变化;但是当和NC差距很大时,也即<

图3 不同数据集大小下的时间耗费

5.5 影响频繁属性挖掘的因素分析

最小支持度阈值ξ显然是影响属性挖掘的关键因素之一。此外,算法的效果也会受到数据集大小的影响。本文设计2 组实验来验证其影响。在2 组实验中,都以颌面外科的数据作为研究对象。在第1 组实验中,利用200 个病历作为实验数据,ξ分别设置为2、3、4、5、6、7。第2 组实验中,设置ξ=2 来观察不同大小数据集下算法的性能变化。2 组实验结果如图4 所示。

图4 Attrimining 在不同ξ 和不同大小数据集下的性能变化

第1 组实验结果表明,随着ξ的增加,准确率逐渐提高,召回率和F1 值逐渐降低。F1 值在ξ=2时取得最大值,这说明Attrimining 算法在较低的支持度下有更好的表现。第2 组实验结果显示,准确率曲线、召回率曲线和F1 值曲线都有先上升后下降的趋势。这些曲线反映适当增加训练数据可以提高算法性能。但是,当数据规模超过一定阈值时并不会改善抽取效果。一方面,说明Attrimining 算法在少量的数据集情形下能取得良好的结果。另一方面,实验结果也表明,对于大规模属性抽取任务,对数据采取增量式分批抽取的策略能够达到更好的效果。

6 结论

本文形式化属性挖掘问题,并设计一种有效的算法。同时,设计了一种有效的候选属性得分函数获取最可信的属性。在真实数据集下进行实验,实验结果证明了本文所提方法的合理性和有效性。未来将使用提取到的属性来提取“〈属性,值〉对”,构建口腔领域的中文口腔知识图谱,并将其应用到辅助治疗、自助注册、医嘱自动录入、临床决策支持、人机交互咨询等医学应用中。

猜你喜欢
病历口腔数据库
强迫症病历簿
三减三健全民行动——口腔健康
孕期口腔保健不可忽视
口腔健康 饮食要注意这两点
“大数的认识”的诊断病历
“病例”和“病历”
数据库
临床表现为心悸的预激综合征B型心电图1例
数据库
数据库