7月3日,微软在官网开源了基于图的RAG(检索增强生成)——GraphRAG。
为了增强大模型的搜索、问答、摘要、推理等能力,RAG已经成为GPT-4、Qwen-2、文心一言、讯飞星火、Gemini等国内外知名大模型标配功能。
传统的RAG系统在处理外部数据源时,只是简单地将文档转换为文本,将其分割为片段,然后嵌入到向量空间中,使得相似的语义对应相近的位置。
但这种方法在处理需要全局理解的海量数据查询时存在局限,因为它过度依赖局部文本片段的检索,无法捕捉到整个数据集的全貌。
所以,微软在RAG基础之上通过“Graph”图的方式,例如,文本中的实体,人物、地点、概念等,构建了超大的知识图谱,帮助大模型更好地捕捉文本中的复杂联系和交互,来增强其生成、检索等能力。
开源地址:https://github.com/microsoft/graphrag?tab=readme-ov-file
Graph RAG架构简单介绍
Graph RAG的核心是通过两阶段构建基于图谱的文本索引:首先,从源文档中衍生出实体知识图谱;然后,针对所有紧密相关的实体群组预生成社区摘要。
所以,Graph RAG的第一步就是将源文档分割成较小的文本块,这些文本块随后被输入到大模型中以提取关键信息。
在这个过程中,大模型不仅要识别文本中的实体,还要识别实体之间的关系,包括它们之间的相互作用和联系,用来构建一个庞大的实体知识图谱,其中包含了数据集中所有重要实体和它们之间的关系。
简单来说,这个过程就像杀鸡一样,当一整只鸡(数据)拿上来后,我们就要把它分解成腿、翅膀、胸肉等更细小的组成部分,同时会关注这些部位之间的关系方便后续的处理。
接着,Graph RAG使用社区检测算法来识别图谱中的模块化社区。这些社区由相关的节点组成,它们之间的联系比与图中其他部分的联系更为紧密。通过这种方式,整个图谱被划分为更小、更易于管理的单元,每个单元都代表了数据集中的一个特定主题或概念。
在基于图的索引之上,Graph RAG进一步生成社区摘要。这些摘要是对社区内所有实体和关系的总结,它们提供了对数据集中特定部分的高层次理解。
然后要求大模型对每个答案进行打分,分数在0—100之间,得分过低的将被过滤掉,高分则留下。将剩余的中间答案按照得分高低排序,逐步添加至新的上下文窗口中,直至词数限制。
例如,当用户提问“如何进行有效减肥时?”,系统会利用与问题相关的社区摘要来生成部分答案。这些部分答案随后被汇总并精炼,以形成最终答案。
Graph RAG对大模型的好处
与传统RAG相比,Graph RAG的全局检索能力非常强,所以很擅长处理大规模数据集,以下是对大模型的主要帮助。
扩展上下文理解能力:通常大模型受限于其上下文窗口的大小,这限制了它们理解和生成基于长文本的能力。Graph RAG通过构建基于图的索引,将整个文本集合分解成更小、更易于管理的社区模块,从而扩展了模型的理解和生成能力。
增强全局查询:传统的RAG方法在处理全局数据的查询时表现不佳,因为依赖于局部文本片段的检索。Graph RAG通过生成社区摘要,使得模型能够从整个数据集中提取相关信息,生成更加全面和准确的答案。
提高摘要的质量和多样性:Graph RAG方法通过并行生成社区摘要,然后汇总这些摘要来生成最终答案,能帮助大模型从不同的角度和社区中提取信息,从而生成更丰富的摘要。
优化算力、资源利用率:在处理大规模文本数据集时,资源的有效利用至关重要。Graph RAG通过模块化处理,减少了对算力资源的需求。与传统的全文摘要方法相比,Graph RAG在生成高质量摘要的同时,显著降低了对token的需求。
提升信息检索和生成的协同:Graph RAG方法通过结合检索增强和生成任务,实现了两者之间的协同工作,提高了生成内容的准确性和相关性。
增强了对数据集结构的理解:通过构建知识图谱和社区结构,Graph RAG不仅帮助模型理解文本内容,还能理解数据集的内在结构。
提高对复杂问题的处理能力:在处理需要多步骤推理或多文档信息整合的复杂问题时,Graph RAG能够通过检索和摘要不同社区的信息,提升对问题更深层次的理解。尤其是在解读PDF、Word等文档时非常有用。
为了评估Graph RAG的性能,微软在一个100万tokens、超复杂结构的数据集上,包含娱乐、播客、商业、体育、技术、医疗等内容,进行了综合测试。
结果显示,全局检索方法在全面性和多样性测试上,超越了Naive RAG等方法。特别是,Graph RAG方法在播客转录和新闻文章数据集上都显示出了超高的水准,多样性也非常全面,是目前最佳的RAG方法之一。
同时Graph RAG对tokens的需求很低,也就是说可以帮助开发者节省大量成本。