APP下载

基于医疗知识图谱的交互式智能导诊系统①

2022-01-05马志柔

计算机系统应用 2021年12期
关键词:子图图谱科室

全 威, 马志柔, 刘 杰, 叶 丹, 钟 华

1(中国科学院 软件研究所 软件工程技术研究开发中心, 北京 100190)

2(中国科学院大学, 北京 100049)

随着医疗信息技术的发展, 传统医疗健康模式正在向“互联网+医疗健康”转型, 网络预约、远程治疗、在线问诊等医疗服务也逐渐普及. 在线问诊系统依据患者主诉来分配科室, 是医生与患者线上沟通咨询的重要媒介. 大多数患者对自身病情缺乏全面了解, 医学专业知识存在不足, 患者的主诉文本口语化、通俗化、多样化, 识别其中的医疗信息以及精准的科室推荐算法是导诊系统的核心部分. 现有导诊系统通过规则推理、文本分类、图谱问答等方法实现. 规则推理方法需要人工设计推理规则, 灵活度不高; 文本分类方法直接预测主诉文本就诊科室, 但导诊是医学的强知识问题, 需要医疗理论知识的支撑保证其可靠性; 传统的图谱问答方法则只在主诉文本较为简单时实用, 无法应用于多医疗实体的复杂主诉文本.

针对上述问题, 本文设计了交互式智能导诊系统,通过识别患者主诉中的疾病、症状、检查、药品等多种医疗指称, 然后链接到医疗知识图谱对应医疗实体上, 利用医疗实体在医疗图谱中查询子图, 通过图编码器提取子图语义信息, 结合主诉文本语义信息进行导诊. 最后针对推荐科室置信度不高的情况, 使用单轮导诊和多轮交互模块相结合的导诊方式, 通过搜索关联症状让用户选择来补充信息.

1 相关工作

1.1 智能导诊系统

导诊系统从原理上大致可分为基于规则模板和基于数据模型两类. 基于规则推理的方法通过人工建立症状、疾病和科室之间的对应规则实现导诊功能. 崔浩等[1]通过提供图形化的界面让用户输入年龄、性别等个人信息, 选择患病部位及相关症状, 将相关症状作为特征推理匹配得到科室, 推荐给患者. 基于数据模型的方法不需要人工建立规则, 将导诊看作科室分类问题, 从医疗问诊网站爬取大量的问诊数据, 抽取患者病情描述和科室数据, 使用传统机器学习方法或者深度神经网络分类模型作为导诊模型. 郑姝雅[2]将患者的年龄、性别特征和主诉信息融合后使用SVM预测科室. 陆康[3]利用知识图谱问答的方式进行导诊, 通过识别患者问题中的疾病实体及其意图, 查询知识图谱对应科室进行导诊. 但无法解决问题中出现多个疾病实体时的情况, 在实际问诊中更多的是包含多实体的句子. Liu等[4]通过医疗百科网站和电子病历构建了以症状-疾病-科室为核心的医疗知识图谱, 根据用户自身症状计算潜在疾病及其权重, 通过查询医疗知识图谱得到疾病和科室之间的相关度, 将两种权重系数融合后得到科室的相关度.

1.2 医疗实体识别

医疗实体识别是指从医疗文本中识别疾病、症状、检查等实体. 早期的医疗实体识别使用基于词典的方法, 例如cTAKES[5]、MedKAT[6]等系统. 虽然词典方法在准确率上有不错的效果, 但由于医疗实体存在多种多样的表述, 词典方法覆盖率不高. 随着标注数据的日益丰富, 机器学习方法成为实体识别技术的主流, 有监督的序列标注模型取得了不错的效果, 如隐马尔可夫HMM、条件随机场CRF等模型. Liu等[7]在CRF模型中加入4种特征对电子病历进行识别. 基于神经网络的方法相较于传统机器学习方法不需要特征工程, 非常灵活. 当数据规模较大时, 明显优于机器学习方法. Almgren等[8]提出基于字符的Bi-LSTM模型,通过端到端的方式训练有明显提升. Xu等[9]将Bi-LSTM和CRF结合, 实验证明该方法优于单一模型. 医疗实体构词复杂, 分词时容易出现错误影响实体识别效果, BERT[10]等预训练语言模型使用字符级的编码能有效规避分词导致的实体识别错误, 同时相较Glove、Word2Vec等静态词向量, 能获得动态字向量表示, 得到更丰富的文本语义信息.

