为什么需要知识图谱,如何构建它?

从关系数据库迁移到图形数据库的指南

斯坦·帕格斯利

迈向数据科学

跟随

发表于

迈向数据科学

·
7 分钟阅读
·
4天前

154

4

一、说明

        TLDR:知识图谱在图数据库中组织事件、人员、资源和文档,以进行高级分析。本文将解释知识图谱的用途,并向您展示如何将关系数据模型转换为图模型、将数据加载到图数据库中以及编写一些示例图查询的基础知识。

二、为什么选择知识图谱?

        关系数据库非常适合创建列表,但对于管理不同实体的网络来说却很糟糕。您是否曾经尝试过使用关系数据库执行任何这些任务?

  • 分析患者与数十人、地点和程序互动时的医疗保健护理事件
  • 通过涉及的供应商、客户和交易类型网络查找金融欺诈模式
  • 优化供应链的依赖关系和相互关联的元素

        这些都是事件、人员和资源网络的例子,这些事件、人员和资源给使用关系数据库的 SQL 分析师带来了巨大的麻烦。随着网络规模的增加,关系数据库的速度呈指数级增长,而图形数据库具有相对线性的关系。如果您正在管理活动和事物的网络或 Web,图形数据库是正确的选择。在未来,我们应该期待看到企业数据组采用关系数据库的组合,对一个业务功能进行孤立的分析,以及知识图谱的组合,用于跨功能的复杂网络化流程。

        基于图形数据库技术的知识图谱旨在处理各种流程和实体网络。在知识图谱中,您具有表示人员、事件、地点、资源、文档等的节点。并且您具有表示节点之间链接的关系(边)。这些关系以名称和方向物理存储在数据库中。并非每个图形数据库都是知识图形。要被视为知识图谱,设计必须将业务语义模型嵌入到跨越多个业务功能的各种节点集中,该模型反映在节点和关系的清晰业务名称中。实质上,您是在从交互的业务的所有部分创建一个无缝的网络,并使用业务语义将数据与它们所代表的流程紧密联系在一起。这可以作为未来生成LLM模型使用的基础

        为了说明知识图谱中的各种数据集,让我们看一个简单的供应链物流示例。业务流程可以按如下方式建模:

供应链图数据库模型。图片由作者提供。

        此模型可以扩展到包括业务流程的任何相关部分:客户退货、发票、原材料、制造流程、员工,甚至客户评论。没有预定义的架构,因此模型可以向任何方向或深度扩展。

三、从关系模型到维度模型再到图模型

        现在,让我们了解一下使用电子商务供应商的方案将典型的关系数据库模型转换为图形模型的过程。假设该供应商正在运行一系列数字营销活动,在其网站上接收订单,并将产品运送给客户。关系模型可能如下所示:

电子商务关系数据库模型。图片由作者提供。

        如果我们将其转换为用于数据仓库的维度模型,该模型可能如下所示:

电子商务维度模型(数据仓库)。图片由作者提供。

        请注意,事实数据表侧重于事件,维度表表示合并到一个表中的业务实体的所有属性。这种以事件为中心的设计提供了更快的查询时间,但会产生其他问题。每个事件都是一个不同的事实数据表,很难看到从一个事件到相关事件之间的联系。当维度实体(如产品)与另一个维度中的实体(如运营商)共享的所有事件(在多个事实数据表之间拆分时),没有简单的方法可以理解这些关系。维度模型一次关注一个事件,但模糊了不同事件之间的联系。

        图模型通过对过程进行建模,解决了显示实体之间相互关联的问题,如下所示:

电子商务图数据库模型。图片由作者提供。

        乍一看,该图模型与关系模型比维度模型更相似,但它可以用于与数据仓库相同的分析目的。请注意,每个关系都有名称并具有方向。可以在任何节点之间创建关系 - 事件与事件、人与人、文档与事件等。图形查询还允许您以 SQL 无法实现的方式遍历图形。

        例如,您可以收集与关键事件相关的任何节点并研究发生的模式。与非规范化维度表不同,层次结构被保留,每个级别都可以单独引用。最重要的是,图表在对业务中的任何事件或实体进行建模时更加灵活,无需遵循一组严格的模式约束。该图旨在匹配业务的语义模型。

