引言
【算力豹导读】今年7月,微软首次开源了超大知识索引GraphRAG,仅4个多月的时间在Github已超过19000颗星,成为目前最火的RAG框架之一。
但GraphRAG在处理全局数据查询时成本非常高,尤其是应用在那些大参数的AI模型中格外明显,查询的过程中也存在延迟、不准确等问题。
今天凌晨,微软研究院发布了GraphRAG迭代版本——LazyGraphRAG。
这个RAG的最大亮点之一就是成本非常低,数据索引成本只有完整版GraphRAG的0.1%,同时采用了全新混合数据搜索方法,生成结果的准确率、效率等却更好,很快发布开源版本并加入到GraphRAG库中。
什么是RAG——(检索、增强、生成)
RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合了信息检索技术与语言生成模型的人工智能技术。该技术通过从外部知识库中检索相关信息,并将其作为提示(Prompt)输入给大型语言模型(LLMs),
以增强模型处理知识密集型任务的能力,如问答、文本摘要、内容生成等。RAG模型由Facebook AI Research(FAIR)团队于2020年首次提出,并迅速成为大模型应用中的热门方案。
检索增强生成
什么是RAG?
RAG(Retrieval-Augmented Generation,检索增强生成),RAG是一种 AI 框架,它将传统信息检索系统(例如数据库)的优势与生成式大语言模型 (LLM) 的功能结合在一起。
LLM通过将这些额外的知识与自己的语言技能相结合,可以撰写更准确、更具时效性且更贴合具体需求的文字。
如何理解RAG?
RAG的目的是通过从外部知识库检索相关信息来辅助大语言模型生成更准确、更丰富的文本内容。那我们如何理解RAG的检索、增强和生成呢?
- 检索:检索是RAG流程的第一步,从预先建立的知识库中检索与问题相关的信息。这一步的目的是为后续的生成过程提供有用的上下文信息和知识支撑。
- 增强:RAG中增强是将检索到的信息用作生成模型(即大语言模型)的上下文输入,以增强模型对特定问题的理解和回答能力。这一步的目的是将外部知识融入生成过程中,使生成的文本内容更加丰富、准确和符合用户需求。通过增强步骤,LLM模型能够充分利用外部知识库中的信息。
- 生成:生成是RAG流程的最后一步。这一步的目的是结合LLM生成符合用户需求的回答。生成器会利用检索到的信息作为上下文输入,并结合大语言模型来生成文本内容。
微软新升级的LazyGraphRAG
数据索引阶段
GraphRAG:主要依赖于大模型来提取和描述实体及其关系,并为每个实体和关系生成总结。这个过程涉及到图统计来优化实体图,并提取出层次化的社区结构。然而,这种方法需要借助大量的语言模型处理,导致GraphRAG的数据索引成本非常高。
LazyGraphRAG:在数据索引阶段不进行任何预先的总结或嵌入生成,而是采用NLP名词短语提取来识别概念及其共现关系,然后再通过图统计来优化概念图,并提取层次社区结构。这种方法显著降低了索引成本。
查询处理方面
GraphRAG:使用广度优先搜索来确保查询回答时考虑了整个数据集的广度。
LazyGraphRAG:结合了最佳优先搜索和广度优先搜索的动态,采用迭代加深的方式。它首先按相似度排名文本片段,然后通过动态选择相关社区来逐步细化查询结果。这种方法使得LazyGraphRAG能够支持本地和全局查询,同时在考虑整个数据集的广度的同时,高效地找到最佳匹配的文本块。
GraphRAG | LazyGraphRAG | |
Build index构建索引 | 使用 LLM 提取和描述实体及其关系,b) 使用 LLM 总结每个实体和关系的所有观察结果,c) 使用图形统计来优化实体图并提取分层社区结构 | 使用 NLP 名词短语提取来提取概念及其共现,b) 使用图形统计来优化概念图并提取分层社区结构 |
优化查询 | None – 整个过程中使用原始查询 | 使用 LLM 来 a) 识别相关的子查询并将它们重新组合成一个扩展的查询,b) 使用概念图中的匹配概念来优化子查询 |
匹配查询 | None – 使用所有社区摘要回答所有查询 ( 广度优先 ) | 对于每个 q 子查询 [3-5]: – 使用文本块嵌入和块-社区关系,首先按与查询的相似性对文本块进行排名,然后按其排名靠前的社区排名对社区进行排名k 个文本块 ( 最好在前 ) – 使用基于 LLM 的句子级相关性评估器来评估前 -k 个来自社区的未经测试的文本块(按排名顺序排列)( 广度优先 ) – 递归到子社区之后z个连续社区产生零相关文本块,或达到相关性测试预算 / Q( 迭代加深 ) |
地图答案 | 使用 LLM 并行回答随机批次社区摘要的原始查询 | 对于每个 q 子查询 [3-5]: – 从相关文本块构建概念子图 – 使用概念的社区分配将相关块分组在一起 – 使用 LLM 从相关块组中提取与子查询相关的声明,作为仅关注相关内容的一种方式 – 对提取的声明进行排名和过滤,以适应预定义的上下文窗口大小 |
减少答案 | 使用 LLM 通过映射的答案来回答原始查询 | 使用 LLM 通过提取的 map 声明来回答扩展的查询 |
在灵活性和扩展性方面,GraphRAG由于其丰富的总结信息,可以用于多种用途,但高成本限制了其在一次性查询和探索性分析中的使用。
LazyGraphRAG则提供了统一的查询接口,支持本地和全局查询,非常灵活,适合一次性查询、探索性分析和流式数据使用场景。
在应用场景上,GraphRAG适合需要高质量、全面查询结果的场景,例如,企业级知识管理和复杂数据分析等。而LazyGraphRAG则适合需要高效处理全局查询且对成本敏感的场景,如中小企业和个人开发者的内容推荐系统和项目管理工具,这对于那些资源有限的人来说非常友好。
将向量RAG和GraphRAG与延迟LLM使用混合
LazyGraphRAG旨在融合向量RAG和GraphRAG的优点,同时克服它们各自的局限性:
- 矢量RAG是一种最佳优先搜索形式,它使用与查询的相似性来选择最匹配的源文本块。但是,它不知道全局查询要考虑的数据集的广度。
- GraphRAG全局搜索是一种广度优先搜索形式,它使用源文本实体的社区结构来确保在考虑数据集的全部广度的情况下回答查询。但是,它不知道本地查询要考虑的最佳社区。
LazyGraphRAG以迭代深化的方式结合了最佳优先和广度优先搜索动态。与完整GraphRAG的全局搜索机制相比,这种方法在延迟LLM使用并显着提高答案生成效率的方式上是“懒惰的”。整体性能可以通过一个主要参数(相关性测试预算)进行扩展,该参数以一致的方式控制成本-质量权衡。
结语
LazyGraphRAG在成本、技术、灵活性与扩展性、应用场景以及性能评估等方面都展现出了显著的优势。它的发布将为数据检索和分析领域带来新的技术突破和应用前景。(文/宋雨涵)