【AI落地应用实战】构建基于知识图谱的知识问答系统

一、知识图谱概述

知识图谱(Knowledge Graph)是一种结构化的语义知识库,它以图形的方式组织和整合信息,使得数据之间的关系变得直观和易于理解。知识图谱的概念融合了计算机科学、数据科学、人工智能等多个领域的技术,旨在通过关联分析揭示数据背后的深层次关系。

本文所涉及所有资源均在传知代码平台可获取

1.1、概念

知识图谱由节点(实体)和边(关系)组成。节点代表实体,如人、地点、物品等;边代表实体之间的关系,如“属于”、“创造”、“位于”等。每个节点和边都可以带有属性,提供更详细的信息。

知识图谱的构建通常包括以下几个步骤:

数据抽取:从各种数据源中提取信息,如文本、数据库、网页等。
实体识别:识别出数据中的关键实体。 关系抽取:确定实体之间的关系。
实体链接:将识别出的实体与已知的知识库中的实体进行链接。
知识融合:整合来自不同源的知识,解决冲突和歧义。
存储与查询:将构建好的知识图谱存储在图数据库中,并提供查询接口。

1.2、历史

知识图谱的概念并非一开始就存在,它是随着信息技术和人工智能领域的发展逐渐形成的。以下是几个关键的历史节点:

1980年代:专家系统的发展,可以看作是知识图谱的早期形式。
1990年代:语义网(Semantic Web)概念的提出,旨在通过机器可理解的方式编码信息
2006年:DBpedia项目启动,将维基百科的结构化信息转换为机器可读格式。
2012年:谷歌推出知识图谱,用于增强搜索引擎的功能,提供更丰富的搜索结果。

1.3、作用

知识图谱在多个领域都有着广泛的应用,以下是其主要作用:

搜索引擎优化:通过知识图谱,搜索引擎能够提供更加精确和相关的搜索结果。
推荐系统:知识图谱可以用于个性化推荐,通过分析用户与物品之间的关系,提供更准确的推荐。
语义分析:在自然语言处理中,知识图谱有助于理解词语之间的关系,提高语义分析的准确性。
智能问答:知识图谱可以用于构建智能问答系统,快速准确地回答用户的问题。
决策支持:在商业分析和决策过程中,知识图谱能够帮助发现数据之间的深层次关系,支持更明智的决策。
医疗健康:知识图谱在医疗领域可用于药物研发、疾病诊断等,通过关联分析提高医疗质量

1.4、演示效果

在这里插入图片描述

二、图数据库

图数据库(Graph Database)是一种用于存储和管理图形结构数据的数据库。与传统的基于表格的数据库不同,图数据库专门为处理复杂的关系和网状结构的数据而设计。在图数据库中,数据结构的核心是节点(Node)、关系(Relationship)和属性(Property)

2.1、Neo4j

Neo4j是目前最常使用的图数据库管理系统。它是一个高性能的NoSQL数据库,具有以下特点:

原生图存储:Neo4j使用原生图存储,这意味着它直接在磁盘上存储节点和关系,而不是将图数据转换为其他模型。
Cypher查询语言:Neo4j使用Cypher作为查询语言,这是一种声明式查询语言,专门为图数据库设计,易于学习和使用。
高度可扩展:Neo4j支持大规模的数据集,并且可以通过集群部署来提高性能和可用性。
丰富的生态系统:Neo4j有一个活跃的社区和丰富的生态系统,提供了大量的工具和库来支持图数据库的开发和应用。
由于其强大的功能和易用性,Neo4j在众多行业和领域得到了广泛的应用,成为图数据库领域的佼佼者。

2.2、neo4j使用

输入以下代码启动neo4j

neo4j console

在这里插入图片描述

2.3、创建节点

create (郭靖:人物 {name:‘郭靖’,identity:‘武林高手’})
在这里插入图片描述
create表示新建
小括号内是节点信息,节点的标签label是人物,郭靖是其别名
花括号内是该节点的属性,共有name、identity两个属性

2.4、创建关系

match (黄蓉:`人物`{name:'黄蓉'}),(郭靖:`人物`{name:'郭靖'}) create (黄蓉) -[r:husband{name:'丈夫'}]->(郭靖)

match是匹配
(黄蓉:人物{name:‘黄蓉’})是第一个节点,(郭靖:人物{name:‘郭靖’})是第二个节点
husband是关系的标签,花括号内是该关系的属性,有name属性

