【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法

Article

  • 作者:Yuanyuan Jia, Zhiren Tan, Junxing Zhang
  • 文献题目:DKDR: An Approach of Knowledge Graph and Deep Reinforcement Learning for Disease Diagnosis
  • 文献时间:2019

摘要

  • 使用人工智能解决医疗问题一直是一个有趣但具有挑战性的话题。近年来,随着电子病历 (EMR) 的出现,许多研究人员开始专注于通过挖掘 EMR 来诊断疾病。他们应用机器学习算法来训练 EMR,并修改模型以提高疾病诊断的准确性。然而,这些研究一次性将患者特征输入模型,无需多次在线交互。或者,换句话说,尽管这些方法在实验室中表现良好,但它们并不适合真正的会诊环境。在现实世界中,医生往往会引导患者一步一步地描述病情,然后结合检查值来诊断疾病。在本文中,我们模拟了这个过程并提出了一种称为 DKDR 的新模型,该模型结合了知识图谱和深度强化学习来诊断疾病。医学知识图谱是通过抓取10万个网页构建的,帮助用户改进对疾病特征的描述。我们使用 q-learning 来找到最佳诊断中的症状组合,并使用卷积神经网络 (CNN) 来训练每个策略。最后,我们在真实医疗数据集和合成医疗数据集上进行了实验。 DKDR 找到诊断疾病的最佳症状组合。肺炎、高脂血症和肥胖症的诊断准确率分别为80%、82%和91%。

引言

  • 由于线下医疗资源紧缺,人们越来越倾向于在互联网上寻找健康知识。 为了解决这个问题,研究人员探索了多种解决方案。 一些研究人员设置医学知识图谱来展示医学信息[2-7, 13]。 这些知识图以疾病为中心,显示疾病与其他医学信息(如症状和药物)之间的关系。 并且它们通常具有查询、问答功能。 用户可以通过输入关键字,从知识图谱中获取自己想要的医疗信息。 例如,用户可以找到糖尿病的症状。 但是,如果他们想诊断自己的疾病,知识图谱是无能为力的。 换句话说,这些研究不具备学习能力,也不能满足用户自我检查疾病的需求。
  • 同时,许多公司致力于开发医疗应用[15,22,23]。 这些应用程序提供在线医疗咨询和预约服务,使患者更容易获得医生的帮助。 但这些服务往往需要付费,并且完全依赖医院和医生资源,需要大量的人力成本。 为了降低上述成本,我们可以用人工智能代替医生。
  • 随着大量电子病历(EMR)的公开和可用,数据驱动的研究方法逐渐成为疾病诊断的主流。 研究人员努力使用最新的机器学习模型以获得更好的模型性能 [8-12]。 他们在 EMR 数据集上训练卷积神经网络 (CNN)、循环神经网络 (RNN) 等模型。 尽管上述文献中提出的方法在实验室中表现良好,但在现实世界中难以应用。
  • 在真实的医疗情况下,患者首先描述他或她的不适(步骤 1)。 然后医生通过询问和检查获得对病情的准确描述(步骤 2)。 最后,医生根据医学知识和经验做出诊断(步骤 3)。 为了模拟这种情况,我们构建了一个医学知识图谱来完成步骤 2 的功能并给出一系列可能的疾病。 我们使用深度学习算法通过从知识图中获得的准确描述和可能的疾病来实现步骤 3。 同时,我们使用 q-learning 来判断诊断的准确性。 总的来说,我们在本文中通过知识图谱和深度强化学习(DKDR)开发了一种新的疾病诊断模型。
  • 值得强调我们模型的贡献如下:
    • DKDR 复制真实的医疗会诊场景,允许用户多次输入在线互动。
    • DKDR 不修复机器学习算法中的输入。 我们通过不断添加和完善患者的描述来诊断疾病。
    • DKDR 结合深度学习和强化学习来寻找最匹配疾病的症状。
    • 我们的知识图谱可以双向查询。
  • 本文的其余部分安排如下。 我们首先总结第二节中的相关工作。 第三节从宏观角度概述了该模型。 在第四节中,我们具体描述了我们的 DKDR 模型的两个模块,知识模块和诊断模块。 第五部分是我们的实验和评估。 最后,我们在第六节结束我们的工作。

相关工作

  • 在本节中,我们简要回顾与本文提出的研究密切相关的现有工作。 一是医学知识图谱。 另一个是机器学习在医学领域的应用。

