医疗知识图谱|问答系统
一、相关竞品产品调研
1.左手医生
https://open.zuoshouyisheng.com/--优先
2.百度灵医
https://01.baidu.com/index.html (线上无法体验)
3.科大迅飞-全科辅诊诊疗系统
http://www.iflytek.com/health/qkfzzl (线上无法体验)
4.阿里健康
https://www.doctoryou.ai/dm
5.腾讯
https://tencentmiying.com/official/
二、相关文章
1.https://zhuanlan.zhihu.com/p/379202949
2.https://zhuanlan.zhihu.com/p/59401605
三、开源项目
1.基于知识图谱和向量检索的医疗诊断问答系统
https://github.com/wangle1218/KBQA-for-Diagnosis
2.知识图谱问答
https://github.com/wangle1218/QASystemOnMedicalKG
3.医疗知识图谱问答
https://github.com/LuoFanA595/Medical-Robot-AI
四、baseline选型
1.baseline参考源码:https://github.com/LuoFanA595/Medical-Robot-AI
2.使用框架:rasa、官方网站:http://wwww.rasa.com
3.技术架构选型:为多种问答系统的综合应用,包括:问答型、任务型、闲聊型,其中问答型包括:FAQ、KBQA(知识图谱)
4.技术流程图:后期预期加入asr、tts模块
五、对话系统环境配置
1.baseline环境配置:知识图谱部分
(1)如果是windows下直接参考git相关配置
(2)一般都是linux下配置,部分内容需要修改
#1.配置环境:创建所需环境:
conda create -n 环境名 python=3.7
#激活环境:
conda activate 环境名
#2.项目所需安装包已打包在requirements.txt中Terminal终端命令执行:
pip install -r requirements.txt 即可安装
(3)知识图谱数据库neo4j下载、安装、运行:
1)下载:
从官网:https://neo4j.com/download-center/#community 下载3.5.35版本(linux)。
2)解压:下载完成后通过命令:
tar -zxvf neo4j-community-3.5.35-unix.tar 解压
3)启动:neo4j命令:
./bin/neo4j start
4)web访问:在浏览器中输入,默认端口7474
http://localhost:7474/browser/
显示如图则启动成功:
5)结构化疾病数据入库:
python build_medicalgraph.py
注意修改代码中数据库账户和秘密,最终可视化效果:
2.闲聊部分---这部分是基于理解自己添加的。
(1)环境安装
pip install paddlepaddle
pip install paddlenlp
pip install paddle
(2)使用模型
plato-mini
六、代码运行与服务启动
1.rasa后台服务启动(启动有先后顺序)
#(1)运行rasa cors,作用对话状态跟踪,对话管理部分:
nohup python3 -m rasa run -vv --cors "*" --port 5005 --endpoints endpoints.yml --credentials
credentials.yml --debug >log1.log 2>&1 &
#(2)运行 rasa action,行为管理:
nohup python3 -m rasa run actions --port 5055 --actions actions --debug >log2.log 2>&1 &
#(3)用端口将文件映射到本地:
python -m http.server 8888
#(4)docker容器启动:
docker run -p 8000:8000 rasa/duckling
2.前端接口修改
修改路径:
rasa_bot_front_dist-main/static/js/main.341de945.chunk.js
修改ip地址:http://192.168.2.220:5055/webhooks/rest/webhook/
将ip修改为rasa启动服务端地址
之后,在浏览器打开rasa_bot_front_dist-main/index.html即可对话
七、baseline知识图谱实现功能
1.知识图谱实体类型
实体类型 | 中文含义 | 实体数量 | 举例 |
---|---|---|---|
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万实体量级 |
2、知识图谱实体关系类型
实体关系类型 | 中文含义 | 关系数量 | 举例 |
---|---|---|---|
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万关系量级 |
3、知识图谱属性类型
属性类型 | 中文含义 | 举例 |
---|---|---|
name | 疾病名称 | 喘息样支气管炎 |
desc | 疾病简介 | 又称哮喘性支气管炎... |
cause | 疾病病因 | 常见的有合胞病毒等... |
prevent | 预防措施 | 注意家族与患儿自身过敏史... |
cure_lasttime | 治疗周期 | 6-12个月 |
cure_way | 治疗方式 | "药物治疗","支持性治疗" |
cured_prob | 治愈概率 | 95% |
easy_get | 疾病易感人群 | 无特定的人群 |
4、理论上支持问答类型
问句类型 | 中文含义 | 问句举例 |
---|---|---|
disease_symptom | 疾病症状 | 乳腺癌的症状有哪些? |
disease_cause | 疾病病因 | 为什么有的人会感冒 |
disease_acompany | 疾病的并发症 | 失眠有哪些并发症? |
disease_not_food | 疾病需要忌口的食物 | 感冒不能吃什么 |
disease_do_food | 疾病建议吃什么食物 | 感冒了能吃什么 |
food_not_disease | 什么病最好不要吃某事物 | 什么病不能吃豆腐 |
disease_drug | 啥病要吃啥药 | 感冒应该吃什么药 |
drug_disease | 药品能治啥病 | 板蓝根颗粒能治啥病? |
disease_check | 疾病需要做什么检查 | 脑膜炎怎么才能查出来? |
check_disease | 检查能查什么病 | 全血细胞计数能查出啥来? |
disease_prevent | 预防措施 | 怎样才能预防肾虚? |
disease_lasttime | 治疗周期 | 感冒要多久才能好? |
disease_cureway | 治疗方式 | 高血压要怎么治? |
disease_cureprob | 治愈概率 | 白血病能治好吗? |
disease_easyget | 疾病易感人群 | 什么人容易得高血压? |
disease_desc | 疾病描述 | 糖尿病 |
对话效果展示:
八、目前对话系统存在的问题和解决方法
1.目前的对话系统上还存在部分bug,存在提问无法回答的情况
2.目前还无法支持多轮对话,无法实现和用户的交互式问答
3.对用户提问问题的多样性(相同问题不同的提问方式)这种情况还无法很好兼容
4.基于检索的问答FAQ功能还没有加上去
5.根据用户疾病症状,预测疾病功能还不能实现
6.目前疾病知识图谱的知识结构化还不完全,需要继续做信息抽取
针对以上问题,目前都有相关解决办法,需要后续持续推进开发。
九、多轮对话
1.不同疾病共有交互问题
年龄、性别、症状持续时间