admin管理员组

文章数量:1036096

[荐书]LightRAG 双层检索机制揭秘:优化数据处理与查询响应

LightRAG 是一种基于 GraphRAG 的创新方法,它将知识图谱的属性与基于嵌入的检索系统相结合,使其既快速又高效,并取得了 SOTA 结果。LightRAG 是由香港大学的 Zirui Guo 等人开发,它通过图形基础索引和双层检索框架,提高了检索效率并简化了知识更新过程。相较于微软的 GraphRAG,它减轻了 GraphRAG 中基于社区的索引和遍历所带来的计算开销和运行缓慢的挑战。

尤其是最近更新更是带来了一些非常实用的功能:

  • 支持无缝接入用户自己知识图谱
  • 支持通过名称删除实体
  • 支持多种文件类型:TXT、PDF、DOC、PPT和CSV。
  • 新增 LightRAG Gui[1],允许插入、查询、可视化和下载,源码开源[2].

可以说这些功能是非常实用了

1. 对比 GraphRAG

我们之前已经介绍了很多关于微软 GraphRAG 的博客,感兴趣的同学可以翻一翻。那么微软 GraphRAG 的缺点是什么呢?

  • GraphRAG 运行速度非常慢,因为它需要多个 LLM API 调用,可能会达到速率限制。
  • 它的成本极高,有测试表明使用 GPT4o,索引一本简单的书(如狄更斯的《圣诞颂歌》)可能需要花费大约 6 至 7 美元,该书有 32k 个单词。
  • 为了将新数据合并到现有的图形索引中,我们还需要为以前的数据重建整个 KG,这是一种低效的方法。
  • 没有对重复元素执行明确的重复数据删除步骤,这会导致图形索引嘈杂。

与 Naive RAG 相比,LightRAG 提供:

  • 综合信息检索,答案多样。
  • 高效且低成本的检索
  • 快速适应数据并以最少的重新索引来更新数据。

LightRAG 解决了 GraphRAG 的两个主要痛点,

  • 通过比社区遍历更好的方法减少索引和响应时间。
  • 使用仅更新特定元素实例的增量更新算法轻松适应新数据。

2. LightRAG 索引机制

如下图所示,它采用提取、P、去重三步索引。

  • 实体和关系提取 E(.)。该步骤构造提示词提示大模型从给定文档中提取简单实体和关系。例如,在上例中,"蜜蜂 "和 "养蜂人 "是两个实体。它们之间存在 "观察 "关系。比如,养蜂人观察蜜蜂。
  • 用于键值对生成的 LLM 分析 P(.)。我们使用一个由 LLM 驱动的分析函数 P(⋅)
    • 每个索引键 K是一个单词或短语,用于实现高效检索;
    • 对应的值 V是一个文本段落,总结了来自外部数据的相关片段,以支持文本生成。
    • 例如,在我们选择的例子中,LLM 解释了谁是 "养蜂人"。
  • 优化图操作的去重功能 D(.)。用于识别并合并原始文本不同片段中相同的实体和关系。通过这一过程,去重功能有效地减少了图的规模,从而降低了与图操作相关的开销,实现更高效的数据处理。例如上图中,"养蜂人 "这个实体很可能是从多个文档或块中检索出来的。因此,我们需要一个删除重复数据步骤,只保留其中的一个,而舍弃其他具有相同含义的内容。

image-20241127115108159

更具体的代码索引流程如下图所示。

LightRAG Indexing Flowchart

3. LightRAG 的双层检索机制

为支持多样化查询类型,LightRAG 管道采用了双层检索策略,能够同时满足具体查询和抽象查询的需求,为用户提供精准且相关的定制化响应:

  • 低级检索:主要针对特定实体及其相关属性或关系的检索。此层面聚焦于细节导向的查询,旨在从图中的特定节点或边提取精确信息。
  • 高级检索:面向更广泛的话题和全局主题的查询。此层面聚合多个相关实体和关系的信息,为用户提供关于高级概念和概要的洞见,而非具体细节。

通过将图结构与向量表示相结合,LightRAG 能够深入理解实体间的相互关系。这种协同方式让检索算法能有效利用局部和全局关键词,从而简化搜索流程并提升结果的相关性。

  • 使用大模型从用户查询中提取出高层关键词和低层关键词
  • 利用高效的向量数据库,将局部查询关键词与候选实体进行匹配,同时将全局查询关键词与连接到全局关键点的关系进行匹配。
  • 为增强查询的高阶关联性,LightRAG 进一步收集检索到的图元素对应的局部子图中的邻居节点。

这种方法不仅优化了检索效率,还能兼顾细节信息和宏观视角,为用户提供更全面的答案。

关键词提取,LightRAG 中有 Prompts 示例。

代码语言:javascript代码运行次数:0运行复制
示例 1:
查询:"国际贸易如何影响全球经济稳定?"
################
输出:
Output:
{{
  "high_level_keywords": ["国际贸易", "全球经济稳定", "经济影响"],
  "low_level_keywords": ["贸易协定", "关税", "货币汇率", "进口", "出口"]
}}

更为具体的代码流程如下图所示。

LightRAG Retrieval and Querying Flowchart

4. LightRAG GUI

第三方基于 Streamlit 实现了一版开源的 LightRAG GUI,代码地址:.py。

参考资料

[1]

LightRAG Gui: /

[2]

源码开源: .py

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2024-11-27,如有侵权请联系 cloudcommunity@tencent 删除索引优化开源数据处理数据

