基于Neo4j与LangChain实现GraphRAG:具象化理解其关键模块
作者: 老刘说NLP 来源: 老刘说NLP
今天是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实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。
更多AI工具,参考Github-AiBard123,国内AiBard123