知识图谱实战应用5-基于知识图谱的创建语义搜索功能

news2024/11/16 7:43:12

大家好,我是微学AI,今天给大家讲一下知识图谱实战应用5-基于知识图谱的创建语义搜索功能。基于知识图谱的语义搜索功能是一种能够理解用户意图、并根据语义关系在知识图谱中进行查询的搜索方式。相比于传统的文本搜索,它可以更准确地回答用户的问题,提高搜索效率和搜索质量。

一、语义搜索步骤

自然语言理解:将用户输入的自然语言转化为机器可理解的形式,并提取其中的实体、属性、关系等关键信息。

实体识别:在知识图谱中识别与用户输入相关的实体,例如人物、地点、事件等。

关系抽取:根据用户输入的查询条件,从知识图谱中抽取符合条件的实体之间的关系,如“A是B的子类”、“A与B有关联”等。

结果生成:根据查询结果,生成符合用户需求的结果列表,并按照一定的排序方式进行排列,以便用户快速找到所需信息。

 二、语义搜索代码实践

现在基于neo4j构建知识图谱,从实体的创建和关系的创建开始,构建企业中的数据关系。

以企业数据为样例,创建一个简单的知识图谱数据结构。后续大家可以根据实际的应用场景自行创建。

我这里将创建一个简单的企业与其相关的员工、部门和产品的关系。
企业 - 有 -> 部门
企业 - 有 -> 员工
部门 - 有 -> 员工
部门 - 生产 -> 产品

代码实战:

from py2neo import Graph, Node, Relationship

# 1. 连接到 Neo4j 数据库
graph = Graph("http://localhost:7474/browser/", auth=("neo4j", "neo4j"))

# 2. 创建企业节点
company_node = Node("Company", name="微学AI有限公司")
graph.create(company_node)

# 3. 创建部门节点及其与企业的关系
department_names = ["研发部", "市场部", "人事部"]
department_nodes = []
for name in department_names:
    department_node = Node("Department", name=name)
    department_nodes.append(department_node)
    company_department_relationship = Relationship(company_node, "HAS", department_node)
    graph.create(company_department_relationship)

# 4. 创建员工节点及其与企业和部门的关系
employee_data = [
    {"name": "张三", "age": 30, "department_index": 0},
    {"name": "李四", "age": 28, "department_index": 1},
    {"name": "王五", "age": 35, "department_index": 2},
]
employee_nodes = []
for data in employee_data:
    employee_node = Node("Employee", name=data["name"], age=data["age"])
    employee_nodes.append(employee_node)
    department = department_nodes[data["department_index"]]
    company_employee_relationship = Relationship(company_node, "HAS", employee_node)
    department_employee_relationship = Relationship(department, "HAS", employee_node)
    graph.create(company_employee_relationship)
    graph.create(department_employee_relationship)

# 5. 创建产品节点及其与部门的关系
product_data = [
    {"name": "产品1", "price": 100, "department_index": 0},
    {"name": "产品2", "price": 200, "department_index": 0},
    {"name": "产品3", "price": 120, "department_index": 1},
]
product_nodes = []
for data in product_data:
    product_node = Node("Product", name=data["name"], price=data["price"])
    product_nodes.append(product_node)
    department = department_nodes[data["department_index"]]
    department_product_relationship = Relationship(department, "PRODUCES", product_node)
    graph.create(department_product_relationship)


# 语义搜索函数
def semantic_search(keyword):
    result = graph.run(f"MATCH (n) WHERE n.name CONTAINS '{keyword}' RETURN n").data()
    return result


if __name__ == "__main__":
    keyword = input("请输入搜索关键词:")
    search_result = semantic_search(keyword)
    if search_result:
        print(f"搜索到以下包含'{keyword}'的实体:")
        for result in search_result:
            print(dict(result["n"]))
    else:
        print(f"未找到包含’{keyword}'的实体")

我们进行数据添加到图数据库中,就可以进行查询了,图数据库创建图像如下:

 根据以上关系进行查询,这个是初步的项目,更深的应用在后续发布,谢谢支持。

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

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

相关文章

Ubuntu 23.04 正式发布

Ubuntu 23.04 “Lunar Lobster” 是 Ubuntu 操作系统的最新短期支持版本,该版本将获得 9 个月的支持,直到 2024 年 1 月。如果你需要长期支持,建议使用 Ubuntu 22.04 LTS 代替。 Linux 内核 Ubuntu 23.04 采用了新的 Linux 6.2 内核。 值得注…

PySide6/PyQT多线程的使用

前言 上一篇文章介绍了在PySide6中使用多线程去解决PySide6/PyQT的界面卡死问题,这次来具体介绍下多线程在使用上的一些细节。 本文尝试对以下两个问题进行解决: 对 PySide6/PyQT 多线程的使用不熟悉;在 PySide6/PyQT 的应用程序里有耗时任…

prompt的演变

随着功能的增加,提示工程的复杂性将不可避免地增加。在这里,我解释了如何将复杂性引入到提示工程的过程中。 静态prompt 如今,试验prompt和提示工程已司空见惯。通过创建和运行提示的过程,用户可以体验 LLM 的生成能力。 文本生…

STM32 学习笔记_4 GPIO:LED,蜂鸣器,按键,传感器的使用

GPIO 通用 IO General Purpose Input Output. 可配置为8种输入输出模式。通常0~3.3V,部分引脚允许 5V。 上面的虚线方框是输入模块,下面的是输出模块。 推挽输出是1输出高电平,0输出低电平。开漏输出正好相反,因此没有高电平驱…