2.5、删除所有节点和关系

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

在这里插入图片描述

2.6、效果展示

在这里插入图片描述

三、知识问答项目构建

3.1、前端构建

在这里插入图片描述

3.2、大模型进行问题分类和命名实体识别

from zhipuai import ZhipuAI
import json
client = ZhipuAI(api_key="your_api_key")
def wenda(question):messages = [{"role":"system","content":"""我会给你一个句子,请你帮我分类成0-6,0表示询问某人的信息,1表示询问某人毕业于那所学校,2表示询问某人创作的作品,3表示询问某人的出生日期,4表示询问某人与某人的关系,5表示询问某人的配偶是谁,6表示询问作品是谁创作的。请按照我给你的提供的json模板,当问题类型属于0,1,2,3,5时,nr字段填入名字,不要work字段.当问题类型为6时,work字段填入作品名称,不要nr字段。{"类型":0-6,"nr":名字,"work":作品名称}当类型为4时,使用以下模板:{"类型":4,"nr":['名字1','名字2'],}只需要返回一个json对象,不要重复问题"""},{"role": "user","content": f"{question}"}]response = client.chat.completions.create(model="glm-4-flash",messages=messages,)return json.loads(response.choices[0].message.content)

3.3、python操作neo4j数据库

安装项目相应的依赖包

pip install -r requirements.txt

连接数据库

from py2neo import Graph# 替换下面的 uri, user 和 password 为你的 Neo4j 数据库的连接信息
uri = "bolt://localhost:7687"  # Neo4j Bolt 连接地址
user = "neo4j"  # Neo4j 用户名
password = "your_password"  # Neo4j 密码graph = Graph(uri, auth=(user, password))

增加数据

# 创建节点
tx = graph.begin()
a = Node("Person", name="Alice")
b = Node("Person", name="Bob")
tx.create(a)
tx.create(b)
tx.commit()# 创建关系
ab = Relationship(a, "KNOWS", b)
tx = graph.begin()
tx.create(ab)
tx.commit()

查找

alice = graph.nodes.match("Person", name="Alice").first()
print(alice)
relationship = graph.relationships.match(nodes=[alice, b], r_type="KNOWS").first()
print(relationship)

3.4、后端构建

本项目采用Flask框架实现,使用了例如render_template进行页面渲染,return返回前端所需要的信息等。

四、附件项目使用

0.启动neo4j数据库

neo4j console

1.向neo4j数据库添加数据

python ./handler/handler_person_data.py

2.添加自己的api_key

Description

3.启动项目

python app.py

本文所涉及所有资源均在传知代码平台可获取

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

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

相关文章

微积分复习笔记 Calculus Volume 1 - 4.8 L’Hôpital’s Rule

4.8 L’Hpital’s Rule - Calculus Volume 1 | OpenStax

AI辅助论文写作的利弊

人工智能的时代,AI从自动驾驶到智能家居,慢慢的都成为了我们生活中的一部分。可当AI被放到学术研究领域,特别是撰写论文这一问题上时,却出现了大量的争议,认为AI撰写论文会削弱该有的批判性思维能力。那不用AI撰写论文…

AOP详解

一.什么是 AOP? AOP 的目的是将横切关注点(如日志记录、事务管理、权限控制、接口限流、接口幂等等)从核心业务逻辑中分离出来,通过动态代理、字节码操作等技术,实现代码的复用和解耦,提高代码的可维护性和…

红队知识学习入门(4)Windows病毒编写

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章笔记的只是方便各位师傅学习知识,以下网站涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 1、端口号及对应漏洞 ftp:21 tenlnet:23 web:80 80-89:可能是web 443:ssl心脏滴血…

知识竞赛答题系统,线上答题小程序链接怎么做?

随着智能手机的普及,越来越多的单位开始在线上开展知识竞赛。这种形式的知识竞赛不仅易于操作,而且参与度更高。那么线上知识竞赛答题系统怎么做呢?自己可以做吗?答案是可以的!借助微信答题系统制作平台风传吧&#xf…

AndroidStudio通过Bundle进行数据传递

作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境:AndroidStudio 目录 1.新建活动 2.修改页面布局 代码: 效果: 3.新建类ResultActivity并继承AppCompatActivity 4.新建布局文件activity_result.xml 代…

【网络-交换机】生成树协议、环路检测

