基于知识图谱的RAG——如何用固定的实体架构在Knowledge Graph上进行RAG检索

Knowledge Graphs for RAG -- Chatting with the SEC Knowledge Graph (吴恩达-知识图谱在RAG中的应用 6) 拥有公司股票的经理提交了一些被分成块处理的表单。现在经理和公司都与地址相连接。公司之间那些比较近?只需要在图中跟踪指针(pointers箭头)即可有多少投资公司在他们所投资的公司附近?有多少投资公司和他们所投资的公司在同一个城市? 阅读详情

图方法在RAG中的应用——现状

检索增强生成(Retrieval-Augmented Generation,简称RAG)结合了大型语言模型(LLM)的自然语言生成能力与信息检索的优势,使响应更加具备上下文感知、准确、相关且富有细微差别。通过将检索纳入生成过程,RAG系统能够保持高度的相关性和事实准确性,使其在知识管理、客户支持和研究等需要精确且上下文适宜的信息的应用中不可或缺。

传统的检索增强生成(RAG)技术在某些场景下虽然有效,但往往难以捕捉现实世界数据中复杂的关系和上下文细微差别。另一方面,知识图谱提供了信息的结构化表示,能够实现更高效的检索和推理。然而,将知识图谱与LLM有效整合以提升RAG性能仍然是一项具有挑战性的任务。

在RAG系统中使用知识图谱越来越被认可,因为它能够改善数据组织和检索精度。基于图的方法现在通常与使用大型语言模型(LLM)从文本语料库中提取和构建复杂关系相关联,这一方法最早由微软在今年早些时候引入[1]。然而,使用LLM构建和维护准确的知识图谱仍然需要大量资源,并面临数据稀疏、重复和需要持续更新等挑战。为了解决这些问题,趋势是使用模块化和层次化的图结构,这些结构能够有效管理大规模数据集。诸如社区检测和摘要等技术正被用于提升基于图的RAG系统的可扩展性和效率。

本文将重点介绍一种我称之为固定实体架构(Fixed Entity Architecture,FEA)的新方法。微软的GraphRAG和FEA这两种方法都解决了知识图谱构建和利用中的常见问题,如可扩展性、复杂性和精度。这些方法代表了将知识图谱与RAG整合的最新进展,利用LLM和高效的图结构技术。它们是两种截然不同的方法,取决于具体的使用案例和数据。这两种方法适用于不同类型的数据和查询,使其在各行各业和研究领域中广泛适用。

本文重点

本文提出了一种用于构建知识图谱的新方法,该方法能够为多种使用案例的RAG应用提供更有效的知识库。FEA方法突破了传统基于LLM的图构建方法,旨在解决现有技术的以下局限性:

•在图创建步骤中过度依赖LLM•避免实体重复并消除实体解析的需求•图的稀疏性

本文结构如下:

•分析GraphRAG和固定实体架构•GraphRAG —— 微软现有方法概述•固定实体架构:介绍和比较概述•本体鱼骨图•增加知识•检索过程

我将使用著名的爱因斯坦名言的简单示例来说明这些概念,展示如何构建知识库并执行高级检索。这种方法旨在为您的RAG系统开辟新视野,并展示进一步探索和开发的巨大潜力。

分析GraphRAG和固定实体架构

GraphRAG —— 微软现有方法概述

2024年4月,微软发布了他们的第一篇关于GraphRAG的论文,介绍了一种有趣的方法,利用大型语言模型(LLM)从文本语料库中提取实体和关系,并基于这些实体构建知识图谱。他们将实体聚合成社区,这些社区随后成为其内容的摘要。实际的检索增强生成(RAG)是在这些摘要上进行的,展示了一种在信息检索方面具有显著潜力的方法。

像任何方法一样,GraphRAG有其优缺点。下表1从我的角度突出了微软GraphRAG方法的优点和挑战。需要注意的是,在某些使用案例中,尤其是处理大量文本数据时,预先了解实体之间的关系可能并不总是适用。

在我的案例中,我正在进行一个概念验证(POC),使用的是已知或至少部分已知的本体,并且迫切需要一个RAG实现。任务是基于非常非结构化的数据构建一个高效的知识库。

我最初尝试使用微软的方法在我的数据上构建图,花费了大量时间编写和完善查询,以从文本块中提取实体和关系。在创建了第一个甚至第二个基于LLM生成的图数据库后,我遇到了一个重大问题。信息检索不适合GenAI驱动的应用。数据库中充斥着重复项,实体解析的准确性不足,导致过程耗时且成本高昂。总之,对于我的特定使用案例来说,它太昂贵、太杂乱、太复杂且难以控制。

我意识到,对于我正在处理的定义明确的领域,需要一种不同的方法来在知识图谱上实现RAG——一种快速、主要自动化且不依赖于昂贵的LLM调用的方法。此外,我希望它非常可控和灵活。LLM生成的大量经常重复的实体让我想到,我希望这些实体是固定的,数量更少,并且能够高精度地了解它们是如何连接的。

本文介绍了FEA方法,使用固定实体架构在图上构建RAG。知识图谱是使用Neo4J创建的。

固定实体架构

固定实体架构 —— 新方法介绍

本文提出的固定实体架构(FEA)基于预定义的实体和关系,这些实体和关系构成了您的使用案例领域的本体“鱼骨图”。确定在此结构中包含什么通常是一个深刻的哲学问题,需要广泛的领域知识来开发一个稳健的固定实体架构。或者,您可以考虑知识库的用途,并确定关键或模板文档作为本体鱼骨图的基础。

与微软的方法不同,固定实体架构不依赖于大型语言模型(LLM)来构建图。相反,它利用特定于使用案例的专有领域知识,结合简单的数学技术。这种方法提供了一种高效的方式来解决与基于LLM的方法相关的许多缺点。

比较概述

下表1展示了微软的GraphRAG和固定实体架构两种方法的比较概述。

在这里插入图片描述
表1 两种方法的比较概述

总的来说,固定实体架构适用于定义明确、范围狭窄的领域,特别需要高精度和控制。它具有较低的复杂性、降低的计算成本,并且最小化了对LLM的依赖。然而,它在灵活性方面有所欠缺,在大型数据集上的可扩展性较差,并且需要预先的领域知识。

微软的GraphRAG在处理大规模、多样化的数据集和复杂查询方面表现出色,提供了跨多个领域的可扩展性和适应性。它支持本地和全局查询,但复杂性更高、资源成本更大,并且对LLM有较强的依赖。当优先考虑简便性、低维护或固定实体时,它的适用性较差。

这里的建议是根据数据集的性质、控制需求和可用资源进行选择。结合两种方法的元素可能会优化性能。

本体鱼骨图

什么是本体?您是否曾考虑过您自己微观世界的本体?在工作中,您每天执行任务,而没有有意识地理解您的大脑如何识别这些“事物”以及如何在它们之间建立连接。试试这个练习:尝试创建一个“事物”的元模型,并绘制它们之间的连接。虽然这听起来具有挑战性,但我有好消息——这是完全可能的,因为您知道自己在做什么!

本体是帮助我们理解周围世界的强大工具。“鱼骨图”隐喻鼓励我们深入探讨定义我们概念领域的基本构建块和连接。创建本体涉及仔细考虑要包含什么、元素之间的关系以及哪些是最重要的。鱼骨结构帮助我们识别核心元素,同时承认将我们的想法带入生活的复杂连接网。

现在,假设您在一个狭窄的领域内工作,并且对构成您工作的实体“鱼骨图”有清晰的理解。您如何轻松地将所有这些信息连接起来,并为任何RAG应用构建一个知识库?继续阅读——我有这些问题的答案。

创建基本的“鱼骨”结构:爱因斯坦示例

在许多组织中,主题专家可以轻松识别定义明确的领域内的关键实体和关系。这些基础知识对于构建有效的知识图谱至关重要。通过利用这些专业知识,可以在几天内建立一个关键实体及其关系的基本“鱼骨图”,为进一步丰富详细信息提供坚实的基础。

在创建鱼骨图时,请记住尽可能为您的实体包含描述。让我们考虑一个著名的示例来说明知识图谱的构建过程:句子“阿尔伯特·爱因斯坦发展了相对论,这彻底改变了理论物理学和天文学。”这个广为人知的句子展示了如何提取实体和关系。下图1展示了基于这个句子的图。

在这里插入图片描述
图1 基于句子的图形表示

图1. 句子“阿尔伯特·爱因斯坦发展了相对论,这彻底改变了理论物理学和天文学”的图形表示——固定实体架构图的“鱼骨”本体。

Cypher是一种声明式查询语言,用于与图数据库(尤其是Neo4j)进行交互。它允许用户以直观的类似SQL的语法表达复杂的图模式和关系。Cypher旨在易读,并提供强大的功能,用于查询、更新和管理图数据。它支持模式匹配、过滤和节点及关系的操作,非常适合涉及社交网络、推荐引擎和其他基于图的数据模型的任务。有关更详细的信息,您可以访问官方的Neo4j Cypher文档[2]。

在这里,我假设读者熟悉嵌入、余弦相似度、点积和向量索引等术语。如果不熟悉,请参考额外的文献,如[3–5]。

在我们的爱因斯坦示例中,我们有四个实体(阿尔伯特·爱因斯坦、相对论、理论物理学和天文学)以及三条具有两种类型的边(开发和革命化)。我们可以为每个实体添加简要描述,例如:“阿尔伯特·爱因斯坦是20世纪伟大的物理学家”,等等。将其转换为Cypher代码,创建图的过程如下:


CREATE (a:Entity {label: 'Person' , name: 'Albert Einstein', embeddings: $person_emb}), 
(b:Entity {label:'Theory' ,name: 'Theory of relativity', embeddings: $theory_emb}),  
(c:Entity {label:'Field', name: 'Theoretical physics', embeddings: $field1_emb }), 
(d:Entity {label:'Field', name: 'Astronomy', embeddings: $field2_emb })

// 创建边  
CREATE (a)-[:DEVELOPED]->(b),  
(b)-[:REVOLUTIONIZED]->(c),  
(b)-[:REVOLUTIONIZED]->(d)

请注意,我仅使用一个关联标签“Entity”创建节点,但为每个节点包含不同的标签作为属性。这是为了在后续搜索中保持清晰。所有节点在内部都称为实体,形成了后续操作的固定鱼骨结构。我稍后会添加不同标签的节点,但它们将具有不同的功能——请继续阅读!😉

这种方法的另一个原因是,我尚未找到一种方法能同时为两个或多个节点标签构建统一的索引(如果您知道,请在评论部分告诉我)。

这里的embeddings参数仅包含“label: name”值,但在实际操作中,我建议还包括实体的详细描述,并将其添加到您的嵌入向量中。

增加知识

