StevenSunzh / MedicalKG_QA

QA system based on Medical knowledge graph

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MedicalKG_QA

一、项目概述

1.1 项目内容

本项目立足医疗领域,数据源包括:

  • 垂直型医药网站数据,以疾病为核心: 寻医问药

  • 微医网站数据,以医生为核心:微医

本项目包括以下两部分:

  • 基于垂直网站数据的医疗知识图谱构建

    • 以疾病为核心的医药知识图谱,7类规模为4.4万的实体, 11类规模约30万实体关系的知识图谱
    • 以医生为核心的就诊知识图谱,5类规模为 40万的实体, 4类规模约115万实体关系的知识图谱
  • 基于医疗知识图谱的自动问答系统

1.2 项目架构

二、方案介绍

2.1 数据获取

爬虫获取网站内容,直接存入MongoDB,需要抓取的网页信息如图所示:

2.2 医疗知识图谱构建

2.2.1 数据清洗

2.2.1.1 半结构化数据

对于网页爬虫获取到的数据,需要进行关键信息提取,最好清洗为key:value 形式。

关键信息提取:

信息 key
医保疾病 yibao_status
患病比例 get_prob
易感人群 easy_get
传染方式 get_way
就诊科室 cure_department
治疗方式 cure_way
治疗周期 cure_lasttime
治愈率 cured_prob
药品明细 drug_detail
药品推荐 recommand_drug
推荐 recommand_eat
忌食 not_eat
宜食 do_eat
症状 symptom
检查 check
成因 cause
预防措施 prevent
所属类别 category
简介 desc
名称 name
常用药品 common_drug
治疗费用 cost_money
并发症 acompany
2.2.1.2 非结构化数据

本项目暂时未采集非结构化数据,但考虑到知识图谱补全和扩充等后续问题,设计了针对非结构化数据的知识抽取模型。

  • 知识抽取系统框架如图所示

  • 知识抽取模型如下如所示

2.2.2 图谱设计

确定实体对象,以及根据核心实体对象建立实体关系,最终构建知识图谱。

2.2.2.1 疾病为核心的知识图谱

  • 疾病为核心的医药实体

    实体类型 中文含义 实体数量 举例
    Check 诊断检查项目 3,353 动眼神经检查; 自身溶血试验
    Department 医疗科目(科室) 54 耳鼻喉科; 遗传病科
    Disease 疾病 8,807 病毒性胃肠炎; 百日咳
    Drug 药品 3,828 头孢氨苄甲氧苄啶片; 布林佐胺滴眼液
    Food 食物 4,870 三七洋参炖鸡肉; 龙眼鸡片
    Producer 在售药品 17,201 瑞森药业盐酸海索那林片; 力邦特
    Symptom 疾病症状 5,998 神经纤维过度生长; 异源性ACTH
    Total 总计 44,111 约4.4万实体量级
  • 核心实体属性

    实体属性 中文含义 举例
    .name 疾病名称 <慢性中耳炎, 名称: 慢性中耳炎>
    .desc 疾病描述 <蜂蛰伤,描述:蜂蛰伤是由蜜蜂、黄蜂等蜂尾的蜂毒刺刺蜇…>
    .cause 疾病病因 <鹅掌风,产生原因:手足癣是皮肤癣菌感染手指屈侧、指间…>
    .cure_department 疾病所属科目 <病毒性肠胃炎,属于:消化内科>
    .cure_lasttime 疾病持续时间 <肺泡蛋白质沉积症,持续:约3个月>
    .cure_way 疾病治疗方法 <肺泡蛋白质沉积症,治疗方法:支气管肺泡灌洗>
    .cured_prob 疾病治疗概率 <肺泡蛋白质沉积症,治疗概率:约40%>
    .easy_get 疾病易患人群 <鹅掌风,易患人群:无特殊人群>
    .prevent 疾病预防措施 <蜂蛰伤,预防措施:被蜜蜂螫时,为了减轻疼痛,避免发生…>
  • 疾病为中心的医药实体关系

    实体关系类型 中文含义 关系数量 举例
    belongs_to 属于 8,844 <妇科,属于,妇产科>
    common_drug 疾病常用药品 14,649 <阳强,常用,甲磺酸酚妥拉明分散片>
    do_eat 疾病宜吃食物 22,238 <胸椎骨折,宜吃,黑鱼>
    drugs_of 药品在售药品 17,315 <青霉素V钾片,在售,通药制药青霉素V钾片>
    need_check 疾病所需检查 39,422 <单侧肺气肿,所需检查,支气管造影>
    no_eat 疾病忌吃食物 22,247 <唇病,忌吃,杏仁>
    recommand_drug 疾病推荐药品 59,467 <混合痔,推荐用药,京万红痔疮膏>
    recommand_eat 疾病推荐食谱 40,221 <鞘膜积液,推荐食谱,番茄冲菜牛肉丸汤>
    has_symptom 疾病症状 5,998 <早期乳腺癌,疾病症状,乳腺组织肥厚>
    acompany_with 疾病并发疾病 12,029 <过敏性休克,并发疾病,水肿>
    Total 总计 294,149 约30万关系量级
  • 实体、关系可视化

