转自公众号:知识图谱科技
在讨论RAG和GraphRAG之前
ChatGPT时代已经到来。它是一种受大型语言模型影响如此之深的时代,可以被称为第三次工业革命。现在,甚至连我母亲都使用ChatGPT来查询问题,这表明它的使用涵盖了各个年代,并且不断扩大。
这种广泛使用的原因可能在于它能够准确地获取和传达用户所需的信息。在这个信息泛滥的时代,它能够有选择性地提供“必要”的信息。
尽管迄今取得了显著的进展,但还存在许多挑战。例如,其中一个挑战是“幻觉”现象,即提供不准确的信息。这个问题源于多种原因,其中一个主要原因是对用户意图的错误解读,导致提取到了不相关的信息。
解决方案很简单:准确理解用户的意图并提供“相关的”信息。
改进的工作涉及到各种方法,主要分为四类:
-
1. 从零开始构建大型语言模型,这样可以从一开始就具有清晰的数据背景,但建设成本高。
-
2. 采用“经过训练的”大型语言模型,并在特定领域进一步训练它们,这是一种经济高效且相对准确的方法,但在维护模型背景和特定领域背景之间保持平衡方面具有挑战性。
-
3. 使用大型语言模型,并在用户查询中添加额外的上下文。这种方法具有成本效益,但存在主观性和潜在偏见的风险。
-
4. 保留大型语言模型,并在响应过程中提供“相关信息”的额外上下文。这样可以提供及时、经济高效的回复,但需要在识别和整合相关文档方面具备复杂性。
此外,这些方法可以从以下五个方面进行比较:成本、准确性、领域特定术语、及时响应、透明度和可解释性。
有关详细比较,请参阅https://deci.ai/blog/fine-tuning-peft-prompt-engineering-and-rag-which-one-is-right-for-you/。
本文讨论了尝试解决大型语言模型中产生幻觉现象的各种方法。具体而言,本文将研究检索增强生成(Retrieval Augmented Generation,RAG)技术,该技术涉及获取“相关”信息并提供上下文,并探讨RAG的局限性以及作为克服这些局限性的一种手段的GraphRAG。
想要掌握如何将大模型的力量发挥到极致吗?2024年10月26日叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。
留言“参加”即可来叶老师的直播间互动,1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。
对RAG的简要介绍
RAG(检索增强生成)是什么?正如提到的那样,它是一种技术,可以“良好”地解释用户的查询,检索“相关”信息,将其处理为上下文,然后将此有用信息融入回复中。
正如引用的网站所指出的,RAG以其成本效益、相对准确性、提供领域特定语境的充足性、反映最新信息的能力以及追踪信息来源文档的透明度和可解释性等特点而被认为是一种主要选择的方法。
-
图1,RAG操作流程/https://deci.ai/blog/fine-tuning-peft-prompt-engineering-and-rag-which-one-is-right-for-you/
关键在于“正确地”解释查询,获取相关信息,并将其处理成上下文。
如图1所示,从用户查询→响应生成通过预训练的大型语言模型(LLM)→将响应传送给用户的过程,现在包括一个额外的步骤,其中检索模型提取查询的相关信息。上述三个元素发生在这个添加的检索模型中。
为了有效执行这三个任务,该过程被分为四个阶段来实施/改进:
1. 预检索 2. 切块 3. 检索 4. 检索后。
Pre-Retrieval 预检索
数据粒度是指在检索过程中用于增强生成过程的RAG模型要搜索的数据的详细程度或精确度,在检索步骤之前进行预处理。
将大型预训练语言模型的优势与检索组件相结合,RAG模型通过搜索文本段(如句子、段落或文档)数据库以获取相关信息来生成响应。
数据粒度可以从句子级别(如个别事实、句子或短段落)到段落级别(如整个文档或文章)。数据粒度的选择影响模型的性能以及其生成准确和上下文相关文本的能力。
精细的数据可以为生成任务提供更具体和详细的信息,而粗粒度的数据可以提供更广泛的上下文或一般性知识。
选择合适的数据粒度来优化RAG模型的效果至关重要。这涉及到在提供详细和相关信息的需要与过多数据或过于一般化数据导致无用的风险之间的平衡。
Chunking 切块
这是将源数据的输入形式适当处理为量化的大型语言模型的过程。由于大型语言模型可以输入的令牌数是有限的,因此正确地分割和输入信息非常重要。
例如,在人们的对话中,假定了一种理想情况,即对话在给定的时间内均匀分布。
如果一个人在一个小时内说了59分钟,而另一个人说了1分钟,对话就会被一个人“输入”信息所主导,不是一个交流,而是信息的注入。
相反,如果每个人都讲了30分钟,那么这就被认为是一种高效的对话,因为信息是均衡交换的。
换句话说,为了向大型语言模型提供“好”的信息,关键是要提供“适当”的上下文。鉴于长度(令牌)有限,保留给定上下文限制内上下文之间的有机关系非常重要。因此,在处理相关数据时,会出现“数据长度限制”的问题。
Retrieval 检索
该阶段涉及在文档或文本片段数据库中搜索与用户查询相关的内容。它包括理解查询的意图和上下文,并根据这种理解从数据库中选择最相关的文档或文本。
例如,在处理有关“绿茶的健康益处”的查询时,模型会找到提到绿茶的健康益处的文档,并根据相似性指标选择它们。
Post-Retrieval 检索后
该阶段将检索到的信息加工处理,以有效地整合到生成过程中。可能包括对搜索文本进行概述、选择最相关的事实,并对信息进行精化,以更好地匹配用户的查询。
例如,在分析有关绿茶健康益处的文档后,可以总结关键点,如“绿茶富含抗氧化剂,可以降低某些慢性病的风险,改善脑功能”,从而对用户的查询产生全面而有信息量的回应。
RAG 的限制
RAG相比其他方法具有高效的一面,如成本、最新信息和领域特定性,但它也有其固有的局限性。下面的附图似乎很好地描述了RAG过程中的这些局限性。根据这个附图,我们将检验一些具有代表性的局限性。
-
缺少内容:第一个限制是无法索引与用户查询相关的文档,因此无法利用它们提供上下文。尽管数据经过了认真的预处理并正确存储在数据库中,但无法利用它们是一个重大缺陷。
-
错过排名靠前的文档:第二个问题出现在与用户查询相关的文档被检索到,但它们的相关性很低,导致答案无法满足用户的期望。这主要源于确定在过程中检索多少个文档的主观性质,突显了一个重大限制。因此,有必要进行各种实验以正确定义这个 k 超参数。
-
不在上下文中——合并策略的限制:从数据库中检索到包含答案的文档,但未包含在生成答案的上下文中。当返回了大量文档时,需要进行合并处理以选择最相关的信息。
-
未提取:第四个是 LLM(大型语言模型)的一个根本限制,它倾向于检索“近似”而不是“精确”的值。因此,获取“近似”或“相似”的值可能会导致不相关的信息,在未来的响应中产生重大影响。
-
错误格式:第五个问题与指令调整密切相关,这是一种通过使用指令数据集对LLM进行微调以提高零样本性能的方法。当额外的指令在提示中格式不正确时,会导致LLM的误解或错误解释,从而产生错误答案。
-
准确性不足:第六个问题涉及不充分地使用用户查询信息或过度使用它,在考虑查询重要性时会导致问题。这很可能发生在输入和检索输出的不恰当组合时。
-
不完整:第七个限制是,尽管可以使用上下文生成答案,但由于缺少信息,导致对用户查询的回答不完整。
总结起来,这些限制的主要原因是:
-
索引化, 即检索与用户查询相关的文档;
-
在生成答案之前提供正确信息;
-
输入和检索之前/之后的适当组合。
这三个因素强调了在RAG中的重要性,并提出了如何改进这些问题的问题。
什么时候使用GraphRAG
它可以从Pre-Retrieval、Post-Retrieval和Prompt Compression的角度解决RAG的一些限制,考虑到知识图谱的检索和推理的背景。
图谱检索关注通过获取相关信息来增强上下文,而图谱推理适用于在RAG中遍历和搜索信息,例如chunk和上下文输入。
Pre-Retrieval可以利用知识图谱索引来获取相关文档。通过基于知识图谱中的节点和边对文档进行语义索引,它直接检索语义相关的文档。
该过程涉及考虑是否获取节点或子图。提取节点涉及将用户查询与分块节点进行比较,以找到最相似的节点,并使用它们的连接路径作为查询语法。
然而,这种方法需要指定要获取多少个路径内的节点,并且严重依赖于用于创建知识图谱的信息提取模型,突出了模型性能的重要性。
此外,Variable Length Edges (VLE) 可用于获取相关信息,这需要对数据库进行优化以实现高效的检索。涉及数据库设计和优化的讨论,需要数据库管理员和机器学习工程师的重要参与,以增强性能。
子图涉及获取与相关节点相连的自我图,可能嵌入多个相关的自我图以与用户的查询进行整体上下文比较。
该方法需要进行各种图嵌入实验,因为基于所使用的嵌入技术,性能有差异。
Post-Retrieval涉及对重新排序的过程,它和GraphRAG的值结合使用来生成上下文。通过利用GraphRAG中的语义搜索值和RAG的相似性搜索值,它生成上下文。GraphRAG的值可以验证检索的语义基础,提高了获取信息准确性。
在同一个数据库中同时使用vectorDB和GraphDB,可以实现语义(GraphRAG)和向量(RAG)索引,从而便于验证检索准确性并改进不准确之处。
Prompt Compression在prompt工程中从图信息中获益,例如决定将哪些分块信息注入到提示中。
图谱使得在检索后仅返回相关信息成为可能,基于查询上下文和文档之间的关系。这允许追踪无关信息的来源以进行改进。
例如,如果生成了不合适的回答,可以使用图查询追溯到问题所在并立即进行更正。
总的来说,GraphRAG通过整合知识图谱技术来解决RAG的局限性,提供了一个全面的方法,以改善信息检索、推理和上下文生成,从而提高生成的回复的准确性和相关性。
GraphRAG 架构
在执行GraphRAG时有4个模块。查询重写、增强、检索以及语义搜索和相似性搜索。
Query Rewriting 查询重写
将用户的查询重新实现在这个过程中。如果用户编写一条指令给引擎,我们可以添加额外的有用上下文到其查询提示格式中。在这个过程中,我们重新定义了这些事情以澄清用户的意图。
检索前&检索后
该阶段涉及考虑要检索的信息以及在检索后如何处理该信息。在预检索阶段,重点主要集中在决定分块大小、如何进行索引、确保数据清洁以及检测和删除任何不相关数据(如果存在的话)等方面。
在检索后阶段,挑战在于有效地协调数据。这个阶段主要涉及两个过程:重新排序和提示压缩。在提示压缩中,查询结果,特别是图形路径,被用作上下文+提示生成答案的一部分,将其作为提示元素加以整合。重新排序利用图形嵌入和大型语言模型(LLM)嵌入的结果,以提高排名的多样性和准确性。
这种方法在提高生成答案的性能和相关性方面具有战略意义,确保该过程不仅获取相关信息,而且还有效地整合信息以产生连贯和上下文准确的响应。
准备好GraphRAG的因素
为了有效地存储、管理和检索图谱数据,需要具有反映数据独特特性的软件。就像关系数据库管理系统(RDBMS)有效地管理表形数据一样,图数据库管理系统(GDBMS)存在是为了熟练地处理图形数据。特别是在知识图谱推理的背景下,如果数据库未针对图形结构进行优化,通过连接操作逆转相关性的成本将显著增加,可能导致瓶颈。
因此,在GraphRAG中,GDBMS在管理所有这些方面的效率方面至关重要。为了检索图谱,需要一个生成图谱查询的模型。虽然可能清楚哪些数据相关,但自动获取特定数据点的关联数据的过程至关重要。这需要专门用于生成图谱查询的自然语言处理模型。
不幸的是,缺乏用于图谱查询生成的数据集,这凸显了对数据获取的紧迫需要。Neo4j通过启动数据众包计划迈出了一步,有兴趣参与或了解更多的人可以通过提供的链接进一步了解。
关于提取信息以创建图谱形式,需要一个信息抽取模型来推断精心分块的文档之间的关系。
可以考虑两种主要方法:使用自然语言处理(NLP)的命名实体识别(NER)或使用基于知识图谱的基础模型。每种方法都有其显著的差异。
自然语言处理将重点放在从文本角度提取语义,严重依赖于词语之间的预定义依赖关系,而由基于知识库的基础模型构成的知识图谱则侧重于节点,并且可以调节边缘之间传输的信息量。
为了嵌入图谱数据,需要使用模型向Reranker添加额外的上下文,通过图嵌入(Graph Embedding)提供整体视角,与大型语言模型(LLMs)侧重于时间关系的序列视角有所不同。这使得结构特征得以灌输,补充了侧重于时间关系的序列视角,同时确保所有块(节点)均得到平衡的图谱视角代表,从而填补可能遗漏的信息。
GraphRAG 限制
GraphRAG,就像RAG一样,存在明显的局限性,包括如何形成图谱,生成用于查询这些图形的查询,以及最终根据这些查询决定检索多少信息。
主要挑战是“查询生成”,“推理边界”和“信息提取”。特别是,“推理边界”提出了重大限制,因为优化相关信息的数量可能会导致信息检索期间的负荷过大,从而对GraphRAG的核心方面 - 答案生成产生负面影响。
应用GraphRAG
GraphRAG利用GNN(图神经网络)结果的图嵌入来增强文本嵌入,以用户查询回应推理为主。这种方法被称为软提示,是一种提示工程的类型。提示工程可以分为硬提示和软提示两类。硬提示需要明确提供提示,需要将提示手动添加到用户查询中。这种方法的缺点是提示的创建具有主观性,不过实现起来比较直接。
相反,软提示是隐式提供提示,通过将额外的嵌入信息添加到模型的现有文本嵌入中,从而得出类似的推理结果。这种方法通过使用“学习到”的上下文嵌入来确保客观性,并且可以优化权重值。但是,它需要直接进行模型的设计和实现,因此更加复杂。
何时使用GraphRAG
-
GraphRAG并非万能解药。在没有明确需要的情况下,不建议使用像GraphRAG这样的高级技术,尤其是传统的RAG表现良好时。引入GraphRAG应该以事实依据为基础进行合理的证明,特别是当检索阶段检索到的信息与用户查询意图不匹配时。这类似于向量搜索的根本局限,即基于'近似'而非'精确'值来检索信息,从而可能导致不准确性。
-
当引入BM25进行精确搜索,改进排名过程或者对嵌入质量进行微调等努力并没有明显提高RAG性能时,或许考虑使用GraphRAG会更有价值。
Conclusion 总结
本帖涵盖了从RAG到GraphRAG的所有内容,重点介绍了微调、从头开始构建、提示工程和RAG等方法,以及提高响应质量。虽然RAG因其以相对较低的成本高效地获取相关文档以回答查询而受到赞誉,但在检索过程中它面临着几个限制。
先进的RAG,即GraphRAG,通过利用"语义"推理和检索来克服这些限制,成为一个解决方案。有效利用GraphRAG的关键考虑因素包括信息提取技术,用于推断和生成分块数据之间的连接,用于存储和检索的知识索引,以及用于生成图查询的模型,如Cypher生成模型。
随着新技术的日益涌现,本帖旨在作为关于GraphRAG的资源,帮助您更熟悉这种先进的方法。感谢您阅读这篇广泛讨论的文章。
Reference 引用
-
https://medium.com/@bijit211987/top-rag-pain-points-and-solutions-108d348b4e5d
-
https://luv-bansal.medium.com/advance-rag-improve-rag-performance-208ffad5bb6a
-
Barnett, Scott, et al. “Seven failure points when engineering a retrieval augmented generation system.” arXiv preprint arXiv:2401.05856 (2024).
-
https://deci.ai/blog/fine-tuning-peft-prompt-engineering-and-rag-which-one-is-right-for-you/
-
Luo, Linhao, et al. “Reasoning on graphs: Faithful and interpretable large language model reasoning.” arXiv preprint arXiv:2310.01061 (2023).
-
https://towardsdatascience.com/advanced-retrieval-augmented-generation-from-theory-to-llamaindex-implementation-4de1464a9930