# 基于语义解析的知识图谱检索系统 **Repository Path**: cjp_scut/KBQA_based_on_semantic_parsing ## Basic Information - **Project Name**: 基于语义解析的知识图谱检索系统 - **Description**: 基于语义解析的方法,开发并实现了一个具备交互界面的医药领域知识图谱检索系统(图谱来源于刘焕勇) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 49 - **Forks**: 0 - **Created**: 2022-06-16 - **Last Updated**: 2025-12-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于语义解析的知识图谱检索系统 ## 概述 在知识表示中,知识图谱是一种知识库,存储着互联网中大量复杂且结构化的知识,对知识库进行直接的访问需要访问者具备专业技能,而这对于大部分用户来说都是不现实的,大家希望能够通过自然语言直接查询知识库。因此,知识库问答,即KBQA任务被随之提出。KBQA提出利用知识库中的事实来回答自然语言问题。 而在KBQA的诸多解决方案中,语义解析的方法因其“可解释性”和优异性能而脱颖而出。语义解析方法先将自然语言问题转换为中间的语义表示,在本文中对应的是Cypher查询语句,然后再检索知识库得到答案。 image-20220616202643190 该工作有两个主要难点: ① 第一,自然语言存在天然的“模糊性”和“多样性”。“模糊性”指的是用户在提问中可能无法完整或准确地描述实体,比如“骨质疏松”被歧义描述为“骨疏松病”,“板蓝根茶”被省略为“板蓝根”等。而“多样性”指的是同一语义的问题可能有不同的表达,例如“脑血栓的临床表现是啥?”和“脑血栓一般有什么症状”; ② 第二,在现实中,KBQA任务存在“低资源问题”,也就是说不是所有知识库都存在QA训练数据的。 针对这两大难点,开展了以下工作: 1. 针对难点1,采用基于语义解析的**融合方法**,自定义**评分函数**解决实体匹配的模糊性问题,基于**预训练文本分类模型**解决多样性问题。 2. 针对难点2,实体链接阶段使用**评分函数**而非实体跨度检测模型;在关系预测中使用**数据增强**扩充模型训练数据以缓解低资源难题。 3. 采用上述方法,完成了**医药知识图谱检索系统**的开发,提供交互界面,使用户能够直接获取相关知识 ## 系统界面截图 - 基础页面布局 系统页面-主页 - 问答检索 系统页面-问答检索页 - 历史记录检索 系统页面-历史记录检索页 - 历史记录删除 系统页面-历史记录删除页 (系统视频演示见成果演示文件夹) ## 系统架构 ### 系统逻辑架构图 ![KBQA-逻辑架构图](README.assets/KBQA-逻辑架构图.png) ### 系统物理架构图 ![KBQA-物理架构图](README.assets/KBQA-物理架构图.png) ## 知识库 - 知识库来源:由360人工智能研究院*刘焕勇*发布 - 知识库类型:医药领域 - 知识库大小:事实规模约29万,包含7类实体和10类关系 ### 知识库Schema ![image-20220616210121891](README.assets/image-20220616210121891.png) ## 系统边界/问答类型 1. **简单问题**: 1. 实体抽取问题(20类),例如询问“乳腺癌的症状有哪些?” 2. 关系抽取问题(6类),例如询问“毛囊炎患者会得脓疱吗?”。 2. **复杂问题**: 1. 并列句(单意图),例如询问“百日咳和皮炎的并发症有哪些?”。 2. 比较句(2类),例如询问“肺炎和肾炎哪个更难治愈”。 3. 交集问句(症状交集或疾病交集)(2类),例如询问“同时具备脓疱和出血性丘疹这些症状的疾病是什么?” ## 系统核心功能流程简述 ### 语义解析功能流程图 ![image-20220616210205386](README.assets/image-20220616210205386.png) ### 流程图解释 针对前面提到的两个难点,系统采用模块化、流水线的形式进行语义解析。当问题输入后,基于中文多领域分词工具的实体识别模块先识别出问句中的词项,然后在实体链接模块中通过评分函数计算词项和实体间的相似度,排序取最高,得到结果(“色汗症、肝炎”)。同时,关系预测模块基于文本分类模型,结合候选实体结果来预测问句的类别标签(已知疾病比较治愈率)。接着使用插槽的方式将这两个模块输出结果组合为Cypher查询语句,检索知识库得到结果后,进入逻辑推理模块,进行数学操作。最后再将结果组织为用户可理解的自然语言答案返回至前端。 难点1解决方式是评分函数通过多个指标(①字重叠率 ②编辑距离分数 ③ 余弦相似度)来链接实体,而非单纯的字符串检索,缓解了“模糊性”问题;而方案结合神经网络提高了对句式的识别能力,缓解了“多样性”问题。 难点2的解决方式是在实体识别链接部分,不需要训练跨度检测模型而是直接使用评分函数链接实体;同时关系预测模块的数据使用数据增强方式进行扩充,缓解了低资源下的模型训练问题。 ## 备注 1. 因大小限制,项目不提供相关模型: 1. 关系预测模块选择的模型为用于中文文本分类的**ERNIE_tiny**模型(PaddleHub提供)。ERNIE-tiny作为小型化ERNIE,采用了模型蒸馏等技术,相比ERNIE_base保证了在实际真实数据中将近4.3倍的预测提速,满足了系统对低响应时间的要求。 2. 数据增强使用基于中文文本改写的**SimBert**模型来扩充文本分类模型的训练数据 3. 评分函数中计算余弦相似度需要将文本形式转换为词向量形式。词向量(embedding)计算的实现方式是通过部署基于Paddle Serving框架的Bert Service服务,以获取文本词向量。服务模型文件使用哈工大提供的全词覆盖中文预训练模型**Chinese-BERT-wwm**。 2. 前端项目是缺少node_modules的。正常运行需执行一下操作: ​ 1、指定到项目目录,执行 ```javascript npm install //根据提示执行下列命令 npm audit fix --force ``` 3. 后端采用模板结合神经网络的方式进行语义解析,其中模板的部分参考了刘焕勇发布的项目:https://github.com/liuhuanyong/QASystemOnMedicalKG.git