今天是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)
实体解析流程包括以下步骤:
这个过程可以直接使用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实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。