路由优先级 路由优先级决定了在多种可达的路由类型中,哪种路由将被用来转发数据包。路由优先级值越低,对应路由的优先级越高,优先级值255表示对应的路由不可达。一般情况下,静态路由的优先级为1,OSPF路由优先级为110&a…

华为eNSP:mux-vlan

一、什么是mux-vlan? Mux-vlan 是一种多路复用的虚拟局域网(Virtual Local Area Network)技术。它将多个不同的VLAN流量转发到同一个物理端口,从而实现VLAN间的互通。 在传统的以太网环境中,每个VLAN通常都有一个独立…

又发现了Mac妙控鼠标的新使用方法

我一直是不爱用妙控鼠标的,因为用起来怪怪的,但是今天发现BettreAndBetter支持妙控鼠标的修改,于是就找出了闲置了许久的妙控鼠标试了一下 优化后的妙控鼠标使用起来就没有任何不适应的地方了,三指按下模拟中键,而且还…

Cursor编程工具

最近爆火的Cursor是一款基于 VS Code 二次开发的 AI 编辑器。相比传统编辑器,它将 AI 技术深度融合到各个功能点,带来了前所未有的用户体验。 下载链接:https://www.cursor.com/ 第一步:下载安装 下载完成后,双击启动…

Me-LLaMA——用于医疗领域的新型开源大规模语言模型

摘要 大规模语言模型的出现是提高病人护理质量和临床操作效率的一个重大突破。大规模语言模型拥有数百亿个参数,通过海量文本数据训练而成,能够生成类似人类的反应并执行复杂的任务。这在改进临床文档、提高诊断准确性和管理病人护理方面显示出巨大的潜…

鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)

在鸿蒙ArkTS中,布局容器组件有很多,常见的有:   ⑴ Column:(垂直布局容器):用于将子组件垂直排列。   ⑵ Row:(水平布局容器):用于将子组件水…

【点击劫持漏洞(附测试代码)】

漏洞描述 点击劫持(Clickjacking)是一种网络攻击技术,攻击者通过将一个恶意的页面或按钮隐藏在合法网站的页面下,诱使用户在不知情的情况下点击隐藏的内容,从而触发攻击者设计的操作。这种攻击通常会导致用户无意中执…

大数据新视界 -- 大数据大厂之经典案例解析:电商企业如何靠 Impala性能优化逆袭(上)(9/30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

语音 AI 迎来爆发期,也仍然隐藏着被低估的机会丨RTE2024 音频技术和 Voice AI 专场

在人工智能快速发展的今天,语音交互技术正经历一场革命性的变革。从语音识别到语音合成,再到端到端的语音对话系统,这一领域的创新正以前所未有的速度推进。这些进步不仅提升了技术指标,更为实时翻译、虚拟数字人、智能客服等实时…

vue3 + ts + element-plus 二次封装 el-table

一、实现效果: (1)数据为空时: (2)有数据时:存在数据合并;可自定义表头和列的内容 (3)新增行: (4)删除行: &a…

6 张图带你深入了解 kube-scheduler

本文目录: kube-scheduler 用途Scheduler Pod 调度流程源码调用链路Scheduler Framework如何扩展 kube-scheduler 用途 顾名思义:负责将 Pod 调度到 Node 上。 Pod 创建流程: 说明: 所有的组件只与 Apiserver 做交互&#xff0…

数据结构(8.7_1)——外部排序

知识总览 外存、内存之间的数据交换 外部排序原理 构造初始“归并段” 第一趟归并 第二趟归并 输出缓冲区1空了用归并段1的下一块元素补上 ..... 顺序的两个归并段方法一样..... 第三趟归并 时间开销分析 对外部排序进行优化 由于文件总块数无法改变,所以…

“方块兽神仙猿点石成金”游戏搭建开发

“方块兽神仙猿点石成金”是一款结合了策略和运气的休闲游戏。玩家需在规定时间内向不同的山头投入矿石,等待神仙猿降临并随机选择一座山进行“点石成金”。根据神仙猿的选择,玩家将获得不同的奖励。 游戏核心机制 矿石投入:玩家在游戏开始…

【压力测试】如何确定系统最大并发用户数?

一、明确测试目的与了解需求 明确测试目的:首先需要明确测试的目的,即为什么要确定系统的最大并发用户数。这通常与业务需求、系统预期的最大用户负载以及系统的稳定性要求相关。 了解业务需求:深入了解系统的业务特性,包括用户行…