图数据库、知识图谱、装配模型

一、图数据库

1、图数据库简介

​ 图数据库(Graph Database)是基于图论实现的一种新型NoSQL数据库。它的数据存储结构和数据的查询方式都是以图论为基础的。图论中图的基本元素为节点和边,在图数据库中对应的就是节点和关系。

图数据库是基于图论为数据基础的数据管理系统。它的组成包含点、边。数据通过点和边的形式进行表示,把数据转化成点,数据间的关系转化成边。图的存储方式可以整合多源异构数据。

原生图数据库:使用图模型进行数据存储,可以针对图数据做优化,从而带来更好的性能,例如 Neo4j。

2、neo4j简介

​ Neo4j是Java开源图数据库。

官方网站:https://neo4j.com

官方文档:https://neo4j.com/docs/

Github: https://github.com/neo4j/neo4j

Example: https://github.com/neo4j-examples

neo4j: 开源图数据库(gitee,2024年2月同步,最新版本5.16.0)


Neo4j有多个版本:桌面版(Desktop)、社区服务版(Community)、企业版、云版本等。支持windows、linux安装部署。

各版本下载地址: Neo4j Deployment Center - Graph Database & Analytics
 

桌面版(Desktop):面向开发者,只能本机访问。

社区版(Community):GPLv3.0协议,不适合生产环境。

1、容量:社区版最多支持 320 亿个节点、320 亿个关系和 640 亿个属性,而企业版没有这个限制;

2、并发:社区版只能部署成单实例,不能做集群。而企业版可以部署成高可用集群或因果集群,从而可以解决高并发量的问题;

3、容灾:由于企业版支持集群,部分实例出故障不会影响整个系统正常运行;

4、热备:社区版只支持冷备份,即需要停止服务后才能进行备份,而企业版支持热备,第一次是全量备份,后续是增量备份;

5、性能:社区版最多用到 4 个内核,而企业能用到全部内核,且对性能做了精心的优化;

6、支持:企业版客户能得到 5X10 电话支持(Neo4j 美国电话、邮件,微云数聚电话、微信、邮件);

6、插件:还有企业版可以使用Bloom、ETL这些工具,社区版不支持

2024年2月最新版本
Desktop 1.5.9

Desktop 安装过程需要连网。

https://neo4j.com/artifact.php?name=neo4j-desktop-1.5.9-setup.exe
激活key
eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Ii4rQC4rIiwibWl4cGFuZWxJZCI6IiRkZXZpY2U6MThkOGJhYjViYTM5OWYtMDI5M2EyYTc2MmE0NDA4LWU1NzU2MjItMWZhNDAwLTE4ZDhiYWI1YmEzOTlmIiwibWl4cGFuZWxQcm9qZWN0SWQiOiI0YmZiMjQxNGFiOTczYzc0MWI2ZjA2N2JmMDZkNTU3NSIsIm9yZyI6Ii4qIiwicHViIjoibmVvNGouY29tIiwicmVnIjoiICIsInN1YiI6Im5lbzRqLWRlc2t0b3AiLCJleHAiOjE3MzkwNjg0MTQsInZlciI6IioiLCJpc3MiOiJuZW80ai5jb20iLCJuYmYiOjE3MDc0NDYwMTQsImlhdCI6MTcwNzQ0NjAxNCwianRpIjoiM05QT2Q3eG9SIn0.qBlQBZpBWjYeRfEdYD4igzPmHidfsHzdcuCsM0xw3wVBP698lbrebJUO2NoL7N40uDYBw4Jwm0uiV5Xeqe_kF4X-_DfsViGmsFJ_rcwz4aJsF0Iuw3aO3svXzDIrn7wwJxazCoJl8np_Rta-K7SjUxPqBmixNHAphrSYJC_sjfD2ADVxf-8-McR5X69FgkmbJCVE6KncVe2tydHhRVXU8DpTz_ptRkpJ1zgv8rXj-iuGj6Scxos2lrMrUQ39S_ps9EnGXwuYNWYhN47ZuXKZiNejwQWAQqrzvQHaYDvLh880Erda8TnDDQIWnjePOfDu5DZ0ab3R4jH1CDdj_T7FmQ

个人学习,建议使用桌面版(Desktop)。

2.1、安装插件

打开Plugins标签页,即可选择安装插件。

APOC插件

APOC(Awesome Procedures on Cypher)是Neo4j图数据库的一个插件,它提供了一组强大的过程和函数,扩展了Cypher查询语言的功能。 APOC通过增加超过450个过程来扩展了Cypher查询语言的功能。这些过程可以用于数据转换、导入/导出、字符串处理、时间处理、密码学等。使用APOC,您可以更轻松地进行复杂的数据操作和分析。

    APOC提供了更高级的图算法和数据科学功能。它包括社区发现、路径分析、相似性计算等算法。这些功能可以帮助您深入探索图数据并从中获得洞察力。

使用APOC插件需要先下载并安装它,然后在Neo4j的配置文件中启用它。一旦启用,你就可以在Cypher查询中使用APOC提供的各种过程和函数了。
    APOC由Neo4j的社区成员开发和维护,是一个开源项目,所以您可以根据自己的需求进行定制和扩展。

一、数据导入和导出:使用APOC插件可以轻松导入和导出不同格式的数据到Neo4j图数据库。您可以将数据从关系型数据库、CSV文件、JSON等转换为图形数据,并相反地,将图形数据导出到其他格式。


二、图形算法:APOC提供了许多有用的图形算法,如PageRank、社区发现(例如Louvain算法),路径分析等。这些算法可以帮助您发现数据之间的关联性和模式,并从中提取有价值的信息。


三、数据清洗和转换:APOC提供了丰富的过程和函数,用于数据清洗和转换。您可以使用它来处理字符串、时间、密码学等方面的数据,并进行必要的清洗和格式化。


四、可视化:APOC支持将图形数据转换为其他可视化工具所需的格式,例如Gephi、D3.js等。这使得您可以将您的图形数据以更直观的方式呈现,进一步探索和交流。
五地理空间分析:APOC提供了与地理空间数据相关的功能,如计算两个地点之间的距离、查找附近的地点等。这对于在地理空间上分析和查询数据特别有用。

Graph Data Science (GDS)插件

The Neo4j Graph Data Science (GDS) library provides efficiently implemented, parallel versions of common graph algorithms, exposed as Cypher procedures. Additionally, GDS includes machine learning pipelines to train predictive supervised models to solve graph problems, such as predicting missing relationships.

  1. 读取和加载图: GDS需要从Neo4j数据库中读取数据, 进行转换, 并将其加载到内存图中. 在GDS中, 这个过程称为投射图 (projecting a graph) , 把内存中的图称为图的投影(graph projection) . GDS可以同时容纳多个图的投影, 由一个叫做图目录 (Graph Catalog) 的组件管理. 图目录和图投影管理将在下一个模块中更详细地介绍.
  2. 执行算法: 包括经典的图算法, 如中心性算法 (centrality) , 社区检测算法 (community detection) , 路径搜索算法 (path finding) 等. 它还包括嵌入法 (embeddings) , 一种强大的图特征工程的形式, 以及机器学习管道 (machine learning pipelines) .
  3. 储存结果: 结果可以写回到数据库, 以csv格式导出, 或输出到另一个应用程序或下游工作流程.

在GDS中有两种主要的投影类型, 原生投影 (Native Projections) 和Cypher投影. 总的来说, 原生投影注重效率和性能的优化, 以支持大规模的图数据科学. Cypher投影注重灵活性和个性化, 更适合探索性分析, 试验和较小的图投影.

2.2 Neo4j Browser

Neo4j的执行Cypher语句的工具,可以创建数据和查询数据。

Neo4j Browser is a developer-focused tool that allows you to execute Cypher queries and visualize the results. It is the default developer interface for both Enterprise and Community editions of Neo4j. It comes out-of-the-box with all of Neo4j’s graph database offerings, including Neo4j Server (Community and Enterprise editions), Neo4j AuraDB (Neo4j’s Database as a Service), and Neo4j Desktop (all OS versions).

桌面版访问:

社区版在浏览器上访问:http://localhost:7474

