ChatGPT 的时代已经到来。这是一个深受大型语言模型影响的时代,可以称为第三次工业革命。如今,就连我的母亲也在使用 ChatGPT 进行查询,这表明它的使用范围跨越了几代人,并且还在不断扩大。 被广泛使用的原因可能在于它能够准确地获取和传达用户想要的信息。在信息泛滥的时代,它可以选择性地提供“必要”的信息。 尽管迄今为止取得了重大进展,但仍存在许多挑战。例如,其中一个挑战是“幻觉”现象,即提供不准确的信息。这个问题源于各种原因,其中最主要的原因是对用户意图的误解,导致获取不相关的信息。 解决方案很简单:准确理解用户的意图并提供“相关”信息。 改善这一状况涉及多种方法,主要分为四类:
- 从零开始构建大型语言模型,这种模型从一开始就可以获得清晰的数据上下文,但构建成本较高。
- 采用“训练有素”的大型语言模型,并在特定领域进一步训练它们,这种方法具有成本效益且相对准确,但在模型上下文和领域特定上下文之间保持平衡却具有挑战性。
- 按原样使用大型语言模型,但为用户查询添加额外的上下文,这虽然具有成本效益,但在上下文提供方面存在主观性和潜在偏见的风险。
- 保留大型语言模型,同时在响应过程中提供“相关信息”的额外上下文,这允许提供最新的、具有成本效益的响应,但在识别和集成相关文档方面涉及复杂性。
此外,可以从五个方面比较这些方法:成本、准确性、特定领域术语、最新响应、透明度和可解释性。具体来说,它将研究检索增强生成 (RAG) 技术,该技术涉及获取“相关”信息和提供上下文,并探索 RAG 的局限性以及 GraphRAG 作为克服这些局限性的手段。
RAG简介
- 什么是 RAG(检索增强生成)?如前所述,它是一种能够“良好”地解释用户查询、获取“相关”信息、根据上下文进行处理,然后将这些有用信息纳入响应的技术。
- RAG 的特点是具有成本效益、相对准确性、能够充分提供特定领域的语境化、能够反映最新信息,并且在追踪信息源文档方面具有透明度和可解释性,因此它是一种主要选择的方法。
关键在于“正确”地解释查询、获取相关信息并将其处理成上下文。 如图所示,从用户查询 → 通过预先训练的大型语言模型 (LLM) 生成响应 → 将响应传递给用户的过程现在包含一个额外的步骤,即检索模型获取查询的相关信息。这个添加的检索模型是上述三个元素发生的地方。
为了有效地完成这三个任务,该过程被划分为四个阶段实施:1. 预检索 2. 分块 3. 检索 4. 后检索。
预检索
- 数据粒度是指RAG模型为增强生成过程而在检索步骤之前预先处理的数据的细节或精度级别。
- RAG 模型结合大型预训练语言模型与检索组件的优势,通过在文本段(例如句子、段落或文档)数据库中搜索相关信息来生成响应。
- 数据粒度可以从句子级(例如,单个事实、句子或短段落)到段落级(例如,整个文档或文章)。
- 数据粒度的选择会影响模型的性能及其生成准确且上下文相关的文本的能力。
- 细粒度数据可以为生成任务提供更具体、更详细的信息,而粗粒度数据可以提供更广泛的背景或一般知识。
- 选择正确的数据粒度来优化 RAG 模型的有效性至关重要。它涉及在提供详细和相关信息的需求与模型因数据过多或数据过于笼统而过载的风险之间取得平衡,因为数据过多或过于笼统而变得毫无用处。
分块
- 这是将源数据的输入形式适当处理以量化为大型语言模型的过程。由于可输入大型语言模型的token数量有限,因此正确分割和输入信息非常重要。
- 例如,在人与人之间的对话中,理想的情况是,在给定的时间内,对话是均匀分布的。
- 如果一小时内一个人讲了 59 分钟,另一个人讲了 1 分钟,那么对话主要是由一个人“输入”信息主导的,这不是交换,而是信息的注入。
- 相反,如果每个人讲话30分钟,那么这就算是一次有效的对话,因为信息是均匀交换的。
- 换句话说,要给大型语言模型提供“好”的信息,给出“合适”的上下文至关重要。在有限的长度(token)下,在给定的上下文限制内保留上下文之间的有机关系非常重要。因此,在处理相关数据时,就会出现“数据长度限制”的问题。
检索
- 此阶段涉及搜索文档或文本段数据库以查找与用户查询相关的内容。它包括理解查询的意图和上下文,并根据这种理解从数据库中选择最相关的文档或文本。
- 例如,在处理有关“绿茶的健康益处”的查询时,该模型会找到提及绿茶的健康益处的文档,并根据相似性指标选择它们。
后检索
- 此阶段处理检索到的信息,以将其有效地集成到生成过程中。它可能包括总结搜索到的文本、选择最相关的事实,以及细化信息以更好地匹配用户的查询。
- 例如,在分析了有关绿茶的健康益处的文档后,它可以总结出“绿茶富含抗氧化剂,可以降低某些慢性病的风险并改善大脑功能”等要点,以对用户的查询生成全面而信息丰富的答复。
RAG 的局限
与其他方法相比,RAG 具有其高效性,例如成本、最新信息和领域特异性,但它也有其固有的局限性。下图似乎很好地描述了 RAG 流程中的这些局限性。基于该图,我们将研究一些有代表性的局限性。
- 内容缺失:第一个限制是无法索引与用户查询相关的文档,因此无法使用它们来提供上下文。尽管认真预处理数据并正确将数据存储在数据库中,但无法利用这些数据是一个重大缺陷。
- 错过排名靠前的文档:第二个问题出现在检索到与用户查询相关的文档但相关性极低时,导致答案无法满足用户的期望。这主要源于在过程中确定要检索的“文档数量”的主观性,突出了一个主要限制。因此,有必要进行各种实验来正确定义这个 k 参数。
- 不在上下文中 — 合并策略限制:从数据库中检索到包含答案的文档,但无法将其包含在生成答案的上下文中。当返回大量文档时会发生这种情况,并且需要合并过程来选择最相关的信息。
- 未提取:第四个是 LLM(大型语言模型)的基本限制,它倾向于检索“近似”值而不是“精确”值。因此,获取“近似”或“类似”值可能会导致不相关的信息,从而因未来响应中的微小噪音而造成重大影响。
- 格式错误:第五个问题似乎与指令调整密切相关,指令调整是一种通过使用指令数据集微调 LLM 来提高零样本性能的方法。当提示中的附加指令格式不正确时,就会发生这种情况,导致 LLM 产生误解或误读,从而产生错误的答案。
- 特异性不正确:第六个问题涉及未充分利用用户查询信息或过度使用查询信息,导致在考虑查询的重要性时出现问题。当输入和检索输出的组合不合适时,很可能会发生这种情况。
- 不完整:第七个限制是,尽管能够使用上下文来生成答案,但缺失的信息会导致对用户查询的响应不完整。
总结起来,造成这些限制的主要原因是 1. 索引 — 检索与用户查询相关的文档,2. 在生成答案之前正确提供信息,3. 输入和检索前/后过程的适当组合。这三个因素凸显了 RAG 中的关键因素,并提出了如何改进这些问题的问题。
何时使用 GraphRAG
- 它可以从检索前、检索后和即时压缩的角度解决上述 RAG 的一些局限性,考虑到知识图谱的检索和推理的背景。
- 图形检索专注于通过获取相关信息来增强上下文,而图形推理则适用于如何在 RAG 中遍历和搜索信息(例如分块和上下文输入)。
- 预检索可以利用知识图谱索引来获取相关文档。通过基于知识图谱中的节点和边对文档进行语义索引,它直接检索语义相关的文档。
- 该过程涉及考虑是否获取节点或子图。提取节点涉及将用户查询与分块节点进行比较以找到最相似的节点,并使用它们的连接路径作为查询语法。
- 然而,这种方法需要指定在路径中获取多少个节点,并且很大程度上依赖于用于创建知识图谱的信息提取模型,突出了模型性能的重要性。
- 此外,可变长度边 (VLE) 可用于获取相关信息,因此需要优化数据库以实现高效检索。数据库管理员和机器学习工程师参与的数据库设计和优化讨论对于提高性能至关重要。
- 子图涉及获取连接到相关节点的自我图,可能嵌入多个相关的自我图以将整体上下文与用户的查询进行比较。
- 由于所使用的嵌入技术不同,性能也存在差异,因此该方法需要进行各种图嵌入实验。
- 后检索涉及重新排序过程,该过程和谐地使用来自 RAG 和 GraphRAG 的值。通过利用来自 GraphRAG 的语义搜索值以及 RAG 的相似性搜索值,它可以生成上下文。GraphRAG 的值允许验证检索的语义基础,从而提高获取信息的准确性。
- 对 vectorDB 和 GraphDB 使用单个数据库允许在同一个数据库内进行语义(GraphRAG)和向量(RAG)索引,从而有助于验证检索准确性并改进不准确性。
- 提示压缩受益于提示工程期间的图形信息,例如决定将哪些块信息注入提示中。
- 图表可以根据查询上下文和文档之间的关系,在检索后仅返回相关信息。这样可以追踪不相关信息的来源,从而进行改进。
- 例如,如果产生了不适当的响应,则可以使用图形查询追溯到有问题的部分并立即纠正。
总体而言,GraphRAG 通过集成知识图谱技术来更好地检索信息、推理和生成上下文,从而提供了一种全面的方法来解决 RAG 的局限性,从而提高了生成的响应的准确性和相关性。
GraphRAG 架构
有 4 个模块用于执行 GraphRAG :查询重写、增强、检索和语义搜索、相似性搜索。
查询重写
在这个过程中重写用户的查询提示。如果用户编写并订购了引擎,我们可以在其查询提示格式中添加额外的有用上下文。在这个过程中,我们重新定义了这些东西,以明确用户的意图。
检索前和检索后
- 此阶段涉及考虑要检索哪些信息以及检索后如何处理这些信息。在预检索阶段,重点主要放在与设置分块大小、如何索引、确保数据得到充分清理以及检测和删除任何不相关数据(如果存在)相关的决策上。
- 在 Post-Retrieval 阶段,挑战在于如何有效地协调数据。此阶段主要涉及两个过程:Re-ranking 和 Prompt Compression。在 Prompt Compression 中,查询结果(具体为 Graph Path)被用作 Context + Prompt 的一部分来生成答案,将其作为提示元素纳入其中。Re-ranking 则利用 Graph Embedding 结合 LLM(Large Language Model)Embedding 的结果来增强排序的多样性和准确性。
- 这种方法对于提高所生成答案的性能和相关性具有战略意义,确保该过程不仅获取相关信息,而且还能有效地整合信息以产生连贯且上下文准确的答案。
为 GraphRAG 做好准备
- 为了有效地存储、管理和检索图形数据,需要能够反映数据独特特征的软件。就像 RDBMS(关系数据库管理系统)可以有效地管理表格形式的数据一样,GDBMS(图形数据库管理系统)可以熟练地处理图形数据。特别是在知识图谱推理的背景下,如果数据库没有针对图形结构进行优化,则通过 JOIN 操作反转相关性的成本会显著增加,可能会导致瓶颈。
- 因此,GDBMS 在 GraphRAG 中必不可少,因为它可以高效地管理所有这些方面。为了检索图形,需要一个生成图形查询的模型。虽然哪些数据是相关的可能很清楚,但自动从特定数据点获取相关数据的过程至关重要。这需要一个专用于生成图形查询的自然语言处理模型。
- 不幸的是,图形查询生成的数据集不足,这凸显了数据获取的迫切需求。Neo4j 向前迈出了一步,推出了一项数据众包计划,有兴趣贡献或了解更多信息的人可以通过提供的链接进一步探索该计划。
- 关于提取信息来创建图形形式,需要一个信息提取模型来推断分块文档之间的关系。
- 可以考虑两种主要方法:使用 NLP 的命名实体识别 (NER) 或采用知识图谱的基础模型。每种方法都有其明显的区别。
- NLP 侧重于从文本角度关注语义,严重依赖于词语之间的预定义依赖关系,而通过基础模型从知识库形成的知识图谱则侧重于节点,可以调节边缘之间传输的信息量。
- 对于嵌入图形数据,使用模型为 Reranker 添加额外的上下文,通过图形嵌入纳入整体视角,不同于 LLM(大型语言模型)的传统序列视角。这允许赋予结构特征,以图形视角补充关注随时间变化的关系的序列视角,确保所有块(节点)都均匀表示,从而填补任何可能遗漏的信息。
GraphRAG 限制
- GraphRAG 与 RAG 一样,具有明显的局限性,包括如何形成图形、生成查询这些图形的查询,以及最终决定根据这些查询检索多少信息。主要挑战是“查询生成”、“推理边界”和“信息提取”。特别是“推理边界”带来了重大限制,因为优化相关信息量会导致信息检索过程中的过载,从而对 GraphRAG 的核心方面(即答案生成)产生负面影响。
应用 GraphRAG
- GraphRAG 利用 GNN(图神经网络)结果中的图嵌入,通过用户查询响应推理来增强文本嵌入。这种方法称为软提示,是一种提示工程。提示工程可分为硬提示和软提示。硬提示涉及明确提供的提示,需要手动将上下文添加到用户查询中。这种方法的缺点是提示创建的主观性,尽管它很容易实现。
- 相反,Soft 涉及隐式提供提示,其中将额外的嵌入信息添加到模型现有的文本嵌入中以得出类似的推理结果。这种方法通过使用“学习”的上下文嵌入来确保客观性,并可以优化权重值。然而,它需要直接的模型设计和实施,这使得它更加复杂。
何时使用 GraphRAG
- GraphRAG 并非万能药。在没有明确需求的情况下,不建议使用像 GraphRAG 这样的高级技术,尤其是在传统 RAG 效果良好的情况下。引入 GraphRAG 应该有事实证据支撑,尤其是在检索阶段检索到的信息与用户的查询意图不匹配时。这类似于向量搜索的基本限制,其中信息是基于“近似”而不是“精确”值检索的,从而导致潜在的不准确性。
- 当在混合搜索方法中引入 BM25 进行精确搜索、改进排名流程或微调嵌入质量等努力都无法显著提高 RAG 性能时,可能值得考虑使用 GraphRAG。
结论
这篇文章涵盖了从 RAG 到 GraphRAG 的所有内容,重点介绍了微调、从头开始构建、快速工程和 RAG 等方法,以提高响应质量。虽然 RAG 因能够以相对较低的成本高效获取相关文档以回答查询而广受好评,但它在检索过程中面临着一些限制。高级 RAG 或 GraphRAG 通过利用“语义”推理和检索,成为克服这些限制的解决方案。有效利用 GraphRAG 的关键考虑因素包括信息提取技术以推断和生成分块数据之间的联系、用于存储和检索的知识索引以及用于生成图形查询的模型,例如 Cypher 生成模型。随着新技术的不断涌现,这篇文章旨在作为 GraphRAG 的资源,帮助您更熟悉这种先进的方法。感谢您阅读这篇广泛的讨论。