1.3 医疗图谱应用

随着知识图谱的发展, 医疗领域知识图谱也日益完善, 在知识推理、智能问答、辅助诊断等智能医疗应用中发挥了重要作用. 侯梦薇等[11]对医疗知识图谱架构、构建技术及应用现状进行了全面剖析. 奥德玛等[12]基于大规模医疗文本数据, 利用自然语言处理与文本挖掘技术, 以人机结合的方式研发了一个中文医疗知识图谱. 昝红英等[13]通过知识图谱中症状的发作部位和所属科室帮助导诊. 汤人杰等[14]根据电子病历数据建立了症状和疾病之间的权重关系, 用于辅助诊断. 首先清洗电子病历中现病史一栏的否定修饰词, 然后识别其中的症状实体, 最后使用概率图方法计算症状和疾病之间的权重. 基于语义解析的知识图谱智能问答分为实体识别、实体链接和关系预测3个阶段,Wang等[15]使用编码器-解码器框架, 通过解码器预测关系路径, 增加了对关系路径正确性的验证结构, 并使用APVA-TURBO方式训练编码器和解码器, 提升了问答的准确率. Feng等[16]在常识问答任务中引入常识知识图谱来增加常识知识, 提出融合了基于路径的推理方法和图神经网络的多跳图编码器MHGRN, 增强了模型的常识知识多跳推理能力.

然而, 上述研究工作中没有考虑到医疗导诊系统的特殊性. 一方面导诊是医学的强知识问题, 需要医疗理论知识的支撑保证其可靠性; 一方面患者提供的信息不足可能导致单轮导诊成功率低. 因此, 本文考虑通过引入医疗知识图谱和多轮交互技术来提升导诊系统的智能化效果.

2 关键技术研究

在进行医疗导诊时, 其关键技术是如何从患者的主诉文本中提取医疗信息以及如何使用医疗知识更好的理解患者文本语义. 本节将介绍医疗信息识别算法和患者主诉推荐算法两个关键技术.

通常患者的主诉文本如表1所示.

2.1 医疗信息识别算法

医疗信息识别是指识别出患者主诉中医疗信息,并将其对应到医疗知识图谱中, 得到统一规范的医疗表述.本文首先使用BERT+Bi-LSTM+CRF模型识别主诉文本中的症状、疾病、检查、药品等医疗实体指称,然后通过无监督的字符结合语义匹配的方法将识别的医疗指称链接到医疗知识图谱中的实体, 最后查询图谱中实体的名称得到统一规范的表述.

2.1.1 医疗实体识别

深度学习模型可以从医疗实体识别训练数据的标注中自动学习到医疗指称的上下文规律, 并且具备优秀的泛化能力. 本系统使用BERT+Bi-LSTM+CRF模型识别患者主诉中的医疗实体指称, 可以将模型分为BERT, Bi-LSTM和CRF三层网络结构, 该模型结构如图1所示.

图1 患者主诉医疗实体识别模型

第1层是利用预训练的BERT语言模型获取患者主诉文本的字向量, 记作序列X=(x1,x2,···,xn), 通过预训练语言模型得到的字向量能够有效提取患者主诉文本中的特征信息.

第2层是Bi-LSTM层, 即双向长短时记忆神经网络. 第1层得到的序列X作为Bi-LSTM各个时间步的输入, 得到Bi-LSTM层的前向隐状态序列和后向隐状态序列, 将前向和后向隐状态序列按照时间步拼接得到完整的隐状态序列, 记作H=(h1,h2,···,hn). 之后通过线性层将隐状态序列映射到s维(即标注集的标签类别数目), 将映射后的序列记作L=(l1,l2,···,ln),其中,lij代 表字xi对 应的每个类别标签的yj的得分.

