NLP与LLM的工程化实践与学习思考[24年半年工作总结] - 说说知识图谱
- [0 真的就是先说说](#0 真的就是先说说)
- [1 为什么知识图谱](#1 为什么知识图谱)
- [2 如何搭建知识图谱?](#2 如何搭建知识图谱?)
-
- [step1 从知识库中抽象出实体与关系的属性(知识建模)](#step1 从知识库中抽象出实体与关系的属性(知识建模))
- [step2 确定基于图的知识表示(知识表示模型)](#step2 确定基于图的知识表示(知识表示模型))
- [step3 将属性图/RDF图存储到图数据库中(知识存储)](#step3 将属性图/RDF图存储到图数据库中(知识存储))
- [step4 将知识库中的知识抽取为一个个的三元组(知识抽取)](#step4 将知识库中的知识抽取为一个个的三元组(知识抽取))
- [step5 知识融合](#step5 知识融合)
- [3 怎么用已经搭建好的知识图谱?](#3 怎么用已经搭建好的知识图谱?)
-
- [3.1 知识推理](#3.1 知识推理)
- [3.2 知识应用](#3.2 知识应用)
0 真的就是先说说
知识图谱作为在大模型风靡之前,NLP领域的当红炸子鸡,大家几乎都或多或少听过或接触过。医疗、药物、法律条文、金融等等等等,只要能想到的,现在几乎都能直接找到对应的公开图谱。
如果仅仅只是想要搭建一个图谱,现在很轻松就可以实现,无论是百度还是华为,依托于自身对大量小模型的都提供了非常完整的从结构化、半结构化数据中直接生成图谱的商用pipeline,充钱就会变强√。
but,显然对数据安全和保密要求比较高的行业和公司,自己动手,丰衣足食。
现在也有很多有意思的开源项目,自动化的生成知识图谱,放几个地址,想玩的话可以试一下。
- whyhow-ai:knowledge-graph-studio 这个项目实现基于规则的实体解析和模块化图构建
- GraphRAG-SDK 这个项目用大模型自动抽取知识关系来搭建图谱
现在开源的项目主要也聚焦在自动化搭建流程上。不过今天想说的重点不在这儿。经常工程化的朋友都知道,想使用一个通用模型来解决一个专有领域的应用基本上不可能O(∩_∩)O。
1 为什么知识图谱
什么是知识图谱?
-
知识图谱的前世今生:
- 知识图谱的早期理念源于万维网之父Tim Berners-Lee关于语义网 (The Semantic Web)的设想,旨在采用图结构(Graph Structure)来建模和记录世界万物之间的关联关系和知识,以便有效实现更加精准的对象级搜索。知识图谱的相关技术已经在搜索引擎、智能问答、语言理解、推荐计算、大数据决策分析等众多领域得到广泛的实际应用。近年来,随着自然语言处理、深度学习、图数据处理等众多领域的飞速发展,知识图谱在自动化知识获取、知识表示学习与推理、大规模图挖掘与分析等领域又取得了很多新进展。知识图谱已经成为实现认知层面的 人工智能不可或缺的重要技术之一。
-
通俗地讲,知识图谱就是把所有不同种类的信息(Heterogeneous Information)连接在一起而得到的一个关系网络。
-
怎么理解知识图谱?
- 知识图谱的基本组成:
(节点-边-节点)
,每个节点表示现实世界中存在的"实体",每条边为实体与实体之间的"关系"。 - 可以将知识图谱看做是知识的一种离散符号表示,基于知识图谱的符号推理可以较为精准地定位答案。然而,符号推理对于语言的歧义性和噪声数据不够鲁棒。深度学习的发展推动了知识图谱的神经推理方法,能够弥补符号推理的缺陷,但推理的复杂度受限,且缺乏符号推理优秀的解释能力。
- 总的来说,知识图谱旨在利用图结构建模、识别和推断事物之间的复杂关联关系和沉淀领域知识。
- 知识图谱的基本组成:
基于图的数据结构?基于数据结构的图?
------ 知识图谱到底是数据,还是数据结构?
知识图谱本质: 一种结构化的知识表示形式
即: 知识图谱是用某种结构来描述知识的一种表示形式。它的基本组成:三元组
- 此处之所以没有明确表述是图结构还是表结构,且看后文。只是我们概念中的知识图谱,也即后文所述知识图谱均指图结构。
Question
:如果基本组成就是三元组,用来描述实体以及实体与实体之间的关系,那知识图谱和表有什么区别,为什么单独提出知识图谱?似乎在基础应用上,比如:想要获取小猫行为与铲屎官之间关系,使用表还是使用图都没有区别?
-
举个🌰:
我使用表结构也能描述三元组关系:
表征 钱包空空 幸福 愤怒 我儿是靓仔 抓沙发 0 0 1 0 小猫呼噜 0 1 0 1 肠胃炎 1 0 0 0 如果使用图结构来描述三元组关系:
(抓沙发 ,表征,愤怒) (小猫呼噜,表征,幸福 ) (小猫呼噜,表征,我儿是靓仔) (肠胃炎 ,表征,钱包空空)
-
看到这里,是不是感觉很乱,我们不是想知道什么是知识图谱吗,似乎还是无法解释什么是知识图谱?
- 还记得这一句话么:
知识的表示形式
,也就是说,无论是知识图谱还是表,都只是一种表现形式。 - 所以,粗浅的概括,就是知识图谱是描述知识库的一种表现形式,与其它表现形式相比它具有很多优势:
- 可以精炼、直观(相较于数据表更易于可视化)的描述一个复杂知识库
- 可以直观的使用知识图谱进行数据挖掘
- 可以有效实现更加精准的对象级搜索 ...
- 对于机器而言,图结构比文本更加友好。深度学习或者更为准确地说是表示学习的兴起,表明参数化的向量和神经网络是更适合机器完成快速计算的信息载体。比如,在自然语言中,可以为每个词学习一个向量表示;在图像处理中,也可以为视觉场景中的每一个对象学习一个向量表示;在知识图谱中,可以为每一个实体和关系学习一个向量表示。
- 还记得这一句话么:
-
是不是更疑惑了,知识图谱,图数据,图数据库,三元组...这些概念究竟有什么关系?又有什么区别?
-
三元组怎么又和向量表示扯上关系了?
-
什么又是表示学习?
-
不要慌,先记住这些概念,当然,可以很明确的抓住一个重点:向量,往后看。
知识图谱的技术要点
要解释上面的问题,就要先明确知识图谱究竟有哪些技术点,从技术点入手,去理解知识图谱干了什么?知识图谱能干什么?
两个技术维度:知识、图
-
从知识的角度:源于传统AI的知识表示与推理领域,关心怎么表示概念和实体,怎样刻画它们之间的关系,怎样进一步表示公理、规则等更加复杂的知识。
-
从图的角度:源于知识图谱的互联网基因,关心图中的节点、边、链接、路径、子图结构,怎样存储大规模的图数据,怎样利用图的结构对图数据进行推理、挖掘与分析等。
七个技术要点:表示、存储、抽取、融合、推理、问答和分析
- 表示:最基本的属性图表示和RDF图模型,以及更复杂知识的OWL本体表示和规则知识建模。
- 存储:怎样利用已有的关系数据库存储知识图谱,也涉及性能更高的原生图存储、图查询语言等。
- 抽取:怎样从文本中抽取概念、识别实体以及抽取三元组和事件等更为复杂的结构化知识。
- 融合:怎样实现本体映射和概念匹配,以及实例层的实体对齐等技术。
- 推理:基于传统符号逻辑的推理技术,以及新兴的基于表示学习和神经网络的推理技术。
- 问答:问句理解、语义解析、答案生成和实体链接等多个智能问答领域的技术。
- 分析:涉及传统的图算法,以及利用图嵌入、图神经网络等技术对知识图谱数据进行深度挖掘和分析等方面的技术。
在解决一个实际问题时,通常仅需要用到其中若干技术的组合。
所以,到这里有不有一点感觉了,到底什么是知识图谱:
知识图谱是一种对知识的表示形式。
将知识抽象为实体与关系;从知识库中抽象出实体与关系的属性;使用三元组这一基本单元描述实体与实体之间的关系;然后将知识库中的知识抽取为一个个的三元组;我们使用属性图/RDF图模型来表示三元组;将属性图/RDF图存储到数据库中。
然后将抽象出来的数据,进行推理、问答和分析等,以实现我们的任务。
可以说,知识图谱在广义上描述一个技术领域,该领域涉及表示、存储、抽取、融合、推理、问答和分析等所有技术要点和概念。在狭义上描述的是一种知识库,它的直观的表现为图结构的数据。
知识图谱能做什么?
QA问答
搜索引擎+推荐算法
逻辑决策辅助
关联挖掘+根因分析
2 如何搭建知识图谱?
知识图谱的基本单位 ,是"实体(Entity)-关系(Relationship)-实体(Entity)"构成的三元组。
通常将知识图谱划分为两个层次:数据层和模式层。
· 数据层 :存储真实的数据。如 小猫肠胃炎 - 表征 - 钱包空空。
· 模式层: 在数据层之上,是知识图谱的核心,存储经过提炼的知识,通常通过本体库来管理。即: 实体-关系-实体,实体-属性-性值。
建知识图谱是一个迭代更新的过程,根据知识获取的逻辑,每一轮迭代包含:知识储存、信息抽取、知识融合、知识计算,四个阶段。
1、知识存储: 针对构建知识图谱设计底层的存储方式,完成各类知识的存储,包括基本属性知识、关联知识、事件知识、时序知识、资源类知识等。存储方式的忧虑将直接导致查询效率和应用效果。
2、信息抽取: 从各种类型的数据源中提取出实体、属性以及实体间的相互关系,在此基础上形成本体化的知识表达。
3、知识融合: 在获得新知识之后,需要对其进行整合,以消除矛盾和歧义,比如某些实体可能有多种表达,某个特定称谓也许对应于多个不同的实体等。
4、知识计算: 对于经过融合的新知识,需要经过质量评估之后(部分需要人工参与甄别),才能将合格的部分加入到知识库中,以确保知识库的质量。
用一张图可以明确表示知识图谱建立的整体流程以及技术要点:
那么,如何完成从0->1->100的过程呢?
key:0->1
还记不记得在上面阐述了知识图谱的概念:
- 将知识抽象为实体与关系;
- 从知识库中抽象出实体与关系的属性;
- 使用三元组这一基本单元描述实体与实体之间的关系;
- 然后将知识库中的知识抽取为一个个的三元组;
- 我们使用属性图/RDF图模型来表示三元组;
- 将属性图/RDF图存储到图数据库中。
这也是我们要做的0->1的过程。
step1 从知识库中抽象出实体与关系的属性(知识建模)
基于行业的应用属性、知识特点、实际需求,依据知识图谱的模式进行业务抽象和业务建模,主要是++实体定义、关系定义、属性定义++。
举个🌰:
实体属性:
{
"猫行为" : 1,
"人行为" : 2
}
实体关系:
{
"影响": 1,
"原因": 2
}
关系模型:
id | subject_type | relation_type | object_type |
---|---|---|---|
0 | 猫行为 | 原因 | 人行为 |
1 | 猫行为 | 影响 | 人行为 |
step2 确定基于图的知识表示(知识表示模型)
最常用的三元组表示方法有属性图
和RDF图
两种。这两种表示方法都基于一个共同的图模型------有向标记图(Directed Labeled Graph),知识图谱就是基于有向标记图的知识表示方法。
-
属性图:
-
属性图是图数据库中常见的一种数据模型,它在图的节点和边上添加了属性信息,以丰富图结构中的数据。
-
在属性图中,每个节点和边都可以有零个或多个属性,属性用于描述节点和边的特征、属性或元数据。
-
举个🌰:
(HeartDisease)-[:hasSymptom]->(ChestPain) (HeartDisease)-[:hasSymptom]->(ShortnessOfBreath) (HeartDisease)-[:treatedBy]->(Aspirin) (Aspirin)-[:belongsTo]->(Medication) (ChestPain)-[:belongsTo]->(Symptom) (ShortnessOfBreath)-[:belongsTo]->(Symptom)
假设我们要描述疾病和药物之间的治疗关系,并希望在关系中添加可靠性权重,表示治疗效果的可信程度:
(HeartDisease)-[:treatedBy {reliability: 0.9}]->(Aspirin)
我们在关系描述中使用了属性来表示关系的可靠性权重。
:treatedBy
是疾病和药物之间的治疗关系,{reliability: 0.9}
表示了这个关系的可靠性权重为0.9,即治疗效果的可信程度为90%
-
-
RDF图:
-
主要用于网络信息
-
通常以平坦的三元组形式存储在三元组数据库中,每个三元组表示一个关系或语义描述。
-
举个🌰:
@prefix : <http://example.org/medical#> . :HeartDisease a :Disease ; :hasSymptom :ChestPain ; :hasSymptom :ShortnessOfBreath ; :treatedBy :Aspirin . :Aspirin a :Medication . :ChestPain a :Symptom . :ShortnessOfBreath a :Symptom
-
-
除此之外还有OWL等表示模型,OWL是基于RDF的一种更为复杂和强大的知识表示语言。它支持更丰富的数据类型和关系,包括类、属性、个体等,并能表达复杂的++逻辑关系++,如等价类、属性限制等。OWL的优势在于其表达能力和逻辑推理能力,适用于构建复杂的领域知识图谱。OWL 本体可以转化为 RDF 三元组的形式进行存储,此处不多赘述。
step3 将属性图/RDF图存储到图数据库中(知识存储)
上面我们介绍了,最常用的知识图谱表示方法有属性图
和RDF图
两种。
如何存储我们的图?
- 图数据库充分利用图的结构建立微索引。这种微索引比关系数据库的全局索引在处理图遍历查询时更加廉价,其查询复杂度与数据集整体大小无关,仅正比于相邻子图的大小。因此在很多涉及复杂关联和多跳的场景中得到广泛应用。
- 这里需要说明的是++,图数据库并非知识图谱存储的必选方案++。
如何使用数据库存储三元组数据?
-
RDF数据的存储:
-
存储结构:RDF数据通常以平坦的三元组形式存储在三元组数据库(关系表数据库)中,每个三元组表示一个关系或语义描述。
-
存储格式:常见的RDF存储格式包括N-Triples、Turtle、RDF/XML等,用于序列化和交换RDF数据。
-
RDF数据也可以被存储在图数据库中,但是需要映射,因为图数据库天然支持图结构数据的存储和查询,而RDF数据正是以图的形式来表示资源之间的关系。
-
查询:
-
查询语言:RDF数据通常使用SPARQL查询语言进行查询,SPARQL支持对RDF图进行模式匹配、数据过滤和推理等操作。
-
查询方式:SPARQL查询可以针对RDF图中的实体、属性和关系进行复杂的查询和分析,支持多种查询模式和语义推理功能。
-
-
-
属性图数据的存储:
- 存储结构:属性图的数据模型更接近于图数据库的原生数据结构,它可以更直接地映射到图数据库中的存储和查询实现。通常以图数据库的形式存储,图数据库将数据存储为节点、边和属性的集合
- 存储格式:一些流行的图数据库包括 Neo4j、TigerGraph、Amazon Neptune 等
- 图数据库是专门用于存储和处理图结构数据的数据库系统,它采用了图(Graph)数据结构来表示知识图谱中的实体、属性和关系。图数据库通常包含节点(Node)和边(Edge)两种基本元素,节点表示实体,边表示实体之间的关系,节点和边都可以附带属性。
- 查询:
- 查询语言:图数据库通常使用自己的查询语言或API来进行图查询,如Cypher、Gremlin等。
- 查询方式:图查询语言可以针对图中的节点、边和属性进行灵活的查询和分析,支持节点遍历、图搜索、图匹配等操作。
总结一下子:
特点 | RDF | OWL | 图数据库 |
---|---|---|---|
语义表达 | 一般 | 高 | 一般 |
推理功能 | 一般 | 高 | 一般 |
查询效率 | 一般 | 一般 | 高 |
数据可视化 | 一般 | 一般 | 高 |
复杂性 | 一般 | 高 | 高 |
存储开销 | 一般 | 高 | 高 |
step4 将知识库中的知识抽取为一个个的三元组(知识抽取)
信息抽取(infromation extraction)信息抽取是一种自动化地从半结构化和无结构数据中抽取实体、关系以及实体属性等结构化信息的技术。关键技术包括:实体抽取、关系抽取和属性抽取。
也即,从数据源抽象出表述为实体(Entity)-关系(Relationship)-实体(Entity)
的知识。
可以简要的细分为以下三个方面:
1、实体抽取 ,也称为命名实体识别(named entity recognition,NER),是指从文本数据集中自动识别出命名实体。
2、关系抽取, 为了得到语义信息,从相关语料中提取出实体之间的关联关系,通过关系将实体联系起来,才能够形成网状的知识结构。
3、属性抽取, 目标是从不同信息源中采集特定实体的属性信息,如针对某个公众人物,可以从网络公开信息中得到其昵称、生日、国籍、教育背景等信息。采用数据挖掘的方法直接从文本中挖掘实体属性和属性值之间的关系模式,据此实现对属性名和属性值在文本中的定位。
-
这三个方面可以合并为实体关系抽取任务
-
关于知识抽取,后续专门用一个章节来讲。实际上知识图谱建立整个过程中,最麻烦和最大的工作量都来源于此。
至此,0->1
的过程就完成了。但是不可能从1->100
的过程直接完成了。因为在上述过程中我们会遇到一些亟待解决的问题:
- 自动的知识抽取过程中,如何解决错误/冗余数据?
- 如何解决同名实体的歧义问题?
- 如何解决多个指称对应同一实体的问题?
为什么不把解决这些问题放到0->1
的过程中?因为不解决这些问题,对我们的图谱来说只是有些冗余,并且描述精准度会降低。但不是不能用。
step5 知识融合
通过信息抽取,实现从原始数据中获取到了实体、关系以及实体的属性信息后,就需要通过知识融合对数据进行逻辑归属和冗杂/错误过滤。即需要实体链接 和知识合并两个流程实现。
1、对非结构化/半结构化数据处理:实体链接 (entity linking)的流程是通过给定的实体指称项, 通过 相似度计算 进行 实体消歧和共指消解, 确认正确实体对象后,再将该实体指称项链接到知识库中对应实体。其中 实体消歧 解决同名实体产生歧义问题,共指消解解决多个指称对应同一实体对象的问题。
2、对结构化数据处理:知识合并主要涉及"合并外部知识库",处理数据层和模式层的冲突;以及用RDB2RDF等方法"合并关系数据库"
这五步骤完全完成,才是真正0->1的过程。
3 怎么用已经搭建好的知识图谱?
3.1 知识推理
我们在上面讨论过知识图谱能做什么,有一点抽象。那么现在阐述的就是能做什么的具象化表达:
- 知识图谱推理的目标是
利用图谱中已经存在的关联关系或事实来推断未知的关系或事实
。
还是有一点抽象?
再细化一点:
- 推理可以用来实现链接预测、补全缺失属性、检测错误描述和识别语义冲突,以提升图谱质量等。
- 在查询和问答中,推理可以用来拓展问句语义,提高查询召回。
- 在推荐计算中,推理可用来提升推荐的精准性和可解释性。
- 此外,推理在深度语言语义理解和视觉问答中也扮演着必不可少的角色。凡是包含深度语义理解的任务都会涉及推理的过程。
在介绍推理算法之前,我们回顾一下关于图的定义:
图通常由节点集合V、边集合E组成,图中可能存在R种类型的边,每条边可以描述为一个由节点和边类型组成的三元组。不同的图按照图结构和类型有不同的分类。按图结构可分为有向图或无向图,有环图或无环图,带权重图或不带权重图,以及稀疏图或稠密图。按类型可分为同构图,即图中只有一种类型的节点、一种类型的边,以及异构图,即图中存在多种类型的节点或多种类型的边。
当前,在知识图谱中实现推理大致可以分为基于符号逻辑的方法
、基于机器学习的方法
和基于表示学习的方法
。(陈华均老师在《知识图谱导论》一书中分为基于符号逻辑的方法和基于表示学习的方法,私以为,为了区分传统智能算法与神经网络算法实现,此处另区分了基于机器学习的方法,实际都是机器学习算法)传统基于符号逻辑的方法的主要优点是具备可解释性,主要缺点是不易于处理隐含和不确定的知识。基于表示学习的方法的主要优点是推理效率高且能表征隐含知识,主要缺点是丢失可解释性。
到底如何实现推理🤔️?
-
基于符号逻辑的方法:
-
基于本体公理:例如,定义一条代表类别之间包含关系的公理:"人工智能公司rdfs:subClassOf高科技公司",或者定义一条领域公理,声明投资关系的"domain"是投资人。利用这些简单的公理就可以实现一些简单的演绎推理了。比如,如果知道谷歌是一家人工智能公司,就可以应用第一条公理推理得出谷歌也是一家高科技公司。这种基于符号本体实现的演绎推理一个特点是很精确,并且不存在可解释的问题,因为每一个推理得出的结论都可以回溯和给出推理的过程。
-
这些方法通常使用逻辑推理规则,例如谓词逻辑、规则逻辑等,根据已知的事实和规则进行推理。
-
典型的方法包括基于规则的推理、语义推理和概率逻辑推理等。这些方法通常基于专家知识和领域本体进行推理。
-
常用算法:Tableaux算法、Datalog、产生式...(不多赘述,感兴趣可以去看书)
-
怎么把知识图谱用到机器学习,深度学习上🤔️?
-
基于机器学习的方法:
- 图遍历:通过遍历图中的节点和边,探索节点之间的关系,从而发现新的知识。图遍历可以是深度优先搜索(DFS)或广度优先搜索(BFS)等算法。
- 图匹配:在图中寻找与给定模式相匹配的子图,从而发现具有相似结构或属性的节点或子图。常用的图匹配算法包括子图同构算法和子图搜索算法。
- 路径推理 :通过寻找节点之间的路径,发现节点之间的关联性和潜在的推理规则。路径推理可以基于图的拓扑结构,也可以考虑路径上的属性信息。即
如果在路径和节点加上置信度属性,就可以把知识推理转化为最短路径问题
,可以使用蚁群、A*、Dijkstra算法实现。 - 社区发现算法:复杂图的一个相当普遍的特征是,它们由节点集组成,这些节点集相互之间的相互作用比与该组外部节点之间的相互作用更多。例如,社交网络可能由紧密联系的朋友社区组成,而不同社区之间的友谊关系却很少。
什么是表示学习方法呢🤔️?
还记得上面提到的表示学习和向量吗,重点就在向量:
-
向量化的表示已经在人工智能的其他领域非常常见,例如在自然语言处理中,可以为句子中的每个词学习一个向量表示(Word Embedding),在图像视频中也可以为每个视觉对象学习一个向量表示。对于知识图谱,也可以为其中的每一个实体和关系学习一个向量表示,并利用向量、矩阵或张量之间的计算,实现高效的推理计算。
-
TransE和DistMul等知识图谱嵌入系列模型。这些模型的基本思想是将知识图谱中的实体和关系都投影到向量空间。
-
首先要明确几点,我们说表示学习(或者说机器学习),可以将所有模型描述为一个万能函数拟合器,我们要如何选取这个拟合函数呢,那就一定要有一个优化目标。
<这一块儿内容太多了就不放上来了,经典解决方案,可以搜搜看, TransE, TransH等等,很多>
现在对向量表示有一点概念了,我们再来说这些方法。这里要提醒一点,我们在这段落讨论的所有内容都是为一件事服务:推理
-
表示学习的主要方法:
-
知识图谱表示学习算法主要基于不同的假设设计损失函数,并学习实体及关系的向量表示。比如我们上面讨论的TransE和DistMult就是知识图谱表示学习算法。为什么单独强调是知识图谱表示学习算法 ,因为我们还有一个概念:图表示学习
-
什么是图表示学习呢🤔️?
- 图表示学习主要对图的结构进行学习,即使是Metapath2vector等异构图表示学习模型,都更多地考虑图结构特征对节点表示的影响。
-
那我们现在可以说他们的异同:
- 图表示学习主要++考虑图本身的结构特征++ ;知识图谱表示学习++不仅要考虑图的结构特征,还需要考虑节点和边的语义类型信息++。
- 此外,图,表示学习侧重做++节点分类、链接预测++ 等任务,而知识图谱表示学习的最终目标是要支持更为复杂的++逻辑推理++,因而对模型要求更高。
-
图表示学习是要利用表示学习技术,将图中的每个节点映射到低维向量空间,得到一个向量表示,这个向量表示能够反映原先图谱的一些结构特性或语义特性。同一类型的节点用相同的颜色表示,经图表示学习算法映射后,相同类型的节点在低维向量空间中呈现聚类的特点。
-
总的来说,图表示学习算法都是利用节点在图上的邻居节点信息和图的结构信息学习节点的表示。
- 基于图的表示学习(Graph Representation Learning):这些方法利用图的拓扑结构和属性信息,学习节点和边的向量表示。常见的方法包括 DeepWalk、Node2Vec、GraphSAGE 等。
- 图神经网络(GNN)(Graph Neural Networks):GNN 是一种特殊的神经网络模型,专门用于学习图数据的表示。GNN 模型通过迭代地聚合节点的邻居信息,将节点表示更新为包含邻居信息的新表示。常见的 GNN 模型包括 GCN(Graph Convolutional Networks)、GAT(Graph Attention Networks)等。
- 节点分类和链接预测:这些任务通常利用学习到的节点表示进行进一步的分析和预测。例如,可以利用学习到的节点表示进行节点分类(预测节点的类别)或链接预测(预测节点之间是否存在边)等。
- 图嵌入:TransE、DistMult等
- 增强语义解析框架的方法------STAGG
推理方法介绍完了,还是有点抽象。现在我们知道了表示,知道了推理方案,还有一点没有落实,那就是应用。
我们在这段落讨论的所有关于推理的内容都是为一件事服务:应用
3.2 知识应用
看了上面阐述的知识推理相关的内容,是不是就有一点应用的感觉了?
比如说在上面说的:
- KBQA问答
- 搜索引擎+推荐算法
- 逻辑决策辅助
- 关联挖掘+根因分析
实际上应用就是把我们的实际业务涉及到的,如何使用知识图谱的问题,抽象为数学问题,然后利用上述知识推理的技术方法,去实现我们的目的。
啊,具体的业务场景就不举例了,贴个博客金融图谱应用,诸位可以找找感觉。
例子概括一下思路就是:
1、整个业务场景可以抽象为哪几种业务模式,比如说上面金融图谱的应用,从涉及图谱的角度出发,可以分为:
- 子图冲突检测(反欺诈)
- 社区发现(反欺诈)
- 多级概率推理(风险预测)
...
2、以最少,含义重叠率最小的实体和关系属性覆盖业务场景(以最精简的三元组信息描述业务场景):这也是完全自动化或通用模型尽管可以使用,但是在工程中不会直接使用的原因。属性的定义与实际业务场景具有高度的关联性。
3、尽可能抽象自己业务信息来源,根据自己业务场景的实体和关系属性,优先选择最重要业务场景的主要信息类型,针对性构建信息自动化抽取pipeline(通常情况下专有信息来源的特征与后续交互流程中主要的信息处理的特征有相当的相似性)。
4、将信息抽取为三元组,构建图谱
5、设计推理系统
6、构建验证系统(仿真)
一个综述,清晰一下知识图谱的概念。至于为什么要单独花一个篇章讲知识图谱?
在NLP领域的研究中,比较普遍的研究方向:词法分析,句法分析,语义理解,信息抽取,机器翻译,情感分析,问答系统,信息检索,文本生成,语音识别和生成,文本挖掘,跨语言自然语言处理等,很大一部分都是知识图谱这个大技术领域的子模块,一个完整的基于知识图谱应用的业务流程,对其进行抽象业务实现模块,每一个子模块大致都是其中几项技术的排列组合。
CV也好,NLP也好,整个AI方向的业务实现大致上都可以以相似的思路实现:抽象主要模块,快速选型搭积木。当然,这就是说我们整个实现方法上,要尽可能灵活 - 不做重复开发,可以同时对多个模块进行优化(注意一点,灵活,解耦)。
我想想下篇写啥,关系抽取?我想想要不要先单独写Bert。
Ref: