在《大模型应用的10种架构模式》一文 中,知识图谱是RAG系统中的一种重要的技术, 基于知识图谱的大模型应用也成为一个典型的架构模式。但是,在一般的RAG系统中, 都会用到向量数据库,那么,当知识图谱与向量数据库相遇后,会是怎样的场景呢?

知识图谱与向量数据库的相遇_三元组

1.关于知识图谱

知识图谱是一种结构化的信息表示形式,用于说明不同概念之间的关系。它充当一张地图,连接各种数据,并以易于理解的方式表示这些关系。知识图谱经常被用来存储复杂的信息,并通过链接相关概念来促进对大量数据集的理解。

1.1 知识图谱的主要特征

知识数据库一般通过图数据库承载,是集中式信息管理的关键,它提供了优化可访问性的结构化存储库。先进的搜索功能提高了数据检索效率,确保快速和准确的信息发现。协作工具进一步促进实时贡献,促进共享知识和不断改进的文化。

节点与边缘

知识图谱由节点(表示实体或想法)和边(表示这些实体之间的联系)组成。例如,在以书籍为中心的知识图谱中,实体可以象征特定的书籍、作者和类别,而连接可以象征链接,如“属于什么类别”或“由谁所有”等。

语义关系

它们捕获语义关系,这意味着它们理解数据的上下文和含义。这使得它们对于像推荐系统和搜索引擎这样的应用程序非常有用,因为在这些应用程序中,理解数据背后的含义是至关重要的。

灵活性

知识图谱具有高度的灵活性,能够以传统数据库难以处理的方式表示复杂的、相互连接的数据。

1.2 查询示例

以一个简单的图书知识图谱为例,在这里,我们希望搜索由特定作者编著的所有书籍。

# 使用SPARQL 来通过作者查找图书

query = "
SELECT ?bookTitle WHERE {
 ?book rdf:type :Book .
 ?book :writtenBy :AuthorName .
 ?book :title ?bookTitle .
}
“

BookTitle 是一个变量,它将保存指定作者所写的书的标题。此查询在图中搜索具有: writtenBy 关系的所有书籍。

2. 关于向量数据库

矢量数据库以矢量的形式存储数据。向量只是表示某些信息的数字序列。例如,在机器学习中,向量经常被用来表示数据点的特征。

知识图谱与向量数据库的相遇_三元组_02

2.1 矢量数据库的主要特征

矢量数据库在处理复杂和大型数据(如照片、文档和传感器信号)方面正变得越来越流行。它们是为快速有效地处理大型数据集而设计的。

数值表达

这里数据以数值向量的形式存储。这使得它适用于需要数学运算的应用程序,例如相似性搜索或机器学习。

高效率的搜寻

矢量数据库非常适合执行快速搜索和比较。特别是在处理大型数据集时。它们是图像或文本相似性搜索等应用程序的理想选择,在这些应用程序中,需要查找与给定查询最相似的项。

高维空间

向量可以有多个维度,允许复杂和详细的数据表示。例如,图像可以由一个高维向量来表示,该向量捕获图像的像素信息、颜色和其他特征。

2.2 向量数据库查询示例

假设我们拥有一个矢量数据库,每个矢量代表一个图像。我们的目标是识别类似于指定查询图像的图像。

import faiss
import numpy as np

#  `image_vectors` 是一个图像向量;`query_vector` 是待查找的图像向量

index = faiss.IndexFlatL2(image_vectors.shape[1])
index.add(image_vectors)

# 查找最相似的5个图像
D, I = index.search(np.array([query_vector]), 5)
print("Indices of similar images:", I)

其中,IndexFlatL2被用来创建一个基于最近邻搜索欧几里得度量的索引,搜索以查询向量的方式提供了前5个最相似的图像。

3. 知识图谱与矢量数据库的比较

当对知识图谱与矢量数据库进行比较时,了解它们在显示和查找数据方面的差异非常重要。知识图谱能很好地显示事物之间的联系,非常适合根据意义来查找信息。与此同时,矢量数据库更善于处理复杂的数据,比如文本、图像和没有组织的数据,这使得它们成为需要处理这类数据的任务的关键。

知识图谱与矢量数据库在数据表达、性能和典型用例的比较如下:

对比项

知识图谱

向量知识库

数据表达

使用带有节点和边的图形结构来表示实体及其关系

使用矢量(数字阵列)表示数据点,适用于数值和高维数据。

用例

对于理解实体之间的关系至关重要的应用程序非常理想。它们通常用于语义搜索、推荐系统和知识管理系统。