知识图谱

  • 2012年,谷歌首先引入知识图谱的概念来解决搜索领域的问题[1]。 由于医疗数据具有数量大、复杂的特点,知识图谱比传统的SQL数据库能更好地表示数据关系。 复旦大学开发的CNDBpedia[2]包含了很多领域的知识,但不能反向搜索实体。 模型 [3, 4] 是由疾病、症状及其关系组成的知识图谱。 但它们不够全面,无法忽略并发症、病因和其他重要医学信息。
  • 在本文中,我们尝试通过爬虫构建尽可能全面的医学知识图谱。 为了双向查询实体信息,我们在实体之间建立双向关系。 换句话说,我们可以通过疾病找到症状,也可以通过相关症状找到疾病。

医疗保健领域的深度学习

  • 随着机器学习的不断发展,研究人员不断尝试用最新的模型诊断疾病。 E. Choi 等人。 [8] 提出 MiME 来学习 EMR 数据的多级嵌入,同时联合执行依赖于这种固有 EMR 结构的辅助预测任务,而无需外部标签。 M. Beeksma 等人。 [9] 在已故患者的病历上训练和测试一个长短期记忆循环神经网络。他们使用十倍交叉验证程序开发模型,并在一组保留的测试数据上评估其性能。 H. 提出了一种针对患者 EMR 表型的深度学习方法。他们构建了一个四层卷积神经网络模型,用于提取表型并进行预测。马凤龙等 [12] 提出了一个预测框架 PRIME,它可以成功地将异构离散先验医学知识集成到预测模型中以提高性能。 M. Zolbanin 等 [10] 提出了一种新的数据处理方法,从病历中提取个人和数据库级别的历史信息,以提高再入院分析的性能。余成等。 [11]
  • 上述文献通过改进学习模型获得了较好的实验结果,但不能应用于实际咨询。 我们结合强化学习的思想来寻找疾病诊断的最佳症状组合。 与上述所有实验室模型相比,我们的 DKDR 模型具有以下优点:(1)它使用了不同的症状组合; (2) 结合知识图谱; (3)它的模型训练是基于用户输入的。

综述

  • 在本节中,我们概述了模型结构。 DKDR 模型由两个模块组成。 医学知识模块由医学知识图谱组成,诊断模块包含CNN和q-learning算法。 图1为模型流程图。
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第1张图片

医学知识图谱模块

  • 本项目基于neo4j图数据库和scrapy分布式爬虫,设计并实现了医学领域知识图谱,对医学信息进行提取、整合和对齐,使其结构更清晰,检索性能更高。 知识图谱支持实体识别、知识检索、关系检索等功能,作为智能诊断的后端数据库。
  • 如图 2 所示,我们分三步构建医学知识图谱:网络爬虫、数据存储和生成图谱。知识图谱的详细实现见Section IV. A
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第2张图片
  • 该模块的作用是帮助用户更准确地描述自己的不舒服感受。 模型获取用户输入后,查询知识图中的相关医疗信息,并将查询结果返回给用户进行选择。 通过重复这个过程,模型得到用户最终的投诉信息,并与可能的疾病进行匹配。 然后在诊断模块中进行疾病诊断。

诊断模块

  • 诊断模块由 q-learning 和 CNN 算法组成。 知识图谱模块确定症状和疾病后,匹配现有病历数据,给出患病概率。 Q-learning 用于寻找症状的最佳组合,而 CNN 则训练电子病历以获得诊断。 如图 3 所示,在 q-learning 算法中,我们预先设置了奖励和状态,设置值将在第 4 节中描述。 我们将选择的症状作为动作,并通过 CNN 在环境中计算结果 .
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第3张图片
  • 在本节中,我们首先详细介绍 DKDR 模型的两个模块。 然后我们给出了整个模型的算法。

医学知识图谱模块

数据源

  • 在构建知识图谱之前,我们从网站获取医疗信息。 为保证数据来源的可靠性,我们从维基百科中获取医学知识[14]。 我们抓取了超过 10 万个网页。 每页大小约20KB,总语料库大小约2GB。 在这些网站上,我们获取疾病、症状、手术等信息,并以结构化的方式存储医疗信息。 为了避免爬虫任务意外中断,我们使用分布式爬虫框架Scrapy[16]来获取数据。