现在,我们有了构建知识库用于RAG应用的“鱼骨图”(图2)。为了创建这个知识库,我们需要文档。对于阿尔伯特·爱因斯坦,我使用了维基百科文章[6]。我使用维基百科API复制了文本,并将其拆分为59个块,每块大小为2000。请注意,在此演示中,我没有优化块的大小;选择的大小是任意的。

在这里插入图片描述
图2 Neo4J中的固定实体鱼骨图表示

将文档添加到图中

让我们以以下方式将文档块添加到图中:

prev_node_id = None # 在循环前初始化 prev_node_id
for i, chunk in enumerate(chunks):  
    # 创建文档节点  
    query = f'''  
    CREATE (d:Document {{  
    chunkID: "{f"chunk_{i}"}",  
    url: "{url}",  
    docID: "{document_name}",  
    full_text: '{escaped_chunk}',  
    embeddings: {embeddings.embed_documents(chunk).tolist()}}}  
    )  
    RETURN ID(d)  
    '''  
    run_query(driver, query)  
    chunk_node_id = result[0]['ID(d)']

    # 如果不是第一个块,创建与前一个块的NEXT关系  
    if prev_node_id is not None:  
        query = f'''  
        MATCH (c1:Document), (c2:Document)  
        WHERE ID(c1) = {prev_node_id} AND ID(c2) = {chunk_node_id}  
        CREATE (c1)-[:NEXT]->(c2)  
        CREATE (c2)-[:PREV]->(c1)  
        '''  
        run_query(driver, query)  
    prev_node_id = chunk_node_id
CREATE (c2)-[:PREV]->(c1)

这段代码将块作为标签为“Document”的节点添加(见图3)。

在这里插入图片描述
图3 爱因斯坦维基百科文章的前25个块

通过将文档块相互连接为节点,后续检索中将具有显著优势。您可以使用Cypher查询定义,如果找到相似的块,还可以检索前一个和下一个块。就是这么简单!

将文档与固定实体连接

接下来,让我们将文本块连接到我们的固定实体“鱼骨图”。请注意,这种方法不使用任何昂贵的LLM技术,并避免在知识库中创建重复。此外,执行时间仅需毫秒。我们使用一种简单的数学公式,称为点积,它提供了每个块与固定实体之间的余弦相似度值。以下Cypher代码将实现这一点:

MATCH (e:Entity), (d:Document)
WHERE e.embeddings IS NOT NULL 
  AND d.embeddings IS NOT NULL 
  AND size(e.embeddings) = size(d.embeddings)
WITH e, d, 
     reduce(numerator = 0.0, i in range(0, size(e.embeddings)-1) | numerator + toFloat(e.embeddings[i])*toFloat(d.embeddings[i])) as dotProduct, 
     sqrt(reduce(eSum = 0.0, i in range(0, size(e.embeddings)-1) | eSum + toFloat(e.embeddings[i])^2)) as eNorm, 
     sqrt(reduce(dSum = 0.0, i in range(0, size(d.embeddings)-1) | dSum + toFloat(d.embeddings[i])^2)) as dNorm
WITH e, d, dotProduct / (eNorm * dNorm) as cosineSimilarity
WHERE cosineSimilarity > 0.8  
MERGE (e)-[r:RELATES_TO]->(d)  
ON CREATE SET r.cosineSimilarity = cosineSimilarity
RETURN ID(e), e.name, ID(d), d.full_text, r.cosineSimilarity
ORDER BY cosineSimilarity DESC

在此示例中,我们指示数据库使用向量索引从所有实体节点中提取,并通过计算它们与用户查询之间的向量角度来比较它们与每个文档块的相似度。如果余弦相似度超过给定的阈值(此处为0.8),数据库将在实体节点和文档节点之间创建一个名为RELATES_TO的边。由于块未经过优化,并且固定实体缺乏详细描述,匹配可能不太高。此示例旨在说明该技术。

在这里插入图片描述
表2 使用余弦相似度属性自连接的文档节点

在这里插入图片描述
图4 通过余弦相似度属性自连接的文档节点结果

图4展示了此查询的结果。一些块自动链接到余弦相似度高于定义阈值0.8的固定实体。您可以根据需要调整此阈值。这种方法允许在检索过程中进一步过滤,仅选择最佳匹配的块。

不仅实体“阿尔伯特·爱因斯坦”连接到了相关的文本块,“相对论”也是如此。随着更多文档的添加,“鱼骨图”实体将越来越多地作为元素之间的连接器。这是使用图的一个优势——几乎所有东西都是相互连接的。没有稀疏性的问题需要聚类。您可以进一步探索这一点,但那将是另一个话题。现在,让我们继续添加更多文档。

请参阅表3,了解理论物理学维基百科文章中的文本如何连接到各种固定实体。

在这里插入图片描述
表3 从理论物理学维基百科文章添加的文档与匹配实体的返回结果

表3. 从理论物理学维基百科文章添加的文档与匹配实体的返回结果。

将文档[6–9]附加到我们爱因斯坦句子中的固定实体的结果如图5所示。块被无缝链接到相关实体。

在这里插入图片描述
图5 通过余弦相似度属性自连接的文档节点结果

这项技术用于附加文档具有多功能性,适用于各种类型的文档。通过向量化您的数据,您可以轻松地整合和连接所有信息。

为混合搜索构建不同类型的索引

Neo4j的优势在于能够在您的图上创建各种类型的索引,更棒的是,您甚至可以使用单个Cypher查询执行混合搜索。让我们为我们的检索准备索引。

创建向量索引

首先,我们创建向量索引:


queries = [  
    "DROP INDEX test_index_document IF EXISTS;",  
    "DROP INDEX test_index_entity IF EXISTS;"  
]

