基于开源WQ装备知识图谱的智能问答全流程构建

news2024/9/26 21:43:03

基于知识图谱的智能问答系统是一种利用知识图谱结构化数据来回答自然语言问题的技术。知识图谱存储了实体(如人、地点、物品等)及其之间的关系,允许智能系统查询相关的信息并推理答案。

1、知识图谱的智能问答系统核心流程:

  1. 问题解析

    • 将用户输入的自然语言问题解析为适合查询的格式,通常使用自然语言处理技术(NLP)将问题拆解成可查询的实体和关系。
    • 例如,问题 “波兰研制了哪些武器?” 可以解析为 “查找研制国家是波兰的武器”。
  2. 知识图谱查询

    • 基于解析的问题,系统生成一个查询,并使用类似于 Neo4j 的查询语言(如 Cypher)查询知识图谱。
    • 对应的 Cypher 查询可能是:
      MATCH (w:Weapon)-[:研制国家]->(c:Country {name: "波兰"})
      RETURN w.name
      
  3. 结果推理与生成

    • 查询的结果可以直接返回给用户,或者系统可以基于多跳关系进一步推理答案。
    • 例如,用户可能问“波兰研制的武器有哪些型号?” 系统可能通过多跳关系找到武器的型号信息:
      MATCH (w:Weapon)-[:研制国家]->(c:Country {name: "波兰"})
      MATCH (w)-[:型号]->(m:Model)
      RETURN w.name, m.name
      
  4. 答案呈现

    • 将查询结果转化为用户友好的自然语言回答,直接反馈给用户。例如:
    • “波兰研制的武器包括:PZL P.6战斗机和PZL P.11战斗机等。”

2、知识图谱智能问答的示例场景:

  1. 实体查找

    • 问题: “波兰研制了哪些战斗机?”
    • 处理: 识别出“波兰”是国家实体、“战斗机”是武器类型实体,查询相关武器。
    • 查询:
      MATCH (w:Weapon {type: "战斗机"})-[:研制国家]->(c:Country {name: "波兰"})
      RETURN w.name
      
  2. 关系查询

    • 问题: “PZL P.11战斗机和其他设备有什么关系?”
    • 处理: 查找所有与该武器相关的设备及其关系。
    • 查询:
      MATCH (w:Weapon {name: "PZL P.11战斗机"})-[r]->(e:Equipment)
      RETURN w.name, type(r), e.name
      
  3. 多跳推理

  • 问题: “波兰研制的战斗机有哪些制造公司?”
  • 处理: 查找与波兰研制的战斗机相关联的制造公司。
  • 查询:
    MATCH (w:Weapon {type: "战斗机"})-[:研制国家]->(c:Country {name: "波兰"})
    MATCH (w)-[:制造]->(m:Company)
    RETURN w.name, m.name
    

3、 构建智能问答系统的主要技术:

  1. 知识图谱构建

    • 数据收集:从多个来源(文本、数据库等)收集实体和关系信息,并将其结构化为图谱。
    • 实体和关系抽取:使用NLP和信息抽取技术从非结构化数据中抽取出有价值的实体和关系。
  2. 自然语言处理(NLP)

    • 问题理解:将自然语言问题转化为结构化查询(如Cypher),可以使用依赖句法分析、词性标注、命名实体识别(NER)等技术。
    • 词向量和知识表示:通过预训练的词嵌入(如Word2Vec或BERT)来理解问题中的实体与关系。
  3. 知识图谱查询

    • 查询语言:使用 Cypher、SPARQL 等图数据库查询语言来执行具体查询,获取相关信息。
    • 推理:基于已有的实体与关系,系统可以进行多跳推理,回答更复杂的问题。
  4. 系统架构

    • 图数据库:如 Neo4j、JanusGraph、Amazon Neptune 用于存储知识图谱。
    • 智能问答接口:通过 REST API、GraphQL 等接口接收用户输入,并返回答案。

4、实现步骤:

  1. 构建知识图谱:将现有的领域数据(如武器、装备等)转换为结构化的图数据。
  2. 开发 NLP 模块:实现问句解析、实体识别及关系推理。
  3. 图数据库集成:使用 Neo4j 或其他图数据库进行实体和关系的查询。

通过这些步骤,你可以构建一个基于知识图谱的智能问答系统,支持用户通过自然语言查询复杂的关系和实体信息。

4.1、构建知识图谱

请参考:https://blog.csdn.net/zhanghan11366/article/details/142029311?spm=1001.2014.3001.5502【基于开源WQ装备数据的知识图谱全流程构建】

4.2、开发 NLP 模块

4.2.1、问句解析:

提取问题中的WQ名称及对应的关系类型:

  • WQ名称:查询语句 MATCH (w:Weapon) RETURN w.name AS weapon_name 获取所有武器节点的名称。查询结果会被存储在全局变量 cached_weapons 中。缓存的逻辑确保在程序运行时只进行一次数据库查询,后续问题解析时直接使用缓存。从缓存的wq节点中遍历,如果问题中包含武器名称,相关wq会被添加到 weapons 列表中。