[荐书]LightRAG 双层检索机制揭秘:优化数据处理与查询响应

LightRAG 是一种基于 GraphRAG 的创新方法,它将知识图谱的属性与基于嵌入的检索系统相结合,使其既快速又高效,并取得了 SOTA 结果。LightRAG 是由香港大学的 Zirui Guo 等人开发,它通过图形基础索引和双层检索框架,提高了检索效率并简化了知识更新过程。相较于微软的 GraphRAG,它减轻了 GraphRAG 中基于社区的索引和遍历所带来的计算开销和运行缓慢的挑战。

尤其是最近更新更是带来了一些非常实用的功能:

  • 支持无缝接入用户自己知识图谱
  • 支持通过名称删除实体
  • 支持多种文件类型:TXT、PDF、DOC、PPT和CSV。
  • 新增 LightRAG Gui[1],允许插入、查询、可视化和下载,源码开源[2].

可以说这些功能是非常实用了

1. 对比 GraphRAG

我们之前已经介绍了很多关于微软 GraphRAG 的博客,感兴趣的同学可以翻一翻。那么微软 GraphRAG 的缺点是什么呢?

  • GraphRAG 运行速度非常慢,因为它需要多个 LLM API 调用,可能会达到速率限制。
  • 它的成本极高,有测试表明使用 GPT4o,索引一本简单的书(如狄更斯的《圣诞颂歌》)可能需要花费大约 6 至 7 美元,该书有 32k 个单词。
  • 为了将新数据合并到现有的图形索引中,我们还需要为以前的数据重建整个 KG,这是一种低效的方法。
  • 没有对重复元素执行明确的重复数据删除步骤,这会导致图形索引嘈杂。

与 Naive RAG 相比,LightRAG 提供:

  • 综合信息检索,答案多样。
  • 高效且低成本的检索
  • 快速适应数据并以最少的重新索引来更新数据。

LightRAG 解决了 GraphRAG 的两个主要痛点,

  • 通过比社区遍历更好的方法减少索引和响应时间。
  • 使用仅更新特定元素实例的增量更新算法轻松适应新数据。

2. LightRAG 索引机制

如下图所示,它采用提取、P、去重三步索引。

  • 实体和关系提取 E(.)。该步骤构造提示词提示大模型从给定文档中提取简单实体和关系。例如,在上例中,"蜜蜂 "和 "养蜂人 "是两个实体。它们之间存在 "观察 "关系。比如,养蜂人观察蜜蜂。
  • 用于键值对生成的 LLM 分析 P(.)。我们使用一个由 LLM 驱动的分析函数 P(⋅)
    • 每个索引键 K是一个单词或短语,用于实现高效检索;
    • 对应的值 V是一个文本段落,总结了来自外部数据的相关片段,以支持文本生成。
    • 例如,在我们选择的例子中,LLM 解释了谁是 "养蜂人"。
  • 优化图操作的去重功能 D(.)。用于识别并合并原始文本不同片段中相同的实体和关系。通过这一过程,去重功能有效地减少了图的规模,从而降低了与图操作相关的开销,实现更高效的数据处理。例如上图中,"养蜂人 "这个实体很可能是从多个文档或块中检索出来的。因此,我们需要一个删除重复数据步骤,只保留其中的一个,而舍弃其他具有相同含义的内容。

image-20241127115108159

更具体的代码索引流程如下图所示。

LightRAG Indexing Flowchart

3. LightRAG 的双层检索机制

为支持多样化查询类型,LightRAG 管道采用了双层检索策略,能够同时满足具体查询和抽象查询的需求,为用户提供精准且相关的定制化响应:

  • 低级检索:主要针对特定实体及其相关属性或关系的检索。此层面聚焦于细节导向的查询,旨在从图中的特定节点或边提取精确信息。
  • 高级检索:面向更广泛的话题和全局主题的查询。此层面聚合多个相关实体和关系的信息,为用户提供关于高级概念和概要的洞见,而非具体细节。

通过将图结构与向量表示相结合,LightRAG 能够深入理解实体间的相互关系。这种协同方式让检索算法能有效利用局部和全局关键词,从而简化搜索流程并提升结果的相关性。

  • 使用大模型从用户查询中提取出高层关键词和低层关键词
  • 利用高效的向量数据库,将局部查询关键词与候选实体进行匹配,同时将全局查询关键词与连接到全局关键点的关系进行匹配。
  • 为增强查询的高阶关联性,LightRAG 进一步收集检索到的图元素对应的局部子图中的邻居节点。

这种方法不仅优化了检索效率,还能兼顾细节信息和宏观视角,为用户提供更全面的答案。

关键词提取,LightRAG 中有 Prompts 示例。

代码语言:javascript代码运行次数:0运行复制
示例 1:
查询:"国际贸易如何影响全球经济稳定?"
################
输出:
Output:
{{
  "high_level_keywords": ["国际贸易", "全球经济稳定", "经济影响"],
  "low_level_keywords": ["贸易协定", "关税", "货币汇率", "进口", "出口"]
}}

更为具体的代码流程如下图所示。

LightRAG Retrieval and Querying Flowchart

4. LightRAG GUI

第三方基于 Streamlit 实现了一版开源的 LightRAG GUI,代码地址:.py。

参考资料

[1]

LightRAG Gui: /

[2]

源码开源: .py

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2024-11-27,如有侵权请联系 cloudcommunity@tencent 删除索引优化开源数据处理数据

本文标签: 荐书LightRAG 双层检索机制揭秘优化数据处理与查询响应