for query in queries:  
    run_query(driver, query)

# 为文档嵌入创建向量索引

CREATE VECTOR INDEX test_index_document  
IF NOT EXISTS  
FOR (d:Document)  
ON (d.embeddings)  
OPTIONS {indexConfig: {  
    `vector.dimensions`: 768,  
    `vector.similarity_function`: 'cosine'  
}}  
# 为实体嵌入创建向量索引

CREATE VECTOR INDEX test_index_entity IF NOT EXISTS  
FOR (n:Entity)  
ON (n.embeddings)  
OPTIONS {indexConfig: {  
    `vector.dimensions`: 768,  
    `vector.similarity_function`: 'cosine'  
}}  

一旦在节点上创建了向量索引,您还可以在边上创建向量索引,如果您有它们的描述。由于此阶段我没有关系的任何文本,因此我将跳过此步骤。

创建文本索引

接下来,我将创建一个文本索引,这也将作为标准关键字索引添加到搜索中。

queries = [  
    "DROP INDEX text_index_entity IF EXISTS;",  
    "DROP INDEX text_index_document IF EXISTS;",  
]

for query in queries:  
    run_query(driver, query)
# 为实体描述创建全文索引

CREATE FULLTEXT INDEX text_index_entity FOR (n:Entity) ON EACH [n.name]  

# 为文档全文文本创建全文索引

CREATE FULLTEXT INDEX text_index_document FOR (d:Document) ON EACH [d.full_text]  

检索

现在我们的知识库已准备好进行检索,并可用于构建RAG应用,我们可以开始查询图数据库。

让我们从一个简单的查询开始。我们将要求数据库找到给定查询的最佳匹配答案。例如,我们使用查询:“阿尔伯特·爱因斯坦的研究领域”。

首先,我将使用基于实体的向量索引。查询涉及将原始用户查询嵌入到向量索引中和/或将其用作关键字索引的文本。我将从一个简单的查询(查询1)开始:

CALL db.index.vector.queryNodes('test_index_entity', 10, $user_query)  
YIELD node AS vectorNode, score as vectorScore  
WITH vectorNode, vectorScore  
ORDER BY vectorScore DESC  
RETURN vectorNode.name AS label, vectorScore AS score

在这里,我仅查询固定实体,特别是使用建立在它们上的向量索引。结果如下表4所示。

在这里插入图片描述
表4 使用查询1的结果

由于我们只有四个实体,结果有些可预测。仅提取实体,尤其是在此阶段缺乏描述时,为RAG应用提供的价值有限。为了增强我们的结果,我们需要提取与问题相关的文档。让我们更进一步,识别与找到的实体最相关的文档(查询2):

CALL db.index.vector.queryNodes('test_index_entity', 10, $user_query)  
YIELD node AS vectorNode, score as vectorScore  
WITH vectorNode, vectorScore  
MATCH (vectorNode)-[r]->(d:Document)  
WITH vectorNode.name AS label, vectorScore as score, d.docID as closest_document_name,  
     d.full_text as closest_document_text, r.cosineSimilarity as similarity  
ORDER BY similarity DESC  
RETURN label, closest_document_name, closest_document_text, similarity  
LIMIT 10

结果,如表5所示,与初始查询略有不同。这里,“天文学”首先返回。然而,而不是预期的“相对论”,出现了“阿尔伯特·爱因斯坦”。使用GraphRAG结合这种方法的优势在于其灵活性:您可以调整搜索以更好地适应应用的需求。让我们完善我们的查询,以优先考虑“天文学”和“相对论”作为此问题的顶级结果。

在这里插入图片描述
表5 使用查询2的结果

为了进一步提升结果,我们可以实施一个交叉编码器重新排序步骤。尽管我通常在描述上进行重新排序,但在这种情况下,由于缺乏描述,我将在标签上应用它。我将使用sentence_transformers库中的cross-encoder/ms-marco-MiniLM-L-6-v2模型。表6显示了查询2的重新排序结果。

在这里插入图片描述
表6 使用查询2包括重新排序的检索信息

如您所见,重新排序与查询结合并未产生预期的结果。为了改进结果,我们可以结合全文或关键字搜索(查询3):

CALL db.index.vector.queryNodes('test_index_entity', 10, $my_query_emb_list)  
YIELD node AS vectorNode, score as vectorScore  
WITH vectorNode, vectorScore  
MATCH (vectorNode)-[r]->(d:Document)  
WITH vectorNode.name AS label, vectorScore as score, d.docID as closest_document_name,  
     d.full_text as closest_document_text, r.cosineSimilarity as similarity  
ORDER BY similarity DESC  
RETURN label, closest_document_name, closest_document_text, similarity  
LIMIT 10

UNION

CALL db.index.fulltext.queryNodes('text_index_entity', $my_query)  
YIELD node AS textNode, score as textScore  
WITH textNode, textScore  
MATCH (textNode)-[r]->(d:Document)  
WITH textNode.name AS label, textScore as score, d.docID as closest_document_name,  
     d.full_text as closest_document_text, r.cosineSimilarity as similarity  
ORDER BY similarity DESC  
RETURN label, closest_document_name, closest_document_text, similarity  
LIMIT 10

这个查询的结果显示在表7中。

在这里插入图片描述
表7 使用查询3包括混合向量关键字搜索的检索信息

