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

开篇

文章根据@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匹配回答的模板,将得到的结果放到模板中生成答案
    在这里插入图片描述

结果展示
在这里插入图片描述


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

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值