2.3 Neo4j图数据的基本概念

  • 标签:节点所属类别,一个节点可以有一个以上的标签
  • 节点:实体对象
  • 关系:实体间的关系
  • 属性:节点和关系都可以拥有属性,以key:value方式描述

2.4 Cypher语言

Neo4j使用Cypher语言进行数据操作:创建、查询等。

Cypher is Neo4j’s declarative graph query language. It was created in 2011 by Neo4j engineers as an SQL-equivalent language for graph databases. Similar to SQL, Cypher lets users focus on what to retrieve from graph, rather than how to retrieve it. As such, Cypher enables users to realize the full potential of their property graph databases by allowing for efficient and expressive queries that reveal previously unknown data connections and clusters.

//示例代码:

//创建节点
CREATE (t1:Title {title: "《静夜思》"})
CREATE (t2:Title {title: "《赠汪伦》"})
CREATE (t3:Title {title: "《望岳》"})
CREATE (a1:Author {name: "李白"})
CREATE (a2:Author {name: "杜甫"})


//创建关系

CREATE (t1)-[r1:poetry_author]->(a1)
CREATE (t2)-[:poetry_author]->(a1)
CREATE (t3)-[:poetry_author]->(a2)

//查询数据

//所有节点: 
MATCH(n)return n
//所有关系
MATCH ()-[r]->() RETURN r;


//所有有关系的节点
MATCH (n1)-[r]->(n2) RETURN r,n1,n2;

CREATE命令
  • 创建没有属性的节点
  • 使用属性创建节点
  • 在没有属性的节点之间创建关系
  • 使用属性创建节点之间的关系
  • 为节点或关系创建单个或多个标签
例子
  • 创建一个标签,即“Dept”
  • 创建一个节点,即“dept”
  • 创建三个属性,即deptno,dname,location
  1. CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })

MATCH & RETURN匹配和返回
  • 检索节点的某些属性
  • 检索节点的所有属性
  • 检索节点和关联关系的某些属性
  • 检索节点和关联关系的所有属性
例子
  • dept是节点名称
  • 这里Dept是一个节点标签名
  • deptno是dept节点的属性名称
  • dname是dept节点的属性名
  1. MATCH (dept: Dept)
  2. RETURN dept.deptno,dept.dname

CREATE+MATCH+RETURN命令

例如:本示例演示如何使用属性和这两个节点之间的关系创建两个节点。

  • 客户节点包含:ID,姓名,出生日期属性
  • CreditCard节点包含:id,number,cvv,expiredate属性
  • 客户与信用卡关系:DOSHOPPINGWITH
  • CreditCard到客户关系:ASSOCIATED_WITH

我们将在以下步骤中处理此示例:

  • 创建客户节点
  • 创建CreditCard节点
  • 观察先前创建的两个节点:Customer和CreditCard
  • 创建客户和CreditCard节点之间的关系
  • 查看新创建的关系详细信息
  • 详细查看每个节点和关系属性
  1. CREATE (e:Customer{id:"1001",name:"Abc",dob:"01/10/1982"})
  2. MATCH (e:Customer)
  3. RETURN e.id,e.name,e.dob
  4. CREATE (cc:CreditCard{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"})
  5. MATCH (cc:CreditCard)
  6. RETURN cc.id,cc.number,cc.cvv,cc.expiredate

关系基础

基于方向性,Neo4j关系被分为两种主要类型。

  • 单向关系
  • 双向关系
没有属性的关系与现有节点
  • 这里关系名称为“DOSHOPPINGWITH”
  • 关系标签为“r”。
  • e和Customer分别是客户节点的节点名称和节点标签名称。
  • cc和CreditCard分别是CreditCard节点的节点名和节点标签名。
  1. MATCH (e:Customer),(cc:CreditCard)
  2. CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc)
  3. MATCH (e)-[r:DO_SHOPPING_WITH ]->(cc)
  4. RETURN r

与现有节点的属性的关系
  1. MATCH (cust:Customer),(cc:CreditCard)
  2. CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
  3. RETURN r

  • 这里关系名称为“DOSHOPPINGWITH”
  • 关系标签为“r”。
  • shopdate和price是关系“r”的属性。
  • e和Customer分别是客户节点的节点名称和节点标签名称。
  • cc和CreditCard分别是CreditCard节点的节点名和节点标签名。
新节点无属性关系
  1. CREATE (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2)
  2. MATCH (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2)
  3. RETURN like

新节点与属性的关系
  1. CREATE (video1:YoutubeVideo1{title:"Action Movie1",updated_by:"Abc",uploaded_date:"10/10/2010"})
  2. -[movie:ACTION_MOVIES{rating:1}]->
  3. (video2:YoutubeVideo2{title:"Action Movie2",updated_by:"Xyz",uploaded_date:"12/12/2012"})
  4. MATCH (video1:YoutubeVideo1)-[movie:ACTION_MOVIES]->(video2:YoutubeVideo2)
  5. RETURN movie

CREATE创建标签

这里m是一个节点名

Movie, Cinema, Film, Picture是m节点的多个标签名称

  1. CREATE (m:Movie:Cinema:Film:Picture)

检索关系节点的详细信息
  1. MATCH (cust)-[r:DO_SHOPPING_WITH]->(cc)
  2. RETURN cust,cc

WHERE子句
  1. MATCH (emp:Employee)
  2. WHERE emp.name = 'Abc'
  3. RETURN emp
  4. MATCH (emp:Employee)
  5. WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
  6. RETURN emp

DELETE删除
  • 删除节点。
  • 删除节点及相关节点和关系。
  1. MATCH (e: Employee) DELETE e
  2. MATCH (e: Employee) RETURN e

我们应该使用逗号(,)运算符来分隔节点名称和关系名称

  1. DELETE <node1-name>,<node2-name>,<relationship-name>
  2. MATCH (cc: CreditCard)-[rel]-(c:Customer)
  3. DELETE cc,c,rel

REMOVE删除

有时基于我们的客户端要求,我们需要向现有节点或关系添加或删除属性。

  • 我们使用Neo4j CQL SET子句向现有节点或关系添加新属性。
  • 我们使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性。

Neo4j CQL REMOVE命令用于

  • 删除节点或关系的标签
  • 删除节点或关系的属性

Neo4j CQL DELETE和REMOVE命令之间的主要区别 -

  • DELETE操作用于删除节点和关联关系。
  • REMOVE操作用于删除标签和属性。

从书节点中删除“price”属性

  1. CREATE (book:Book {id:122,title:"Neo4j Tutorial",pages:340,price:250})
  2. MATCH (book { id:122 })
  3. REMOVE book.price
  4. RETURN book

SET子句
  • 向现有节点或关系添加新属性
  • 添加或更新属性值
  1. MATCH (dc:DebitCard)
  2. SET dc.atm_pin = 3456
  3. RETURN dc

Sorting排序
  1. MATCH (emp:Employee)
  2. RETURN emp.empid,emp.name,emp.salary,emp.deptno
  3. ORDER BY emp.name DESC

UNION联盟

与SQL一样,Neo4j CQL有两个子句,将两个不同的结果合并成一组结果

  • UNION
  • UNION ALL
  1. MATCH (cc:CreditCard)
  2. RETURN cc.id as id,cc.number as number,cc.name as name,
  3. cc.valid_from as valid_from,cc.valid_to as valid_to
  4. UNION
  5. MATCH (dc:DebitCard)
  6. RETURN dc.id as id,dc.number as number,dc.name as name,
  7. dc.valid_from as valid_from,dc.valid_to as valid_to

LIMIT和SKIP子句

LIMIT: 只返回Top的两个结果,因为我们定义了limit = 2。这意味着前两行。

  1. MATCH (emp:Employee)
  2. RETURN emp
  3. LIMIT 2

SKIP: 它只返回来自Bottom的两个结果,因为我们定义了skip = 2。这意味着最后两行。

  1. MATCH (emp:Employee)
  2. RETURN emp
  3. SKIP 2

合并

MERGE命令是CREATE命令和MATCH命令的组合。

Neo4j CQL MERGE命令在图中搜索给定模式,如果存在,则返回结果 如果它不存在于图中,则它创建新的节点/关系并返回结果。

  1. MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})
  2. MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})
  3. MATCH (gp1:GoogleProfile2)
  4. RETURN gp1.Id,gp1.Name

