医疗知识图谱智能问答系统学习总结(一)-Neo4j/Python

学习知识图谱,一个比较好的案例是中科院软件所刘焕勇老师在github上的开源项目,地址:https://github.com/liuhuanyong/QASystemOnMedicalKG,构建了一个肝病智能问答专业知识图谱。

下面详细介绍下个人学习心得:

1.拿到代码后,首先进入build_medicalgraph.py,修改Neo4j图库连接信息,然后运行该代码,即可创建肝病图库。

class MedicalGraph:
    def __init__(self):
        cur_dir = '\\'.join(os.path.abspath(__file__).split('\\')[:-1])   # 获取当前绝对路径的上层目录 linux中应用'/'split和join
        self.data_path = os.path.join(cur_dir, 'data\hepatopathy.json')   # 获取json文件路径
        self.g = Graph(
            host="127.0.0.1",  # neo4j运行地址,如果是本地安装则保持改地址
            http_port=7474,  # neo4j服务监听的端口号,7474
            user="neo4j",  # Neo4j图库user name
            password="password")Neo4j图库password

 以下是我的图库Details。

医疗知识图谱智能问答系统学习总结(一)-Neo4j/Python_第1张图片

执行完成后,图库效果如下:

医疗知识图谱智能问答系统学习总结(一)-Neo4j/Python_第2张图片

2.接下来就可以运行chat_graph.py,就可以开始与肝病问答小助手聊天了。

医疗知识图谱智能问答系统学习总结(一)-Neo4j/Python_第3张图片

3.目前该问答项目的流程如下,问题分类主要解决诸如已知疾病查症状,已知疾病查治疗方法等等,问题解析根据分类构造查询语句,答案检索执行查询组织回复语句,然后返回答案。

  

医疗知识图谱智能问答系统学习总结(一)-Neo4j/Python_第4张图片

 下面是一个查询示例:

医疗知识图谱智能问答系统学习总结(一)-Neo4j/Python_第5张图片

 4.该项目也存在一定的不足之处,需要进行完善。

  • 当检索结果为空时会报错,该问题我已经修复,在answer_search.py增加结果判断,如检索结果为空则返回未检索到结果;代码我上传至github:https://github.com/runseason/medicalQA.git
            elif question_type == 'check_disease':
                desc = [i['m.name'] for i in answers]
                subject = answers[0]['n.name']
                if desc[0]:
                    final_answer = '通常可以通过{0}检查出来的疾病有{1}'.format(subject, ';'.join(list(set(desc))[:self.num_limit]))
                else:
                    final_answer = '通常可以通过{0}检查出来的疾病有 : 未检索到结果'.format(subject)

     

  • 当检索内容与肝病无关时只能返回初始化答案,需要增加相似性判断,然后找到相似度最高的内容,检索答案返回给用户;该问题还在修复中,敬请期待。

你可能感兴趣的:(AI,知识图谱)