第3层是条件随机场层CRF, 在命名实体识别任务中, 某一位置的标签不仅和自身有关, 还要考虑到前后位置的信息. CRF网络不仅考虑到当前位置的标注概率分布, 还会考虑到之前位置的标签概率分布. 通过Viterbi算法解码得到概率最大的标签路径.

2.1.2 医疗实体链接

医疗实体链接是将主诉文本中的医疗指称映射到医疗知识图谱中对应的实体, 分为候选实体生成和候选实体排序两个阶段.

第1阶段. 候选实体生成: 为医疗指称在医疗知识图谱中找到相关的候选实体列表. 抽取医疗知识图谱中的所有实体, 对每个实体构建n-Gram (n=1,2,…,10)到实体的倒排索引表. 实体识别模型识别患者主诉文本得到医疗指称, 查询倒排索引表得到对应的候选实体列表, 计算医疗指称和列表中的每个元素之间的Jaccard相似度, 选择前100作为最终的候选实体列表.

第2阶段. 候选实体排序: 对候选实体列表中的候选实体排序, 选择排名最高的候选实体作为医疗指称的映射实体. 使用字符结合语义的方式对候选实体打分, 进行排序. 使用Jaccard相似度和相对编辑距离作为字符匹配的指标, 通过fastText中的Skip-Gram语言模型训练主诉文本得到词向量, 从语义的角度对候选实体打分, 加权字符匹配度和语义匹配度得到候选实体的最终匹配分数, 最后选择分数最高的候选实体作为医疗指称的映射实体.

2.2 患者主诉科室推荐算法

在进行科室推荐时, 利用医疗知识图谱中症状、疾病等实体和科室实体之间的关系来帮助科室推荐.但完整的医疗知识图谱一般包含几十万甚至上百万三元组, 考虑到效率和噪声问题, 采用从完整的医疗知识图谱中查询主诉文本相关的子图帮助导诊. 通过医疗信息识别算法得到患者主诉文本中在医疗知识图谱中对应的医疗实体, 称作主诉实体. 通过查询主诉实体和科室实体在医疗知识图谱中的相关路径得到主诉文本相关子图. 通过图编码器得到子图语义表示, 图编码器结构参考MHGRN[16]模型. 但仅使用图编码网络无法处理患者主诉中识别不到医疗实体的情况. 所以通过预训练语言模型BERT提取患者主诉的语义信息, 将主诉文本的语义信息和子图信息融合后进行科室推荐.

图2是患者主诉科室推荐模型的结构, 分为输入层、表示层和融合层3层.

图2 患者主诉科室推荐模型

(1) 输入层: 主要是对患者主诉的预处理以及生成患者主诉相关子图.

文本输入处理: 将患者主诉按字(token)切分, 加上BERT模型要求的[CLS]和[SEP]特殊符号, 例如:“[CLS]左腿脚踝浮肿及左腿浮肿, 是什么原因. 挂号的话, 应该挂什么科室?[SEP] ”, 将输入文本序列记作x∈RdL,dL为患者主诉长度.

子图生成: 通过医疗信息识别算法得到主诉中的实体, 将主诉中的医疗实体称作主诉实体, 利用查询主诉实体-主诉实体, 主诉实体-科室实体之间的路径构建子图. 为了限制子图的规模, 过滤长度大于4的路径,最后用邻接矩阵的形式表示, 记作M∈Rr×n×n,r为医疗知识图谱关系数,n为子图中实体节点数目. 子图生成算法的伪代码如算法1所示, 输入是知识图谱KG, 主诉中的实体集合Eq, 科室实体集合Edep, 最大路径长度hopmax, 输出是子图对应的邻接矩阵形式M.