之前的尝试,包括重新排序,并未产生预期的结果。现在,我将展示检索在图中的真正威力。为了避免APOC库的问题和与Python工具的兼容性问题,我专注于一种清晰、透明的方法。我将使用纯数学方法来说明图的搜索能力的有效性。下一个查询展示了我在工作中称之为“智能搜索”的方法(查询4)。

CALL db.index.vector.queryNodes('test_index_entity', 10, $user_query_emb) 
YIELD node AS vectorNode, score as vectorScore 
WITH vectorNode, vectorScore 
MATCH (vectorNode)-[r]->(d:Document) 
WITH DISTINCT vectorNode as e, d, r, r.cosineSimilarity as cosineSimilarity 
ORDER BY cosineSimilarity DESC 
WITH ID(e) as id, e.label as title, 
     cosineSimilarity, 
     e.description as description, 
     head(collect(d.docID)) as document_id, 
     head(collect(d.chunkID)) as chunkID, 
     head(collect(d.full_text)) as document_text, 
     reduce(mDot = 0.0, i IN range(0, size($user_query_emb) - 1) | mDot + $user_query_emb[i] * e.embeddings[i]) / 
     (sqrt(reduce(mSq = 0.0, x IN $user_query_emb | mSq + x^2)) * sqrt(reduce(eSq = 0.0, y IN e.embeddings | eSq + y^2))) AS entity_similarity,  
     reduce(mDot = 0.0, i IN range(0, size($user_query_emb) - 1) | mDot + $user_query_emb[i] * d.embeddings[i]) /  
     (sqrt(reduce(mSq = 0.0, x IN $user_query_emb | mSq + x^2)) * sqrt(reduce(dSq = 0.0, y IN d.embeddings | dSq + y^2))) AS document_similarity  
WITH id, title, description, document_id, document_text, entity_similarity, document_similarity, chunkID,  
     (entity_similarity + document_similarity) / 2 AS similarity, cosineSimilarity  
WHERE similarity > 0.8  
RETURN id, title, document_id, document_text, similarity, chunkID  
ORDER BY cosineSimilarity DESC, similarity DESC

通过这个查询,我首先使用向量索引提取固定实体,然后识别最佳匹配的文档。接下来,我计算提取的实体与用户查询之间的点积,以及找到的文档与用户查询之间的点积。然后,我将这些结果结合起来,并根据0.8的阈值进行过滤。结合重新排序,这种方法产生了以下结果(表8):

在这里插入图片描述
表8 使用查询4包括重新排序的检索信息

通过这个实验,我旨在展示检索在图中的威力。通过完全控制固定实体和添加文档的过程,并灵活构建几乎任何检索Cypher查询,其潜力是巨大的。根据您的具体使用案例调整检索过程的自由几乎是无限的。在这个实验中,我们使用了一个有限的固定实体架构,缺乏广泛的描述和元素之间的关系。然而,通过结合更多的信息和连接,可以实现显著的结果。

总结

本文探讨了使用图构建和查询知识库,重点介绍了固定实体架构及其在检索增强生成(RAG)系统中的应用。固定实体架构依赖于预定义的实体和关系来构建知识图谱,具有较低的复杂性、高精度和降低的计算成本等优点。然而,它在灵活性和可扩展性方面可能面临限制。

本文展示了如何使用“鱼骨图”本体构建知识图谱并将文档集成到图中。通过利用向量索引和Cypher查询,文档根据余弦相似度与实体连接。这种方法增强了检索能力,但可能需要优化以获得更好的结果。

进行了一系列查询以评估基于图的检索方法的有效性。初始查询使用向量索引和关键字搜索来查找匹配的实体和文档。尽管存在一些挑战,如重新排序结果不理想,本文展示了图在强大且灵活的检索中的潜力。最终的智能搜索查询结合向量相似度和点积计算,展示了该方法在优化搜索结果方面的有效性。

未来方向和创新

•改进机会:增强基于LLM的提取方法和扩展预定义本体可以进一步优化知识图谱的能力。•新兴趋势:知识图谱开发中的新技术和进展可能会增强RAG系统,为复杂的检索任务提供更强大的解决方案。

总体而言,本文强调了图灵活的搜索能力的优势,以及优化实体连接和文档集成以实现高质量检索结果的重要性。提取技术的未来发展和新兴技术有望进一步推进知识图谱在RAG应用中的能力。

​

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

下面这些都是我当初辛苦整理和花钱购买的资料,现在我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

【论文精读(KG²RAG)】南京大学&阿里巴巴:Knowledge Graph-Guided Retrieval Augmented Generation (KG²RAG) 大语言模型(LLM)在生成任务中常因知识缺失或过时产生幻觉,传统检索增强生成(RAG)虽能补充知识,但仅依赖语义相似性导致检索结果冗余且缺乏关联。本文提出 KG²RAG(Knowledge Graph-Guided Retrieval Augmented Generation)框架,通过知识图谱(KG)显式建模文本块间的事实级关系,提升检索结果的多样性与连贯性。实验表明,KG²RAG 在 HotpotQA 等数据集上显著优于传统 RAG 方法,为可信 AI 推理提供了新路径。 阅读详情

相关推荐

Graph RAG实战:用知识图谱增强RAG,解决多跳推理难题

检索增强生成(RAG)技术通过结合外部知识库与大语言模型,有效提升了问答系统的准确性和事实性。其核心原理是将用户查询与向量化的文档片段进行语义匹配,从而检索出相关信息作为生成答案的上下文。然而,传统RAG在处理涉及多个实体和关系的复杂查询时,常因“多跳推理”能力不足而受限。知识图谱作为一种结构化的知识表示形式,能显式存储实体间的关系,并通过图遍历高效完成多步推理,恰好弥补了这一短板。将知识图谱与向量检索协同的Graph RAG架构,在需要深度关联分析的场景(如企业知识库、复杂事实核查)中展现出巨大技术价值。

