知识图谱在各个领域有广泛的应用,在搜索领域,谷歌和百度利用知识图谱来提高搜索结果的质量。在社交领域,LinkedIn 经济图谱描述了职业关系网络。在医学领域,IBM Watson for Oncology 协助制定癌症治疗计划。在工业制造中,西门子采用知识图谱支持产品设计、生产和制造过程。
知识图谱为电脑系统提供丰富的语义信息和知识背景,有助提高他们的智力和语义理解能力。知识图谱的构建代表了从原始数据到可操作智能的转变之旅。通过细致的信息聚合、结构化和提炼,知识图谱可以赋予计算机系统理解和推断世界庞大数据库中复杂关系的能力。
1. 知识图谱的要点
知识图谱是一种结构化的语义知识库,用于快速描述物理世界中的概念及其关系。通过聚合信息、数据和来自网络的链接,知识图谱使信息资源更具可计算性、可理解性和可评估性,从而能够对知识做出快速反应和推断。
在知识图谱中,节点表示现实世界中的实体,如人、地点、事件、概念等,而边表示实体之间的关系。通过连接节点和边,知识图谱可以呈现丰富的语义信息和知识关联,帮助计算机系统更好地理解和推断知识。知识图谱的基本单元是“实体-关系-实体”三元组,它也是知识图谱的核心。
2. 知识图谱中的数据与存储
数据的类型和存储在知识图谱的构建过程中起着至关重要的作用。我们可以有效地处理不同类型的数据,并选择合适的存储方法来构建知识图谱。
一般而言,知识图谱中的原始数据有三种类型 :
-
结构化数据,例如关系数据库和链接数据
-
半结构化数据,如 XML、 JSON、 Encyclopedia
-
非结构化数据,例如图像、音频和视频
我们如何存储上述三种类型的数据? 一般来说,有两种选择:
一种方式是存储可以通过标准化的存储格式(如 RDF)来实现,RDF 是一个有向图,由用 XML 编写的语句组成,使用 RDF 的常用工具如 Jena API等。Jena API是一个用于支持语义网相关应用的Java API,它提供了丰富的工具和库,使得开发者可以方便地处理RDF、RDFS(RDF Schema)以及OWL(Web Ontology Language)等语义网标准的数据。在Java项目中使用Jena时,需要将Jena库添加到项目中。可以通过将其添加到CLASSPATH或者使用Maven依赖管理工具进行添加。
import org.apache.jena.rdf.model.*;
import org.apache.jena.util.FileManager;
import org.apache.jena.query.*;
public class JenaExample {
public static void main(String[] args) {
// 创建一个模型
Model model = ModelFactory.createDefaultModel();
// 添加三元组
Resource subject = model.createResource("http://www.example.com/subject");
Property predicate = model.createProperty("http://www.example.com/predicate");
Literal object = model.createLiteral("test");
Statement statement = model.createStatement(subject, predicate, object);
model.add(statement);
// 从文件中读取RDF
try (InputStream in = FileManager.get().open("data.rdf")) {
if (in == null) {
throw new IllegalArgumentException("文件未找到: data.rdf");
}
model.read(in, null);
} catch (Exception e) {
e.printStackTrace();
}
// 执行SPARQL查询
String queryString = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " +
"SELECT ?s ?p ?o WHERE { ?s ?p ?o }";
Query query = QueryFactory.create(queryString);
try (QueryExecution qexec = QueryExecutionFactory.create(query, model)) {
ResultSet results = qexec.execSelect();
while (results.hasNext()) {
QuerySolution soln = results.nextSolution();
Resource s = soln.getResource("?s");
Property p = soln.getProperty("?p");
RDFNode o = soln.get("?o");
System.out.println(s + " " + p + " " + o);
}
}
// 推理(示例为RDFS推理)
Reasoner reasoner = RDFSRuleReasonerFactory.theInstance().create(null);
InfModel infmodel = ModelFactory.createInfModel(reasoner, model);
// 可以对infmodel进行查询或进一步操作
}
}
另一种方法是使用图数据库进行存储,例如著名的Neo4j。下面这个网络管理示例使用 Neo4j 图形数据库将数据中心(包括服务器、路由器、防火墙、机架和其他设备)中的网络端点建模为节点,并将它们的互连表示为关系。通过这样做,它可以分析网络设备之间的依赖关系并确定根本原因,从而促进更有效的网络和 IT 管理。
有效地处理不同类型的数据和选择适当的存储方法是构建高质量知识图谱的关键步骤。通过将结构化、半结构化和非结构化数据化转化为知识图谱的形式,可以实现智能数据利用和深度知识发现,为各个领域的应用提供强大的支持和进步。
3. 知识图谱构建的一般方法
构建知识图谱是一个迭代更新的过程。根据知识获取的逻辑,每次迭代包括三个阶段:
知识获取:从各种数据源中提取“实体-关系-实体”三元组,以捕获实体、属性以及它们之间的关系。该过程基于提取的信息形成知识的结构化表示。
知识提炼: 获得新知识后,需要对知识进行整合,消除矛盾和模糊。例如,一些实体可能具有多种表示形式,一个特定的术语可能对应于多个不同的实体。
知识演化: 经过细化后的融合新知识,需要经过质量评估(有些需要人工参与) ,然后才能将合格的部分合并到知识库中,以确保知识库的质量。
3.1 知识获取
知识获取,也称为信息抽取,是构建知识图谱的初始阶段,目的是从半结构化和非结构化数据化的来源自动提取结构化信息,如实体、关系和实体属性,以获得候选指标。该过程涉及到实体提取、关系提取和属性提取等关键技术,用于从异构数据源中自动提取信息。
实体提取,也称为命名实体识别(NER) ,是指从数据集中自动识别命名实体,如人员、地点或组织的名称。
从文本语料库中提取实体后,得到一系列离散的命名实体。找到名称(实体)很重要,但真正的力量来自于理解它们如何连接。通过揭示文本语料库中实体之间的关系,我们可以创建一个类似网格的知识结构,捕捉文本中更深层次的含义和联系。
属性提取的目的是从不同的来源收集特定的实体属性信息,如获取公众人物的昵称、生日、国籍、教育背景等信息。
对于上述过程,通过对给定的数据执行实体提取、关系提取和属性提取,可以识别数据中的关键元素,如人员、组织、位置及其关系和属性。
如图所示,文本语料“ John 在纽约 XYZ 公司做软件工程师”,通过实体提取,我们可以识别 John、 XYZ 公司和纽约这样的实体; 通过关系提取,我们可以确定 John 和 XYZ 公司之间的工作关系,以及 XYZ 公司和纽约之间的位置关系; 通过属性提取,我们可以了解 John 的位置和 XYZ 公司的位置。
这些提取的信息可以填充知识图谱中的实体、关系和属性,有助于构建丰富而准确的知识表示,为进一步的知识推理和应用奠定基础。
3.2 知识提炼
通过信息抽取的过程,我们从原始的非结构化和半结构化数据中收集实体、关系和实体属性信息。如果我们将这个过程与解决拼图游戏相比较,那么提取出来的信息将代表拼图块。这些碎片是分散的,有时包括来自其他谜题的碎片,这些碎片可以作为误导性的元素,破坏我们解谜的努力。
从本质上讲,这些信息之间的关系是扁平的,缺乏层次结构和逻辑结构。知识也可能包含大量冗余和错误的信息。因此,在知识融合过程中,解决这一问题至关重要。
知识提炼包括两个主要组成部分: 实体链接和知识融合。实体连接旨在将相关实体连接到整个数据集,而知识融合侧重于整合和合并来自各种来源的信息,以提高知识图谱的总体质量和一致性。
如图所示,“ John 是纽约 XYZ 公司的一名软件工程师。他在纽约还有一家餐馆”,经过知识的获取,首先进行共指解析,确定“他”实际上指的是前面提到的“约翰”。然后,在实体消歧之后,系统将原本被认为是不同实体的两个John 合并为一个实体,整合来自两个不同角色的信息,避免了数据冗余和混淆,保证了知识图谱的准确性和一致性。最后,经过知识融合阶段,将外部餐厅收入与约翰的工资进行匹配,生成一个更加全面的知识图谱。
3.2.1 实体链接
实体链接是指将提取的实体对象从文本链接到知识库中正确的对应实体对象的操作。其基本思想是首先根据给定的实体从知识库中选择一组候选实体对象,然后通过相似度计算将提及的实体与正确的实体对象联系起来。一般方法如下:
-
通过实体提取从文本中获取实体提及的项。
-
执行实体消歧和共引用解析来确定知识库中具有相同名称的实体是否表示不同的含义,以及知识库中是否有其他命名实体表示相同的含义。
-
在知识库中确定正确的对应实体对象后,将实体提及项链接到知识库中的对应实体。
3.2.2 共指解析和实体消歧
共指解析是实体链接过程中的另一个重要步骤,解决了引用同一实体对象的多次提及的难题。通过共引用解析技术,可以识别与相同实体相关的属性,并将其与正确的实体对象相关联。这个过程对于保持知识图谱的一致性和准确性十分重要。
实体消歧在确保具有相同名称的实体与其各自含义之间的正确映射方面起着关键作用。通过使用聚类方法和基于上下文的分类技术,实体消歧有助于分离名称相似但上下文不同的实体。
通过将实体消歧和共指解析集成到实体链接过程中,有效的组织可以提高其知识图谱的质量和可靠性。这些技术不仅有助于解决模糊性和准确地联系实体,而且有助于知识表示的整体一致性和逻辑性。
3.2.3 知识融合
实体链接是将实体链接到知识库中适当的实体对象的过程。然而,必须认识到实体链接建立了从半结构化和非结构化数据源提取的数据之间的联系。除了半结构化和非结构化数据化之外,结构化数据源(如外部知识库和关系数据库)还提供了更有组织和更易访问的数据格式。这种结构化数据的集成是关于知识融合的焦点。
知识融合通常包括组合来自不同来源的信息,以提高知识图谱的整体质量和完整性。这可以通过两种主要方式实现: 合并外部知识库以解决数据和结构中的冲突,以及使用 RDB2RDF (一种将关系数据库的内容映射到 RDF 的技术)等手段合并关系数据库。通过整合来自各种来源的数据,使知识图谱更加一致且全面。
3.3 知识演化
知识演化是指知识图形的内容随着时间、条件或其他因素而发展和演化的过程。
如图所示,最初的知识图谱包含约翰在纽约 XYZ 公司担任软件工程师的信息。随后,可能发生的事情,如城市被重新命名为新城,约翰改变工作,成为 ABC 公司的软件开发经理,导致需要概念漂移和知识更新。随着行业标准和工作要求的变化,软件工程师的定义也可能发生变化,需要更新知识图谱中的相关概念。最后,将更新后的信息与另一个知识图谱集成,通过知识融合和集成过程消除重复和冲突,提供更全面、更准确的知识表示。
3.3.1 本体演化
本体是特定领域中知识的形式化表示,包括概念、属性和这些概念之间的关系。在知识图谱的上下文中,定义了知识图谱中实体的结构和语义以及它们之间的关系。随着新知识的不断积累和领域概念的演化,知识图谱的本体结构也随之发生变化和扩展。本体演化涉及更新、扩展或调整本体中的概念、属性和关系,以适应知识图谱内容的变化和发展。
3.3.2 时序知识建模
在知识图谱和数据分析中,“时序”是指与时间相关或涉及时间方面的信息。时序数据通常包括时间戳、日期、持续时间或任何其他指示事件何时发生或如何随时间变化的信息。
通过建模并分析知识图谱中的时间信息,可以揭示知识随时间演化的模式和趋势。时序知识建模有助于理解知识片段之间的时态关系,预测知识发展的未来趋势,并支持与时间相关的推理和查询操作。
3.3.3 概念漂移检测
在知识图谱中,随着领域知识的不断更新和发展,概念之间的关联和语义可能会发生变化。概念漂移检测的目的是识别和监测知识图谱中的概念漂移,及时调整知识表示和推理模型,以保持知识图谱的准确性和有效性。
3.3.4 知识融合与集成
随着不同数据源和知识图谱之间的相互作用,知识融合与集成成为知识演化过程中的关键环节。通过融合和整合来自不同来源的知识,可以构建一个更全面和一致的知识图谱,促进知识和跨学科应用的交叉参考。
知识演化是知识图谱领域的一个重要课题,对于理解知识的动态变化、推动知识应用和创新具有重要意义。通过对知识演化过程的深入研究和分析,可以不断完善知识图谱的建模和管理方法,促进知识图谱技术在各个领域的应用和发展。
4. 知识图谱的自动构建
知识图谱的自动构建是一个高度智能化和自动化的过程,旨在从大量数据中自动提取实体、关系及属性,形成结构化的知识体系。这一过程主要包括数据预处理、实体识别、关系抽取、知识融合与图谱构建等环节。借助自然语言处理(NLP)和机器学习(ML)技术,系统能够智能地分析文本,准确识别出实体及其关系,进而自动构建出包含丰富语义信息的知识图谱。这种自动构建方式不仅显著提高了知识获取的效率,还使得知识图谱的内容更加丰富多样,应用更加广泛。
在知识图谱的自动构建中,我们需认识到长而复杂的上下文在知识图谱构造中的重要性,特别是在关系抽取等任务中。多模态知识图谱的构建突出了整合不同类型信息以实现更全面的知识表示的重要意义。联合学习作为一种新兴技术,通过多方协作的方式改进了知识图谱的构建,从而提高了知识图谱的质量和覆盖面。结合人机智能(人机协同)来发现未知事实,使得知识图谱的构建更加强大。
跨语言知识图谱的构建涉及到多语言知识的表示和整合,为不同语言和文化背景的知识共享提供了新的途径。我们需要一个端到端的统一框架,为知识图谱谱构建任务的集成和自动化提供新的见解,为构建高质量、全面的知识图提供了更有效的解决方案。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。