开篇

文章根据@liuhuanyong_iscas大佬的项目进行调试与解析,作为KGQA和NLP入门的一个学习实战的项目。有不对的地方请不吝指教,若有侵犯相关权益,也请给我留言,我会撤下该文章。
项目原地址:https://github.com/liuhuanyong/QASystemOnMedicalKG
CSDN链接:https://blog.csdn.net/lhy2014/article/details/82953792

环境的搭建比较简单,这里就不做展开了,主要对项目各部分的功能进行探究,弄清整个系统的流程。

一、 构建知识图谱

在这里插入代码片这部分主要是通过python将获取到的语料构建成知识图谱,使用py2neo将每个node创建好,并创建相应的relationship,使节点之间相互关联。
对应的是项目中 build_medicalgraph.py 这个脚本,类名为MedicalGraph

下面对各个方法进行讲解:

  • init (初始化)
    链接neo4j数据库,与语料路径的获取

  • read_nodes (读取文件)
    将json文件中的7类节点以及节点与实体之间的关系存入到list中。

  • create_node(在neo4j中创建节点)
    这里做了些改动,将create_diseases_nodes的方法合并到了一起

  • create_graphnodes(创建节点)
    调用create_node方法,创建Drugs,Foods,Checks,Departments,Symptoms,Disease这些节点

  • create_graphrels(在neo4j中将节点之间建立关系)

  • create_relationship
    调用create_graphrels 将创建的节点建立关系,传递关系的名称

  • export_data(导出数据检验)

二、 问题分类器

这个脚本的功能主要是进行问题类型的分类,对应的脚本为question_classifiler.py

  • init(初始化)
  1. 读取并加载特征词
  2. 将所有的特征词构建领域的actree
    调用build_actree:将所有的特征词汇构建成actree为后续的问句特征词的提取提供使用
  3. 使用特征词构建词典得到词的类型
    调用bulild_wdtype_dict:所有的特征词进行类型标记包含的类型有(disease、department、check、drug、food、symptom、producer)
    问题类型匹配通过这里的特征词典得到问题的类型属于哪一类
  4. 疑问句问词词典的构建

  • classify(问句分类)
    -1. 调用 check_medical
    -2. 使用之前生成的actree来获取输入问句中的特征词
    -3. 得到特征词之后在类型词典中获取到相应的类别返回
    -4. 数据格式如下

    再根据初始化中的疑问句特征词词典来获取问题的类型将问题的类型以及特征词返回,数据格式如下

    通过疑问词词典来
    重点内容: Aho-Corasick automaton (AC自动机算法)
    具体的算法介绍参考链接(虽然是java实现,原理相通)
    http://www.hankcs.com/program/algorithm/implementation-and-analysis-of-aho-corasick-algorithm-in-java.html

三、 获取对应query

question_parser.py通过分类脚本得到的结果,得到neo4j的query语句.

  • parser_main
    args

    questions_types

  • build_entitydict
    通过参数中类别获取节点实体
    传入的参数

    返回的参数

  • sql_transfer
    根据question_type对不同的问题分开处理,生成query
    将问题类别与特征词传递进来生成相应的query语句

最终返回sqls,生成对应的查询语句


三、 执行cypher查询通过模板匹配获取回答

answer_search.py 在neo4j中获取内容,匹配模板得到回复

  • init
    连接neo4j

  • search_main
    执行query获取到相应的结果

    最后将获取的所有的回答返回,在最终结果展示出来

  • answer_prettify
    根据question_type匹配回答的模板,将得到的结果放到模板中生成答案

结果展示


关于这个项目的流程解析就写到这里。不是很复杂的项目,作为知识图谱的练手项目还是挺好的。
再次感谢原创作者的分享。

