今天是2025年01月03日,星期五,北京,天气晴。
我们今天继续来看GraphRAG,有几个问题思考下,看到一个很好的GraphRAG综述,则其中的几个关键点,给大家看看,会有更多收获。
大家一起加油。
一、关于GraphRAG的几个问题思考
关于GraphRAG这个话题,我们讲过很多了。其核心在解决如何通过检索增强生成(RAG)来利用图结构数据,以提升下游任务的表现。
Graph因其固有的“由边连接的节点”特性,编码了海量的异构和关系信息,从而受到广泛关注。
与主要使用语义/词汇相似性搜索的RAG不同,GraphRAG通过利用基于图的机器学习(例如,图神经网络(GNNs))以及图/网络分析技术(例如,图遍历搜索和社区检测),在捕捉关系知识方面提供了独特的优势。
例如,考虑查询“用于治疗上皮样肉瘤且同时影响EZH2基因产物的药物有哪些?”,盲目执行仅依赖语义/词汇相似性的现有BM25或基于嵌入的搜索会忽略图结构中编码的关系知识。
相比之下,一些GraphRAG方法沿着关系路径“疾病(上皮样肉瘤)→[适应症]→药物←[靶点]←基因/蛋白质(EZH2基因产物)”遍历图,以检索上皮样疾病的适应症邻居、EZH2基因的靶点邻居,并找到它们的交集药物。
RAG通过从外部数据源中检索额外信息来增强生成模型的能力,而图结构数据由于其内在的节点和边的关系,提供了丰富的关系信息。
但实际上,大家探索很多这类方案,但从技术本质上讲,其依旧有很多根本问题需要思考。
首先是图数据的多样性和异构性,图结构数据包含多种格式和领域特定的关系知识,这对RAG的设计提出了独特的要求。传统的RAG可以在嵌入空间中统一设计检索器、生成器和外部数据源,而图形结构数据的独特性(如多样化格式和特定领域的关系知识)在为不同领域设计GraphRAG时带来了独特且重大的挑战。 一些图数据甚至可能是多模态的(例如,带属性的文本图包括结构和文本属性,场景图结合结构和视觉)。
其次是信息独立性与相互依赖性,传统RAG中信息是独立存储和使用的,而图RAG中的节点通过边相连,信息的相互依赖性增加了设计的复杂性。
最后是领域不变性与领域特异性,不同领域的图结构数据具有不同的生成过程,难以设计一个统一的图RAG框架来适用于所有领域。例如,在预测学术论文的主题时,广泛接受的同质性假设建议检索论文中的参考文献来辅助其主题预测。然而,当在飞行网络中分类机场的作用时,这种同质性假设并不适用,因为在这些网络中,枢纽通常稀疏地分布在一个国家内,并没有直接的连接。
二、关于GraphRAG一个很有信息量的综述
《Retrieval-Augmented Generation with Graphs (GraphRAG)》(https://arxiv.org/pdf/2501.00309)是第二个综述,相应的总结放在:https://github.com/Graph-RAG/GraphRAG/blob/main/README.md,这个工作,提出了一个由五个关键组件组成的GraphRAG综合框架:查询处理器、检索器、组织器、生成器和图数据源。
根据其特定应用将图RAG设计分为10个不同的领域,包括知识图谱、文档图谱、科学图谱、社交图谱、规划推理图谱、表格图谱基础设施图谱、生物图谱、场景图谱和随机图谱。
我觉得,这里的细分是很重要的,里面蕴含了具体领域、具体任务、具体场景,具体分析的思路,可以看看对应的不容任务类型,如下表:
遵循RAG的一般设定,看看GraphRAG的定义,给定一个图结构的数据源G,用户定义的查询Q进一步发送给查询处理器Processor以获取预处理后的查询Q。之后,检索器Retriever根据Q从图数据源G中检索内容C。接下来,检索到的内容C由组织者Organizer进行组织,形成内容C。最后,总结后的内容触发生成器ΩGenerator生成最终答案A。
所以,几个点可以看看:
一个是对于查询处理器Processor的现有方案及其与传统RAG的对比,顺便回顾下,包括:
实体识别(准确识别GraphRAG中实体的名称和结构可以减少级联错误并为后续检索和生成步骤提供基础);
关系抽取(通过提取三元组构建图结构数据源,并将查询中提及的关系与图数据源中的关系进行匹配以指导图搜索);
查询结构化(将自然语言查询转换为结构化格式,如SQL或SPARQL以便与关系数据库进行交互);
查询分解(将输入查询拆分为多个不同的子查询,这些子查询用于首先检索子结果并将这些子结果汇总以得到最终结果);
查询扩展(通过添加具有相似重要性的有意义术语来丰富一个查询,解决用户提交的查询是含糊的与多个主题相关;查询可能过于简短无法完全捕捉用户意图;用户通常不确定他们在寻找什么等问题) 这五个常用方法。
一个是对检索器的描述,GraphRAG的工作流程更为多样化,包括:
“文本输入,文本输出”、“文本输入,图输出”、“图输入,文本输出”和“图输入,图输出”流程 。其用到的方案也可看看,包括基于启发式 (使用预定义规则、特定领域的见解和硬编码算法从图数据源中提取相关信息,如广度优先搜索BFS或深度优先搜索DFS);
基于浅层嵌入(如基于邻近性的方法-DeepWalk和Node2Vec专注于保持相连节点的邻近性,确保图中相近的节点在嵌入空间中也保持相近。基于角色的方法-Role2Vec和GraphWave基于它们在图中的结构角色而非邻近关系生成节点嵌入,但这些方法缺乏归纳性,每当添加新节点、边或图时,都需要重新初始化和重新训练,因为现实世界的知识是动态演变的,新信息不断取代过时的内容);基于深层嵌入(入GNN等),需要特别关注其适应图结构数据的思路。
一个是对组织器的描述,从外部图数据源检索相关内容C后,这些内容可能是实体、关系、三元组、路径或子图的格式,组织器Organizer将与处理过的查询 Q一起处理这些内容。其目的是对检索到的内容进行后处理和细化,以更好地适应生成器。这包括几个核心问题:
图剪枝(解决检索到的图可能很大并且可能包含大量噪声和冗余信息问题,基于语义的剪枝通过移除与查询语义不相关的节点和边关系来减小图的大小;QA-GNN通过使用大型语言模型对查询上下文和节点标签进行编码,然后进行线性投影来剪除相关性得分低的无关节点;基于句法的剪枝从句法角度移除无关节点,如利用依存分析生成上下文的解析树,然后根据它们与解析树的跨度距离过滤检索到的节点;基于结构的剪枝方法专注于根据检索到的图的结构属性进行剪枝,如RoK通过计算每条路径的平均PageRank分数来过滤掉子图中的推理路径;动态剪枝在训练期间动态移除噪声节点。如联合LK使用注意力权重递归地移除每一层的不相关节点,只保留固定比例的节点);
重新排序(大模型性能可能受到上下文中相关信息位置的影响,使用预训练的交叉编码器、GNN或者重排模型对检索到的路径进行重新排序);
图数据增强(图结构增强中向检索到的图中添加新节点和边,如GraphQA通过整合从上下文中提取的名词短语块节点来增强检索到的子图;图特征增强丰富图中节点和边的特征,如Once在推荐系统中使用大模型作为内容摘要器、用户分析器和个性化内容生成器);
生成描述(将检索到的三元组、路径或图转换为大模型可以处理的自然语言,如对于一组事实,首先按特定顺序对其进行排序,然后逐个将其表述为单独的元组,每条信息通常在提示中用换行符分隔;使用预定义模板来表述路径或图形,生成更自然的文本,如使用模板“{实体1}的{关系}是/为:{实体2}”将事实(实体1,关系,实体2)转换为文本;也可以使用微调过的模型或大模型将输入事实转换为连贯的自然语言;也可以基于检索到的图和查询生成简洁的摘要)几个关键点。
参考文献
1、https://arxiv.org/pdf/2501.00309
关于我们
老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。
加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入