这是中科院软件所刘焕勇老师在github上的一个开源项目
地址:http:// https://github.com/liuhuanyong/QASystemOnMedicalKG
本项目构建了以疾病为中心的医疗知识图谱,实体规模4.4万,实体关系规模30万。并基于此,搭建起了一个可以回答18类问题的自动问答小系统。
本项目以neo4j作为存储,并基于传统规则的方式完成了知识问答,并最终以cypher查询语句作为问答搜索sql,支持了问答服务。
基于知识图谱的问答框架
基于知识图谱的问答系统应用知识
- 本体构建
- RDF 生成
- 问句解析
- SPARQL 查询
- 答案生成
本项目的问答系统完全基于规则匹配实现,根据问句中的关键词进行匹配,对匹配到的关键词分类问句,然后使用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 | 疾病描述 | 糖尿病 |
问答样例
项目实现
1.项目运行配置要求:要求配置neo4j数据库及相应的python依赖包
根据neo4j 安装时的端口、账户、密码,修改相应文件:answer_search.py 和build_medicalgraph.py 、neo4j
安装neo4j(neo4j 依赖java jdk 1.8版本以上),见文章:http://t.csdn.cn/UAu3Q
安装好neo4j后,登录网站http://localhost:7474/browser/
查看端口号和用户名
并修改相应python文件
2.知识图谱数据导入:python build_medicalgraph.py,导入的数据较多,需要几个小时。
数据导入这一步会出现一些问题,要注意编码格式,包的正确安装等
安装 py2neo
直接使用pip install py2neo命令会默认安装最新版,可能使用会出现问题
推荐安装4.3.0版本:pip install py2neo==4.3.0 -i https://pypi.douban.com/simple
导入成功后即可查看
3、启动问答:python chat_graph.py
安装pyahocorasick
pip3 install pyahocorasick -i https://pypi.tuna.tsinghua.edu.cn/simple/