CQL CREATE命令检查此节点是否可用,它只是在数据库中创建新节点。 CQL MERGE命令将新的节点添加到数据库,只有当它不存在。

NULL值
  1. MATCH (e:Employee)
  2. WHERE e.id IS NOT NULL
  3. RETURN e.id,e.name,e.sal,e.deptno

IN操作符
  1. MATCH (e:Employee)
  2. WHERE e.id IN [123,124]
  3. RETURN e.id,e.name,e.sal,e.deptno

cql函数
字符串函数
  1. MATCH (e:Employee)
  2. RETURN e.id,UPPER(e.name),e.sal,e.deptno

AGGREGATION聚合

它类似于SQL中的GROUP BY子句。

MATCH(e:Employee)RETURN COUNT(*)

关系函数

以在获取开始节点,结束节点等细节时知道关系的细节。

  • STARTNODE 它用于知道关系的开始节点。
  • ENDNODE 它用于知道关系的结束节点。
  • ID 它用于知道关系的ID。
  • TYPE 它用于知道字符串表示中的一个关系的TYPE。
  1. MATCH (video1:YoutubeVideo1)-[movie:ACTION_MOVIES]->(video2:YoutubeVideo2)
  2. RETURN movie
  3. MATCH (a)-[movie:ACTION_MOVIES]->(b)
  4. RETURN STARTNODE(movie)
  5. RETURN ENDNODE(movie)
  6. RETURN ID(movie),TYPE(movie)

CQL - 索引

Neo4J索引操作

  • Create Index 创建索引
  • Drop Index 丢弃索引
  1. CREATE INDEX ON :Customer (name)
  2. DROP INDEX ON :Customer (name)

UNIQUE约束

  1. CREATE CONSTRAINT ON (cc:CreditCard)
  2. ASSERT cc.number IS UNIQUE
  3. DROP CONSTRAINT ON (cc:CreditCard)
  4. ASSERT cc.number IS UNIQUE

2.5 Cypher and APOC

Neo4j supports the APOC (Awesome Procedures on Cypher) Core library. The APOC Core library provides access to user-defined procedures and functions which extend the use of the Cypher query language into areas such as data integration, graph algorithms, and data conversion.

配置apoc.conf 适用5.x版本

在neo4j.conf的同一目录下,创建一个apoc.conf,写入以下内容

apoc.export.file.enabled=false

apoc.import.file.enabled=false

允许apoc导入导出数据。

示例代码

//导入微观经济学数据

CALL apoc.load.json("file:///microeco.json")
YIELD value
MERGE (o:Object {name: value.object})
MERGE (s:Subject {name: value.subject})

二、知识图谱

1、《知识图谱标准化白皮书》

《知识图谱标准化白皮书》正式发布

知识图谱始于20世纪50年代,至今大致分为三个发展阶段:第一阶段(1955年—1977年)是知识图谱的起源阶段,在这一阶段中引文网络分析开始成为一种研究当代科学发展脉络的常用方法;第二阶段(1977年-2012年)是知识图谱的发展阶段,语义网得到快速发展,“知识本体”的研究开始成为计算机科学的一个重要领域,知识图谱吸收了语义网、本体在知识组织和表达方面的理念,使得知识更易于在计算机之间和计算机与人之间交换、流通和加工;第三阶段(2012年—至今)是知识图谱繁荣阶段,2012年谷歌提出Google Knowledge Graph,知识图谱正式得名,谷歌通过知
识图谱技术改善了搜索引擎性能。在人工智能的蓬勃发展下,知识图谱涉及到的知识抽取、表示、融合、推理、问答等关键问题得到一定程度的解决和突破,知识图谱成为知识服务领域的一个新热点,受到国内外学者和工业界广泛关注。

虽然知识图谱取得了很大的进展,随着应用和技术的发展,它的定义一直在变。

2、知识图谱的定义

知识图谱( Knowledge Graph )以结构化的形式描述客观世界中概念、实体及其关系,将互联网的信息表达成更接近人类认知世界的形式,提供了一种更好地组织、管理和理解互联网海量信息的能力。
知识图谱不是一种新的知识表示方法,而是知识表示在工业界的大规模知识应用,它将互联网上可以识别的客观对象进行关联,以形成客观世界实体和实体关系的知识库,其本质上是一种语义网络,其中的节点代表实体 (entity) 或者概念 (concept) ,边代表实体 / 概念之间的各种语义关系。
知识图谱的架构,包括知识图谱自身的逻辑结构以及构建知识图谱所采用的技术(体系)架构。
知识图谱的逻辑结构可分为模式层与数据层,模式层在数据层之上,是知识图谱的核心,模式层存储的是经过提炼的知识,通常采用本体库来管理知识图谱的模式层,借助本体库对公理、规则和约
束条件的支持能力来规范实体、关系以及实体的类型和属性等对象之间的联系。
数据层主要是由一系列的事实组成,而知识将以事实为单位进行存储。在知识图谱的数据层,知识以事实( fact )为单位存储在图数据库。如果以“实体-关系-实体”或者“实体-属性-性值”三元组作为事实的基本表达方式,则存储在图数据库中的所有数据将构成庞大的实体关系网络,形成“知识图谱”。

3、知识图谱与图数据库

1、图数据库是实现知识图谱存储的方式之一。

图数据库是实现知识图谱存储的主要方式,但不是唯一方式。知识图谱还可存储在关系数据库、键值数据库、文档数据库或其他NoSQL数据库中。

2、复杂知识图谱有赖于多种存储形式的混合应用。

复杂知识图谱是指除包含基本图结构外还含有本体信息、属性文本、多媒体数据等多模态类型数据的知识图谱。复杂知识图谱往往需要采用图数据库、关系数据库、NoSQL数据库、分布式文件系统等多种存储形式实现存储管理功能。

3、知识获取等其他环节与图数据库协同支撑知识图谱构建及其应用。

图数据库目前主要支持知识图谱的存储管理和查询应用。然而,知识图谱的全生命周期还包括知识获取和知识融合等环节。目前,这些环节的任务需采用其他工具完成。因此,图数据库需与其他工具通过接口功能调用与交互,以完成知识图谱的构建与应用任务。

此外,知识图谱数据管理也可基于传统关系数据库,特别是针对已有遗留系统的知识图谱数据管理任务。目前,包括Oracle、IBM DB2在内的主流商业关系数据库管理系统均具有支持知识图谱数据管理的扩展模块。但,采用关系数据库管理知识图谱的主要问题在于需要进行图数据模型与关系数据模型的转换,影响知识图谱数据管理任务的性能。

4、知识图谱推动基于知识的智能应用。

从基于知识的智能应用层面,知识图谱已在关联分析、辅助决策、搜索、问答、推荐等场景中取得成效。

a)关联分析

基于构建的知识图谱,可通过最短路径、链路预测、随机游走等图算法,深度挖掘实体间复杂的网络关系。如:通过基于判决书、口供等信息,结合知识图谱平台库构建的走私案件知识图谱,实现一个人与人,人与团伙、本礼物、龙私调道方式等关系分析标准化。

b)辅助决策

以决策主题为重心,基于知识图谱构建决策主题研究相关知识库、分析模型库和情报研究方法库,建设并不断完善辅助决策系统,可以为决策主题提供多方位、多层次的决策依据,达到辅助决策者的目的。

c)知识搜索

通过语义分析技术,准确理解用户查询的真正意图,精准搜索并排序后返回符合用户需求的搜索结果。搜索内容可包括原始文本数据及图谱内容等。目前谷歌、百度搜索引擎中的知识图谱成效印证了本应用的价值。

d)知识问答(Knowledge Base Question Answering, KBQA)

通过分析用户自然语言问题的语义,进而在已构建的知识图谱中通过检索、匹配或推理等手段,获取正确答案。知识问答可以回答部分包含较复杂的关联关系的问题,从而为用户提供更精确、简洁的答案。

e)知识推荐