weixin_30455023的博客 378

GraphRAG:知识图谱+RAG技术

由于RAG的一些缺陷,最近工作中用到了GraphRAG,可以简单理解为知识图谱+RAG工作,在进行QFS与深度推理上表现良好。老板希望,在类似于库存管理、预测上面,可以结合更多的上下文信息和逻辑关系,进行推理和结果的输出。(下图为RAG简单示意图)

2401_84208172的博客 2万+

Vector Graph RAG:融合向量检索与知识图谱,破解RAG多跳问答难题

在信息检索与知识问答领域,向量数据库通过将文本转化为高维向量并计算相似度,实现了高效的语义搜索,其核心原理是基于嵌入模型的表示学习。这项技术的价值在于能够从海量非结构化数据中快速找到语义相关的信息,广泛应用于推荐系统、智能客服和**检索增强生成**等场景。然而,面对需要串联多个知识点进行逻辑推理的**多跳问答**任务时,纯语义检索在捕捉实体间深层关系方面存在局限。知识图谱通过结构化的“实体-关系”网络,恰好能弥补这一不足,为推理提供明确的路径。Vector Graph RAG正是这一技术结合的产物,它通过在

weixin_30718391的博客 394

Knowledge Graph + RAG | Microsoft GraphRAG

想要將產業之知識整合到 LLM 中有許多方法,但考量到成本與效益,大部分企業級應用都會結合 RAG 進行,而近期,將 Knowledge Graph (KG) 結合 RAG 被越來越廣泛使用,儼然將會成為下一個熱門的技術,而就在這個風頭上時,7/2 Microsoft 終於將他們的 GraphRAG 開源,從技術文章發表到開源隔了近 5 個月左右,令人非常興奮想要測試其效果,因此這篇文章將向大家介紹 GraphRAG 的概念、優勢及實作步驟,並提供了多種視覺化方法,希望能幫助你快速實踐這項技術。

asd8705的专栏 645

腾讯YouToGraphRAG:从向量检索到知识推理的RAG架构演进

检索增强生成(RAG)技术通过结合检索系统与大语言模型,有效提升了问答系统的准确性和事实性。其核心原理在于将非结构化文档转化为向量表示,通过语义相似度匹配检索相关上下文,从而为LLM提供生成依据。传统RAG虽在简单事实查询中表现良好,但在处理涉及多实体关联、复杂逻辑推理的查询时,常因“信息孤岛”和“平面检索”的局限而失效,难以满足企业级知识库对深度分析和决策支持的需求。为此,业界开始探索引入知识图谱等结构化表示,以增强系统的推理能力。腾讯开源的YouToGraphRAG框架正是这一方向的实践,它创新性地通过

weixin_30376083的博客 430

鼎阳示波器SCPI指令与MD5算法解锁带宽升级实战

本文详细介绍了鼎阳示波器通过SCPI指令与MD5算法实现带宽升级的实战流程。从设备连接、信息获取到Python密钥生成脚本解析,逐步指导用户完成升级操作,并涵盖常见问题排查与功能选件激活指南,帮助用户充分释放设备潜能。

www00的博客 348

技术动态 | 知识图谱增强的RAG(KG-RAG)详细解析

转载公众号 | 知识图谱科技KG-RAG 表示基于知识图谱的RAG(Retrieval Augmented Generation)检索增强.先看一下KG-RAG的视频这是一个与任务无关的框架,它将知识图谱(KG)的显性知识与大型语言模型(LLM)的隐含知识结合起来。这是该工作的arXiv预印本 https://arxiv.org/abs/2311.17330 。我们在这里利用一个名为SPOKE(h...

开放知识图谱 1315

DGX Spark上PyTorch GPU环境配置实战:CUDA 13.0与ARM架构全流程

在深度学习中,CUDA作为GPU加速计算的底层基础,其版本与深度学习框架(如PyTorch)的匹配直接影响模型训练的效率与稳定性。GPU环境配置不仅涉及驱动、CUDA工具链与框架运行时的协同,还依赖于硬件架构与预构建包的兼容性。在AI开发机Ubuntu系统上,正确对齐CUDA版本、计算能力架构及安装源,是避免环境故障、发挥硬件算力的关键。无论是面向个人AI超算还是通用GPU服务器,掌握版本对齐、路径隔离与验证方法,都能大幅提升开发效率。本文以DGX Spark为例,详解从环境摸底到PyTorch GPU版本

weixin_29483277的博客 219

GraphRAG:基于知识图谱的RAG,好用,贼贵!

官网:https://microsoft.github.io/graphrag微软开源的一项结合了知识图谱的检索增强生成技术。简单来说,它可以显著提升AI知识库的性能,让AI能根据你提供的文档,更准确地回答你提出的复杂问题。

qq_44887965的博客 892

PLL锁相环基础知识(一)

本文介绍了锁相环(PLL)的核心组件及其工作原理,重点阐述了压控振荡器(VCO)的结构与调谐机制。VCO作为PLL的关键部分,通过变容二极管实现频率调谐,但易受温度、电压等因素影响稳定性。文章详细讲解了VCO的谐振电路原理、硅基集成方案,以及通过分频器和调制器实现的频率控制技术。特别分析了整数型和分数型N分频器的差异,指出高阶德尔塔-西格玛调制器可有效降低分数杂散。文章还探讨了预分频器的应用及其对频率分辨率的影响,揭示了PLL通过反馈环路实现频率锁定的基本原理。

