草庐IT

知识图谱的构建及可视化

只需倾心 2023-04-03 原文

知识图谱

知识图谱Knowledge Graph/Vault,又称科学知识图谱,用各种不同的图形等可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。采用图结构来描述知识,建模事物及事物间关系。提供了一种组织、管理和认知理解海量信息的能力。

一、图谱的本质

其本质是一种大规模语义网络,既包含了丰富的语义信息,又天然具有图的各种特征,其中,事物或实体属性值表示为“节点”,事物之间的关系或属性表示为“边”。节点可以是实体,如一个人、一部电影等,或是抽象的概念,如人工智能、知识图谱等。边可以是实体的属性,如姓名、电影名,或是实体之间的关系,如朋友、配偶。
知识图谱定义为G={E ,R ,F } 其中,E,R 和 F 分别表示实体、关系、事实的集合。
事实被定义为一个三元组 ( h,r,t )∈F ,其中,h 和 t 分别代表头实体和尾实体,r 代表头尾实体间的关系.
下图是名著《水浒传》的一个知识图谱片段。节点表示实体,边表示关系。
三元组(宋江, 结拜, 武松)表达了宋江与武松是结拜兄弟的事实。
图1 知识图谱片段

二、图谱的构建

知识图谱的构建技术分自顶向下和自底向上两种。
自顶向下构建:借助百科类网站等结构化数据源,从高质量数据中提取本体和模式信息,加入到知识库里。
自底向上构建:借助一定的技术手段,从公开采集的数据中提取出资源模式,选择其中置信度较高的信息,加入到知识库中。

2.1图谱的原始数据类型

原始数据类型一般来说分三类:
结构化数据(Structed Data),如:关系数据库、链接数据
半结构化数据(Semi-Structured Data),如:XML、JSON、百科
非结构化数据(Unstructured Data),如:图片、音频、视频

2.2图谱的主要研究内容

知识图谱的主要研究内容包括知识抽取知识推理知识表示知识融合 4 部分。目前被广泛应用于多个行业领域。

2.2.1知识抽取

知识抽取是从不同来源、结构的数据中提取知识,形成结构化数据存入知识图谱。对于结构化和半结构化的数据,可以直接利用映射、转换等操作。但对于非结构化数据而言,知识抽取较为困难。一般知识抽取任务包括命名实体识别、关系抽取(实体属性抽取、实体关系抽取)等。早期是基于规则、词典和人工标注等方法进行命名实体识别,随着人工智能的发展,如隐马尔可夫算法、条件随机场、卷积神经网络等这一类的机器学习、深度学习算法成为主流方法。关系抽取主要有递归神经网络、长短期记忆模型、远程监督等方法。

2.2.2知识推理

知识推理是从已有的知识中推理实体间可能存 在的关系或属性值.知识图谱通常是不完整
的。例如,实体间路径缺失、实体属性值缺失 等。因此,知识推理常用于知识图谱补全(knowledge graph completion),也可用于知识图 谱去噪(knowledge graph cleaning)等任务。

2.2.3知识表示

知识表示是对现实世界的一种抽象表达。知识表示方式主要分为符号表示和数值表示,符
号表示 , 如 , 网 络 本 体 语 言 (ontology wed language, OWL) 、 RDF(resource description framework)等,符号表示方便易于理解,但基本符号性质使 KG 难以操作。因此,提出了知识 图谱嵌入(knowledge graph embedding, KGE)或知识表示学(knowledge representation learning, KRL)方法,将知识图谱的实体和关系嵌入到连续向量空间中,从而实现对其语义信息和固有结构的表示。

2.2.4知识融合

知识融合是将从不同来源得到的同一实体或概念的描述信息融合起来。描述信息可以是同
种类型,也可以是不同类型。例如,图片、文字、音频、视频等。


图2 图谱相关研究算法

三、图谱的存储与可视化

知识图谱主要有两种储存方式:
1.可以通过 RDF(资源描述框架)的规范存储格式来进行存储,比较常用的有 Jena等。

<RDF>
    <Description about="https://www.123.org/RDF/">
        <author>Mia</author>
        <homepage> http://www.date.tech </homepage>
    </Description>
</RDF>

2.使用图数据库来进行存储,目前主流的图形数据库有OrientDB, JanusGraph, Neo4j, Trinity等。其中Neo4j发展最迅猛,行业认可度最高。Neo4j是一款稳健的、可伸缩的高性能图数据库,它支持完整的ACID特性,即原子性(Atomicity)、一致性(Consistency),隔离性(Isolation)、持久性(Durability),最适合完整的企业级项目部署。

四、Neo4j的介绍与使用