基于知识图谱特征和路径,可对相关知识内容进行智能推荐。例如,通过知识图谱中携带的大量属性、关系等特征信息,构建人员画像,对相关的知识进行推荐。同时,基于知识图谱中的路径查询,结合关系分析能力发现显性或隐性关联知识进行推荐。

5、研究方向

知识图谱目前的研究方向可以大致分为四类:知识表征学习(Knowledge Represent Learning, KRL)、知识获取(Knowledge Acquisition)、时序知识图谱(Temporal Knowledge Graph, TKG)和应用(Knowledge-aware Applications)。

知识表征学习 Knowledge Represent Learning(KRL)

知识表征学习KRL也称为KGE、多关系学习、统计关系学习,是知识图谱的一个关键研究问题,它为许多知识获取任务和下游应用铺平了道路。

我们可以将KRL分为四个方面,为开发KRL模型提供清晰的工作流程。具体包括:

(1)表征空间:关系和实体的空间分布表示;

(2)评分函数:用于衡量事实三元组合理性的评分;

(3)编码模型:将表征进行编码;

(4)辅助信息:嵌入到方法中的其他相关信息。

知识获取 Knowledge Acquisition

知识获取旨在从非结构化文本和其他结构化或半结构化源中构建知识图谱,补全现有的知识图谱,发现和识别实体和关系。构建良好的大规模知识图谱可用于许多下游应用程序,并通过常识推理为Knowledge-aware模型提供支持,从而为人工智能铺平道路。

知识获取的主要任务包括知识图谱补全、实体识别、实体对齐、关系抽取等面向实体的获取任务。

大多数方法分别实现知识图谱补全和关系提取两个任务。当然,这两个任务也可以集成到一个统一的框架中,如Han等人提出了一种联合学习框架,用于知识图谱和文本之间的数据融合,解决了知识图谱补全如何从文本中提取关系的问题。

还有其他与知识获取相关的任务,例如三重分类(triple classification)、关系分类(relation classification)和开放知识富集(open knowledge enrichment)等等,感兴趣的可以自行查阅相关文献资料。

知识图谱补全 Knowledge Graph Completion(KGC)

由于知识图谱往往不完整,需要持续向知识图谱添加新的三元组,也需要通过现有图谱推断出缺失的实体或者关系,所以就有了知识图谱补全任务,即KGC。

该任务有几个典型的子任务,包括链接预测、实体预测和关系预测,衍生出了包括基于嵌入的模型、关系路径推理、基于强化学习的寻路、基于规则的推理、元关系学习和Triple分类等子分支。

图7 基于嵌入的排序(左图)和关系路径推理(右图)

(1)基于嵌入的模型:如图7(左)所示,以实体预测为例,基于嵌入的排序方法首先基于现有的三元组学习嵌入向量,通过用每个实体替换尾部实体或头部实体的办法计算所有候选实体的分数,并对前个实体进行排名。

基于嵌入的方法通常依赖表征学习来捕获语义并进行候选排序来完成任务,其基于的嵌入推理停留在个体关系层面,忽略了知识图谱的符号性,缺乏可解释性,在复杂推理方面表现不佳。

(2)关系路径推理:实体和关系的嵌入学习在一些基准测试中获得了显著的性能提升,但它无法对复杂的关系路径进行建模。关系路径推理依赖于图结构上的路径信息。

目前,随机游走推理方法已被广泛研究,例如,路径排序算法(Path-Ranking Algorithm, PRA)是在路径组合约束下选择关系路径并进行最大似然分类,具有较强的推理能力。

(3)基于强化学习的寻路:一般将实体对之间的寻路(路径查找)设定为顺序决策任务,如经典的马尔可夫决策过程(MDP),为多跳(hop)推理引入深度强化学习(Reinforcement Learning, RL)方法。

基于策略的Agent通过知识图谱Environment之间的交互来学习并找到与扩展推理路径相关的步骤,其中策略梯度用于训练Agent。

(4)基于规则的推理:逻辑规则是一种辅助信息,可以通过AMIE等规则挖掘工具提取。同时,它可以结合先验知识,实现可解释的多跳推理能力,并为泛化铺平道路,即使在少样本标记的关系三元组中也是如此。

然而,单独的逻辑规则只能覆盖知识图谱中有限数量的关系事实,并存在巨大的搜索空间。可以将神经网络和符号计算进行结合,它们之间具有互补优势,利用高效的数据驱动学习和进行可微优化,并利用先验逻辑知识进行精确且可解释的推理。

将基于规则的学习结合到知识表征中为表征提供正则化或约束以解决问题是个很好的思路。然而,当遍历大规模图时,它们会出现连通性不足的缺点。

(5)元关系学习:长尾现象广泛存在于知识图谱的关系中,且现实世界的知识场景是动态的。针对这一新场景,学者们提出了元关系学习(或称少样本关系学习)方法,其需要模型仅用很少的样本来预测新的关系事实。

(6)Triple分类:Triple分类是KGC的一项相关任务, Triple分类是在测试数据中判断三元组事实是否正确,通常被认为是一个二分类问题。

实体发现 Entity Discovery

实体发现任务是从文本中获取面向实体的知识,并在知识图谱之间融合知识。可以划分为几个子任务,即实体识别、实体类型标记、实体消歧和实体对齐。我们将其统称为实体发现,因为它们都在不同的配置下探索与实体相关的知识。

(1)实体识别(Entity Recognition):实体识别通常狭义定义为命名实体识别(Named Entity Recognition, NER),该任务专注于在文本中标记出特定命名的实体。

堆叠网络:最近的工作常用sequence-to-sequence的神经网络架构,如LSTM-CNN用于学习字符级和单词级特征。此外还有LSTM的变种,比如堆叠LSTM层和CRF层组合的LSTM-CRF和Stack-LSTM等。如图8左所示。

MGNER:提出了一个集成框架,该框架具有各种粒度的实体位置检测和基于注意力的实体分类,适用于嵌套和非重叠命名实体。

(2)实体类型标记(Entity Typing):实体类型标记包括标注粗粒度类型和细粒度类型,后者使用树结构的类型类别,通常被视为多类和多标签分类。

PLE:为了减少标签噪声,该模型专注于正确的类型识别,并提出了一种带有异构图的部分标签嵌入模型,用于表示实体提及(mention)、文本特征和实体类型及其关系。

Ma等人:为了解决噪音标签的日益增长问题,提出了原型驱动的标签嵌入,其中包含用于零样本细粒度命名实体类型的分层信息。

JOIE:学习实例视图和本体视图的联合嵌入,并将实体类型表述为top-k排名以预测相关概念。

ConnectE:探索局部类型和全局三元组知识的关系以增强联合嵌入学习效果。

图8 LSTM-CRF实体识别任务(左图)和实体对齐任务(右图)

(3)实体消歧(Entity Disambiguation):实体消歧或实体链接是将实体提及链接到知识图谱中相应实体进行统一的任务。例如,爱因斯坦在1921年获得诺贝尔物理学奖。“爱因斯坦”的实体提及应该与阿尔伯特·爱因斯坦的实体联系起来。目前,端到端学习方法为通过实体和提及的表征学习提供了有力支持:

DSRM:用于建模实体语义相关性的模型。

EDKate:用于实体和文本的联合嵌入的模型。

Ganea等人:提出了一种在局部上下文窗口上的注意力神经网络模型,用于实体嵌入学习和用于推断模糊实体的可微消息传递。

Le等人:通过将实体之间的关系视为潜在变量,开发了一种端到端的神经网络架构,使关系和提及规范化。

(4)实体对齐(Entity Alignment, EA):如前所述,这些任务涉及从文本或单个知识图谱中发现实体,而实体对齐旨在融合各种知识图谱之间的知识。

关系抽取 Relation Extraction(RE)

关系提取是通过从纯文本中提取未知的关系事实并将其添加到知识图中来,以自动构建大规模知识图谱的任务。

由于缺乏标记的关系数据,远程监督(distant supervision),也称为弱监督或自监督,通过假设包含相同实体提及的句子在监督下可能表达相同的关系,使用启发式匹配来创建训练数据的关系数据库。

传统方法高度依赖特征工程,最新的方法采用深度神经网络探索特征之间的内在相关性。

