从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。
从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。
- 项目效果
以下两张图是系统实际运行效果:
1.项目运行方式
运行环境:Python3
数据库:neo4j
预训练词向量:https://github.com/Embedding/Chinese-Word-Vectors或https://pan.baidu.com/s/14JP1gD7hcmsWdSpTvA3vKA
1、搭建知识图谱:python build_grapy.py。大概几个小时,耐心等待。
2、启动问答测试:python kbqa_test.py
部分代码展示:
from entity_extractor import EntityExtractor
from search_answer import AnswerSearching
class KBQA:
def __init__(self):
self.extractor = EntityExtractor()
self.searcher = AnswerSearching()
def qa_main(self, input_str):
answer = "对不起,您的问题我不知道,我今后会努力改进的。"
entities = self.extractor.extractor(input_str)
if not entities:
return answer
sqls = self.searcher.question_parser(entities)
final_answer = self.searcher.searching(sqls)
if not final_answer:
return answer
else:
return '\n'.join(final_answer)
if __name__ == "__main__":
handler = KBQA()
while True:
question = input("用户:")
if not question:
break
answer = handler.qa_main(question)
print("小豪:", answer)
print("*"*50)
2.医疗知识图谱
数据源:39健康网。包括15项信息,其中7类实体,约3.7万实体,21万实体关系。
本系统的知识图谱结构如下:
1.1 知识图谱实体类型
| 实体类型 | 中文含义 | 实体数量 | 举例 |
|---|---|---|---|
| Disease | 疾病 | 14336 | 乙肝,癫痫 |
| Alias | 别名 | 8877 | 小儿褐黄病综合征,广疮 |
| Symptom | 症状 | 5622 | 手足烦热,四肢麻木 |
| Part | 发病部位 | 82 | 手部,上肢 |
| Department | 所属科室 | 82 | 感染科,外科 |
| Complication | 并发症 | 3201 | 落枕,流感 |
| Drug | 药品 | 4625 | 西黄胶囊,司帕沙星 |
| Total | 总计 | 36825 |
1.2 知识图谱实体关系类型
| 实体关系类型 | 中文含义 | 关系数量 | 举例 |
|---|---|---|---|
| ALIAS_IS | 别名是 | 52578 | 癫痫 别名是 羊角风 |
| HAS_SYMPTOM | 症状有 | 62105 | 乙肝 症状有 肝功能异常 |
| PART_IS | 发病部位是 | 26660 | 乙肝 发病部位是 肝 |
| DEPARTMENT_IS | 所属科室是 | 33867 | 乙肝 所属科室是 传染科 |
| HAS_COMPLICATION | 并发症有 | 25183 | 乙肝 并发症有 肝硬化 |
| HAS_DRUG | 可用药品 | 35914 | 乙肝 可用药品 恩替卡韦分散片 |
| TOTAL | 总计 | 210018 | 约210018对关系 |
1.3 知识图谱疾病属性
| 疾病属性 | 中文含义 | 举例 |
|---|---|---|
| age | 发病人群 | 老人,小孩 |
| insurance | 是否医保 | 医保 |
| infection | 是否传染 | 有传染性 |
| checklist | 检查项目 | 肝功能检查 |
| treatment | 治疗方法 | 药物治疗、心理治疗 |
| period | 治愈周期 | 一周 |
| rate | 治愈率 | 0.1% |
| money | 费用 | 1000-2000元 |
3.问题意图识别
基于特征词分类的方法来识别用户查询意图
| 意图类型 | 中文含义 | 举例 |
|---|---|---|
| query_disease | 查询疾病 | 肝肿大是什么病 |
| query_symptom | 查询症状 | 慢性乙肝有什么表现 |
| query_cureway | 查询治疗方案 | 肚子一直痛怎么办 |
| query_checklist | 查询检查项目 | 乙肝需要做哪些检查 |
| query_department | 查询所属科室 | 乙肝去哪个科 |
| query_rate | 查询治愈率 | 乙肝能治好吗 |
| query_period | 查询治愈周期 | 乙肝多久能治好 |
| disease_describe | 查询疾病所以属性 | 慢性咽炎 |
4.总结
1、本项目构建简单,通过本项目能了解KBQA的工作流程。
2、本次通过手工标记210条意图分类训练数据,并采用朴素贝叶斯算法训练得到意图分类模型。其最佳测试效果的F1值达到了96.68%。选用NB的原因是通过与SVM训练效果比较后决定的。
3、优化点:
- 训练数据还是太少,且对问题进行标注时易受主观意见影响。意图类别还是太少,本系统得到分类模型只能预测出上面设定的7类意图。
- 对于问题句子中有多个意图的情况只能预测出一类,今后有时间再训练多标签模型吧。。
- 知识图谱太小了,对于许多问题都检索不出答案。今后可以爬取其它的健康网站数据或者利用命名实体识别和关系抽取技术从医学文献中抽取出实体与关系,以此来扩充知识图谱。
- 在本项目中采用了预训练的词向量来找近似词。由于该词向量特别大,加载非常耗时,因此影响了整个系统的效率。这个可能是因为电脑配置太低的原因吧。
- 没有实现推理的功能,后续将采用多轮对话的方式来理解用户的查询意图。同时将对检索出的结果进行排序,可靠度高的排在前面。
项目链接跳转
更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。的更多相关文章
- 特定领域知识图谱(Domain-specific KnowledgeGraph:DKG)融合方案:技术知识前置【一】-文本匹配算法、知识融合学术界方案、知识融合业界落地方案、算法测评KG生产质量保障
特定领域知识图谱(Domain-specific KnowledgeGraph:DKG)融合方案:技术知识前置[一]-文本匹配算法.知识融合学术界方案.知识融合业界落地方案.算法测评KG生产质量保障 ...
- 特定领域知识图谱融合方案:文本匹配算法(Simnet、Simcse、Diffcse)
特定领域知识图谱融合方案:文本匹配算法(Simnet.Simcse.Diffcse) 本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5 ...
- 从零构建JavaScript的对象系统
一.正统的类与继承 类是对象的定义,而对象是类的实例(Instance).类不可直接使用,要想使用就必须在内存上生成该类的副本,这个副本就是对象. 以Java为例: public class Grou ...
- 使用 AngularJS 从零构建大型应用
0.导言 1.准备工作 2.构建框架 3.丰富你的directives 4.公用的services 5.用controllers组织业务 导言 纵览线上各种AngularJS教程,大部分都是基础与一些 ...
- 从零构建以太坊(Ethereum)智能合约到项目实战——第23章 从零构建和部署去中心化投票App,decentralization Voting Dapp
P90 .1-从零构建和部署去中心化投票App-01 P91 .2-从零构建和部署去中心化投票App-02 P92 .3-从零构建和部署去中心化投票App-03 参考博文:http://liyuech ...
- 做一个通过dockerfile从零构建centos7.4
今天做一个dockerfile从零构建centos7.4镜像 废话不多说,很简单. 需要的软件包:centos7.4的rootfs 链接:提取码:usnu 下载以后我们打开看看里面是什么呢: 可以看的 ...
- ArcGIS模型构建器案例教程-批量复制工作空间所有要素类
ArcGIS模型构建器案例教程-批量复制工作空间所有要素类 目的:批量复制工作空间所有要素类 工具名称:WorkspaceCopyFeatureClasses 使用方法:输入工作空间,指定输出工作空间 ...
- ArcGIS模型构建器案例教程-批量修改工作空间所有要素类的空间参考
ArcGIS模型构建器案例教程-批量修改工作空间所有要素类的空间参考 目的:批量修改工作空间所有要素类的空间参考(坐标系) 工具名称:WorkspaceChangeSpatialReference 使 ...
- Java-ASM框架学习-从零构建类的字节码
Tips: ASM使用访问者模式,学会访问者模式再看ASM更加清晰 什么是ASM ASM是一个操作Java字节码的类库 学习这个类库之前,希望大家对Java 基本IO和字节码有一定的了解. 高版本的A ...
- 从零构建Java项目(Maven+SpringBoot+Git) #02 奥斯丁项目
前两天我说要写个项目来持续迭代,有好多小伙伴都表示支持和鼓励,项目的第一篇这不就来了么~我给项目取了个名字,英文名叫做:austin,中文名叫做:奥斯丁 名字倒没有什么特别的含义,我单纯觉得这个名字好 ...
随机推荐
- Sunshine + Moonlight 纯软件实现全平台设备作 Linux 副屏
目录 初识 Moonlight 部署 Sunshine 服务端与 Moonlight 客户端 创建虚拟显示屏 写一个创建屏幕的脚本(可选) 将副屏进行串流 已知问题 最近,我想要通过视频学习一些技术知 ...
- sort与uniq
1 sort 将文本文件内容加以排序 语法: sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>] ...
- LT01 创建转储单
一.LT01创建转储单 采购订单--MIGO收货--虚拟仓位--LT01上架--实体仓位--LT01下架--虚拟仓位--MIGO发料--生产订单 二.参考代码 "-------------- ...
- Spring Boot 整合 Camunda 实现工作流
工作流是我们开发企业应用几乎必备的一项功能,工作流引擎发展至今已经有非常多的产品.最近正好在接触Camunda,所以来做个简单的入门整合介绍.如果您也刚好在调研或者刚开始计划接入,希望本文对您有所帮助 ...
- AtCoder Beginner Contest 182 Person Editorial
Problem A - twiblr 直接输出 \(2A + 100 - B\) Problem B - Almost GCD 这里暴力枚举即可 int main() { ios_base::sync ...
- [完整]流程解决Vue3项目搭建步骤
Vue3项目完整搭建步骤 一. 使用vite创建vue3项目 npm init vue@latest 或者npm create vite@latest进行初始化项目并创建项目名称code,进入code ...
- java编译期和运行期和string原理
编译期: 是指把源码交给编译器编译成计算机可以执行的文件的过程.在Java中也就是把Java代码编成class文件的过程.编译期只是做了一些翻译功能,并没有把代码放在内存中运行起来,而只是把代码 ...
- Serverless 年终技术盘点 :工业、学术、社区遍地开花,国内厂商迅速卡位
作者 | 刘宇(花名:江昱) 2021 年,Serverless 架构在权威咨询机构 Forrester 所发布的 < The Forrester Wave: Function-As-A-S ...
- oracle开机自动重启
数据库服务器如果由于某种原因重启了,oracle数据库是不会重新启动的,那么如何配置可以完成操作系统重启数据库服务器自动重启. 注:如下样例根据我的实际oracle安装路径写的,使用时根据实际安装路径 ...
- freeswitch带媒体压力测试方案
概述 原本的计划是使用sipp完成带媒体压力测试,但是实际测试过程中发现sipp的媒体处理功能有问题(也有可能是我使用的姿势不对). sipp在带媒体的情况下(600路并发开始),出现大量的不响应和响 ...