今天是2024年11月17日,星期日,北京,天气晴。
最近在想,很有趣的是,大家做了那么多,没有一个完美方案,总结的来说:监督微调计算成本高且容易过拟合;上下文学习(ICL)依赖于手工模板,效率低且难以处理长上下文;检索增强生成(RAG)依赖于检索文档的质量和相关性,计算成本高;知识图谱(KG)方法需要大量手动构建和维护,扩展性差。
所以,RAG这个补丁越打越多,并且是针对不同的任务再花式地打,所以,这里来回顾下最近一周值得关注的几个工作进展。
一个是关于推理规则用于RAG的一些思路,知识图谱本身也可以作为一些规则约束加进去,关键是怎么挖掘规则,匹配规则。另一个是KGQA范式下的GraphRAG代表工作及EGO-GraphRAG组合设计,这是对昨天话题的延续;另一个是RAG怎么跟之前传统的知识补全模型打配合。
整个技术路线都是有感的,大家可以看看,也可以作为索引,形成自己的体系,总会有些帮助。
一、KGQA范式下的GraphRAG代表工作及EGO-GraphRAG组合设计
可以看一个关于GraphRAG进展,《EGO-GraphRAG: Modularizing Graph-based Retrieval-Augmented Generation for Design Space Exploration》,https://arxiv.org/pdf/2411.05844,其中针对KGQA范式下的GraphRAG做了一些索引,并针对各个模块的内容做了组合实验,其中有很多关键的技术点可供我们索引。
其出发点在于,现有的RAG方法主要依赖于文档检索,容易引入噪声和冗余信息。最新的趋势是发展基于图的RAG框架(GraphRAG),通过图结构来提取特定的“推理路径”,从而提供更精确和相关的信息。这里面一个重要的点,是怎么找到最佳的路径。
因此,可以看其中具体的点,可以进一步分解为三个相互连接的模块:子图提取、路径过滤和路径细化。
其中提到一些已有的最近进展,可以参考:
1)KB-BINDER:《Few-shot In-context Learning for Knowledge Base Question Answering》(https://arxiv.org/abs/2305.01750) ,为了在统一的无需训练的框架下处理不同KBQA数据集上的问题,KB-BINDER实现了在KBQA任务上的少样本上下文学习。首先,利用像Codex这样的大模型通过模仿一些示例来为特定问题生成逻辑形式作为草稿。其次基于知识库,使用BM25分数匹配将生成的草稿绑定到一个可执行的草稿上。
2)StructGPT:《StructGPT: A General Framework for Large Language Model to Reason over Structured Data》(https://arxiv.org/pdf/2305.09645) ,这个工作的目的是以统一的方式提高大模型(LLMs)对结构化数据的推理能力,构建了专门的接口来从结构化数据中收集相关证据(即阅读),并让LLMs专注于基于收集到的信息进行推理任务(即推理)。
3)ToG:《Think-on-Graph 2.0: Deep and Faithful Large Language Model Reasoning with Knowledge-guided Retrieval Augmented Generation》,核心思想是利用知识图谱(KGs)通过实体链接文档,促进深入且由知识引导的上下文检索。同时,使用文档作为实体上下文,以实现精确高效的图检索,也就是说,ToG在图检索和上下文检索之间交替进行,寻找与问题相关的深入线索,使LLMs能够生成答案。
4)RoG:《Reasoning on Graphs: Faithful and Interpretable Large Language Model Reasoning》 ,核心思想是提出了一个规划-检索-推理框架,其中RoG首先生成由KGs支持的关系路径作为忠实的计划。然后,这些计划被用来从KGs中检索有效的推理路径,供LLMs进行忠实的推理。
5)KELP:《Knowledge Graph-Enhanced Large Language Models via Path Selection》(https://arxiv.org/pdf/2406.13862) ,提出了一个分三个阶段的原则性框架KELP来处理上述问题,通过潜在语义匹配为输入文本生成知识路径的分数,实现更细粒度的灵活知识提取。同时,通过训练KG中选定路径与输入文本之间的编码,也可以考虑与输入文本有间接语义关系的知识路径。
6)DoG:《Debate on Graph: a Flexible and Reliable Reasoning Framework for Large Language Models》(https://arxiv.org/pdf/2409.03155) ,其认为,过长的推理路径分散了答案生成的注意力,以及误报关系阻碍了路径的精细化。所以,提出了一个迭代交互式KGQA框架,利用LLMs的交互学习能力来执行图上的推理和辩论(DoG),即DoG采用子图聚焦机制,允许LLMs在每个推理步骤后尝试回答问题,从而减轻了漫长推理路径的影响,并利用多角色辩论团队逐步简化复杂问题,减少了误报关系的影响。
7)GSR:《Less is More: Making Smaller Language Models Competent Subgraph Retrievers for Multi-hop KGQA》(https://arxiv.org/pdf/2410.06121) ,核心思想将子图检索任务建模为由小型语言模型处理的条件生成任务,并定义子图标识符为一系列关系,每个关系都表示为存储在语言模型中的一个特殊标记。
8)GCR:《Graph-constrained Reasoning: Faithful Reasoning on Knowledge Graphs with Large Language Models》(https://github.com/RManLuo/ graph-constrained-reasoning,https://arxiv.org/pdf/2410.13080) ,核心思想是利用一个轻量级的KG专用LLM进行图约束推理,以及一个强大的通用LLM在多个推理路径上进行归纳推理。
关于这些方案的进一步细节,大家可以看原文。
另外的,对于EGO-GraphRAG,其实际上是做了一个各阶段的排列组合实验。分成三个阶段:
在子图提取阶段,通过缩小搜索空间,从整个图中提取与查询相关的子图。常用的方法包括个性化PageRank(PPR)、随机游走重启(RWR)等;
在路径过滤阶段,从提取的子图中检索推理路径。常用的方法包括完整路径过滤、最短路径过滤、迭代路径过滤等;
在路径细化阶段,进一步筛选推理路径,确保只有最相关的路径用于LLMs的推理过程。常用的方法包括BM25、Sentence-Transformers、Rerank模型等,里面提到的这些路径剪枝的方案,可以看看,补充知识体系。
所以,共做了20组实验:
对应的评估指标如下,这其实也是正如该方案的名称,乐高GraphRAG,做的是一个组合对比实验。
可以关注,一个是时间消耗,一个是具体指标;
二、关于ranking思想引入到知识图谱补全(KGC)任务
知识图谱补全任务(从一个不完整的三元组中推断出缺失的实体)也是一个重点,对于这个任务,大模型也卷的挺多,其核心难点在于,如何利用实体上下文信息来增强知识图谱的语义表示;如何有效地结合结构化和非结构化信息来进行推理。还有就是,泛化性怎么去保证,
之前,大家都喜欢用TransE这种嵌入的方式做,但是,现有的基于嵌入的方法仅依赖于知识图谱中的三元组,这容易受到虚假关系模式和长尾实体的影响。
所以,后面大家就想着说,借助更多的信息,例如基于文本的方法在知识图谱三元组和自然语言之间的语义差距上挣扎。除了三元组之外,实体上下文(例如,标签、描述、别名)在增强知识图谱方面也发挥着重要作用。所以,也有直接让大模型生成实体的上下文而做的工作,但坦白说,**生成的这个上下文噪声很大,那怎么办?
很好的方式,就是引入ranking的方法去做过滤,这很自然**。
因此,可以看这种思路的一个实现,《Retrieval, Reasoning, Re-ranking: A Context-Enriched Framework for Knowledge Graph Completion》,(https://arxiv.org/abs/2411.08165),其核心思路在于,设计三个模块。
首先,检索模块从知识图谱中收集支持三元组,
从基础嵌入模型(比如TransE, RotatE, GIE, SimKGC, CoLE, and NBF-Net)中收集可能的候选答案。
并检索每个相关实体的上下文。
这里的支持三元组检索是优先检索与查询三元组具有相同实体和关系的支持三元组(注意,是相同关系和实体),若数量不足则放宽条件,上下文检索指的是从Wikidata知识库中提取与查询三元组和支持三元组中的实体相关的文本上下文信息。
这一步拿到了第一组答案,来自于传统方案;
然后,推理模块使用大模型为每个查询三元组生成潜在答案,具体根据已知实体的描述和支持三元组生成多个可能的答案。
这里有个fewshot,也就是In-context Demonstration,目的应该是让大模型知道这种任务形式,已经检索的支撑三元组,实体的描述,希望能够推出来对应的尾实体;
然后将问题中实体对应的描述来生成多个答案:
也就是说,最后的整体流程如下:
这一步拿到了第二组来源,来自于llm推理
最后,重排序模块结合上述两个模块的候选答案,并微调一个大模型以提供最佳答案。
这里的核心就是微调,整体的效果要比之前TransE要好,加入实体描述信息也是有收益的。
三、关于推理规则用于RAG的一些思路
RuAG(Learned-Rule-Augmented Generation),《RuAG: Learned-rule-augmented Generation for Large Language Models:https://arxiv.org/abs/2411.03349),其核心思路为通过将大量离线数据自动提炼成可解释的一阶逻辑规则,并将其注入大模型(LLMs)中,以增强其推理能力,这里想说明的是,这个的确是有用的。
核心看两点,一个是规则的表示,使用的是一阶谓词逻辑;
一个是在不同任务上,对应推理规则的表示:
以及得到的结果:
其实,这个工作和《RULERAG: RULE-GUIDED RETRIEVAL-AUGMENTED GENERATION WITH LANGUAGE MODELS FOR QUES- TION ANSWERING》(https://arxiv.org/pdf/2410.22353),引入规则知识进行RAG,核心三个东西:
规则库R:包含了用于指导检索和生成的规则,这些规则以自然语言形式表达,如“[实体1, r1, 实体2] 导致 [实体1, r2, 实体2]”;
检索器(RG-retriever):根据查询和规则检索相关文档的组件;
生成器(RG-generator):根据检索到的文档和规则生成答案的组件;
语言模型(LLM):用于理解和生成自然语言的预训练模型;
核心思路在于,通过引入符号规则作为上下文学习(In-Context Learning, ICL)示例,指导检索器检索与查询逻辑相关的文档,并统一指导生成器根据同一套规则生成答案,如这个例子。
其难点在于规则的挖掘,RAG可以Recall任何东西,关键是那个东西要存在,这很重要。
总结
本文主要介绍了关于推理规则用于RAG的一些思路,知识图谱本身也可以作为一些规则约束加进去,关键是怎么挖掘规则,匹配规则;KGQA范式下的GraphRAG代表工作及EGO-GraphRAG组合设计,这是对昨天话题的延续,以及RAG怎么跟之前传统的知识补全模型打配合。大家可以仔细琢磨。
参考文献
1、https://arxiv.org/pdf/2410.22353
2、https://arxiv.org/abs/2411.03349
3、https://arxiv.org/abs/2411.08165
4、https://arxiv.org/pdf/2411.05844
关于我们
老刘,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。
加入会员方式:关注公众号,在后台菜单栏中点击会员社区->会员入群加入