最适合于需要相似性搜索的应用程序,如图像识别、自然语言处理和机器学习。

性能

在表示复杂关系方面提供了很大的灵活性,但在处理大规模的数字数据时可能会遇到性能问题。

为数值数据和相似性搜索提供优秀的性能,但在表示复杂的、相互关联的数据时可能不那么灵活。

4. 知识图谱与向量数据库的结合

在某些情况下,同时使用知识图和矢量数据库可能非常强大。例如,在推荐系统中,可以使用知识图谱来理解目标和用户之间的关系,而向量数据库可以用来执行快速相似性搜索以找到最相关的目标。

kg_query = "'
SELECT ?relatedItem WHERE {
 :UserID :likes ?item .
 ?item :relatedTo ?relatedItem .
}
"'

# 从知识图谱中找到目标列表
related_items = ["Item1", "Item2", "Item3"]

# 使用向量数据库查找相似的目标
similar_items = []
for item in related_items:
     item_vector = get_vector(item) 
     D, I = index.search(np.array([item_vector]), 5)
    similar_items.extend(I)

# 得出推荐列表
print("Recommended items:", similar_items)

在这个例子中,使用知识图来查找与用户喜欢的对象相关目标,使用向量数据库来查找与这些相关对象相似的目标,从而形成一个相对全面的推荐系统。

知识图谱与向量数据库的相遇_人工智能_03

5. 知识图谱的向量化

知识图谱的向量化一般表达为嵌入模型,这些模型旨在将实体和关系映射到度量空间中的低维向量表示(嵌入)。在关系型相关变换下,实体之间的接近度反映了知识图谱中存在相应的边的可能性。换句话说,如果两个实体通过知识图谱中的一个特定关系连接在一起,那么在应用相应的关系特定转换之后,它们的嵌入应该是紧密相关的。

5.1 嵌入模型

例如,两种知识图谱嵌入模型:TransE 和 PairRE。TransE 将每个实体和关系表示为嵌入空间中的一个向量。对于给定的三元组(头部、关系、尾部) ,TransE 的目标是使头部实体的嵌入和关系的嵌入之和近似等于尾部实体的嵌入。这种基于翻译的方法允许 TransE 有效地建模实体之间的简单关系。

另一方面,PairRE 将每个关系表示为一对向量(rH,rT) ,并将元素相乘(Hadamard 乘积)应用于实体嵌入。对于一个给定的三元组(头,关系,尾) ,PairRE 的目的是使 rh ∘ h (其中 rh 是头特定关系嵌入)的元素智能积近似等于 rt ∘ t (其中 rt 是尾特定关系嵌入)的元素的Hadamard乘积。这种方法允许 PairRE 建模实体之间更复杂的关系,同时考虑到头部和尾部实体在关系中的特定角色。

知识图谱与向量数据库的相遇_人工智能_04

TransE 和 PairRE 都使用梯度下降法进行训练,以便在满足各自的约束时尽量减少误差。然而,由于问题的规模,在大型知识图谱中训练这些模式可能是具有挑战性的。随着知识图谱中实体数量的增加,潜在三元组的数量以二次方式增加,这使得在训练期间考虑所有可能的三元组在计算上是不可行的。为了解决这个问题,一般会使用负抽样来估计知识图谱中不存在的三元组的误差。这种技术通过破坏正三元组(即 知识图谱中存在的三元组)来生成负三元组,方法是用一个随机实体替换头部或尾部的实体。然后,训练该模型,使其正三元组的得分高于负三元组。这种方法允许模型从现有的和不存在的关系中学习,同时保持可管理的计算复杂性。

5.2 链路预测和评估度量

知识图谱嵌入模型的主要任务之一是链接预测,它包括推断图中缺失的链接。链路预测有两个常见的应用: 二叉链路分类和潜在链路完成度排序。

  • 二叉链路分类。给定一个三元组(头部,关系,尾部) ,预测三元组可能是真或假。这对于诸如事实检查或知识库补全等任务非常有用。
  • 潜在链路补全的排序。给定一个部分三元组,例如,(头,关系,?),模型对缺失实体的潜在候选者进行排序。这对于诸如推荐系统或问题回答之类的任务非常有用。

为了评估 KG 嵌入模型在链路预测任务中的性能,使用了两个常用的指标:

  • hit@N,衡量的是排在 N 个预测前列的正确实体的比例。例如,如果给定(头部,关系)对的正确尾部实体在100个潜在候选者中排名第3,那么 Hits@10得分将为1(因为正确的实体在前10名中) ,而 Hits@1得分将为0(因为正确的实体不是最高预测)。
  • MRR,此度量计算正确实体的倒数排名的平均值。倒数排名是第一个正确预测的排名的倒数。例如,如果正确的尾部实体排名第三,倒数排名将是1/3。