图构建

  • 由于医疗信息的复杂性,我们使用 NoSQL 数据库来构建我们的知识图谱。 在图数据库领域,Neo4j具有查询性能高、应用方便、开发敏捷等优点,另外是开源的原生图计算引擎。 我们使用 neo4j-community-3.5.2 版本 [17]。
  • RDF(资源描述框架)是知识图谱的常见表示。 主、谓、宾三重形式足以表达实体之间的许多复杂关系。 为了描述医疗信息,我们定义了一个有向图 G = ( V , E ) G = (V, E) G=(V,E),其中 V = { v 1 , v 2 , … , v n } V = \{ v_1, v_2, … , v_n \} V={v1,v2,,vn} 是一组指向不同实体的顶点, E E E 是一组边,指的是这些实体之间不同类型的关系。
  • 我们的知识图谱由 6 个实体、9 个属性和 7 个关系组成。 实体包括疾病、分类、部门、症状、操作和检查。 对于每个疾病实体,有 9 个属性,名称、eng_name、anoth_name、摘要、病因、季节、疫苗、位置、人员和传染。 实体之间的关系为 Dis_Sym、Dis_Cla、Dis_Dep、Dis_ope、Dis_Che、Dis_Tre、Dis_Pro、Dis_Pre、Sym_Dis、Che_Dis、Ope_Dis、Cla_Dis、Dis_Dis。属性和关系的详细信息如表 I、II 所示。
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第4张图片
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第5张图片
  • 例如,如果一个人感到虚弱和恶心,他或她可以在模型中输入这两个关键字。 该模型将查询与这两个特征相关的疾病,例如贫血、高血压等。 该模型返回与上述疾病相关的其他信息,例如与贫血相关的耳鸣、与高血压相关的高血压等。 患者从获得的信息中选择与他或她相关的内容。 最后,患者的初始输入和最终选择一起用作模块 2 中模型的输入。

诊断模块

  • 通过结合几种深度学习算法和 q-learning 来计算疾病的概率。 模型获得知识图谱模块的输入后,在EMRs上选择相应的特征和可能的疾病。 我们将特征作为模型输入,将可能的疾病作为分类标签。 在诊断模块中,我们在不同的模型中训练现有的 EMR 数据集以获得最终结果。 以下是 EMR 的正式描述。
  • P P P 是所有患者的集合,且 ∣ P ∣ |P| P 是 EMR 中的患者数量。 对于每个 p ∈ P p \in P pP,他或她的特征由 F = { f 1 , f 2 , . . . , f ∣ n ∣ } F = \{ f1, f2, ..., f|n| \} F={f1,f2,...,fn} 表示。 特征包括以下四部分信息,(1)患者的性别、年龄、民族等基本信息,(2)血压、血糖等检查信息,(3)头晕、咳嗽等症状,( 4)吸烟等生活习惯。 每个患者 p p p 都有一个疾病标签,定义为 y y y,这是我们的实验基本事实。 以下是模型介绍。

Q-learning

  • Q-Learning 是强化学习算法中的一种基于值的算法。 对于任何马尔可夫决策过程 (MDP),Q-learning 会找到一个最优策略,即从当前状态开始,它在任何和所有连续步骤中最大化总奖励的预期值。 Q-learning 可以为任何给定的 MDP 确定最佳的动作选择策略,给定无限的探索时间和部分随机的策略。 [24]
  • 本文的疾病诊断问题与马尔可夫决策过程一致。 在5元组 ( A , P , S , R , γ ) (A, P, S, R, \gamma) (A,P,S,R,γ)中, A A A表示环境中所有动作的集合,即征兆集 F F F的一个子集。 S S S 表示状态的集合,即诊断准确度的不同区间。 在我们的模型中,让 S = { 非 常 准 确 , 更 准 确 , 一 般 准 确 , 准 确 , 不 准 确 } S = \{ 非常准确,更准确,一般准确,准确,不准确 \} S={},对应的准确率区间为85%-100%、80%-85%、70%-80%、60%-70% 和 0%-60%。 P P P表示转移概率矩阵,即在当前状态 s s s采取动作 a a a后到达状态 s ′ s' s的概率集。 R R R 表示一个奖励函数,我们让 R = { 10 , 8 , 6 , 4 , − 10 } R = \{ 10, 8, 6, 4, -10 \} R={10,8,6,4,10} 对应上面提到的不同状态。 令 γ \gamma γ表示折扣, γ ∈ ( 0 , 1 ) \gamma \in (0,1) γ(0,1)
  • 在将疾病诊断问题建模为 MDP 后,我们使用 q-learning 最大化奖励函数以找到最佳诊断策略。 Q表更新如下:
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第6张图片

MLP诊断模型

  • 多层感知器 (MLP) 是一种前向结构的人工神经网络 (ANN)。 除了输入和输出层,中间还可以有多个隐藏层。 我们选择特征 F F F 作为数据集上的最终输入特征,并使用 MLP 作为训练集。 我们在神经网络上设置了两个隐藏层,得到了诊断值 y_。 在这个过程中,我们使用了ReLU激活函数。 然后,我们使用交叉熵来计算 y_ 和地面实况 y 的损失。