医药领域知识图谱快速及医药问答项目--项目探究相关推荐

  1. 医药领域知识图谱快速及医药问答项目(项目全过程)

    该项目是中科院软件所刘焕勇老师在github上的开源项目,基于知识图谱的医药领域问答项目 Github项目地址:mirrors / liuhuanyong / qasystemonmedicalkg ...

  2. 工程实践:基于规则模式的军事和医药领域知识图谱问答快速实现

    知识结构化问答是知识图谱的一个重要的应用方向,虽然现在许多真实的使用体验上,会被评价为"鸡肋且智障",并且在落地上还没有太多的付费场景,但也不乏有不少学生.公司.机构在尝试花时间去 ...

  3. KG-开源项目:QASystemOnMedicalKG【以疾病为中心的一定规模医药领域知识图谱,并以该知识图谱完成自动问答与分析服务】

    QABasedOnMedicaKnowledgeGraph self-implement of disease centered Medical graph from zero to full and ...

  4. 自然语言处理(NLP):18 基于规则医药领域知识图谱

    本文为了快速搭建一个垂直领域的知识图谱,实体抽取+实体关系暂采用规则处理,这里仅仅提供一种创建知识图谱的一种思路.后续给大家分享基于模型的知识图谱的问答. 作者: 走在前方 主要 讨论内容 数据来源, ...

  5. 医药知识图谱项目搭建注意事项(QASystemOnMedicalKG)

    医药知识图谱项目搭建注意事项(QASystemOnMedicalKG)## 标题 1.注意neo4j版本 4.0以上需要安装java11,低于4.0的版本需要java 8,同时注意对应的py2neo驱 ...

  6. 军事武器知识图谱构建与自动问答项目QAonMilitaryKG

    QAonMilitaryKG  QAonMilitaryKG,QaSystem based on military knowledge graph that stores in mongodb whi ...

  7. 报名 | CCKS 2021评测任务:生活服务领域知识图谱问答

    理解和运用自然语言是人工智能的核心问题之一,如何让机器可以像人一样感知和认识世界,知识图谱作为机器可以理解的"语言",在智能时代中扮演了极其重要的角色.然而,由于知识图谱高度结构化 ...

  8. 复旦肖仰华:领域知识图谱落地实践中的问题与对策

    肖仰华博士,复旦大学计算机科学与技术学院教授,博士生导师,知识工场实验室负责人. 报告摘要:近年来,知识图谱技术进展迅速,各种领域知识图谱技术在很多领域或行业取得了显著落地效果.在领域知识图谱技术的落 ...

  9. 深度长文 | 复旦大学肖仰华:领域知识图谱落地实践中的问题与对策

    报告摘要:近年来,知识图谱技术进展迅速,各种领域知识图谱技术在很多领域或行业取得了显著落地效果.在领域知识图谱技术的落地实践过程中涌现出一大批理论与工程问题.本报告结合复旦大学知识工场实验室十多个领域 ...

最新文章

  1. 御剑情缘服务器维护,御剑情缘10月31日安卓区部分服务器数据互通公告 10.31合服名称与时间[图]...
  2. 粒子滤波到底是怎么得到的?
  3. 2020最后一个月,近4成应届生未就业,19个头部城市谁最留不住人?
  4. python中等于号可以用is代替_python中字符串比较使用is、==和cmp()总结
  5. mysql导出表_mysql导出表的3种方式
  6. 【Python】下载所有 XKCD 漫画
  7. 两个整数求平均值,防止溢出的问题
  8. vue变量赋值到html,jsvue data变量相互赋值后被实时同步的解决步骤js大全-js开发...
  9. Struts2_01_开发过程与实例说明
  10. 海康IP_Tool修改工具使用教程
  11. Netmeeting使用方法
  12. windows屏幕放大镜
  13. nb信号和4g信号_【行业】万物互联的世界NB-IoT VS 4G,到底哪个更能打?
  14. Android 原生GPS定位 判断室内室外
  15. VS2010 C++单元测试之gtest与OpenCppCoverage实践
  16. 2020线上夏令营感受
  17. CVE-2017-12635+12636 复现+反弹shell
  18. JavaGUI:多功能计算器(四)--Swing实现双语悬停提示(源码升级说明)
  19. 后台管理页面左侧导航栏
  20. 电商快递物流的电子面单打印接口API案例代码

热门文章

  1. VB.Net程序设计:代码简化过程(备忘录)
  2. 2022-05-08水果机运动步数快捷指令(ios)
  3. Swift 与 Objective-C:您应该为下一个 iOS 移动应用选择哪个?
  4. 第二证券|卡塔尔给体育烧的钱,不止世界杯
  5. 30支队伍将在阿布扎比角逐奖金达500万美元的2020年穆罕默德-本-扎耶德国际机器人挑战赛
  6. 迅雷网心云赚钱宝3代【Pro】8核性能神器,真实收益有多高?
  7. 基于JavaScript爬取法律文书案由信息
  8. 趣图 | 发盆友圈的正确姿势
  9. golang力扣leetcode 322.零钱兑换
  10. 为什么程序员应该有一台 Mac 个人电脑