# 获取所有武器节点,并缓存
def cache_weapons():
    global cached_weapons
    if not cached_weapons:  # 如果缓存为空,则查询Neo4j数据库
        query = "MATCH (w:Weapon) RETURN w.name AS weapon_name"
        result = query_neo4j(query)
        cached_weapons = [record['weapon_name'] for record in result]
  • 关系类型:通过遍历预定义的关系列表(如 “研制国”, “研发单位” 等),如果问题中包含这些词汇,它们会被添加到 relations 列表中。
def parse_question(question):
    # 缓存武器节点
    cache_weapons()

    keywords = {
        'relations': [],  # 支持多个关系
        'weapons': []  # 支持多个武器
    }

    # 常见关系类型,动态识别多个关系
    relations = ["研制国", "研发单位", "武器类型", "武器前身", "研发时间"]
    for relation in relations:
        if relation in question:
            keywords['relations'].append(relation)

    # 遍历缓存的武器节点,匹配问题中的武器名称
    for weapon_name in cached_weapons:
        if weapon_name in question:
            keywords['weapons'].append(weapon_name)

    return keywords

4.3、图数据库集成

将抽取的WQ名称和关系转为 Cypher查询语句

  # 构建查询语句
            query = (
                f"MATCH (w:Weapon {{name: $weapon}})-[r:`{relation}`]->(e) "
                "RETURN e.name AS entity"
            )
            result = query_neo4j(query, parameters={"weapon": weapon})

4.4、最终测试

在这里插入图片描述
验证:
F-89“蝎子”(Scorpion)截击机研制国和研发时间、武器类型分别是?
F-89“蝎子”(Scorpion)截击机的研制国是: 美国
没有找到F-89“蝎子”(Scorpion)截击机的研发单位信息。
F-89“蝎子”(Scorpion)截击机的武器类型是: 截击机是20世纪 50 年代美国空军的主力重型截击机
F-89“蝎子”(Scorpion)截击机的研发时间是: 20世纪 50 年代
在这里插入图片描述
PWS-10战斗机的研制国是哪里?
PWS-10战斗机的研制国是: 波兰
在这里插入图片描述

4.5、不足之处

1)目前问题解析只使用匹配的方式,wq和抽取属性没有直接相关。例如:P-35A飞机的研制国和研发单位是哪里?F-89“蝎子”(Scorpion)截击机研制国和研发时间、武器类型分别是?会把两个WQ所有的研制国、研发单位、研发时间、武器类型返回出来。而我需要的P-35A飞机的研制国和研发单位,F-89“蝎子”(Scorpion)截击机研制国和研发时间、武器类型。后续会添加分句和nlp中的依法句存来优化。
2)目前不支持多级查询,例如多个武器前身
在这里插入图片描述
3)问题的目前不能太过复杂,目前只设置一中返回句式。

 query = (
                f"MATCH (w:Weapon {{name: $weapon}})-[r:`{relation}`]->(e) "
                "RETURN e.name AS entity"
            )
            result = query_neo4j(query, parameters={"weapon": weapon})

            # 生成单个武器-关系的回答
            if result:
                entity_list = [record["entity"] for record in result]
                answers.append(f"{weapon}的{relation}是: {', '.join(entity_list)}")
            else:
                answers.append(f"没有找到{weapon}的{relation}信息。")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何通过海外云手机提升运营效率

随着技术的不断进步,市场上出现了越来越多的提高跨国电商运营效率的应用,海外云手机就是其中一个。海外云手机的优势体现在多个方面,那么如何通过使用海外云手机来提升运营效率?可以从以下几个方面了解。 首先,海外云手…

中国人民银行:数字人民币交易额已达7万亿元!中俄考虑使用国家数字货币进行双边结算!

近年来,数字货币的迅速发展引起了全球的广泛关注。中国人民银行(PBOC)近日透露,数字人民币(e-CNY)的交易额已接近1万亿美元,这标志着中国在数字货币领域的重大进展。同时俄罗斯也表示&#xff0…

shader 案例学习笔记之mix函数

mix函数: 在两个值之间进行插值; 使用: #ifdef GL_ES precision mediump float; #endifuniform vec2 u_resolution; uniform float u_time;vec3 colorA vec3(0.149,0.141,0.912); vec3 colorB vec3(1.0,0.83,0.224);void main(){vec2 st…

生成你想要的测试数据,除了用这6款工具,还能用AI

在软件测试中,测试数据是测试用例的基础,对测试结果的准确性和全面性有着至关重要的影响。因此,在进行软件测试时,需要生成测试数据以满足测试场景和要求。 本文将介绍什么情况下需要生成测试数据,常用的测试数据生成…

路径规划与轨迹跟踪系列算法学习 MATLAB 模型预测控制MPC

下面这张图的程序 019 路径规划与轨迹跟踪是自动驾驶汽车、无人机以及其他自动化系统中的关键技术之一。MATLAB 提供了丰富的工具箱来实现这些功能,其中模型预测控制(Model Predictive Control, MPC)是一种广泛使用的路径跟踪控制方法。下面是…