CNN诊断模型

  • 与 MLP 的两个隐藏层不同,我们在 CNN 诊断模型中执行了两个卷积层和两个池化层。 经过全连接变换后,得到y_。 我们使用交叉熵来计算 y_ 和 y 之间的损失。

DKDR的算法

  • 通过形式化定义和模块描述,DKDR模型的算法如下所示:
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第7张图片

实验

  • 在本节中,我们首先介绍实验中使用的数据集。 然后我们描述实验结果和评估。 最后,我们评估我们的实验。

数据集

  • 我们的实验分别在两个数据集 Synthea [19] 和 MIMIC-III [20] 上进行。 Synthea 是由 MITRE 和 HIKER 大学开发的逼真的电子病历合成工具。 这些研究人员使用有限状态机 (FSM) 和人口统计信息来综合人们的整个生活过程。 数据集包括患者的基本信息、过敏、护理计划、条件、遭遇、imaging_studies、观察等信息。
  • 另一个是真实的数据集,称为 MIMIC-III(重症监护 III 的医疗信息集市)。 这是一个大型、免费可用的数据库,包含与 2001 年至 2012 年间住在贝斯以色列女执事医疗中心重症监护室的四万多名患者相关的未识别健康数据。该数据集包括人口统计、生命体征、实验室测试、药物治疗、 等等。
  • 我们从 Synthea 数据集中选择肥胖和高脂血症疾病,从 MIMIC-III 中选择肺炎用于我们的实验,如表 III 所示。
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第8张图片

实验说明

  • Tensorflow [18] 是一个开源软件库,用于使用数据流图进行数据计算。 广泛应用于各种机器学习算法的编程实现。 在本文中,我们在anaconda3和python3.6中构建了tensorflow,分别构建了MLP和CNN的计算图模型。
  • 除了 CNN 和 MLP,我们还将 DKDR 与传统机器学习方法进行了比较,包括 k NearestNeighbor (KNN)、DecisionTree、支持向量机 (SVM) 和 RandomForest。 配置 scikit learn [21] 后,我们使用初始特征作为这些算法的输入。

实验评价

  • 在本小节中,我们评估和分析实验结果。 我们使用四种常见的机器学习分类指标来评估实验:accuracy (ACC), precision (PRE), recall (REL) 和 f1-score (F1)。 这些指标将分类正确分类为正面,错误分类为负面。 通过将正负类的数量与原始标签的数量进行比较,我们评估了分类算法的质量。 表 IV 显示了我们的实验结果。 我们试验了多种模型,其中传统算法和神经网络模型仅使用用户的初始输入来诊断疾病,而不与医学知识图进行在线交互。 我们在 DKDR 中添加了在线交互,使用 MLP 和 CNN 算法来诊断疾病。 可以看出,在增加用户输入后,模型的性能有了明显的提升。
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第9张图片
  • 图 4 显示了三种疾病在不同模型下的分类准确率。 我们可以看到肥胖的分类结果比其他两个高很多。 这是因为肥胖的确认条件比较简单。 当用户输入BMI(Body Mass Index)作为特征时,疾病的分类准确率可以达到91%。 此外,高脂血症在 CNN 模型下的表现优于 MLP。 原因是高脂血症的数据集不是真实的患者信息,使得疾病的原因比真实情况更简单。 因此,更简单的模型 MLP 可以提供比 CNN 更好的性能。
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第10张图片
  • 然后,我们观察不同数量的特征对诊断准确性的影响。 如图 5、图 6 和图 7 所示,我们在用户初始输入下依次添加特征以诊断三种疾病。 正如我们所看到的,特征越多,诊断的准确性就越高。 并且随着特征的增加,CNN的性能以更快的速度增长。
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第11张图片
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第12张图片
    【医疗人工智能】DKDR:一种用于疾病诊断的知识图谱和深度强化学习方法_第13张图片

结论

  • 在本文中,我们开发了 DKDR,其中包括一个可以双向查询并结合深度强化学习的医学知识图谱,以实现疾病的在线诊断。 与以往的医学模型不同,我们专注于动态控制模型输入,寻找诊断疾病的最佳症状组合。 通过在 Synthea 和 MIMIC-III 数据集上的验证,DKDR 的最佳准确率为 91%。
  • 但是,由于EMRs主要由客观体检信息和患者基本信息组成,遗憾的是我们目前无法对患者投诉进行实验。 此外,我们将优化知识图谱的机器结果,以改善未来的用户体验。

你可能感兴趣的:(医疗人工智能,知识图谱,深度学习,人工智能,强化学习)