跳转到主内容

我们的 GraphRAG 如何揭示琼恩·雪诺与龙之母的隐藏关系

阅读时长6分钟

RAGFlow v0.9 版本引入了对 GraphRAG 的支持,GraphRAG 最近由微软开源,据称是下一代检索增强生成(RAG)技术。在 RAGFlow 框架内,我们对 RAG 2.0 有更全面的定义。这个提议的端到端系统以搜索为中心,由四个阶段组成。最后两个阶段——索引和检索——主要需要一个专门的数据库,而前两个阶段定义如下:<!--truncate-->

  • 数据提取:利用各种文档模型来确保索引数据的高质量,从而避免“垃圾进,垃圾出”的问题。
  • 文档预处理:在提取的数据发送到数据库之前,可以执行可选的预处理步骤,例如文档聚类和知识图谱构建。这些步骤主要增强多跳问答和跨文档查询。虽然 GraphRAG 确实很先进,但它只是 RAG 2.0 管道的一部分。

从v0.9版本开始,这部分功能被集成到RAGFlow中。下面,我们将探讨添加此功能的原因以及它与微软的GraphRAG有何不同。

知识图谱对于提升RAG效果至关重要。传统的RAG系统通常只检索与用户查询相似的内容,因此可能无法提供正确答案。像概括问题这样的任务本质上是查询聚焦摘要(QFS),可以通过使用知识图谱来处理。知识图谱可以根据文本相关性有效地聚合内容,并在对话过程中基于这些聚合内容生成摘要,从而提高最终回答的准确性。许多现代AI搜索解决方案都采用这种方法。顺便一提,RAGFlow早期版本中引入的RAPTOR也采用文本聚类来提高检索效率;知识图谱特有的方法可以根据命名实体生成更具“层级性”的结果,为QFS查询提供更好的准确性和更全面的响应。目前,许多研究已经证明,知识图谱可以通过提供额外的上下文信息来提高RAG输出的有效性,并使大型语言模型(LLM)在许多情况下产生更具解释性的答案。这就是GraphRAG的推出迅速引起社区广泛关注的原因。在RAG兴起之前,已经有许多努力将知识图谱应用于问答(KGQA)。然而,它们在企业中广泛采用的一个主要障碍始终是知识图谱构建的自动化和标准化。随着LLM和RAG的出现,现在自动化这一过程变得更加可行,而GraphRAG就是其中最著名的例子之一。

GraphRAG大大简化了知识图谱的抽象和构建,极大地促进了标准产品的推出。因此,我们在RAGFlow中实现GraphRAG时参考了这种方法。RAGFlow将知识图谱构建作为文档预处理阶段的一个可选功能,以支持更复杂的问答场景。它还对原始的GraphRAG进行了以下改进

  • 引入了去重步骤。在原始的GraphRAG中,提取的命名实体直接使用而没有去重,这可能导致将“2024”和“2024年”或“IT”和“信息技术”等同义词视为不同实体的问题。这个学术上称为实体解析的挑战通常涉及复杂的算法。然而,RAGFlow利用大型语言模型(LLM)进行去重,因为LLM可以被广泛视为隐式知识图谱。
  • 减少了Token消耗:GraphRAG本身会消耗大量的Token,因为它在原始实现中需要将所有用户上传的文档多次发送给LLM。这导致了显著的Token使用量,特别是对于使用SaaS服务的RAG系统。RAGFlow通过确保所有文档只提交给LLM一次来优化此过程,从而最大程度地减少不必要的Token消耗。为了从根本上解决这个问题,可以使用更小的独立模型进行知识图谱构建。一个成功的例子是Triplex,它基于拥有30亿参数的Phi-3进行了微调,提供了比使用LLM高出数倍的成本节省。未来,RAGFlow也将提供类似的解决方案,以进一步降低与GraphRAG相关的构建成本。

以下是RAGFlow版本GraphRAG的演示

在文档解析阶段,用户可以选择“知识图谱”作为特定知识库的分块方法。他们还必须定义希望LLM提取的命名实体类型,例如“组织”、“人物”和“地点”,如下图所示

选择分块方法后,您可以触发LLM提取实体并构建知识图谱。RAGFlow会可视化地显示这些知识图谱,包括节点名称、节点描述和“社区”

知识图谱也可以以思维导图的形式显示

知识图谱的可视化对于用户调试对话至关重要。目前,RAGFlow支持使用任何连接的LLM生成知识图谱。然而,LLM在数据提取方面能力各异,未能提取知识图谱可能导致不正确的对话。在这种情况下,可视化工具可用于查看生成的知识图谱并分析对话。

目前,RAGFlow 的知识图谱生成停留在文档层面,这意味着它不支持为知识库中的所有文档构建知识图谱。换句话说,RAGFlow 当前版本的 GraphRAG 无法链接从多个文档生成的知识图谱。此功能需要显著更多的内存和计算资源。RAGFlow 将根据用户反馈在后期重新考虑此功能。

以下图片并置了根据《冰与火之歌》生成的对话。左侧使用 GraphRAG 生成的对话展示了 GraphRAG 在涉及嵌套逻辑的多跳查询中提供了更深入、更全面的答案。右侧基于使用 GENERAL 解析方法解析的文档的对话则没有结果。

总而言之,RAGFlow对GraphRAG的实现旨在自动化RAG的知识图谱构建。虽然GraphRAG消除了传统知识图谱算法的许多复杂性,但它并非RAG应用中使用知识图谱的最终解决方案。在实际的企业场景中,很大一部分数据不适合知识图谱构建,或者为所有数据构建知识图谱可能不划算。事实上,知识图谱还有许多其他应用,例如使用知识图谱重写查询。RAGFlow计划在不久的将来支持这些功能。

参考文献

  1. GraphRAG, https://github.com/microsoft/graphrag
  2. 从局部到全局:一种面向查询聚焦摘要的图RAG方法, https://arxiv.org/abs/2404.16130
  3. HippoRAG:受神经生物学启发的长时记忆用于大型语言模型, https://arxiv.org/abs/2405.14831
© . This site is unofficial and not affiliated with InfiniFlow.