快速搭建最简单的前端项目vue+View UI Plus

1 引言 ‌‌Vue是一套用于构建Web前端界面的渐进式JavaScript框架。‌‌它以其易学易用、性能出色、灵活多变而深受开发者喜爱,并且与其他前端框架(如‌React和‌Angular)相比,在国内市场上受到了广泛的认可和使用。点击进入官方…

【线程池】Java 线程池 ThreadPoolExecutor 类源码介绍

文章目录 前言线程池是什么线程池解决了哪些问题本文主要讲述什么感谢读者 线程池 UML 类图ThreadPoolExecutor 内部设计核心参数内部类任务队列拒绝策略 ThreadPoolExecutor 源码线程池生命周期线程池构造函数execute() 【提交任务】addWorker() 方法 【添加工作线程并启动】了…

【微服务】⭐️华为云obs功能抽取到公共服务,供所有项目使用

目录 🍸前言 🍻一、公共服务搭建 🍺二、代码实现 1.工具类编写 2.项目引入使用 🍹三、章末 🍸前言 小伙伴们大家好,上次讲了如何本地对接华为云Obs对象存储服务,在本地项目中通过sdk引入调用…

【QT】常用控件-下

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:QT 目录 👉🏻QComboBox👉🏻 QSpinBox👉🏻QDateTimeEdit👉🏻QD…

时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测

时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测 目录 时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现BKA-XGBoost时间序列预测&a…

datasophon升级海豚调度dolphinscheduler为3.2.2

一、参考博主升级3.2.1文章:datasophon升级海豚调度为3.2.1_海豚调度3.2.2 mysql包找不到-CSDN博客 二、升级后woker-server启动报错如下: 原因是worker-server下conf/common.properties中的:resource.storage.typeNONE, 解决很简…

如何划分类/单一职权原则SRP

参考:单一职责 -- 每个类只负责一个功能_每个类应该只负责一个功能,遵循单一职责原则。-CSDN博客 类有且只有一个原因需要修改它,这样的才是一个结构简洁的类。 结合上面的例子,需要注意的点: 1.比如搜索数据库,需要…

Procdump抓ToDesk密码

目录 前言 1.工具教程 2.转储数据 3.密码获取 4.总结 前言 本文是因为在公众号上看到一篇文章随想着实战中利用ToDesk秀操作失败后,实验环境成功复现后写下。ProcDump[1] 是一个命令行实用工具,其主要用途是监视应用程序的 CPU 峰值,并在…

mybatis 查询Not Found TableInfoCache

近期在工程迁移中遇到一个mybatis查询的问题,检查代码没有问题,但是报Not Found TableInfoCache 解决过程 是不是数据库对应表错误或者实体类指定的表名错误 查看配置文件链接的数据源是否正确TableName中指定的表名然后去数据库看一下是否存在 如果…

象过河仓库管理软件,轻松实现无纸化录入,自动化记账

在如今快速发展的商业环境中,仓库管理面临着手工记账效率低下,容易引发数据不准确,滞后,错漏频发,盘点耗时费力等问题。为了解决这些问题,象过河仓库管理软件应运而生,轻松实现无纸化录入&#…

支付环节攻击方式与漏洞类型

支付环节攻击方式与漏洞类型 1.概述2.卡复制3.卡数据破解与篡改4.网络欺骗攻击5.线下欺骗攻击6.支付身份伪造7.支付逻辑绕过8.数据不同步9.支付数据篡改10.条件竞争漏洞(并发)11.拒绝服务 参考自:https://www.topsec.com.cn/uploads/2023-10-…

希捷,AI时代的存储“破壁者”

喜欢跑步或者经常看马拉松等比赛的读者知道,当选手经过专业训练成绩突飞猛进后,就会有一段时间停滞不前。这个阻碍可能是物理的、心理的或是技术的障碍,只有突破这个“壁垒”,才能成为更好的自己。 对于一家企业来说,…

100.WEB渗透测试-信息收集-网络空间搜索引擎shodan(2)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:99.WEB渗透测试-信息收集-网络空间搜索引擎shodan(1)-CSDN博客 Sh…

读论文-《基于计算机视觉的工业金属表面缺陷检测综述》

文章目录 1. 背景1.1 工业需求1.2 传统方法的局限1.3 计算机视觉技术的优势 2. 技术流程2.1 光学成像2.1.1照明方式2.1.2 缺陷和背景特性 2.2 图像预处理2.3 缺陷检测2.4 结果分析和决策 3. 关键算法3.1 光学成像技术相关算法3.2 图像预处理相关算法3.2.1 图像增强3.2.2特征提取…

wakenet尾迹

1、数据集介绍SWIM_Dataset_1.0.0 1.1标注文件介绍 标注文件介绍&#xff0c; 第一种&#xff1a;角度和框的坐标 <annotation><folder>Positive</folder><filename>00001</filename>文件名字<format>jpg</format>图片后缀<s…