5.3 学习机制

当前,大致有三种不同的学习机制,有助于提升知识图谱嵌入模型的性能: 非结构化统计学习,网络学习和主题学习。这些机制为嵌入式模型如何捕获和利用知识图谱中的信息提供了不同的视角。通过了解每个机制的作用,深入了解各种嵌入模型的优点和局限性,从而开发出更有效的知识图谱学习方法。

非结构化统计学习

非结构化统计学习是一种面向知识图谱的学习方法,其重点是利用潜在变量建模三元组(h,r,t)的概率分布。此方法没有明确考虑图结构或关系之间的逻辑规则。相反,它依赖于实体的统计共同出现的频率和知识图谱内的关系作出预测。在非结构化统计学习中,每个头部实体、尾部实体和关系在嵌入空间中用一个不同的向量表示。模型根据这些嵌入在数据中共同出现的频率和模式来学习它们。三元组(h,r,t)的得分通常使用点积或嵌入的头部、关系和尾部之间的另一个相似性度量来计算。

这种方法不直接利用图的结构属性,而是关注实体和关系之间的统计关系。这使得非结构化统计学习在数据表现出强共现模式时特别有用,这种模式不需要详细的图结构分析就可以捕获。

网络学习

网络学习是一种不需要明确考虑关系的语义就可以获取知识图谱的结构特征的机制。这种方法利用连通性模式和图的拓扑结构来学习反映实体的邻近性和相关性的嵌入。

像 TransE 这样的嵌入模型可以通过基于图谱中观察到的连通性调整实体和关系嵌入来学习潜在的网络模式。在训练过程中,该模型试图最小化由边直接连接的实体之间的嵌入距离,同时最大化不直接连接的实体之间的距离。这个优化过程允许模型学习反映图结构的嵌入,在图中更接近的实体具有更相似的嵌入。

通过学习这些结构模式,网络学习允许嵌入模型捕获知识图谱的重要拓扑特征,这对于像链接预测或实体聚类这样的任务可能是至关重要的,尤其是在没有详细的关系信息的情况下。

主题学习

这是知识图嵌入过程中发现关系规则的一种机制。主题是知识图谱中可以表示逻辑规则或关系之间约束的小的、重复出现的子图。

知识图谱的嵌入模型,如 TransE,可以通过优化关系嵌入来学习这些模式,以满足模式所隐含的约束条件。主题学习可以捕捉图结构之外的各种规则,比如对称性(如果 A 与 B 相关,那么 B 与 A 相关),为知识图谱中的规则学习提供了一个精确的定义,它完全依赖于图的结构而不是外部信息或推理。这种方法有助于捕获和利用知识图谱中固有的模式来提高嵌入质量和预测性能。

5.4 评价知识图谱的嵌入

在链接预测任务中增加负样本的数量和多样性,以提供更具挑战性和代表性的测试。重采样指标(R-MRR)和标准指标一起使用,可以以获得更准确的模型性能评估,特别是对于大型知识图谱,统一的负样本可能会产生误导。

6. 小结

知识图谱和矢量数据库各有其独特的优势,适合不同类型的任务。知识图谱擅长表示和查询实体之间的复杂关系,这使它们成为语义搜索和推荐系统等应用程序的理想选择。矢量数据库为存储和搜索大量数字数据而进行了优化,使它们非常适合进行图像和文本相似性搜索等任务。在某些情况下,结合这两种技术可以提供一个强大的解决方案,利用各自的优势来获得更好的结果。其中,知识图谱的向量化提供了一种新的结合尝试。

PS,如果希望对向量数据库有进一步的了解以及在工程中更好的应用,可以参考图灵出版的《从零构建向量数据库》一书:

【参考资料与关联阅读】

  • "PairRE: Knowledge Graph Embeddings via Paired Relation Vectors", arxiv.org/pdf/2011.03798v3
  • 在大模型RAG系统中应用知识图谱
  • 面向知识图谱的大模型应用
  • 让知识图谱成为大模型的伴侣
  • 知识图谱的5G追溯
  • 从语义网到知识图谱
  • 行业规模的知识图谱——经验和挑战
  • 知新温故,从知识图谱到图数据库
  • 解读向量数据库
  • 解读:基于图的大模型提示技术
  • 7B?13B?175B?解读大模型的参数
  • 大模型应用的10种架构模式