2.2.2.2 医生为核心的知识图谱

  • 医生为核心的医疗实体

    实体类型 中文含义 实体数量 举例
    Doctor 医生 382886 范一宏
    Hospital 医院 8196 重庆南川区人民医院
    Outpatient 科室 未清洗 骨科(创伤外科)
    Position 职位 43 主任医师
    Province 省份 31 浙江
    Total 总计 408024 约40万实体量级
  • 核心实体属性

    实体属性 中文含义 举例
    .name 医生姓名 <陈军,姓名:陈军>
    .desc 医生简介 <陈军,简介:陈军,男,主任医师。安徽医科大学…>
    .position 医生职称 <陈军,职称:主任医师>
    .outpatient 医生科室 <陈军,科室:泌尿外科>
    .specialty 医生专长 <陈军,擅长:泌尿系统、男性生殖系统及肾上腺各种疾病包括…>
    .hospital 医生所属医院 <陈军,就职于:苏州市立医院>
  • 医生为核心的医疗实体关系

    实体关系类型 中文含义 关系数量 举例
    Belongs_To 医生所在科室 382886 <吴正祥,属于,消化内科>
    Work_IN 医生所在医院 382886 <吴正祥,就职于,安徽省立医院南区>
    Position_IS 医生担任职务 382886 <吴正祥,担任,主任医师>
    Located_IN 医院所在省份 8196 <衡南县中医院,位于,安徽省>
    Total 总计 1156896 约115万关系量级
  • 实体、关系可视化

2.3 问答系统构建

问答系统属于应用层。利用知识图谱强大的辅助搜索能力,我们构建了基于医药知识图谱的自动问答系统。

问答系统的框架流程如下图所示:

  • 问题分类

    • 构建AC树

      • 首先基于Aho-Corasick自动机算法构建领域词汇的AC树;
      • 优点:AC自动机+trie树能实现高效的多模式匹配,在匹配任务中将字符比较转化为状态转移,无需回溯,时间复杂度为 $O(n)$,与词典规模无关。
    • 领域词提取

      • 通过AC树快速匹配问题中的实体;
    • 疑问词提取

      • 通过疑问词词典匹配问题中的疑问词;
    • 确定问题类型

      • 根据问题中的实体和疑问词,确定问题类型;

        可供查询的问题类型大致有:

        • 疾病基本信息类
        • 疾病症状类
        • 疾病病因类
        • 疾病并发症类
        • 疾病与饮食类
        • 疾病与药物类
        • 疾病检查项目类
        • 疾病预防类
        • 疾病治疗类
        • 疾病易感人群类
  • 问题解析

    • 实体节点构建
      • 确定问题中的实体,构建{实体类型:实体} 字典;
    • 问句转CQL
      • 根据问题的分类,问题中的实体及实体关系,将问题转化为CQL查询语句;
  • 答案搜索

    • 图数据库查询
      • 用转化得到的CQL语句在数据库中查询;
    • 答案包装
      • 根据问题类型,将查询到的结果包装后返回。
  • 结果展示

2.4 前端界面

构建问答系统前端界面,提高用户体验。

构建Flask项目,引入Bootstrap前端框架,快速创建简洁、美观又功能全面的web界面。

前端页面获取问题,通过POST请求将问题发送到后端,通过QA模型获取结果,返回到页面展示。

  • 主页

  • 医药问答助手

About

QA system based on Medical knowledge graph


Languages

Language:Python 89.7%Language:HTML 10.3%