这是中科院软件所刘焕勇老师在github上的一个开源项目

地址:http:// https:///liuhuanyong/QASystemOnMedicalKG

本项目构建了以疾病为中心的医疗知识图谱,实体规模4.4万,实体关系规模30万。并基于此,搭建起了一个可以回答18类问题的自动问答小系统。
本项目以neo4j作为存储,并基于传统规则的方式完成了知识问答,并最终以cypher查询语句作为问答搜索sql,支持了问答服务。

基于知识图谱的问答框架

基于python的智能问答系统 python自动问答系统_知识图谱

基于知识图谱的问答系统应用知识

  1. 本体构建
  2. RDF 生成
  3. 问句解析
  4. SPARQL 查询 
  5. 答案生成

本项目的问答系统完全基于规则匹配实现,根据问句中的关键词进行匹配,对匹配到的关键词分类问句,然后使用cypher的match去匹配查找neo4j,根据返回数据组装问句回答,最后返回结果。

医药领域知识图谱规模

知识图谱实体类型

实体类型

中文含义

实体数量

举例

Check

诊断检查项目

3,353

支气管造影;关节镜检查

Department

医疗科目

54

整形美容科;烧伤科

Disease

疾病

8,807

血栓闭塞性脉管炎;胸降主动脉动脉瘤

Drug

药品

3,828

京万红痔疮膏;布林佐胺滴眼液

Food

食物

4,870

番茄冲菜牛肉丸汤;竹笋炖羊肉

Producer

在售药品

17,201

通药制药青霉素V钾片;青阳醋酸地塞米松片

Symptom

疾病症状

5,998

乳腺组织肥厚;脑实质深部出血

Total

总计

44,111

约4.4万实体量级

 知识图谱实体关系类型

实体关系类型

中文含义

关系数量

举例

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万关系量级

 知识图谱属性类型

属性类型

中文含义

举例

name

疾病名称

喘息样支气管炎

desc

疾病简介

又称哮喘性支气管炎...

cause

疾病病因

常见的有合胞病毒等...

prevent

预防措施

注意家族与患儿自身过敏史...

cure_lasttime

治疗周期

6-12个月

cure_way

治疗方式

"药物治疗","支持性治疗"

cured_prob

治愈概率

95%

easy_get

疾病易感人群

无特定的人群

 支持问答的类型

问句类型

中文含义

问句举例

disease_symptom

疾病症状

乳腺癌的症状有哪些?

symptom_disease

已知症状找可能疾病

最近老流鼻涕怎么办?

disease_cause

疾病病因

为什么有的人会失眠?

disease_acompany

疾病的并发症

失眠有哪些并发症?

disease_not_food

疾病需要忌口的食物

失眠的人不要吃啥?

disease_do_food

疾病建议吃什么食物

耳鸣了吃点啥?

food_not_disease

什么病最好不要吃某事物

哪些人最好不好吃蜂蜜?

food_do_disease

食物对什么病有好处

鹅肉有什么好处?

disease_drug

啥病要吃啥药

肝病要吃啥药?

drug_disease

药品能治啥病

板蓝根颗粒能治啥病?

disease_check

疾病需要做什么检查

脑膜炎怎么才能查出来?

check_disease

 检查能查什么病

全血细胞计数能查出啥来?

disease_prevent

预防措施

怎样才能预防肾虚?

disease_lasttime

治疗周期

感冒要多久才能好?

disease_cureway

治疗方式

高血压要怎么治?

disease_cureprob

治愈概率

白血病能治好吗?

disease_easyget

疾病易感人群

什么人容易得高血压?

disease_desc

疾病描述

糖尿病

问答样例 

基于python的智能问答系统 python自动问答系统_人工智能_02


项目实现

1.项目运行配置要求:要求配置neo4j数据库及相应的python依赖包

根据neo4j 安装时的端口、账户、密码,修改相应文件:answer_search.py 和build_medicalgraph.py 、neo4j

安装neo4j(neo4j 依赖java jdk 1.8版本以上),见文章:

安装好neo4j后,登录网站http://localhost:7474/browser/

查看端口号和用户名

基于python的智能问答系统 python自动问答系统_neo4j_03

 并修改相应python文件

基于python的智能问答系统 python自动问答系统_知识图谱_04

基于python的智能问答系统 python自动问答系统_知识图谱_05

  2.知识图谱数据导入:python build_medicalgraph.py,导入的数据较多,需要几个小时。

 数据导入这一步会出现一些问题,要注意编码格式,包的正确安装等

安装 py2neo

直接使用pip install py2neo命令会默认安装最新版,可能使用会出现问题

推荐安装4.3.0版本:pip install py2neo==4.3.0 -i https:///simple

导入成功后即可查看

基于python的智能问答系统 python自动问答系统_neo4j_06

基于python的智能问答系统 python自动问答系统_python_07

 3、启动问答:python chat_graph.py

安装pyahocorasick

pip3 install pyahocorasick -i https://pypi.tuna.tsinghua.edu.cn/simple/

基于python的智能问答系统 python自动问答系统_python_08