10分钟了解人工智能(最通俗的语言)

最通俗的语言:15分钟了解人工智能;唯一优点,受众完全听懂 无人驾驶、智能家居、远程医疗……如今,人工智能(AI)技术已被广泛应用于金融、交通、医疗、安防、教育等领域,成为经济增长新动能 一 什么是人工智能 人工智能…

动态规划之-不同路径 II-滚动数组_20230421

DP动态规划之-滚动数组 前言 在学习 不同路径II 的动态规划过程中,从介绍资料中了解到 滚动数组可以进一步降低动态规划解空间的复杂度,更高效利用计算机的储存空间。动态规划中的滚动数组究竟能发挥哪些作用,在常规的动态规划中&#xff0…

REDIS02_RDB概述及作用、自动触发、手动触发、优势劣势、触发场景、配置项详解

文章目录 ①. RDB概述及作用②. RDB - 自动触发③. 手动触发 - save、bgsave④. RDB - 优势体现⑤. RDB - 劣势体现⑥. 哪些情况会触发RDB快照⑦. RDB优化配置项详解 ①. RDB概述及作用 ①. RDB概述:在指定的时间间隔,执行数据集的时间点快照 实现类似照片记录效果的方式,就是…

MapReduce高级篇——全局计数器

MapReduce Counter 计数器 概念 在执行MapReduce程序的时候,控制台输出日志中通常下面片段,可以发现输出信息中的核心词是counter,中文叫做计数器 在执行MapReduce城西过程中,许多时候,用户希望了解程序的运行情况,H…

白话文讲计算机视觉-第十讲-灰度阈值分割

灰度阈值是啥意思呢?我们慢慢说。 1.灰度图 我们现在有一张彩色图,我们给它用黑白的方式变现,就形成灰度图,如图所示。 图1 那究竟怎么转换的呢?很简单,我们根据如下公式,把BGR三个通道换成一个…

【算法题解】26. 求串联子串的位置

这是一道 困难 题 来自: https://leetcode.cn/problems/substring-with-concatenation-of-all-words/ 题目 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的…

REXROTH液压方向阀安装须知

安装规程 阀安装到系统之前,应该对照订货型号比较其型号说明。 确认阀的连接表面和底板无水分,没有油。 - 清洁: ‧ 安装元件时,确认工业阀和周围干净 ‧ 油箱须密闭,以防止外部污染 ‧ 安装之前&…

【youcans的深度学习 D02】PyTorch例程:创建 LeNet 模型进行图像分类

欢迎关注『youcans的深度学习』系列 【youcans的深度学习 D02】PyTorch例程:创建 LeNet 模型进行图像分类 1. PyTorch 深度学习建模的基本步骤2. 加载 CIFAR-10 数据集3. 定义 LeNet-5 模型类3.1 LeNet 网络3.2 LeNet-5 网络3.3 定义 LeNet-5 网络模型类3.4 构建网络…

AI大模型加速RPAxAI时代到来,谁会是RPA领域的杀手级应用?

GPT等AI大模型震撼来袭,基于RPA的超级自动化仍是最佳落地载体 对话弘玑CPO贾岿,深入了解国产RPA厂商对AI大模型的探索与实践 文/王吉伟 关于RPA已死的说法,在中国RPA元年(2019年)投资机构疯狂抢项目之时就已经有了。…

算法训练Day39:62.不同路径 63. 不同路径 II 动态规划

文章目录 不同路径题解(动态规划)数论方法 [不同路径 II](https://leetcode.cn/problems/unique-paths-ii/description/)题解 不同路径 CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsMedium (67.70%)17460--0 Tags Companies 一个机器人位于一个 …

Linux基础—网络设置

Linux基础—网络设置 一、查看网络配置1.查看网络接口信息 ifconfig2.查看主机名称 hostname3.查看路由表条目 route4.查看网络连接情况 netstat5.获取socket统计信息 ss 二、测试网络连接1.测试网络连接 ping2.跟踪数据包 traceroute3.域名解析 nslookup 三、使用网络配置命令…

拷贝构造与深浅拷贝

文章目录 一、拷贝构造函数二、拷贝初始化三、深浅拷贝 一、拷贝构造函数 如果一个构造函数的第一个参数是自身类型的引用,而且任何额外参数都有默认值,则此构造函数是拷贝构造函数。 class person { public: person(); //默认构造函数 pe…

54家备案法人信用评级机构名单

2023年4月20日,中国人民银行官网公示备案法人信用评级机构名单,共有54家机构获得了信用评级备案,并进行如下提示: 1.2019年11月26日,人民银行、发展改革委、财政部、证监会联合发布《信用评级业管理暂行办法》&#xf…

C语言之 顺序表(sequence chart)

线性表 线性表是n个具有相同特性的数据元素的有限序列。 常见的有:顺序表、链表、栈、队列、字符串.... 线性表在逻辑上是线性结构的,即一条连续的直线 但在物理结构上不一定是连续的,其在物理存储时,通常以数组和链式结构的形式…

观察者模式解读

目录 问题引进 天气预报项目需求 天气预报设计方案 1-普通方案 传统方式代码实现 观察者模式原理 观察者模式解决天气预报需求 代码实现 观察者模式的好处 问题引进 天气预报项目需求 1) 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式…

idm下载器是免费的吗?有哪些功能

对于PC用户来说,拥有一款好用和快速的下载工具,对我们来说至关重要,可以极大提高我们的工作效率和PC用户体验。IDM可以实现高速下载,其核心原理就是多线程下载,理论上可以达到带宽的峰值速度,深受用户的喜爱…