在远程监督的假设下,关系提取会受到噪声的影响,尤其是在不同领域的文本语料库中。因此,弱监督关系提取必须减轻噪声标签的影响。

例如,多实例学习(MIL)将词袋(Bag-of-Words, BoW)作为输入,注意力机制(Attention Mechanism)通过对实例的软选择来减少噪声,而基于RL的方法将实例选择设定为硬决策。

另一个原则是尽可能学习更丰富的表示。由于深度神经网络(DNN)可以解决传统特征提取方法中的错误传播,因此该领域主要由基于DNN的模型主导。

(1)神经关系提取:神经网络广泛应用于NRE任务。

CNN:将相对实体距离的位置特征和关系分类信息输入具有多尺度卷积CNN中进行关系提取。

多实例学习(MIL):以词袋作为输入来预测实体对的关系。

PCNN:在以实体位置的卷积表示的片段上应用分段最大池化。与普通相比,PCNN可以更有效地捕获实体对内部的结构信息。

MIMLCNN:进一步将PCNN扩展到具有跨句子最大池化的多标签学习以进行特征选择。还利用了诸如类关系和关系路径之类的辅助信息。

SDP-LSTM:采用多通道LSTM,同时利用实体对之间的最短依赖路径。

Miwa等人:构建了基于依赖树堆叠顺序和树结构的LSTM。

BRCNN:将用于捕获顺序依赖关系的RNN与用于使用双通道双向LSTM和CNN表示局部语义的CNN相结合。

(2)注意力机制:注意力机制的许多变体与CNN相结合,包括用于捕获单词语义信息的单词级注意力和对多个实例的选择性注意力以减轻噪声实例的影响。此外,还引入了其他辅助信息以丰富语义表示:

APCNN:引入了PCNN的实体描述和句子级注意。

HATT:提出了分层选择性注意,通过连接每个分层的注意表征来捕获关系层次。

Att-BLSTM:该模型不是基于CNN的句子编码器,而是使用BiLSTM提出词级注意力。

Soares等人:利用了来自深度Transformers模型的预训练关系表示。

(3)图卷积网络(GCN):GCN用于编码句子上的依赖树或学习KGE以利用关系知识进行句子编码。

C-GCN:是一个上下文相关的GCN模型,它以路径为中心,运用句子级的剪枝依赖树。

AGGCN:也将GCN应用于依赖树,但利用多头注意力以soft weighting方式进行边缘选择。

Zhang等人:与之前两个基于GCN的模型不同,其将GCN应用于知识图谱中的关系嵌入,用于基于句子的关系提取。作者进一步提出了一种从粗到细的知识感知注意机制,用于选择信息实例。

(4)对抗训练:对抗训练(Adversarial Training, AT)用于在多实例多标签学习(MIML)中将对抗性噪声添加到词嵌入中,以进行基于CNN和RNN的关系提取。典型的有:

DSGAN:通过学习句子级真阳性样本的生成器和最小化生成器真阳性概率的鉴别器来对远程监督关系提取进行去噪。

(5)强化学习:最近,通过使用策略网络训练实例选择器,RL已被集成到神经关系提取中。

Qin等人:提出训练基于策略的Agent句子关系分类器,将误报实例重新分配到负样本中,以减轻噪声数据的影响。作者将F1分数作为评估指标,并使用基于F1分数的性能变化作为对策略网络的奖励。

Zeng等人:提出了另外一种不同的奖励策略。

HRL:提出了一种高层关系检测和低层实体提取的分层策略学习框架。

基于RL的NRE的优点是关系提取器与模型无关。因此,它可以很容易地适应任何神经架构以进行有效的关系提取。

(6)其他进展:深度学习的其他进展也可以应用于神经关系提取。

Huang等人:将深度残差学习应用于噪声关系提取,发现9层CNN的配置,性能有所提高。

Liu等人:提出通过实体分类的迁移学习来初始化神经模型有效提高准确率。

协作CORD:通过双向知识蒸馏和自适应模仿,将文本语料库和知识图谱与外部逻辑规则相结合。

TK-MF:通过匹配句子和主题词来丰富句子表征学习。

Shahbazi等人:通过对几种解释机制进行基准测试来研究可信关系提取,包括显着性、梯度×输入和leave one out。

(7)联合提取:传统的关系提取模型采用首先提取实体提及然后对关系进行分类的流水线方法来完成任务。但是,流水线方法可能会导致错误累积。几项研究表明,联合学习的性能优于传统的流水线方法。

Katiyar等人:提出了一个基于注意力的LSTM网络的联合提取框架。

一些方法将联合提取转换为不同的问题,例如通过新的标记方案和多轮问答进行序列标记。但是在处理实体对和关系重叠方面仍然存在挑战。

Wei等人:提出了一个级联二进制标记框架,将关系建模为主体-对象映射函数来解决重叠问题。

时序知识图谱 Temporal Knowledge Graph(TKG)

时序信息嵌入 Temporal Information Embedding

动态实体 Entity Dynamics

现实世界的事件会改变实体的状态,从而影响相应的关系。为了改进时序范围推断,上下文时序范围轮廓模型(contextual temporal profile model)将Temporal scope问题表述为状态变化检测,并利用上下文来学习状态和状态变化向量。

Goel等人:将实体和时间戳作为实体嵌入函数的输入,以保留实体在任何时间点的时序感知特性。

Know-evolve:是一个深度进化知识网络,研究实体的知识进化现象及其进化关系。使用多元时间点过程对事实的发生进行建模,并开发了一种新的循环网络来学习非线性时序演化表示。

RE-NET:为了捕获节点之间的交互信息,通过基于RNN的事件编码器和邻域聚合器对事件序列进行建模。具体来说,RNN用于捕获时间实体交互,邻域聚合器聚合并发交互。

时序关系依赖 Temporal Relational Dependency

关系链中存在时间依赖关系,例如,wasBornIn→graduateFrom→workAt→deadIn。

时序逻辑推理 Temporal Logical Reasoning

逻辑规则也被用于进行时序推理。

Chekol等人:探索了马尔可夫逻辑网络和概率软逻辑,用于对不确定的时间知识图谱进行推理。

RLvLR-Stream:考虑时间闭合路径规则,并从知识图谱流中学习规则结构进行推理。

应用 Knowledge-aware Applications

丰富的结构化知识可用于AI应用程序。然而,如何将这些符号知识整合到现实世界应用程序的计算框架中仍然是一个挑战。

知识图谱的应用包括两个方面:

(1)in-KG应用:如链接预测、命名实体识别等;

(2)out-of-KG应用程序:包括关系提取和更多下游知识感知应用程序,例如问答和推荐系统。

语言表征学习 Language Representation Learning

通过自监督语言模型预训练的语言表征学习已经成为许多NLP系统的一个组成部分。传统的语言建模不利用文本语料库中经常观察到的实体事实,如何将知识整合到语言表征中已引起越来越多的关注。

知识图谱语言模型(KGLM):通过选择和复制实体来学习并呈现知识。

ERNIE-Tsinghua:通过聚合的预训练和随机Mask来融合信息实体。

K-BERT:将领域知识注入BERT上下文编码器。

ERNIE-Baidu:引入了命名实体Mask和短语Mask以将知识集成到语言模型中,并由ERNIE 2.0通过持续的多任务学习进一步改进。

KEPLER:为了从文本中获取事实知识,通过联合优化将知识嵌入和Mask语言建模损失相结合。

GLM:提出了一种图引导的实体Mask方案来隐式地利用知识图谱。

CoLAKE:通过统一的词-知识图谱和改进的Transformer编码器进一步利用了实体的上下文。

BERT-MK:与K-BERT模型类似,更专注于医学语料库,通过知识子图将医学知识集成到预训练语言模型中。

Petroni等人:重新思考语言模型的大规模训练和知识图谱查询,分析了语言模型和知识库,他们发现可以通过预训练语言模型获得某些事实知识。

问答 Question Answering

基于知识图谱的问答(KG-QA)用知识图谱中的事实回答自然语言问题。基于神经网络的方法表示分布式语义空间中的问题和答案,有些方法还进行符号知识注入以进行常识推理。

Single-fact QA:以知识图谱为外部知识源,simple factoid QA或single-fact QA是回答一个涉及单个知识图谱事实的简单问题。