四、提取、转换和加载 (ETL)

        现在,让我们看一个示例关系数据库表,并创建一些示例脚本来提取、转换数据并将其加载到图形数据库中。在本文中,我将使用Cypher语言,这是最流行的商业图形数据库Neo4j使用的语言。但这些概念将适用于图形查询语言(GQL)的其他变体。我们将使用以下示例产品表:

产品表。 

        使用此查询,我们可以提取过去 24 小时内更新的新产品:

SELECT product_id,product_name,cost_usd,product_status
FROM Product
WHERE last_updated_date > current_date -1;

        我们可以将这些结果拉取到名为“df”的 Python Pandas 数据帧中,打开图形数据库连接,然后使用此脚本将数据帧合并到图形中。

UNWIND $df as row
MERGE INTO (p:Product {product_id: row.product_id})
SET p.product_name = row.product_name,p.cost_usd = row.cost_usd,p.product_status= row.product_status,p.last_updated_date = datetime();

        第一行引用参数“df”,这是来自 Pandas 的数据帧。我们将合并到节点类型“产品”中,该节点类型由别名“P”引用。然后,“product_id”部分用于绑定到节点中的唯一标识符。之后,Merge 语句看起来类似于 SQL 中的合并。

        使用上面这样的合并语句创建每个节点后,我们创建关系。关系可以在同一脚本中创建,也可以使用如下所示的合并命令在后处理脚本中创建:

MATCH (p:Product), (o:Order)
WHERE p.product_id = o.order_id
MERGE (o)-[:CONTAINS]->(p);

        Match 语句类似于 Oracle 中的旧版联接用法,在 Match 之后声明了两种节点类型,然后在 Where 子句中声明了联接。

五、对图模型的查询

        假设我们已经构建了图形,现在想要查询它。我们可以使用这样的查询来查看从亚利桑那州吸引订单的广告组。

MATCH (ag:AdGroup)<-[:BELONGS_TO]-(a:Ad)-[:DRIVES]->(o:Order)<-[:PLACES]-(c:Customer)
WHERE c.state = 'AZ'
RETURN ag.group_name,COUNT(o) as order_count

        此查询将返回广告组名称和订单数量(按亚利桑那州过滤)。请注意,与SQL不同,Cypher中不需要Group By子句。从该查询中,我们将收到以下示例输出:

图形查询的示例结果。图片由作者提供。

        此示例可能看起来微不足道,因为您可以使用订单事实数据表在关系数据库或数据仓库中轻松创建类似的查询。但是,让我们考虑一个更复杂的查询。假设您想查看从广告系列启动到收到可归因投放所花费的时间。在数据仓库中,此查询将跨事实数据表(不是一个简单的任务)并占用大量资源。在关系数据库中,此查询将涉及一长串联接。在图形数据库中,查询如下所示:

MATCH (cp:Campaign) )<-[:BELONGS_TO]-(ag:AdGroup)<-[:BELONGS_TO]-(a:Ad)
MATCH (a)-[:DRIVES]->(o:Order)<-[:FULFILLS]-(d:Delivery)
RETURN cp.campaign_name,cp.start_date as campaign_launch_date,MAX(d.receive_date) as last_delivery_date

        我使用了一个示例查询路径,但用户可以采用多种路径来回答不同的业务问题。在查询中,请注意,从“营销活动”到“投放”的路径经过订单和投放之间的关系。另请注意,为了便于阅读,我将路径分为两部分,从第二行中的 Ad 别名开始。查询的输出如下所示:

        图形查询的示例结果。图片由作者提供。