(KG,Eq,Edep,hopmax)算法1. 子图生成算法V E M 1) :={},:={},:=[](KG,V,E,ei,ej,pathselector):2) def update_paths paths (KG,ei,ej)3) :=find_paths path paths 4) for in do:(path)5) if pathselector do:V.add(path.nodes)6) E.add(path.edges)7) 8) end for eqi Eq 9) for in do:edep Edep 10) for in do:(KG,V,E,eqi,edep,len(path)≤hopmax)11) update_paths

12) end for eqj Eq 13) for in do:(KG,V,E,eqj,edep,len(path)==2 14) update_paths )15) end for(KG,eqi)16) update_neighbors 17) end for M(V,E)18) :=get_adj_matrix

(2) 表示层: 主要由文本编码器和图编码器组成.文本编码器负责提取患者主诉中的文本语义特征, 模型中使用BERT预训练语言模型作为文本编码器, 得到文本语义向量t∈Rdn. 图编码器提取患者主诉相关医疗子图中的语义特征, 使用MHGRN[16]的图编码网络,得到子图语义向量q∈Rdm.

文本编码器:

图编码器:

首先通过图嵌入初始化子图中节点的表示hi, 再根据子图中节点的类别进行转化.

其中, ϕ(i)是节点对应类型, 节点类型分为主诉文本医疗实体对应节点(主诉节点)、科室节点和中间节点3种,U和b是对应类别的参数.

将子图中所有长度为k的关系路径定义为 ϕk, 关系路径最大长度为K, 1 ≤k≤K.

使用多层的关系图卷积网络(Relational Graph Convolution Networks, RGCNs)得到节点在不同跳数下的表示如式(4):

其中, α(j,r1,···,rk,i)/dik是相关系数,zki是节点i在第k跳的表示.

通过注意力机制融合不同跳数的节点表示:

为了避免遗忘节点的原始信息, 通过短跳连接(shortcut connection)将节点原始嵌入和最新的节点表示融合.

其中,V和V′是可学习的参数, σ是非线性激活函数.

最后对图中科室节点{h′i|i∈D}做注意力池化(attentive pooling)得到子图表示g, D是子图中科室节点集合.

(3) 融合层: 将患者主诉的文本语义特征向量和子图语义特征向量拼接后得到q∈Rdm+dn通过多层感知机将维度映射到m维(m维是科室数目), 记作o∈Rm,oi表示推荐第i个科室的概率. 选择概率最大的科室y*进行推荐.

3 系统设计与实现

为了解决医疗导诊中的问诊文本表述口语化和症状和科室关系不明显的问题, 本文设计了一套基于医疗知识图谱的交互式智能导诊系统. 系统实现采用的程序开发语言为Python语言、深度学习框架为PyTorch、Web服务框架为Flask. 整个系统的组织架构如图3所示.

图3 系统结构图

3.1 数据层

数据层包括医疗知识库和训练系统中模型所使用的语料. 下面简要介绍数据的构建过程及组成.

3.1.1 医疗知识图谱

本文将中科院软件所刘焕勇根据医疗百科网站整理的知识图谱和华东理工大学在OpenKG上发布的中文症状三元组关系库进行合并, 将合并后的医疗知识图谱作为导诊系统的知识库, 为导诊提供帮助.

下面简单介绍一下两个知识图谱的情况. 医疗百科网站知识图谱包括4.4万实体, 类别包括疾病、药品、食物、科室、检查、症状等11种关系, 37万三元组, 本体结构以疾病实体为核心. 中文症状关系库包含13.3万实体, 类别有疾病、症状、检查、科室、部位、药品6类, 疾病相关科室、症状相关检查、检查相关部位等22类关系, 97万三元组. 本体结构上, 疾病、科室、检查、症状、部位之间的关系稠密, 更适合导诊场景.

针对数据库的基本情况, 在合并时以中文症状关系库为基础, 医疗百科网站知识图谱作为补充, 去掉冗余食物实体, 得到导诊系统中使用的医疗知识图谱, 具体情况如表2所示.

表2 知识图谱信息表