weixin_49761275的博客 3035

ICLR 2022)ODConv:即插即用的动态卷积 (附代码)

一定程度上讲,ODConv可以视作CondConv的延续,将CondConv中一个维度上的动态特性进行了扩展,同时了考虑了空域、输入通道、输出通道等维度上的动态性,故称之为全维度动态卷积。ODConv是一种动态卷积算法,它的原理是在卷积过程中,根据输入数据的特征动态地调整卷积核的形状和大小,以适应不同的输入数据。具体来说,ODConv通过引入一个可学习的形变模块,根据输入数据的特征动态地调整卷积核的形状和大小,从而提高了卷积神经网络的性能。此外,相比常规卷积,动态卷积的卷积核参数往往是其n倍。

PLANTTHESON的博客 2万+

【技术解析(KG²RAG)】知识图谱如何成为大语言模型的“推理导航”?——多跳问答准确率提升40%的奥秘

本文深入解析了KG²RAG框架如何将知识图谱与大语言模型结合,以解决传统RAG在多跳问答中的推理困境。通过图谱引导的智能检索和结构化上下文组织,该框架在HotpotQA基准上实现了多跳问答准确率的显著提升,为复杂问题提供了清晰的推理导航路径。

peach的博客 982

从零到一:Qt与PCL的跨平台开发环境搭建全攻略

本文详细介绍了从零开始搭建Qt与PCL跨平台开发环境的完整流程,涵盖Windows、Linux和macOS三大平台。重点解析了Qt5与Qt6版本选择、PCL库安装配置、VTK集成等关键技术要点,并提供跨平台CMake项目模板和常见问题解决方案,助力开发者快速构建三维点云处理应用。

weixin_29280657的博客 384

Graph-RAG实战:用知识图谱增强向量检索的因果推理能力

知识图谱是一种结构化表达实体、属性与关系的技术,其核心原理在于通过节点与边构建可遍历、可推理的语义网络,从而突破传统向量检索仅依赖语义相似性的局限。相比纯向量匹配,图谱能显式建模‘禁忌’‘导致’‘适用于’等逻辑关系,显著提升医疗、法律等强推理场景下的答案可信度与可解释性。技术价值体现在支持反向查询、路径推理与证据溯源,典型应用场景包括药品禁忌分析、合同条款关联审查、个性化教育推荐等。本文聚焦Graph-RAG落地实践,详解如何用NetworkX构建轻量知识图谱,并与ChromaDB向量库协同实现因果驱动的混

chongkuachan8070的博客 320

Gazebo手册:【1】gazebo基本操作案例

欢迎来到初学者模块!本模块将引导您了解 Gazebo 的最基本功能。我们将构建一个简单的车辆来演示这些功能。这些教程适用于 Gazebo 新手和/或没有编程或 Linux 经验的人。 每个教程都建立在上一个教程的基础上,因此我们建议您按顺序学习这些教程。 一、何为Gazebo? Gazebo 是一款 3D 动态模拟器,能够准确有效地模拟复杂室内和室外环境中的机器人种群。虽然类似于游戏引擎,但 Gazebo 提供了更高保真度的物理模拟、一套传感器以及用于用户和程序的接口。 1............

gongdiwudu的专栏 2万+

3D Slicer学习记录(4)-PLUSapp连接双目相机Intel Realsense

plusapp是基于openIGTLink协议的免费的开源库和应用程序API接口,用于数据采集、预处理、校准和实时流成像、位置跟踪和其他传感器数据。这里以intel realsense双目相机为例详细的演示整个图像流导入到3D Slicer的流程。

weixin_39090239的博客 1346

论文精读:mKG-RAG: Multimodal Knowledge Graph-EnhancedRAG for Visual Question Answering

大致逻辑是先将维基百科文档中的非结构话知识转化为多模态知识图谱,再提出一个新的多模态检索器来高效检索定位问题所需要的相关知识,来辅助mllm回答问题。用MLLM从文本段落中提取 实体-关系,在提取实体时,会包含实体名称以及对应的实体描述,在提取关系时,会去连接头尾实体,同时包含关系描述,最终可以得到实体集以及关系集,生成文本子图。从图像中提取视觉实体和关系,弥补文本图的视觉信息缺失。输入用户的图像-问题对,用QM-Retriever将图像-问题对和文档(文本+图像)分别编码为向量,通过。

qq_58281383的博客 989

【nnUNetv2进阶】三、nnUNetv2 自定义网络-发paper必会

对于很多朋友来说,找到nnunet的网络结构位置的代码可能比较困难,因为nnunet的网络结构从else:代码中没有网络结构的类名,那么使用的网络是哪个呢?打开预处理后的数据集中的nnUNetPlans.json文件,如下图,configurations里面有2d、3d_fullres等,这些表示nnunet的模型,下面的network_class_name指的就是训练使用的模型结构,一般都是PlainConvUNet。

AI爱好者的博客,分享计算机领域相关知识 8757

Vector Graph RAG:融合向量检索与图推理,构建下一代智能知识系统

向量检索和图数据库是处理非结构化数据和复杂关系网络的两大核心技术。向量检索通过将文本编码为高维向量,实现基于语义相似性的高效模糊匹配,广泛应用于搜索和推荐系统。图数据库则以节点和边为基础,擅长存储和查询实体间的显式关系,支持多跳推理和路径发现,常用于社交网络、风控和知识图谱场景。将两者结合的Vector Graph RAG技术,通过构建“语义向量索引”与“关系图索引”的双引擎架构,能同时解决“找得准”和“想得深”的问题。该技术利用大语言模型进行信息抽取,将非结构化文档转化为富含实体、关系的知识图谱,并关联原