六、结论

        我们已经查看了一些将电子商务业务流程从关系模型转换为图形模型的示例步骤,但我们无法在本文中涵盖所有设计原则。希望您已经看到图形数据库需要与关系数据库大致相同的技术技能水平,并且迁移不是一个巨大的障碍。

        最大的挑战是重新训练你的大脑,远离传统的关系建模技术,从语义或业务建模的角度思考。如果您看到图形技术的潜在应用,请尝试概念验证项目。使用知识图谱进行分析的可能性远远超出了二维表格所能做到的!斯坦·帕格斯利

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

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

相关文章

HTTP协议的发展过程

前言 HTTP协议是一种用于在网络上传输信息的应用层协议&#xff0c;它为万维网的运作提供了基础。 最早的版本是HTTP/0.9&#xff0c;它是HTTP协议的第一个版本&#xff0c;诞生于1991年&#xff0c;其设计初衷是为了在计算机之间传输简单的超文本文档&#xff0c;即HTML。 在…

在Java中对XML的简单应用

XML 数据传输格式1 XML 概述1.1 什么是 XML1.2 XML 与 HTML 的主要差异1.3 XML 不是对 HTML 的替代 2 XML 语法2.1 基本语法2.2 快速入门2.3 组成部分2.3.1 文档声明格式属性 2.3.2 指令&#xff08;了解&#xff09;&#xff1a;结合CSS2.3.3 元素2.3.4 属性**XML 元素 vs. 属…

【Linux】Linux中获取UUID的方法

1、从mmc块设备获取 在Linux下,获取MMC的CID(Card Identification,识别ID) cat /sys/block/mmcblk0/device/cidMMC CID组成 MID: [127:120] —— 8bit(1Byte)Manufacturer ID,由MMCA分配,比如Sandisk为0x02,Kingston为0x37,Samsung为0x15。OID: [119:104] —— 16b…

windows程序基础

一、windows程序基础 1. Windows程序的特点 1&#xff09;用户界面统一、友好 2&#xff09;支持多任务:允许用户同时运行多个应用程序(窗口) 3&#xff09;独立于设备的图形操作 使用图形设备接口( GDI, Graphics Device Interface )屏蔽了不同硬件设备的差异&#…

什么是视频的编码和解码

这段描述中&#xff0c;视频解码能力和视频编码能力指的是不同的处理过程。视频解码是将压缩过的视频数据解开并还原为可播放的视频流&#xff0c;而视频编码是将原始视频数据压缩成更小的尺寸&#xff0c;以减少存储空间和传输带宽。在这个上下文中&#xff0c;解码能力和编码…

LVGL学习笔记 30 - List(列表)

目录 1. 添加文本 2. 添加按钮 3. 事件 4. 修改样式 4.1 背景色 4.2 改变项的颜色 列表是一个垂直布局的矩形&#xff0c;可以向其中添加按钮和文本。 lv_obj_t* list1 lv_list_create(lv_scr_act());lv_obj_set_size(list1, 180, 220);lv_obj_center(list1); 部件包含&…

Android:换肤框架Android-Skin-Support

gihub地址&#xff1a;https://github.com/ximsfei/Android-skin-support 样例&#xff1a; 默认&#xff1a; 更换后&#xff1a; 一、引入依赖&#xff1a; // -- 换肤依赖implementation skin.support:skin-support:4.0.5// skin-supportimplementation skin.support:ski…

Rust语法:变量,函数,控制流,struct

文章目录 变量可变与不可变变量变量与常量变量的Shadowing标量类型整数 复合类型 函数控制流if elseloop & whilefor in structstruct的定义Tuple Structstruct的方法与函数 变量 可变与不可变变量 Rust中使用let来声明变量&#xff0c;但是let声明的是不可变变量&#x…

Golang自定义类型与类型别名

type myInt int32 与 type myInt int32&#xff0c;概念并不相同 自定义类型&#xff1a;type myInt int32 通过这种方式定义的类型是一个全新的类型&#xff0c;这个新类型与int32有相同的底层结构&#xff0c;但是却与int32类型不兼容。 type myInt int32var a int32 5 var…

双色球彩票系统---(java实现)