Neo4j可以分为四层:查询层、编译层、执行层和数据层。
查询层 :Neo4j自身提供查询语言Cypher,但需专业人员操作。支持各种主流的编程语言对其操作,如Java python等。用户可以编写API接口来实现输入自然语言查询,也可以调用复杂查询接口进行查询。
编译层 :将查询层接收到的自然语言转化为机器语言并传递给下一层执行,利用优化器可以对查询语句进行优化,提高查询效率。
执行层 :执行层中的事务管理是对数据的增删查改操作进行管理,Neo中的数据是以节点和边构成的图谱网络,对数据的管理就变成了对节点或边的操作,如增加一条数据只需在图谱中添加一个节点(Node)和一条边((Edge),具有高度可扩展性和高可用性。另外,Neo4j的Import数据导入方式能够以每秒数十万节点的高速率数据批量导入,

4.1 Neo4j的安装详见参考资料2

4.2 Neo4j的批量导入

批量导入工具 neo4j-import,位于neo4j的bin目录下。

常用参数

–into:数据库名称
–bad-tolerance:能容忍的错误数据条数(即超过指定条数程序直接挂掉),默认1000
–multiline-fields:是否允许多行插入(即有些换行的数据也可读取)
–nodes:插入节点
–relationships:插入关系
更多参数可在cmd输入 neo4j-import 查看
数据准备:在excel中生成三个csv数据文件,并存放到neo4j安装目录的import文件夹下
启动 neo4j,浏览器打开http://localhost:7474/,在图中此处输入Cypher命令

# 1.导入电影表
LOAD CSV FROM 'file:///movies.csv' AS line CREATE (:Movie { movieId: line[0], title: line[1], year: toInteger(line[2]), tag:line[3] });
 
# 2.导入演员表
LOAD CSV FROM 'file:///actors.csv' AS line CREATE (:Actor { personId: line[0], name: line[1], type:line[2] });
 
# 3.导入关联表
LOAD CSV FROM 'file:///roles.csv' AS line
MATCH (from:Movie{movieId:line[2]}),(to:Actor{personId:line[0]})
MERGE (from)-[r:ACTED_IN{role:line[1]}]-> (to);


注:neo4j-import是为初次导入数据准备的,数据库目录必须是不存在的。
这里体现了neo4j-import工具的一个缺点,所有数据只能导入一次,如果之后想补充数据,只能删除库再导入。

参考资料

1.nlp-知识图谱简介
2.知识图谱构建-Neo4j的安装与环境配置
3.Neo4j:入门基础(二)之导入CSV文件
4. neo4j 使用 load csv 命令导入csv数据,并生成节点、关系

有关知识图谱的构建及可视化的更多相关文章

  1. ruby - Ruby 中的波形可视化 - 2

    我即将开始一个将录制和编辑音频文件的项目,我正在寻找一个好的库(最好是Ruby,但会考虑Java或.NET以外的任何库)以进行实时可视化波形。有人知道我应该从哪里开始搜索吗? 最佳答案 要流入浏览器的数据量很大。Flash或Flex图表可能是唯一能提高内存效率的解决方案。Javascript图表往往会因大型数据集而崩溃。 关于ruby-Ruby中的波形可视化,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

  2. ruby - 在 Ruby 中构建长字符串的简洁方法 - 2

    在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo

  3. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

  4. ruby-on-rails - 如何构建复杂的 Rails 系统 - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我们有以下(以及更多)系统,我们将数据从一个应用推送/拉取到另一个:托管CRM(InsideSales.com)Asterisk电话系统(内部)横幅广告系统(openx,我们托管)潜在客户生成系统(自行开发)电子商务商店(spree,我们托管)工作板(本土)一些工作网站抓取+入站工作提要电子邮件传送系统(如Mailchimp,自主开发)事件管理系统(如eventbrite,自主开发)仪表板系统(大量图表和

  5. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  6. ruby-on-rails -/usr/local/lib/libz.1.dylib,文件是为 i386 构建的,它不是被链接的体系结构 (x86_64) - 2

    在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto

  7. ruby - Ruby 语言可以用来构建操作系统吗? - 2

    Ruby语言是否可以用于创建全新的移动操作系统或桌面操作系统,即是否可以用于系统编程? 最佳答案 嗯,现在有一些操作系统使用比C更高级的语言。基本上,ruby解释器本身需要用一些低级的东西来编写,并且需要一些引导加载代码将功能齐全的ruby​​解释器作为独立内核加载到内存中。一旦ruby​​解释器被引导并以内核模式(或innerrings之一)运行,就没有什么可以阻止您在其上构建整个操作系统。不幸的是,它可能会很慢。每个操作系统功能的垃圾收集可能会相当引人注目。ruby解释器将负责任务调度和网络堆栈等基本事情,使用垃圾收集框架会大大

  8. ruby-on-rails - 无法构建 gem native 扩展 (mkmf (LoadError)) - Ubuntu 12.04 - 2

    这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby​​和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi

  9. ruby-on-rails - 如何使用 ruby​​ on rails 构建 openid 提供程序 - 2

    我尝试了一些关于ruby​​onrails中openid利用率的搜索。然而,尽管出现了一组选项,例如omniauth、authlogic等,但这些gem通常用于构建接受openid身份验证的站点。换句话说,它们用于openid消费者设置。我也想构建自己的openid服务器。AssuggestedhereinOpenIdsite我发现了像Masquerade和local-openid这样的东西,不幸的是,它们不是非常活跃的项目,下载量很少。自建openidprovider服务器有没有其他设施可以推荐?非常感谢!!干杯,叶 最佳答案 虽

  10. ruby - 使用 Ruby 构建聊天应用程序 - 2

    我正在尝试构建一个纯粹使用Ruby的聊天应用程序。有一个similarquestion较早发布,但我有不同的相关查询。我看过thisexample(与之前发布类似问题的人所提到的相同)。示例中的代码似乎对我不起作用。在终端上运行ruby​​脚本,并连接到url:http://localhost:1234在我的浏览器中,我无限期地遇到“正在从本地主机传输数据...”消息。此处的1234是所提供示例中使用的端口号。我无法弄清楚我运行失败的原因是什么。可能是我需要在执行脚本时在命令行中指定一些东西,或者我应该通过其他地方(可能是浏览器)开始聊天(输入输出)。我无法弄清楚到底该做什么。你能帮我

随机推荐