从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。

项目设计集合介绍了从零构建医疗领域知识图谱的问答系统,使用Python和Neo4j构建知识图谱,通过预训练词向量进行实体关系处理。系统实现了意图识别,采用朴素贝叶斯算法,识别精度高,但存在数据量、知识图谱规模和效率等方面的优化空间。
摘要由CSDN通过智能技术生成

在这里插入图片描述

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用 CSDN 平台,自主完成项目设计升级,提升自身的硬实力。

在这里插入图片描述

  1. 专栏订阅:项目大全提升自身的硬实力

  2. [专栏详细介绍:项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域)

从零构建医疗领域知识图谱的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类意图。
  • 对于问题句子中有多个意图的情况只能预测出一类,今后有时间再训练多标签模型吧。。
  • 知识图谱太小了,对于许多问题都检索不出答案。今后可以爬取其它的健康网站数据或者利用命名实体识别和关系抽取技术从医学文献中抽取出实体与关系,以此来扩充知识图谱。
  • 在本项目中采用了预训练的词向量来找近似词。由于该词向量特别大,加载非常耗时,因此影响了整个系统的效率。这个可能是因为电脑配置太低的原因吧。
  • 没有实现推理的功能,后续将采用多轮对话的方式来理解用户的查询意图。同时将对检索出的结果进行排序,可靠度高的排在前面。

项目码源见文章顶部or文末

https://download.csdn.net/download/sinat_39620217/88000952

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汀、人工智能

十分感谢您的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值