weixin_30906185的博客 399

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LightRAG快速部署指南:三步搭好基于知识图谱的RAG检索系统

如果你在内部文档库上做检索,多半遇到过这种情况:普通RAG只会捞出几段"字面相似"的文本,一旦问题跨文档、涉及整体脉络,答案就支离破碎。LightRAG 就是一个为解决这个问题而生的轻量级检索增强生成(RAG)框架——它先把文档里的实体和关系抽成知识图谱,再结合向量检索做双层查询。本文带你在三步内把它的服务器跑起来,看懂一张图背后的原理,并附一份踩坑清单。 ## 什么场景值得上知识图谱RAG

gitblog_01189的博客 610

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

用 LightRAG 十分钟搭出知识图谱检索 RAG 系统:本地部署与实操方法

给一文件夹技术文档做问答,是我上手的起点。传统 RAG 把文本切片、按相似度找块,跨文档的问题经常被答得支离破碎。LightRAG 是一条知识图谱增强的 RAG 框架路线:先用 LLM 从文档里抽出实体和关系建图,查询时把图检索与向量检索结合起来用。下面是完整走一遍的过程。 ## 和普通 RAG 比,它改了什么 先说传统向量检索的短板。切片检索天然只能回答"这块里说了什么",问到"哪些组件互相

gitblog_00769的博客 338

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

从向量检索到知识编译:Pinecone Nexus架构如何革新RAG系统生产实践

向量检索与知识图谱是构建现代智能检索系统的两大核心技术。向量检索通过Embedding模型将文本映射到高维空间,利用近似最近邻搜索实现语义相似性匹配,但其在处理复杂逻辑关联时存在局限。知识图谱则以实体和关系的形式结构化表示知识,能显式地刻画概念间的联系,支持多跳推理。将两者结合形成的混合检索系统,能显著提升复杂查询的召回率与答案准确性,其技术价值在于降低大模型处理原始、矛盾或冗余信息的负担,提升生成内容的可靠性与一致性。这一范式在RAG、智能问答、事实核查等场景中尤为重要。本文以Pinecone Nexus

weixin_33827590的博客 384

Graph RAG实战:构建可推理的知识图谱增强问答系统

知识图谱与大语言模型融合是当前RAG技术演进的核心方向,Graph RAG通过显式建模实体间关系,突破传统向量检索在语义鸿沟、长程依赖和逻辑推理上的局限。其本质是将非结构化文本与结构化数据(如PDF、CSV、数据库)统一映射为可查询、可遍历、可聚合的图结构,从而支撑多跳推理、因果分析与业务路径验证。相比单纯优化embedding或召回策略,Graph RAG更强调数据层的语义切片、图谱层的Schema驱动建模,以及推理层的Cypher+LLM协同计算。本文聚焦金融、医疗、制造等知识密集型场景,详解从PDF解

agtvo48266的专栏 454

通用知识库搭建与知识图谱构建全指南(RAG + GraphRAG 实战)

微软 2024 年开源了 microsoft/graphrag,是目前 GraphRAG 事实上的标准实现。构建阶段(Indexing)切片:与 RAG 类似,把文档切成片段;LLM 建图:用 LLM 从每个片段中抽取实体和关系,写入知识图谱;社区检测(Community Detection):用图算法(如 Leiden)把图谱划分成"社区"(联系紧密的节点簇);社区摘要(Community Summaries):用 LLM 为每个社区生成一段摘要——相当于给"关系网"写"部门简介"。

ITOfDragon的博客 1244

基于RAG与知识图谱的AI医疗问诊平台:从架构到毕业设计实现

在人工智能与工程实践结合愈发紧密的今天,知识图谱与检索增强生成(RAG)成为构建智能问答系统的两大核心支柱。知识图谱以图结构组织医疗实体间的多跳关系,解决传统关系型数据库在海量关联查询中的性能瓶颈;RAG则通过先检索后生成的方式,有效缓解大模型幻觉与知识时效性问题。二者融合,既能支撑结构化的疾病-症状-科室推理,又能实现非结构化医学文本的语义召回,为医疗问诊场景提供了可靠的技术底座。这类系统也因技术栈完整、演示效果直观、区分度高,成为计算机毕业设计的热门选择。本文基于RAG + LangChain + Ne

weixin_34015336的博客 715

知识图谱 GraphRAG:彻底解决传统 RAG 的 7 大致命局限

传统 RAG 只会 “找句子”,GraphRAG 才会 “懂逻辑”! 面对跨文档关联、多跳推理、隐性关系挖掘等复杂场景,向量检索驱动的传统 RAG 频频 “断链”、易幻觉、答案碎片化。GraphRAG 以知识图谱为核心,将零散文本转化为 “实体 - 关系” 网络,通过社区检测与全局摘要,让大模型具备关系导航 + 多跳推理 + 全局洞察能力。从企业合规检索、金融风险排查到医疗知识关联,GraphRAG 正重构 RAG 技术边界,破解大模型 “答不准、说不清、不可溯” 三大痛点。

2301_80289431的博客 661
上一篇: 使用Ragas为RAG生成测试集,评估RAG系统在特定文档的表现
下一篇: 解决复杂查询难题:如何通过 Self-querying Prompting 提高 RAG 系统效率?
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值