
前言这一章我们介绍GraphRAG范式算着时间也是该到图谱了NLP每一轮新模型出来后往往都是先研究微调然后各种预训练方案接着琢磨数据各种主动学习半监督弱监督无监督再之后就到图谱和对抗学习~前一阵Graph RAG的风吹得呼呼的经常被问你们也Graph RAG了么但Graph RAG虽好但并非RAG的Silver Bullet它有特定适合的问题和场景更适合作为RAG中的一路召回用来解决实体密集依赖全局关系的信息召回。所以这一章我们来聊聊GraphRAG的实现和具体解决哪些问题。Graph RAG和Naive RAG的效果对比https://graphrag-demo.deepset.ai/我们先基于Deepset提供的Graph RAG的demo来看几个效果对比。Demo基于美股的季报构建了图谱然后横向对比同一个问题使用GPT4-O基于图谱回答和使用朴素RAG的区别。我们来看3个Graph RAG会出现显著优势的问题类型问题1Which companies bought GPUs, write one line summary for each company问题2Compare Tesla and Apple Inc, answer the question in a structure and concise way问题3 What do these reports talk about?以上3个Demo展示了Graph RAG最核心的优势和适配的场景范围从大到小分别是Dataset Global Info依赖数据全局结构化信息回答“有哪些”,“the best、most、top”类问题Subgroup Abstract Info依赖对全局数据进行分类划分对局部进行信息抽象可以回答一些衍生的“某一类某主题”“有几类”问题Entity and Relationship Info: 依赖实体和实体间的关联信息回答“A的各个方面”“A vs B”对比差异类问题。这里也可以从实体延伸到文档包括多文档和文档间的关联系信息静态图谱微软Graph RAG实现https://github.com/microsoft/graphragGRAPH Retrieval-Augmented Generation: A SurveyFrom Local to Global: A Graph RAG Approach to Query-Focused Summarization阿里的graph RAG综述对GRAG的流程进行了分类Graph RAG其实就是在RAG的召回内容中加入图谱召回来优化回答主要包含以下三个部分图谱构建图数据召回图增强回答。所以不同Graph RAG论文的差异也主要就在以上三个部分的不同实现和排列组合下面我们看下微软GraphRAG的具体实现。step1.图谱构建第一步是对文档进行chunking分块的目标是因为大模型在处理太长的上文时会导致实体抽取的召回率较低论文对比了不同的chunk大小从600-2400字随着chunk变大段落中能检测到的实体量级会逐渐降低。第二步是使用大模型对分段的内容进行实体抽取通用领域直接使用以下指令进行未指定实体类型的广义实体entitytypedescription和实体三元组sourcetargetrelation抽取而对于垂直领域会需要依赖few-shot来提升抽取效果。这里论文会使用模型进行多轮反思“针对抽取结果是否有未识别出的实体”如果存在则进行补充抽取来提升对于构建图谱最关键的实体三元组抽取的召回率。GRAPH_EXTRACTION_PROMPT -Goal- Given a text document that is potentially relevant to this activity and a list of entity types, identify all entities of those types from the text and all relationships among the identified entities. -Steps- 1. Identify all entities. For each identified entity, extract the following information: - entity_name: Name of the entity, capitalized - entity_type: One of the following types: [{entity_types}] - entity_description: Comprehensive description of the entitys attributes and activities Format each entity as (entity{{tuple_delimiter}}entity_name{{tuple_delimiter}}entity_type{{tuple_delimiter}}entity_description) 2. From the entities identified in step 1, identify all pairs of (source_entity, target_entity) that are *clearly related* to each other. For each pair of related entities, extract the following information: - source_entity: name of the source entity, as identified in step 1 - target_entity: name of the target entity, as identified in step 1 - relationship_description: explanation as to why you think the source entity and the target entity are related to each other - relationship_strength: an integer score between 1 to 10, indicating strength of the relationship between the source entity and target entity Format each relationship as (relationship{{tuple_delimiter}}source_entity{{tuple_delimiter}}target_entity{{tuple_delimiter}}relationship_description{{tuple_delimiter}}relationship_strength) 3. Return output in {language} as a single list of all the entities and relationships identified in steps 1 and 2. Use **{{record_delimiter}}** as the list delimiter. 4. If you have to translate into {language}, just translate the descriptions, nothing else! 5. When finished, output {{completion_delimiter}}. -Examples- ###################### {examples} -Real Data- ###################### entity_types: [{entity_types}] text: {{input_text}} ###################### output:使用以上Promtp抽取出的实体结果如下有了实体三元组就可以直接进行图谱构建了这里graphrag直接使用NetworkX构建无向图。step2.图谱划分和描述生成有了图下一步就是如何描述图谱信息在大模型之前我们更多是采用模版来把实体和实体关系信息转化成文本而在LLM时代有了更多可能。这里微软的特色是多了一步对图谱进行划分和描述。图谱划分也叫社群发现之所以要做社群发现其实就来自GraphRag要解决全局主体汇总类关联类的问题而这种问题就是通过先对全局进行层次划分对所有局部主题社群都预先进行信息汇总实现的这部分信息既包含了局部结构信息例如主营业务为GPU的有几家公司也包含了局部语义例如抽象主题和概念。社群发现有很多种算法, 有基于modularity有基于层次聚类还有基于随机游走的各种算法这里论文选用了Leiden是对Louvain算法的优化也属于modularity类型的算法会生成互斥的多个子图。针对每个子图会使用以下Prompt指令让模型生成社群的相关总结这里一个子图其实就对应一个topic可以是一个事件一个主体相关的所有信息一类话题等等。以下prompt除了生成summary还会生成finding也就对应前面提到的抽象主题话题类型的信息抽象。COMMUNITY_REPORT_SUMMARIZATION_PROMPT {persona} # Goal Write a comprehensive assessment report of a community taking on the role of a {role}. The content of this report includes an overview of the communitys key entities and relationships. # Report Structure The report should include the following sections: - TITLE: communitys name that represents its key entities - title should be short but specific. When possible, include representative named entities in the title. - SUMMARY: An executive summary of the communitys overall structure, how its entities are related to each other, and significant points associated with its entities. - REPORT RATING: {report_rating_description} - RATING EXPLANATION: Give a single sentence explanation of the rating. - DETAILED FINDINGS: A list of 5-10 key insights about the community. Each insight should have a short summary followed by multiple paragraphs of explanatory text grounded according to the grounding rules below. Be comprehensive. .....此处省略输出格式和few-shot 得到的针对每个社群的结构化总结如下后面会把titlesummaryfindings[‘summary’]findings[‘explanation’]整体拼接的文本作为该局部信息的总结。这里其实是整个流程中最消耗模型的部分并且虽然论文并未提及但是当图谱有新增节点信息时这里的report也需要进行增量更新需要识别到出现变更的子图并对应去更新子图的reportstep3. 图谱信息回答最后就是如何使用以上信息当用户的query进来微软的论文中采用了针对以上生成的report全部用于回答再对回答进行筛选的逻辑。但其实也可以先加入召回逻辑基于用户query去召回相关的子图report虽然肯定会有一些损失但是可以大幅降低耗时和成本。微软的实现是Concatenation把所有report打散拼接成多个chunk每个chunk作为一段context上文Map使用以上多个context和用户query得到多个中间回答然后使用大模型对所有中间回答进行打分0-100Reduce以上打分降序保留窗口长度限制内的所有答案拼接作为上文使用大模型生成最终回答。效果上论文对比了在podcast和news article数据集上分别使用不同level的子图生成的report作为contextC0-C3以及直接使用图节点信息TS来对比naive RAGSS的效果。以下是使用大模型分别评估回答的全面性多样性有用性和直接性在以上4个评估角度上两两对比的胜率。使用图信息的所有方案均超越naive rag~LightRAGhttps://github.com/HKUDS/LightRAGLightRAG: Simple and Fast Retrieval-Augmented GenerationLightRAG是港大刚出的新RAG框架对比微软的graph rag实现它更多在信息召回层面做了优化。这里我们只看下lightrag和graph rag的核心差异点对图索引的构建和图信息召回在图谱构建的环节二者基本是一致的差异在于LightRAG为了构建召回索引在graphRAG抽取实体和关系的Prompt指令中加入了high-level关键词抽取的指令用于抽取可以描述图局部抽象信息的关键词该关键词作为索引可以直接用于主题概念等问题的信息召回。对比微软使用子图report来描述局部信息lightrag在抽取时使用关键词来描述局部信息更加轻量级但对于范围更大的子图信息描述会有不足。GRAPH_EXTRACTION_PROMPT ...同上 - relationship_keywords: one or more high-level key words that summarize the overarching nature of the relationship, focusing on concepts or themes rather than specific details Format each relationship as (relationship{tuple_delimiter}source_entity{tuple_delimiter}target_entity{tuple_delimiter}relationship_description{tuple_delimiter}relationship_keywords{tuple_delimiter}relationship_strength) ...同上 而在检索阶段lightrag加入了两路图信息召回low level用于回答细节类的问题例如谁写了傲慢与偏见问题专注于具体实体关系high level用于回答全局类概念类问题需要掌握全局抽象信息例如人工智能如何影响当代教育针对以上两个角度lightrag会使用指令让大模型分别生成两类检索关键词一类针对具体实体进行检索一类针对主题概念进行检索对应上面实体抽取过程中生成的high level keywordsprompt和few-shot如下使用以上两类关键词会分别进行两路召回再对信息进行合并low level使用基于query生成low level关键词去检索entity因为low level针对的是实体导向的细节信息。这里论文是对实体进行了向量化使用实体名称描述过embedding模型high level使用基于query生成的high level关键词去检索relation因为在前面抽取时针对关系抽取了局部的抽象关键词而relation的向量化使用了这些关键词还有关系的描述因此主题类的局部召回可以通过召回关系来实现最后的最后感谢你们的阅读和喜欢作为一位在一线互联网行业奋斗多年的老兵我深知在这个瞬息万变的技术领域中持续学习和进步的重要性。为了帮助更多热爱技术、渴望成长的朋友我特别整理了一份涵盖大模型领域的宝贵资料集。这些资料不仅是我多年积累的心血结晶也是我在行业一线实战经验的总结。这些学习资料不仅深入浅出而且非常实用让大家系统而高效地掌握AI大模型的各个知识点。如果你愿意花时间沉下心来学习相信它们一定能为你提供实质性的帮助。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】