基于Neo4j与LangChain实现GraphRAG:具象化理解其关键模块

今天是2024年7月15日,星期一,北京,天气晴。

再看GraphRAG的具像化理解-基于Neo4j与LangChain实现流程,在说了太多理论上的概念之后,还是需要看看可视化的部分,将关键步骤的结果表示出来

可以看看 《Implementing ‘From Local to Global’ GraphRAG with Neo4j and LangChain: Constructing the Graph》 (https://neo4j.com/developer-blog/global-graphrag-neo4j-langchain/)这一工作,其中有些具像化的例子,也给出了具体的例子,可以看看。

供大家一起参考并思考。

一、整体实现框架及算法流程

1、整体的实现框架

整体实现框架如下,很形象

2、算法的实现流程

算法来自:《From Local to Global: A Graph RAG Approach to Query-Focused Summarization》,https://arxiv.org/abs/2404.16130

二、具体实现细节上的一些具像化认识

3、构建好的索引—图组成

源文档到文本块(Source Documents to Text Chunks):源文档被分割成更小的文本块以供处理;

文本块到元素实例(Text Chunks to Element Instances):每个文本块被分析以提取实体和关系,生成代表这些元素的元组列表;

元素实例到元素摘要(Element Instances to Element Summaries):提取的实体和关系由LLM总结成每个元素的描述性文本块;

元素摘要到图社区(Element Summaries to Graph Communities):这些实体摘要形成了一个图,然后使用Leiden算法等算法将其划分为具有层次结构的社区;

图社区到社区摘要(Graph Communities to Community Summaries):使用LLM为每个社区生成摘要,以理解数据集的全局主题结构和语义;

4、全局问答的本质

社区摘要到全局答案:社区摘要被用来通过生成中间答案来回答用户查询,然后将这些答案聚合成最终的全局答案。

5、实体消歧的流程(Entity resolution flow)

实体解析流程包括以下步骤:

  • 图中的实体-从图中的所有实体开始。
  • K-最近邻图-基于文本嵌入连接相似实体,构建K-最近邻图。
  • 弱连接组件-在K-最近邻图中识别弱连接组件,将可能相似的实体分组。在这些组件被识别后,添加一个词距离过滤步骤。
  • LLM评估-使用LLM评估这些组件,决定是否应该合并每个组件内的实体,从而对实体解析做出最终决定(例如,合并‘Silicon Valley Bank’和‘Silicon_Valley_Bank’,同时拒绝不同日期如‘September 16, 2023’和‘September 2, 2023’的合并)。

这个过程可以直接使用llm进行,核心在于prompt:

实现前后的效果如下图所示:

6、社区的具像化表示

Countries are colored based on the community they belong to,社区是一组节点,这些节点彼此之间的连接比其他部分的图更为密集,表明了更高水平的互动或相似性。

社区结构的可视化具像化表示,该算法识别了五个层级的社区,最高层级(粒度最粗,社区最大的层级)拥有1,188个社区(相比之下,组件有1,119个)。以下是使用Gephi对最后一个层级的社区进行可视化的结果。

而更进一步的,层次化的社区结构,社区用橙色表示,实体用紫色表示,如下:

7、最终形成的Graph图整体具像化

图示如下,很有趣,分成三个层级:

整个的实现代码在:https://github.com/tomasonjo/blogs/blob/master/llm/ms_graphrag.ipynb

关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。

对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。


相关推荐

  • 传统RAG及GraphRAG最佳实践探索及落地中的知识库建设、现实坑点:老刘说NLP技术社区第24、25讲精彩回放
  • 解密字符串的底层结构,它是怎么实现的?
  • 我的 3 个项目
  • 3分钟带你秒懂线程池设计机制
  • Kaggle竞赛Top5分享融合绝学。
  • [开源]MIT开源协议,一款 Vue UI 组件库,60多个开箱即用高质量组件
  • Spring Boot集成groovy快速入门Demo
  • ECMAScript 2024新特性
  • 工作中如何体现一个人的技术深度?
  • 微软开源了可视化工具SandDance
  • 北京内推 | ​百度搜索策略部视频搜索团队招聘多模态方向算法实习生
  • CVPR最佳论文候选:NeRF新突破!用启发式引导分割去除瞬态干扰物
  • 探索LLM安全漏洞新视角:植入后门的RAG会对大模型推理带来哪些风险?
  • WizardLM新作!ArenaLearning: 通过模拟LLM竞技场来构建大规模数据飞轮
  • 上位机干了3年!还不知道串口调试助手???
  • 29.3K Star震惊!!!Windows一个常用工具开源了,程序员玩疯了
  • 疯狂!CVPR 超越 Science!全球第二大
  • 如何向10岁小孩解释XGBoost回归算法
  • 两份报告:AIGC APP流量与场景研究+AI行业设计领域
  • OpenAI披露AGI评估标准,目前接近第2级