Dai等人:提出了一种条件聚焦神经网络,配备聚焦修剪以减少搜索空间。

BAMnet:使用双向注意机制对问题和知识图谱之间的双向交互进行建模。尽管深度学习技术在KG-QA中得到了广泛应用,但它们不可避免地增加了模型的复杂性。

Mohammed等人:通过评估有和没有神经网络的简单KG-QA,发现复杂的深度模型(如LSTM和GRU等启发式算法)达到了最先进的水平,非神经模型也获得了相当好的性能。

多跳推理(Multi-hop Reasoning):处理复杂的多跳关系需要更专门的设计才能进行多跳常识推理。结构化知识提供了信息丰富的常识,这促进了最近关于多跳推理的符号空间和语义空间之间的常识知识融合的研究。

Bauer等人:提出了多跳双向注意力和指针生成器(pointer-generator)解码器,用于有效的多跳推理和连贯的答案生成,利用来自ConceptNet的relational path selection和selectively-gated注意力注入的外部常识知识。

Variational Reasoning Network(VRN):使用reasoning-graph嵌入进行多跳逻辑推理,同时处理主题实体识别中的不确定性。

KagNet:执行concept recognition以从ConceptNet构建模式图,并通过GCN、LSTM和hierarchical path-based attention学习基于路径的关系表示。

CogQA:结合了implicit extraction和explicit reasoning,提出了一种基于BERT和GNN的认知图模型,用于多跳QA。

推荐系统 Recommender Systems

将知识图谱集成为外部信息,使推荐系统具备常识推理能力,具有解决稀疏问题和冷启动问题的潜力。通过注入实体、关系和属性等知识图谱的辅助信息,许多方法致力于使用基于嵌入的正则化模块以改进推荐效果。

collaborative CKE:通过平移KGE模型和堆叠自动编码器联合训练KGE、文本信息和视觉内容。

DKN:注意到时间敏感和主题敏感的新闻文章由大量密集的实体和常识组成,通过知识感知CNN模型将知识图谱与多通道word-entity-aligned文本输入相结合。但是,DKN不能以端到端的方式进行训练,因为它需要提前学习实体嵌入。

MKR:为了实现端到端训练,通过共享潜在特征和建模高阶项目-实体交互,将多任务知识图谱表示和推荐相关联。

KPRN:虽然其他工作考虑了知识图谱的关系路径和结构,但KPRN将用户和项目之间的交互视为知识图谱中的实体关系路径,并使用LSTM对路径进行偏好推断以捕获顺序依赖关系。

PGPR:在基于知识图谱的user-item交互上执行reinforcement policy-guided的路径推理。

KGAT:在entity-relation和user-item图的协作知识图谱上应用图注意力网络,通过嵌入传播和基于注意力的聚合对高阶连接进行编码。

总而言之,基于知识图的推荐本质上是通过在知识图谱中嵌入传播与多跳来处理可解释性。

文本分类和特定任务应用程序 Text Classification and Task-Specific Applications

知识驱动的自然语言理解(NLU)是通过将结构化知识注入统一的语义空间来增强语言表征能力。最近成果利用了明确的事实知识和隐含的语言表征。

Wang等人:通过加权的word-concept嵌入,通过基于知识的conceptualization增强了短文本表征学习。

Peng等人:集成了外部知识库,以构建异构信息图谱,用于短社交文本中的事件分类。

在精神卫生领域,具有知识图谱的模型有助于更好地了解精神状况和精神障碍的危险因素,并可有效预防精神健康导致的自杀。

Gaurs等人:开发了一个基于规则的分类器,用于知识驱动的自杀风险评估,其中结合了医学知识库和自杀本体的自杀风险严重程度词典。

情感分析与情感相关概念相结合,可以更好地理解人们的观点和情感。

SenticNet:学习用于情感分析的概念原语,也可以用作常识知识源。为了实现与情感相关的信息过滤。

Sentic LSTM:将知识概念注入到vanilla LSTM中,并为概念级别的输出设计了一个知识输出门,作为对词级别的补充。

对话系统 Dialogue Systems

问答(QA)也可以被视为通过生成正确答案作为响应的单轮对话系统,而对话系统考虑对话序列并旨在生成流畅的响应以通过语义增强和知识图谱游走来实现多轮对话。

Liu等人:在编码器-解码器框架下,通过知识图谱检索和图注意机制对知识进行编码以增强语义表征并生成知识驱动的响应。

DialKG Walker:遍历符号知识图谱以学习对话中的上下文转换,并使用注意力图路径解码器预测实体响应。

通过形式逻辑表示的语义解析是对话系统的另一个方向。

Dialog-to-Action:是一种编码器-解码器方法,通过预定义一组基本动作,它从对话中的话语映射可执行的逻辑形式,以在语法引导解码器的控制下生成动作序列。

医学和生物学 Medicine and Biology

知识驱动的模型及其应用为整合领域知识以在医学和生物学领域进行精确预测铺平了道路。医学应用涉及有众多医学概念的特定领域知识图谱。

Sousa等人:采用知识图谱相似性进行蛋白质-蛋白质相互作用预测,使用基因本体。

Mohamed等人:将药物-靶点相互作用预测设定为生物医学知识图谱中与药物及其潜在靶点的链接预测。

Lin等人:开发了一个知识图谱网络来学习药物-药物相互作用预测的结构信息和语义关系。

UMLS:在临床领域,来自Unified Medical Language Systems(UMLS)本体的生物医学知识被集成到语言模型预训练中,用于临床实体识别和医学语言推理等下游临床应用。

Liu等人:设定了医学图像报告生成的任务,包括编码、检索和释义三个步骤。

其他应用

还有许多其他应用程序利用以知识驱动的方法。

(1)学术搜索引擎帮助研究找到相关的学术论文

Xiong等人:提出了带有知识图谱嵌入的显式语义排序,以帮助学术搜索更好地理解查询到的概念的含义。

(2)零样本图像分类受益于知识图谱传播和类的语义描述

Wang等人:提出了一种多层GCN,使用类别和类别关系的语义嵌入来学习零样本分类器。

APNet:使用类别图传播属性表征。

(3)文本生成,组成连贯的多句文本。

Koncel-Kedziorski等人:研究了信息提取系统的文本生成,并提出了一种图谱转换编码器,用于从知识图谱生成图谱到文本的映射,侧重于解决生成自然语言的问题。

Seyler等人:通过在知识图谱上生成结构化查询,同时估计了问题的难度,研究了测验式知识问题的生成。然而,为了表达这个问题,作者使用了基于模板的方法,这可能会限制生成更自然的表达方式。

未来发展方向

古往今来,众多学者已经进行了许多工作来应对知识图谱及其相关应用的挑战。然而,仍然存在一些开放性问题值得解决,是未来的研究方向。

复杂推理 Complex Reasoning

知识表征和推理的数值计算需要一个连续的向量空间来捕捉实体和关系的语义。虽然基于嵌入的方法在复杂的逻辑推理上存在局限性,但关系路径和符号逻辑两个方向值得进一步探索。

一些有前途的方法,如循环关系路径编码、基于GNN的知识图谱传递消息以及基于强化学习的寻路和推理,正在用于处理复杂的推理。对于逻辑规则和嵌入的组合,最新的工作将马尔可夫逻辑网络与KGE相结合,旨在利用逻辑规则并处理其不确定性。

通过有效嵌入来实现概率推理以捕获不确定性和领域知识将是一个值得注意的研究方向。

统一框架 Unified Framework

知识图谱上的几种表征学习模型已被验证为等价,例如,Hayshi和Shimbo证明了HolE和ComplEx模型在具有特定约束的链接预测方面在数学上是等价的。

ANALOGY:提供了几个代表性模型的统一视图,包括DistMult、ComplEx和HolE。

Wang等人:探索了几个双线性模型之间的联系。

Chandrahas等人:探索了加法和乘法KRL模型的几何理解。

Han等人:将不同模型放在同一个框架下,并提出了一种相互关注的联合学习框架,用于知识图谱和文本之间的信息共享。

目前,对知识表征和推理的统一理解研究仍然较少,但是却很有价值。

可解释性 Interpretability