双色球彩票系统&#xff1a;需求&#xff1a;投注号码由6个红色号码和1个蓝色球号码组成。红色球号码从1-33中选择&#xff0c;蓝色球号码从1-16当中选择 * 红 蓝 * 一等奖 6 1 * 二等奖 6 0 * 三等奖 5 1 * 四等奖 5 0 * 4 1 * 五等奖 4 0 * …

Blazor简单教程(1.1):Razor基础语法

文章目录 前言基本文件配置引入Layout组件 语法介绍pagecodeRazor 语法[ 显式表达和隐式表达](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/razor?viewaspnetcore-7.0#explicit-razor-expressions) 绑定简单绑定双向绑定带参数的函数绑定 依赖注入 前言 Blazor…

synchronized使用

目录 问题描述 1 锁方法 2 锁代码块 3 锁某个类 4 静态方法上的synchronized 当我们处理多线程处理同步问题的时候就会用到synchronized这个关键字&#xff0c;下面介绍下synchronized的四种用法。 问题描述 介绍之前我们先来看下&#xff0c;在java 多线程中 如果没有线…

leetcode1. 两数之和

题目&#xff1a;leetcode1. 两数之和 描述&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中…

QT:UI控件(按设计师界面导航界面排序)

基础部分 创建新项目&#xff1a;QWidget&#xff0c;QMainWindow&#xff0c;QDialog QMainWindow继承自QWidget&#xff0c;多了菜单栏; QDialog继承自QWidget&#xff0c;多了对话框 QMainWindow 菜单栏和工具栏&#xff1a; Bar: 菜单栏&#xff1a;QMenuBar&#xff0…

A Survey for In-context Learning

A Survey for In-context Learning 摘要&#xff1a; 随着大语言模型(LLMs)能力的增长&#xff0c;上下文学习(ICL)已经成为一个NLP新的范式&#xff0c;因为LLMs仅基于几个训练样本让内容本身增强。现在已经成为一个新的趋势去探索ICL来评价和extrapolate LLMs的能力。在这篇…

微服务06-分布式事务解决方案Seata

1、Seata 概述 Seata事务管理中有三个重要的角色: TC (Transaction Coordinator) - **事务协调者:**维护全局和分支事务的状态,协调全局事务提交或回滚。 TM (Transaction Manager) - **事务管理器:**定义全局事务的范围、开始全局事务、提交或回滚全局事务。 RM (Resourc…

Java地图专题课 基本API BMapGLLib 地图找房案例 MongoDB

本课程基于百度地图技术&#xff0c;由基础入门开始到应用实战&#xff0c;适合零基础入门学习。将企业项目中地图相关常见应用场景的落地实战&#xff0c;包括有地图找房、轻骑小程序、金运物流等。同时讲了基于Netty实现高性能的web服务&#xff0c;来处理高并发的问题。还讲…

ttf-dejavu fontconfig字体

ttf-dejavu fontconfig是验证码&#xff0c;pdf&#xff0c;excel时需要用到的字体 编辑dockerfile&#xff0c;先切换国内镜像源&#xff0c;默认alpinelinux是国外源&#xff0c;下载包会很慢 vim Dockerfile FROM alpine:latest RUN sed -i s/dl-cdn.alpinelinux.org/mirr…

【创建型设计模式】C#设计模式之原型模式

原型模式是一种创建型设计模式&#xff0c;它通过复制现有对象来创建新对象&#xff0c;而无需通过实例化的方式。它允许我们使用已经存在的对象作为蓝本&#xff0c;从而创建新的对象&#xff0c;这样可以避免重复初始化相似的对象&#xff0c;提高了对象的创建效率。 现在给…

Sentinel

1、熔断降级限流 熔断 A服务调用B服务的某个功能&#xff0c;由于网络不稳定、B服务卡机等问题&#xff0c;导致功能时间超长。如果这样子的次数太多&#xff0c;我们就可以直接将B断路&#xff08;A不再请求B接口&#xff09;&#xff0c;凡是调用B服务的直接返回降级数据&a…