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


    在这里插入图片描述

    项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    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

  • 相关阅读:
    1. 概述
    [极致用户体验] 你的 Link Button 能让用户选择新页面打开吗?
    灰度级形态学 - 顶帽变换和底帽变换
    Java类加载器详解
    c++提高篇——模板(下)
    【ElasticSearch系列-07】ES的开发场景和索引分片的设置及优化
    【Python 零基础入门】 函数
    Netcode for Entities里如何对Ghost进行可见性筛选(1.2.3版本)
    dpi是什么?如何更改dpi?(仅个人笔记,可能有误)
    spring 配置文件 --bean
  • 原文地址:https://blog.csdn.net/sinat_39620217/article/details/131968727