知识表征的可解释性是知识获取和实际应用的一个重要问题。研究人员已经为可解释性做出了初步努力。

ITransF:使用稀疏向量进行知识转移并通过注意力可视化进行解释。

CrossE:通过使用基于嵌入的路径搜索来为链接预测生成解释,探索了知识图谱的解释方案。

然而,最近提出的神经网络模型取得了很高的性能指标,但是在透明度和可解释性方面仍然存在局限性。一些方法通过使用逻辑规则使神经模型和符号推理相结合提供一定可解释性。

可解释性可以说服人们相信模型的预测,因此,未来工作应该更多地提高可解释性,也相当于提高了预测知识的可靠性。

可扩展性 Scalability

可扩展性在大规模知识图谱中至关重要。计算效率和模型表达能力之间需要权衡,极少有工作是在超过100万个实体的知识图谱上进行的。

几种嵌入方法可以用来简化计算,降低计算成本,例如使用循环相关运算来简化张量积。然而,这些方法仍然难以扩展到数百万个实体和关系。

使用马尔可夫逻辑网络的概率逻辑推理是计算密集型的,因此很难扩展到大规模的知识图谱。最新的神经逻辑模型中的规则是通过简单的蛮力搜索生成的,这使得它在大规模知识图谱上更为力不从心。

要处理繁琐的深层架构和日益增长的知识图谱,还有很长的路要走。

知识聚合 Knowledge Aggregation

全球知识的聚合是以知识作为驱动的应用的核心。例如,推荐系统使用知识图对user-item交互和文本分类进行联合建模,将文本和知识图谱编码到语义空间中。当前大多数知识聚合方法都使用了神经网络架构,如注意力机制和GNN。

Transformer和BERT大规模预训练模型及其变体极大地推动了自然语言处理的发展。

同时,最新的一项研究表明,对非结构化文本进行预训练的语言模型可以获得一定的事实知识,大规模的预训练可以作为一种直接的知识注入后续任务。然而,知识聚合仍然需要有效且可解释,不能用大模型蛮干。

自动构建与动态生成 Automatic Construction and Dynamics

当前的知识图谱高度依赖人工构建,这是劳动密集型且经济成本高的工作。知识图谱在不同认知智能领域的广泛应用需要从大规模非结构化内容中自动构建知识图谱。

最新的研究主要是在现有知识图谱的监督下进行半自动构建。面对多模态、异构性和大规模应用,自动化构建仍然具有很大的挑战。

主流研究集中在静态知识图谱上,在预测Temporal scope有效性和学习时间信息和动态实体方面工作较少。许多事实只在特定时期内成立,动态知识图谱与捕捉动态的学习算法一起,可以通过考虑时间性质来解决传统知识表征和推理的局限性。

知识图谱的技术体系

openKG的王昊奋老师总结的。

利用知识图谱让你知道推荐系统在想什么

介绍SIGIR 2018论文《Improving Sequential Recommendation with Knowledge-Enhanced Memory Networks》

引言

经常上购物网站时,注意力会被首页上的推荐吸引过去,往往本来只想买一件小商品,但却被推荐商品耗费不少时间与金钱。有时候会在想,虽然推荐商品挺吸引人的,但是它究竟为什么给出这些推荐,背后的原因却往往不得而知。本文将介绍的这篇SIGIR 2018论文提出了新的序列化推荐模型KSR(Knowledge-enhanced Sequential Recommender),利用了知识图谱与记忆网络,在提高推荐结果准确性的同时,还能捕捉更为细致的用户偏好,提高推荐系统的可解释性。

问题背景

相信推荐系统对大家并不陌生,众多互联网公司也花了大功夫在构建推荐系统上。为了给出精准的推荐,首先需要把握用户在想什么,对什么感兴趣,而这往往不是一成不变的,会随着用户在平台上的活动而日益变化。鉴于此,相较于以往的协同过滤等推荐方式,学术界提出基于时序神经模型的序列化推荐系统,利用循环神经网络RNN来捕捉用户兴趣点随着时间的动态变化。

在序列化推荐建模中,通常将用户过去的交互记录作为输入,利用隐状态向量来编码各个交互记录,以此来表示用户在序列中体现的偏好。但是,这种方法有两个不足之处

  • 只考虑了用户序列偏好,却忽视了细致的用户偏好,如用户具体喜欢某个物品的哪个属性等;
  • 推荐过程中的隐含特征向量表示过于抽象,难以解释其推荐结果。

解决思路

本文的主要贡献在于用使用了融合知识库信息的记忆网络,通过细致地刻画用户对物品属性偏好提高准确率的同时,还增强了推荐系统的可解释性。

为了捕捉用户对物品属性偏好与增强可解释性,本文将知识库信息与商品信息结合。

为了将知识库信息与融入推荐系统,本文使用了键值对记忆网络(Key-Value Memory Networks)。

具体做法

因为从用户与商品的交互记录中只能体现出商品的隐语义模型,还不够更细粒度地刻画用户对商品的偏好,于是,本文借助知识库(knowledge base)中的实体(entity)信息来表示推荐物品在不同属性的特征,这样既可以更为细致地刻画物品,又可以增强可解释性。如一首歌曲拥有歌手、专辑等属性,通过知识库我们可以得知这些属性对应的具体实体,来利用embedding的方式(如TransE)可以将这个实体在知识库中的上下文信息(context)转化成一个嵌入向量(embeddings),也就是特征表示向量。本文选用的知识库是FreeBase,将数据集中的商品与知识库中已有的实体连接在一起。至此,每个物品除了有由交易历史得到的一个特征表示向量之外(此处本文使用bayesian personalized ranking),在其每个属性之上还会获得一个特征表示向量。

至于实体中的特征表示向量如何得到,这里以TransE为例进行说明。知识库中每一条数据都是一个三元组,每个三元组包含两个实体及实体间的关系,如(头实体A,关系R,尾实体B)。我们希望实体A+关系R与实体B在空间中的表示尽可能接近,英剧福尔摩斯(头实体A)+主演(关系R)应该约等于本尼迪(尾实体B)。

实体福尔摩斯关系主演实体本尼迪

与现实理解不同的是,在知识库中每个实体与关系都是空间中的向量,我们以三元组的误差最小化为来训练即可得到对应的特征表示向量。但现在有个问题,主演不仅包含本尼迪,还有马丁,那么这样如何区分本尼迪与马丁的不同呢?本文对于每个目标实体,不直接使用目标实体的特征表示向量,而是使用物体特征表示向量+关系特征表示向量的方式。例如,对于本尼迪,不直接使用本尼迪的特征表示向量,而是使用英剧福尔摩斯+主演的特征表示向量和来作为阿凡达影片导演属性的特征表示向量。如下式就代表物品i的a属性

由物品i的实体 及其与属性a

的关系之和来表示。

当然,每个物体拥有那么多属性,将每个属性的特征表示向量全部都拼接在一起,计算量太大。本文将每个属性向量加权后求和,得到一个向量

来表示每个用户的细粒度兴趣,这里的权重

为用户对每个属性的关注程度,权重与属性的键

和当前序列偏好有关,如下式所示:

那么,在解决了细粒度表示与解释性问题之后,就要开始考虑如何将其与序列化推荐模型结合在一起。本文利用门控循环神经网络(Gated Recurrent Unit,简称GRU)来构建序列化推荐模型,然而GRU尽管可以记忆相邻几个节点的信息,但对于长期记忆存储知识库实体信息来说,GRU的记忆还是过于短暂。因此,本文引入了记忆网络(Memory Networks)来存储不同属性的信息,与知识库交互。

记忆网络利用精确的记忆机制来解决神经网络的信息记忆问题。它使用外部数组来存储要被“记忆”的数据,这个数组可以被神经网络反复读取,存储在数组中的信息也可以被更新或者扩展。本文使用记忆网络来管理物品属性时,考虑到物品的每个属性相对独立,本扩展了基础的记忆网络,使用键值对记忆网络(Key-Value Memory Networks,KV-MN)来更好的使用信息,其中,键为知识库中的关系(relation),值为对应的实体。需要注意的是,键因为表示的是物品与属性的关系,与用户无关,因此所有用户共享相同的键矩阵;而不同的用户对于不同属性的偏好有着较大差别,故值矩阵为用户私有,每个用户都有自己的值矩阵。由此不难发现,推荐模型中的物品,记忆网络中的键值对,正好与知识库的三元组相对应(物品,键(属性),值)。