最后整理得到的医疗知识图谱本体关系结构如图4所示.

图4 医疗知识图谱本体结构图

3.1.2 实体标注数据集

实体标注数据集使用来自“瑞金医院MMC人工智能辅助构建知识图谱大赛”的瑞金糖尿病数据集, 共有45 929条数据, 将其划分为训练集4万条, 验证集2929条, 测试集3000条, 涉及疾病名称、病因、临床表现、部位等15类实体类型, 标注采用BIO实体标注体系, 加上特殊标注符号“<sos>”、“<pad>”、“<eos>”共34个标注, 本文使用该数据训练医疗实体识别模型.

3.1.3 导诊标注数据集

数据语料从好大夫网站上爬取患者和医生的对话数据, 从中抽取患者的主诉及其就诊科室信息构造数据集, 数据集共有36 400条数据. 按照8:1:1的比例划分为训练集、验证集和测试集. 其中每份数据由患者主诉文本和其对应的科室组成, 共有骨科、神经内科、肝胆外科等26个科室, 本文使用该数据训练和评估科室推荐模型.

3.2 模型层

模型层是导诊系统所使用的核心模型. 下面介绍模型训练及效果验证.

3.2.1 知识图谱嵌入模型

知识图谱嵌入(knowledge graph embedding)[17]将知识图谱中的实体 (entity) 和关系 (relation) 嵌入到连续向量空间, 在方便计算的同时保留了知识图谱中的结构信息.

本文使用两种知识图谱嵌入方法得到实体和关系的语义向量表示, 一种是经典的Trans-E[18]方法, 一种是基于图注意力机制的图嵌入方法[19]. 并在医疗知识图谱上进行了链接预测(link prediction)实验, 链接预测是衡量知识图谱嵌入效果的常用方法, 将知识图谱中实体和关系的内容映射到连续向量空间中, 对知识图谱中的实体或关系进行预测, 即给出头实体和关系,预测尾实体(h,r,?)以及给出尾实体和关系预测头实体(?,r,t)两种知识图谱的补全任务. 评价指标使用hit@k,即正确实体在预测时排名≤k的频率. 实验中使用hit@1, hit@3, 以及hit@10三个指标. 实验结果如表3所示.

表3 链接预测实验对比结果

可以发现图注意力模型得到的实体向量和关系向量明显优于Trans-E方法, 所以在系统的后续模块中使用图注意力模型方法得到的图嵌入表示.

3.2.2 医疗实体识别模型

数据集及模型: 使用第3.1.2节中介绍的实体标注数据集训练模型, 模型结构使用第2.1.1节中介绍的BERT+Bi-LSTM+CRF.

模型验证与分析: 采用准确率、召回率和F1值来评价模型. 在测试集中准确率76.60%, 召回率79.07%,F1值77.82%. 识别错误的原因主要有两种, 一种是英文缩写实体类别错误(例如FFA, Free Fat Acid是Test类别, 识别为Drug类别), 这是因为英文缩写本身不具备信息, 而Test和Drug实体周围的上下文比较相似, 所以容易误判. 另外一种是标注信息不全, 预测了正确的实体, 但在标注中未标注出来. 例如: 从“应注意影像学检查并不是诊断和手术指征依据, 多用于术前协助术式选择”中预测 “影像学检查”为Test类别, 但是在标注中未出现, 所以还是算作了错误识别.

3.2.3 科室推荐模型

数据集及模型: 使用第3.1.3节中的导诊标注数据集训练模型, 模型结构使用第2.2节介绍的结构.

模型验证及分析: 采用准确率评估模型效果. 实验对比了基于BERT的分类方法和基于知识图谱问答的APVA-TURBO方法. 准确率为75.14%, 较前两个方法准确率分别提升了2.09%和2.47%. 科室推荐错误的原因主要是因为部分症状可去多个科室就诊, 但数据标注只标签单个科室. 例如泌尿外科和男科均可治疗男士性功能异常相关疾病.

3.3 服务层

服务层分为单轮导诊和多轮交互两个部分, 具体流程如图5所示, 患者主诉先通过单轮导诊部分得到推荐科室的置信度(概率), 如果置信度小于设定的经验阈值k(0<k<1), 则进入多轮交互部分, 通过和患者交互完成导诊, 交互能补充患者症状信息, 从而解决主诉中医疗信息不足的问题.

图5 线上科室导诊流程图

3.3.1 单轮导诊

单轮导诊部分根据患者主诉进行导诊, 输入患者主诉, 输出推荐患者就诊的科室及其概率. 首先通过医疗实体识别模型识别患者主诉中的医疗指称, 然后利用基于字符和语义匹配的实体链接方法得到主诉中的医疗实体,最后通过科室推荐模型推荐科室, 如果推荐科室的置信度(概率)大于设定阈值k, 则将该科室返回给患者.

3.3.2 多轮交互

当患者主诉文本提供的信息太少时, 无法准确推荐合适的科室给患者, 需要和患者进行交互, 弄清楚患者的主要症状. 信息不足时, 单轮导诊推荐科室的置信度较低, 当低于设定阈值k时, 将进入多轮交互模块.

(1) 医疗信息列表初始化: 用医疗实体链接模型得到的实体初始化医疗信息列表, 如果未链接到医疗实体则初始化为空列表.

(2) 更新医疗信息列表: 将患者选择的相关症状加入医疗信息列表中, 将用户未选择的相关症状加入黑名单中, 避免下次搜索相关症状时搜索到用户拒绝过的相关症状.

(3) 搜索相关症状: 如果当前交互轮数小于最大交互轮数, 则基于医疗信息列表和黑名单搜索相关症状.搜索方法: 遍历医疗信息列表中的实体, 利用图嵌入模型得到的实体向量计算得到实体之间相关度分数, 通过类型约束和黑名单过滤, 最后选择相关度分数最高的3个症状作为相关症状.

(4) 患者选择相关症状: 将搜索得到的3个相关症状让用户选择, 询问用户是否有这3个症状, 患者通过回复相关症状的名称进行选择, 如无则回复“无”.

(5) 最终科室推荐: 在当前交互轮数超出最大交互轮数时, 利用医疗历史信息列表中的医疗实体改写患者主诉后, 再次输入科室推荐模型, 得到最终的科室推荐结果.

3.4 交互层

交互层负责处理用户输入的患者主诉文本、多轮交互中用户选择的症状信息, 以及将推荐的科室展示给患者.

3.5 系统展示

系统导诊界面效果图如图6所示, 界面内容包括患者主诉的输入, 患者主诉实体识别和链指的结果, 从医疗知识图谱搜索得到的患者主诉相关子图的展现,以及概率最大的前5个科室的结果展现.

图6 系统导诊界面效果图

4 结束语

本文介绍了基于医疗知识图谱的交互式智能导诊系统的设计与实现. 该系统利用现有医疗知识图谱资源, 整理得到一个适合导诊的医疗知识图谱, 并在此基础上, 通过实体识别、实体链接技术识别患者主诉中的医疗信息, 利用预训练语言模型、图嵌入学习、图神经网络等技术查询得到问诊文本相关的子图, 实现了结合子图和文本语义信息的科室推荐模型. 针对推荐科室置信度不高的情况, 引入知识图谱, 采用单轮和多轮交互结合的方式进行科室推荐. 解决了在复杂的多医疗实体主诉文本上进行导诊的问题, 提升了导诊系统的智能度.

猜你喜欢

子图图谱科室
消毒供应中心与临床科室建立有效沟通的实践与探讨
基于图对比注意力网络的知识图谱补全
科室层级护理质量控制网的实施与探讨
异构属性网络中统计显著密集子图发现算法研究
浅析公立医院内部绩效审计的作用
基于Spark 的大规模单图频繁子图算法
交叉立方体的最大导出子图与拥塞
爱紧张的猫大夫
不含3K1和K1+C4为导出子图的图色数上界∗
图表