现在问题转化为记忆网络与GRU的结合问题。为了同时考虑用户序列偏好与商品属性偏好,在GRU推荐的每一个节点,均可以得到一个序列偏好表示向量,利用该向量对键值对记忆网络进行查询,便可得到用户对每个属性的偏好表示。将两个向量拼接在一起得到的新向量,就可以更为全面地刻画用户的属性,既包括用户在序列中的偏好,又体现用户对物体属性的细致偏好。大致的流程可以参照下图:

模型整体框架图

由上图还可以看到,对于键值对记忆网络,有个写入(write)和读取(read)的过程,这同时也是记忆网络最基本的操作之二。对于读取操作,根据之前所说,需要输入一个查询,也就是当前时刻的序列偏好向量

,根据这个向量,按照前文所述,将序列偏好向量与属性偏好项量加权求和之后即得到最终的偏好向量

对于写入操作,目的是根据当前时刻感兴趣的物品来更新对各个属性的兴趣程度,于是就需要同时考虑两方面因素,当前物品的特征表示向量和当前用户的属性偏好向量。为了决定每个属性应该更新多少信息,本文先计算得到了一个门向量 z_a ,通过该门向量来对属性偏好向量进行更新。门向量的考量因素是物品特征表示向量

与对应属性的特征表示向量,具体见下式:

经过这样的更新,本文模型就可以在用户的属性级别上长期检测用户兴趣偏好,并及时更新纳入推荐系统。写入操作具体如下:

本文的模型如下图所示:

详细模型图

首先,GRU网络根据短程记忆得出用户序列兴趣表示向量;接着,键值对记忆网络根据GRU的表示向量与商品本身的特征表示向量得到细致的用户偏好特征表示向量,并于序列兴趣向量连接;最后,根据用户对各个兴趣的权重,即可解释推荐系统产生推荐的原因。

具体如何体现模型的解释性可以见下图:

推荐过程阐述图

图中最上方的代表时间轴;第二行代表每个商品所具有的属性,也就是记忆网络中的键,此处以歌手和专辑为例;第三行为每个属性所产生的推荐列表。从图中第二行可以发现,一开始初始化时,推荐系统觉得用户更喜欢歌曲的专辑(一开始歌手权重较小,方框颜色较浅,专辑权重较大,颜色较深);后来随着时间的推移,推荐系统渐渐发现用户更喜欢歌曲的歌手而不是专辑(歌手方框颜色变深,专辑变浅)。从第三行可以发现,一开始推荐系统的判断是错误的,产生的推荐列表也不那么准确,但是时间越长,判断也趋向于准确,并且也给出了推荐理由,用户想听这个歌手的歌而不是这个专辑的歌。

原文:利用知识图谱让你知道推荐系统在想什么 - 知乎

三、装配模型

装配是指将零件按规定的技术要求组装起来,并经过调试、检验使之成为合格产品的过程,而装配实体是通过计算机辅助技术进行设计实现。计算机辅助技术包括计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助教学(CAI)、计算机辅助质量控制(CAQ)、计算机辅助测试(CAT)等诸多计算机辅助技术。

首先在大型制造业中广泛应用,其后逐步推广到微电子、轻工业等产品制造业以及城建等工程项目中。1990年以来,计算辅助技术更加强调收集信息以及致力于成为资源平台,在此推动下,涌现出了许多成熟的集各项辅助技术于一身的商业软件,如I-DEAS,UG等。

随着技术的不断发展、工业设计经验的丰富以及工业设计模式需求的升级,传统设计软件所持有的技术正在经历着前所未有的发展机遇和挑战,也正在积极地向基于大数据基础的人工智能发展。

传统的装配设计通常分为以下4个步骤:功能设计、材料选取、工艺设计、结构设计,因此设计一个装配需要设计人员有丰富的机械知识与设计经验,与此同时,还需要掌握设计软件中大量复杂的操作,从而使得产品的设计效率和质量上强依赖于设计人员。因此传统装配设计的弊端有两个:1)强依赖于涉及人员的设计经验,设计人员设计不同领域设计产品受限;2)设计软件操作步骤复杂,缺乏智能化。通过构建装配设计的知识图谱能够有效解决以上两个弊端,进而提升设计的效率与质量。

工业装配知识图谱属于行业知识图谱,具有较高的专业性,本文选择工业中汽车发动机装配作为细分领域来构建装配的知识图谱。装配相关数据的来源分为3种:结构化的装配本体数据、半结构化的装配异常错误数据、非结构化的装配设计规则数据。因此,汽车发动机装配图谱的构建使用自顶向下和自底向上相融合的方式。其构建架构如图1所示。

图1 装配图谱构建架构图

1装配知识抽取

对于结构化的数据而言,使用自底向上的构建方式。首先从后缀名为.prt的三维图面档案中抽取出装配信息,包括涉及到的零件、零件所属的类类型、零件的材料、零件的尺寸、零件间的关系和零件名称,将提取到的信息根据本体构建成结构为〈零件,关系,属性〉的RDF,最后通过人工校核。

半结构化和非结构化的数据使用自然语言处理技术,根据语言学规则进行抽取数据,从异常错误装配日志和汽车发动机设计规范的纯文本文件内容中完成实体抽取、关系抽取和属性抽取。

表1 汽车发动机实体

1)实体抽取。抽取的部分实体如表1所列。

2)关系抽取从文本数据中识别提取出实体之间的连接关系,通过这些关系将发动机各部件实体连接起来,形成发动机零件间的网状知识结构。部分关系抽取结果如表2所列。

表2 汽车发动机零件间关系

3)属性抽取则是从各个零件的装配信息中抽取诸如材质、大小等信息作为实体或关系的补充信息。部分属性抽取结果如表3所列。

表3 对象属性

通过MySQL完成结构化的数据处理,通过NLP完成非结构化数据的格式化最终得到较为完整的汽车发动机相关知识信息。

2装配知识融合

知识融合的作用主要是实现实体链接和实体对齐,从装配异常数据和装配设计规则数据中提取出来的知识可能存在大量的模糊或冗余信息,因此通过知识融合,可以将近义词进行整合,对歧义词进行消除,从而提升知识的准确度。

1)关于实体连接,实际上是在抽取出实体的基础上进行实体消歧,将非准确化的描述和标准描述建立实体连接。本文采用空间向量模型的方式来进行实体连接,计算实体和实体分类集合间的余弦相似度,来实现实体消歧。

2)关于实体对齐,是将多个异构数据源的但是表示显式世界中相同的实体进行合并。本文采用局部集体实体对齐的方式,通过赋予实体属性不同的权重,加权求和后,获得两个实体间的相似度,从而进行实体对齐。

3 知识存储与更新

本文通过Neo4j数据库实现三元组数据的存储,通过可视化的方式构建出最终的工业装配知识图谱。构建结果如图2所示。从图2中可以看出发动机的设计围绕着气缸体进行构建。

图2 发动机装配图谱

4 工业装配知识图谱的应用

知识图谱在工业装配领域的应用可以在机械设计方面进行效率以及质量上的提升,目前知识图谱在金融、医疗、互联网以及电商领域都得到了广泛的应用,但是在制造业和工业领域还处在初探阶段。本文提出的装配知识图谱主要可应用于如下两个方面。

1)装配设计辅助决策

现代工业装配的设计多数通过计算机辅助技术来进行设计,设计过程依赖于设计人员的专业知识与设计经验,装配知识图谱的构建,可以在装配设计过程中根据知识库中存储的装配知识以及关联关系,给当前装配设计予以辅助推荐和决策,减少设计人员的强依赖性,提高设计效率。

2)装配设计异常警告

装配在设计过程中常常会出现设计细节的问题,通过装配知识图谱,可以根据当前设计零件存储的关联关系知识,预判出当前操作是否有可能发生异常,从而给设计人员以提示,在一定程度上避免了装配设计缺陷,提升了装配的设计质量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值