在大语言模型(LLMs)的应用浪潮中,检索增强生成(RAG)技术得到广泛运用,利用外部检索系统,显著提升大语言模型的时效性,并大幅减少模型幻觉。为了进一步提升RAG在多跳任务、跨段落任务的性能,研究人员引入了知识图谱,包括GraphRAG、DALK、SUGRE、ToG 2.0 和 HippoRAG 等。
尽管 RAG 及其优化方案已经解决了因知识缺乏和更新导致的大部分幻觉问题,但生成的文本仍然缺乏连贯性和逻辑性,难以产生正确且有价值的答案,尤其是在法律、医学和科学等需要分析推理的专业领域:
- 首先,真实场景的业务流程一般需要基于知识片段之间特定关系的推理来收集与回答问题相关的信息。但RAG 通常依赖于文本或向量的相似性来检索参考信息,会可能导致搜索结果不完整和重复。
- 其次,真实场景往往涉及逻辑或数值推理,例如确定一组数据在时间序列中的增减情况,而语言模型使用的下一个标记预测机制在处理这类问题上仍然显得力不从心。
为解决上述问题,蚂蚁集团提出KAG(Knowledge Augmented Generation)框架,充分利用知识图谱和RAG技术的互补优势。不仅将图结构整合到知识库,还将知识图谱的语义类型、关系以及知识图谱问答(KGQA)整合到KAG中。通过知识图谱与 RAG 的深度融合,为专业领域的 LLMs 应用带来了新的突破。
复制项目地址:https://github.com/OpenSPG/KAG 论文地址:https://arxiv.org/abs/2409.13731
1、模型架构
KAG 架构由三大核心组成:KAG-Builder、KAG-Solver 和 KAG-Model。
- KAG-Builder:负责构建离线索引,是整个框架的基础。传统知识图谱面临两大困境:专业领域构建成本高(需专家定义严格模式)、开放领域信息损失大(丢弃原始文本上下文),在这个模块中,提出了一个对LLM友好的知识表示框架(LLMFriSPG),支持无模式信息抽取和有模式专家知识构建,并实现知识结构和原始文本块之间的互索引表示。这种设置有助于基于图结构的倒排索引的构建,以及逻辑形式的统一表示、推理和检索。
- KAG-Solver:KAG框架中的核心组件,引入了一个由逻辑形式引导的混合求解和推理引擎。这个引擎包括三种类型的算子:规划、推理和检索。它将自然语言问题转化为结合语言和符号的问题解决过程,每一步都可以利用不同的算子,如精确匹配检索、文本检索、数值计算或语义推理,从而实现检索、知识图谱推理、语言推理和数值计算四种不同问题解决过程的集成。
- KAG-Model:为了支持KAG框架的操作所需的能力,如索引构建、检索、问题理解、语义推理和摘要生成,KAG-Model增强了通用LLM的三个特定能力:自然语言理解(NLU)、自然语言推理(NLI)和自然语言生成(NLG)。通过这些增强,KAG-Model在索引构建、检索、问题理解、语义推理和摘要生成等方面都表现出色。
2、KAG-Builder LLMFriSPG
为了定义一个对大语言模型更友好的知识语义表达方式,KAG对 SPG (Semantic-enhanced Programmable Graph,语义增强可编程知识图谱)进行了三大方面的升级:深化文本上下文意识、动态属性和知识分层,并将其命名为 LLMFriSPG。
深入的文本上下文意识
在传统的知识表示方法中,文本内容通常被视为简单的字符串集合,缺乏对文本中实体、事件及其相互关系的深入理解。LLMFriSPG通过深化文本上下文意识,赋予文本更深层次的语义理解能力。这意味着系统可以捕捉到文本中的实体、事件及其相互关系,并根据这些信息进行推理。
- 示例:对于“Jay Chou”的描述,LLMFriSPG不仅可以识别他是一位歌手(Person),还可以关联出他的星座是摩羯座(constellation: Capricorn),以及他的唱片公司是环球音乐集团(record company: Universal Music Group)。这种深入的理解让系统能够更好地解析文本背后的含义,从而为用户提供更加精准和有意义的回答。
动态属性
传统知识表示中的属性通常是静态定义的,一旦设定就不会轻易改变。然而,现实世界中的事物是动态变化的,这种静态属性的表示方式限制了知识图谱的灵活性和实时性。LLMFriSPG引入动态属性的概念,允许属性值随时间或条件变化。这意味着对于同一个实体或事件,其属性可以在不同的时间点有所不同,或者根据特定情况下的条件而变化。这一特性极大地增强了系统的灵活性,使其能够反映现实世界中事物的真实状态和发展。
- 示例:考虑一个运动员的职业生涯。随着时间推移,这位运动员可能更换了俱乐部、获得了新的奖项或更新了个人记录。通过动态属性的支持,LLMFriSPG可以实时反映这些变化,确保信息始终是最新的并且符合实际情况。
知识分层
知识分层是LLMFriSPG的另一个重要特性。它通过将信息按照不同的层次组织,从具体到抽象,更好地模拟人类的认知过程,从而提高LLM处理复杂问题的能力。
- 示例:以法律文件为例,其中包含了许多专业术语和规则。使用知识分层的方法,可以将具体的条款归类为更广泛的法律原则或概念,这样既便于检索也利于推理。例如,“合同法”作为一个高层次的概念,包含了多个具体的合同条款;而在讨论某一特定合同时,则可以深入到具体的条文细节。
形式化定义
LLMFriSPG的形式化定义如下:
:表示LLMFriSPG中所有类型的集合。涵盖了实体类型(EntityType)、事件类型(EventType)类以及所有与LPG(带标签的属性图,Labeled Property Graph)语法声明兼容的预定义属性。
:表示所有的实体类型(如Person、Organization等)和事件类型类,以及所有预定义的属性。这些类型定义了可以存在于知识图谱中的不同种类的对象及其特性,是构建具体实例的基础。
:表示所有概念类型(ConceptType)类、概念和概念之间的关系。每个概念树的根节点是一个与LPG语法兼容的概念类型类(例如TaxoOfPerson),而每个概念节点都有一个唯一的概念类型类。通过这种方式,LLMFriSPG能够组织和分类信息,使得概念层次结构清晰,并且有助于理解实例之间的抽象关系。
- ρ :表示实例到概念的归纳关系。这种关系将具体的实例归类到更广泛的类别下,从而实现从具体实例到抽象概念的映射。这对于提高知识图谱的理解深度非常重要,因为它可以帮助我们识别模式并做出更复杂的推理。
:表示所有定义在逻辑关系和逻辑概念上的可执行规则。这些规则指导如何处理和操作图中的数据,支持查询解析、推理和其他高级功能。它们确保了知识图谱内部逻辑的一致性和正确性。
对于,
表示类型t的所有属性和关系:
代表领域专家预定义部分,包含类型的核心特征和重要属性,反映对该类型的深入理解和专业知识。
代表根据需要临时添加的属性,增加了系统的灵活性。可以用来补充或修改现有属性,以适应特定的应用场景或用户需求。
代表系统内置属性,比如支持的文本块(supporting_chunks)、描述(description)、总结(summary)等。这些属性增强实例的语义丰富度,帮助LLM更好地理解每个实例的具体内容和背景信息。
信息和知识的层次表示
为了更准确地定义信息和知识的层次表示,KAG将知识图谱(KG)分为三个层次:
:知识层,表示符合领域模式约束并经过总结、整合和评估的领域知识。
:图信息层,表示通过信息提取获得的实体和关系等图数据。
:原始块层,表示经过语义分段的原始文档块。
3、KAG-Builder 互索引
现有图谱的一些问题:
- 高质量的知识图谱构建门槛高,需要大量人力;
- 信息损失大,知识图谱中只包含了实体、关系、属性等,相对信息丰富的原始文本,信息损失较大可阅读性差,生成的答案包含关键事实,上下文信息较少。
通过互索引,能够有效解决信息损失大的问题,实现高质量图谱构建。
互索引机制通过构建图结构与原始文本块之间的双向索引,为知识图谱和大语言模型之间的高效信息检索和推理提供了基础。通过语义分块、带有更多描述性上下文的信息提取、领域知识注入和约束,以及文本块向量与知识结构之间的互索引,KAG框架能够更有效地管理和利用知识,提高问答任务的准确性和效率。互索引的实现如下:
语义分块
语义分块是互索引机制的第一步,旨在将原始文档分割成具有语义一致性的文本块。这些文本块不仅符合长度限制(特别是为了适应大型语言模型LLM的上下文窗口大小),还具有语义一致性,确保每个块内的内容在主题上是连贯的。
- 定义Chunk EntityType:在RC(原始块层)中定义了Chunk EntityType,包含字段如id、summary和mainText。每个经过语义分割后的块将被写入一个Chunk实例中。
- 生成唯一标识符:id是一个复合字段,由articleID、paraCode和idInPara通过连接符#拼接而成。这确保连续的块在id空间中也相邻。具体来说:articleID表示全局唯一的文章ID;paraCode表示文章中的段落代码;idInPara是段落内每个块的顺序编码。
- 维护文档与块的双向关系:在原始文档和其分段块之间建立并维护双向关系,便于在不同粒度的文档内容之间进行导航和上下文理解。
带有更多描述性上下文的信息提取
在给定数据集的基础上,使用LLM从数据集中提取实体、事件、概念和关系,构建,并构建
与 RC 之间的互索引结构,通过实体和关系实现跨文档链接。
- 实体提取:逐块提取实体集合
。
- 事件提取:提取与所有实体相关联的事件集合
,并迭代提取所有实体之间的关系集合
。
- 超类关系提取:完成实例与其spgClass之间的所有超类关系。
- 生成内置属性:为了后续的知识对齐阶段提供便利,并解决 Wikidata和 ConceptNet等知识短语识别度低的问题,在实体提取阶段,使用 LLMs 为每个实例 e 生成内置属性描述、摘要、semanticType、spgClass、描述 semanticType,根据 e.description、e.summary 的结构将它们存储在 e 实例存储中,并按照<e, belongTo, semanticType>和<e, hasClass, spgClass>的结构进行组织。
领域知识注入和约束
当开放信息抽取(openIE)应用于专业领域时,可能会引入不相关的噪声。这些噪声和不相关的语料库可能会显著降低LLMs的性能。KAG通过以下方法解决这一问题:
- 领域术语和概念注入:首先将存储领域概念和术语及其描述到KG存储中。然后,通过openIE提取文档中的所有实例,并通过向量检索获取所有可能的概念和术语集合
。最后,将
添加到提取提示中,再次提取以获得与领域知识更对齐的实例集合
。
- 模式约束提取:在垂直专业领域中,如药品说明书、体检报告、政务、在线订单数据、结构化数据表等,文档之间的数据结构具有强烈的一致性,更适合进行有模式约束的信息提取,并且结构化提取也便于知识管理和质量提升。对于同一实体类型,如 Person,可以预定义属性和关系,如 name、gender、placeOfBirth、(Person, hasFather, Person)、(Person, hasFriend, Person),也可以直接通过 openIE 提取三元组,如(Jay Chou, spgClass, Person)、(Jay Chou, constellation, Capricorn)、(Jay Chou, record company, Universal Music Group)。
- 按文档类型预定义知识结构:针对标准化的专业文档(如药品说明书、政务文件、法律定义等),每种类型的文档可以定义为一个实体类型,不同段落作为该实体的不同属性。例如,政务文件可以预定义GovernmentAffair EntityType及其属性,如行政区划、服务流程、所需材料、服务地点和目标群体等。这样,在回答特定问题时可以直接提取对应属性的块来避免LLMs重新生成可能导致的幻觉。
文本块向量与知识结构的互索引
KAG的互索引是一种符合LLMFriSPG语义表示的知识管理和存储机制,包括四个核心数据结构和两个存储结构:
核心数据结构:
- Shared Schemas共享模式:在项目级别预定义的粗粒度类型,包括EntityTypes、ConceptTypes和EventTypes,作为高级分类,如Person、Organization、GEOLocation等。
- Instance Graph实例图:包括
和
中所有事件和实体实例,通过无模式或有模式约束的openIE构建的实例都存储在KG存储中。
- Text Chunks文本块:符合Chunk EntityType定义的特殊实体节点。
- Concept Graph概念图:知识对齐的核心组件,由一系列概念和概念关系组成,概念节点也是实例的细粒度类型。通过关系预测,实例节点可以链接到概念节点,获取其细粒度语义类型。
存储结构:
- KG Store:在LPG数据库(如TuGraph、Neo4J)中存储KG数据结构。
- Vector Store:在向量存储引擎(如ElasticSearch、Milvus或LPG引擎嵌入的向量存储)中存储文本和向量。
4、KAG-Builder Pipeline
KAG-Builder主要目标:1)在图结构与文本块之间构建互索引,为图结构提供更丰富的描述性上下文;2)利用概念语义图对不同粒度的知识进行对齐,减少噪声,增强图的连通性。
KAG-Builder在处理领域非结构化文档的pipeline如下,由三个连贯步骤组成:结构化信息获取、知识语义对齐和图存储写入。
结构化信息获取
目标:从非结构化的文本数据中提取出结构化的信息,如实体、关系及事件等。
方法:首先使用信息抽取技术(例如开放信息抽取OpenIE)来识别文本中的短语和三元组(subject-predicate-object)。这一步骤生成了初步的知识表示,为后续处理奠定了基础。
知识语义对齐
目标:确保提取的信息能够在语义层面正确地映射到现有的知识体系中,解决歧义问题并整合冗余信息。
方法:接下来,进行语义对齐以消除多义词或同义词带来的混淆,并将不同来源的数据融合成统一的知识表示。此阶段还包括对提取信息的质量控制,减少噪声,提高图的连通性和一致性。
图存储写入
目标:最终将经过处理的知识表示保存下来,以便后续查询和应用。
方法:完成上述两步后,构造的知识图谱会被写入持久化存储系统中,形成可以被高效访问的知识库。
下图是一个 KAG Builder 的示例:
5、KAG-Solver
逻辑形式求解器(Logical Form Solver)是KAG框架中用于解决复杂问题的关键组件,通过三个核心步骤——规划、推理和检索,将自然语言问题转化为可以由系统处理的逻辑表达式,并通过多轮迭代机制确保对问题的全面解答。
逻辑形式语言的优势:
克服传统RAG(Retrieval-Augmented Generation)中模块间互动依赖于自然语言向量表示带来的偏差,逻辑形式求解器引入了一种具备推理与检索功能的可执行语言。这种语言具有以下三大优势:
- 增强严谨性和可解释性:采用符号语言,增强了问题拆解和推理过程的严格性和透明度。
- 充分利用层次化表示:利用LLMFriSPG的层次化表示,通过符号图结构引导事实和文本知识的检索,提高了信息获取的精准度。
- 简化系统复杂度:整合了问题拆解与检索流程,减少了系统设计的复杂性,降低了错误传播的风险。
下图是一个该框架下的多轮对话情景示例:
- 首轮对话中,尽管无法精确得知瘟疫发生的次数,但提取的信息显示:“威尼斯,这位音乐巨匠维瓦尔第的诞生地,曾遭受过毁灭性的黑死病侵袭,也就是人们常说的大瘟疫。这场由鼠疫杆菌引发的瘟疫在欧亚大陆造成了 7500 万至 2 亿人的死亡,尤其在 1347 至 1351 年的欧洲达到了顶峰。这场瘟疫给欧洲带来了剧烈的动荡。虽然威尼斯没有详细的瘟疫发生记录,但可以肯定的是,这座城市在 14 世纪中期受到了冲击。”。
- 经过两轮迭代后,最终确定瘟疫在威尼斯发生了 22 次。
逻辑形式规划
逻辑形式规划(Logical Form Planning)是将复杂问题分解为多个逻辑表达式的过程,每个逻辑表达式代表一个子问题,可以通过执行特定的函数来解决。其主要任务包括定义问题结构、明确每个子问题的逻辑形式,并建立子问题之间的依赖关系。目的是将复杂问题拆解成一系列可执行步骤,以便后续推理和检索过程可以逐一解决这些子问题。
如表所示,逻辑函数是一系列执行动作表示。通过精心规划这些表达式的组合,可以将复杂问题拆解,进而推理出精细的解决方案。
- 检索:用于从知识图谱中检索实体或事件实例。接受主体(s)、谓词(p)和客体(o)作为参数,还可以指定属性值来进行更精确的搜索。示例:
Retrieval(s=s1:Event[applying for a disability certificate], p=p1:support_chunks, o=o1:Chunk, s.locatinotallow=West Lake, Hangzhou)
- 排序:用于对检索结果进行排序,可以选择限制返回的结果数量。A代表检索到的SPO(主体-谓语-宾语)的变量名(si, oi, 或 s.prop, p.prop, o.prop)。direction定义排序方向,direction = min表示升序,direction = max表示降序。limit = n表示输出前N个结果。示例:
Sort(A=si, directinotallow=min, limit=5)
- 数学:支持基于LaTeX语法的表达式,可用于对集合执行计数、求和等操作。示例:
Math(expressinotallow="sum(x_i)", set={x_1, x_2, ..., x_n})
- 推理:根据检索或计算结果回答问题。A、B可以是检索到的SPO的变量名或常数。运算符op = entailment|greater|less|equal分别表示A蕴含B、A大于B、A小于B和A等于B。示例:
Reasoning(A=si, B=oi, op=entailment)
逻辑形式推理
逻辑形式推理(Logical Form Reasoning)利用逻辑形式表达的问题进行推理和检索。其主要任务是根据逻辑表达式中的信息,从知识图谱中检索相关知识,并进行逻辑推理,最终生成答案。它关注如何通过逻辑函数和知识图谱中的信息来解决每个子问题,并整合这些结果以生成最终答案。
解决逻辑模糊性:当自然语言表述的查询语句用于搜索时,往往存在逻辑上的模糊性,例如“寻找含有蔬菜或水果的图片”与“寻找含有蔬菜和水果的图片”。这两类查询虽然相似度极高,但它们的答案可能截然不同。对于涉及逻辑运算符(如“与”、“或”、“非”以及交集和差集)的问题,逻辑形式推理能够准确区分不同逻辑条件下的查询意图,确保检索结果符合用户的真实需求。
在此过程中,GraphRetrieval 模块依据逻辑形式子句执行知识图谱结构检索,获取结构化的图结果。另一个关键模块 HybridRetrieval 则结合自然语言表述的子问题和逻辑函数,全面检索文档和子图信息。
逻辑形式检索
传统的检索方法依赖于计算问题和文档片段之间的相似度,通常采用稀疏编码(如BM25)和稠密编码(如基于BERT架构的预训练语言模型)。这两种方法在捕获的相关特征上有所不同,因此可以在实践中相互补充,提高检索效果。
目前,将这两种方法结合的常见做法是将两种搜索方式的得分进行集成,但在实际操作中,不同问题可能需要不同的搜索策略,尤其是在需要多跳推理的问题上。当查询包含专有名词、人物、地点、时间、数字和坐标时,预训练模型的表现力可能受限,此时需要更精确的文本索引。而对于更接近文本段落表达的查询,如场景描述、行为动作和抽象概念,这两种方法可能会在某些问题中结合使用。
在设计逻辑形式时,可以有效地融合这两种检索方法。当需要将关键字信息作为明确的过滤条件时,可以在检索函数中指定选择条件,实现结构化检索。
例如,对于查询“在杭州西湖区申请残疾证需要哪些文件?”,检索函数可以表示为:
Retrieval(s=s1:Event[applying for a disability certificate], p=p1:support_chunks, o=o1:Chunk, s.locatinotallow=West Lake, Hangzhou)
这种方法利用建立不同的索引(稀疏或密集)来支持精确搜索或根据需求进行模糊搜索。
此外,当无法使用逻辑函数检索以 SPO 形式存在的结构化知识时,可以采用其他方法。包括半结构化检索,即利用逻辑函数搜索信息块,以及非结构化检索。非结构化检索涵盖了如增强型检索(RAG),通过自然语言表达的子问题来检索相关的文本块。
多轮解题机制
受ReSP(Reflective Solving Process)启发,逻辑形式求解器设计了一个基于反思和全局记忆的多轮解题机制。这个机制的工作流程如下:
初始化:将当前问题分解为一系列逻辑形式的子问题列表(list),并通过混合推理逐一尝试解决问题。
多跳推理:如果可以通过结构化知识的多跳推理直接得到确切答案,则立即返回结果。
反思和存储:若无法直接获得答案,系统会将与子问题列表相关的答案和检索结果存入全局记忆,并评估是否已经解决了原始问题。
迭代提问:如果问题仍未完全解决,系统将基于现有信息生成新的补充问题,并进入下一轮迭代,直到找到满意的答案为止。
6、知识对齐
传统方法如信息提取与基于向量相似度的检索在知识对齐方面存在三个主要缺陷:
- 知识间语义关系错位:正确答案与查询之间通常需要特定的语义关系,例如“包含”、“导致”和“属于”。但检索过程依赖的相似性是一种缺乏属性和方向的弱语义度量,这可能导致内容检索不精确。
- 知识粒度不一致:开放信息抽取带来的知识粒度差异、噪声和不相关性问题对知识管理构成了巨大挑战。语言多样性导致众多同义词或类似节点,降低了知识元素间的连通性,影响了检索召回率。
- 与领域知识结构不匹配:特定领域内缺乏有组织、系统化的知识,使得本应相互关联的知识呈现碎片化,导致检索内容缺乏专业性和连贯性。
为了解决这些问题,KAG提出通过语义推理利用概念图来增强离线索引和在线检索的方法,具体包括以下任务:
- 知识实例标准化:确保每个实例都有统一的标准表示,减少因表达方式不同而产生的歧义。
- 实例到概念的链接:将具体实例链接到更广泛的概念类型,提高系统的理解和推理能力。
- 语义关系完善:通过引入更多类型的语义关系(如上位词、下位词等),丰富KG中的连接,使知识更加连贯。
- 领域知识注入:针对特定领域,添加专业术语和概念,以减少垂直领域中知识粒度不匹配造成的噪声问题,并提升专业知识的覆盖范围。
概念推理旨在充分利用向量检索和逻辑形式推理的优势,结合前述知识结构完成概念关系,从而提高领域知识图谱的准确性和连通性。下表总结了检索和推理通常需要的六种语义关系。
增强索引
通过语义推理增强索引的过程,实际是利用大语言模型预测索引项之间的语义关系或相关知识元素,涵盖四种策略:
- 知识实例的消歧和融合:利用实体的直接关联和描述信息预测同义词关系,形成实体的同义词实例集。从同义词集中确定目标实体,并应用实体融合规则,将剩余实例的属性和关系复制到目标实体,同时将其名称添加为目标实体的同义词,然后删除这些剩余实例。
- 预测实例与概念间的关系:对于每个知识实例(如事件、实体),预测其对应的概念,并添加推导出的三元组<ei, belongTo, cj>到知识索引中。例如:<Chamber, belongTo, Legislative Body>表示Chamber属于Legislative Body类别。
- 完善概念及其相互关系:在提取过程中,利用概念推理来完善语义类型和spgClass之间的所有上位词和isA关系。例如,得知Chamber的语义类型是Legislative Body,其spgClass是Organization后,通过语义完善可以得出<Legislative Body, isA, Government Agency>, <Government Agency, isA, Organization>,从而增强KGfr空间的三元组信息完整性和节点间的紧密连通性。
- 描述性文本信息添加:在提取阶段为每个实例、概念或关系添加详细的描述性文本信息,以提高其可解释性和上下文相关性,便于后续的推理和理解。
增强检索
在检索阶段,使用语义关系推理根据逻辑形式中的短语和类型来搜索知识图谱索引。对于逻辑形式中提到的类型或关系,采用结合语义关系推理与相似度检索的方法,替代传统的单纯相似度检索方法。这种检索方法使检索路径更加专业和逻辑化,从而获得更正确的答案。
- 混合推理进行精确的类型匹配和实体链接:如果类型匹配失败,则进行语义推理。例如,如果类型Political Party匹配失败,则使用语义推理预测Political Party包含Political Faction,并从Political Faction开始进行推理或路径计算。
- 逻辑形式求解器的应用:使用逻辑形式求解器解析自然语言查询,将其转化为一系列逻辑表达式,并通过多轮迭代机制确保全面解答问题。例如,对于查询“在杭州西湖区申请残疾证需要哪些文件?”,首先尝试直接检索相关文档;若未找到确切答案,则生成新的子问题(如“杭州市有关残疾证申请的规定有哪些?”),继续迭代直至找到满意的答案。
7、KAG Model
KAG 涵盖了两个核心计算流程:离线构建索引和在线处理查询与生成答案
- 离线构建索引:涉及对大量非结构化数据进行处理,提取实体、关系等信息,并将其转换为结构化的知识表示。
- 在线处理查询与生成答案:接收用户的自然语言查询,解析查询意图,检索相关知识,并生成最终答案。
在小规模语言模型盛行的时代,这些任务通常需要两个独立的处理流程,每个流程都包含多个特定任务的 NLP 模型。这种设计不仅增加了应用系统的复杂性,提高了搭建成本,还因为模块间的错误传播而不可避免地带来了级联损失。与此相对,KAG利用大语言模型(LLM)的能力,将多个推理过程融合为一个统一的、同步的端到端推理过程,从而提高了系统的效率和准确性。
这两个流程都可以概括为以下几个步骤:
- 分类、实体识别和实体关系识别:属于自然语言理解(NLU),用于解析文本内容。
- 语义对齐和嵌入:归类为自然语言推理(NLI),用于捕捉短语间的语义联系。
- 信息块、实例或查询聚焦的摘要:归入自然语言生成(NLG),用于创建连贯的回答或总结。
自然语言理解
自然语言理解涵盖了多个方面如文本分类、命名实体识别(NER)、关系抽取(RE)、事件抽取(EE)以及机器阅读理解等。为了提升模型的理解力,KAG 收集了超过30个公共数据集,并进行了大规模指令重构,设计了多种指令合成策略来增强模型的表现:
- 标签打包:此策略关注于标签引导任务,旨在根据标签提取文本或将文本映射到特定标签,涵盖分类、NER、RE 和 EE 等任务。如果数据集中的标签在训练集内频繁共同出现,模型可能会学习到这一模式,从而过度拟合数据集,无法独立理解每个标签的含义。因此,在指令合成过程中,采用投票策略,每个训练样本仅指定一个标签作为桶的一部分。同时,鉴于某些标签语义相近且易混淆,将这些易混淆的标签归入同一桶中,帮助模型更有效地学习这两个标签之间的语义差异。
- 灵活多样的输入输出格式:LLM 通过遵循指令进行推理,若输入输出格式过于一致,可能导致模型过度拟合特定任务,缺乏对未知格式的泛化能力。因此,对输入输出格式进行了灵活处理。输出被设计为五种不同的格式化指令和两种自然语言指令。此外,输出格式可以动态指定为 markdown、JSON、自然语言或示例中指定的任何格式。
- 带有任务指南的指令:传统 NLP 训练常采用“问题海洋”策略,训练集中包含大量数据,使模型在学习过程中理解任务需求,例如在提取人名时是否包括职位。在 LLM 训练中,让模型像专业标注员一样,通过理解任务描述来执行任务。
对于收集到的 NLU 任务,通过 LLM 内的自省过程总结任务描述,创建包含任务描述的训练数据。为增强任务多样性,还采用启发式策略改写任务描述和答案,使模型能更准确地理解不同任务描述之间的差异,并根据指令完成任务。六个基础模型(qwen2、llama2、baichuan2、llama3、mistral、phi3)经过微调后,在下游任务中表现出更强的NLU能力。性能验证结果显示,这些模型在六个理解基准上取得了显著改进。
自然语言推理
自然语言推理任务专注于推断特定短语间的语义联系,包括但不限于实体链接、消除歧义、分类体系扩展、上位词识别和文本蕴含等。KAG 中的语义推理是核心能力之一,特别是在知识库问答系统中,需要依赖于自然语言推理任务来进一步对齐或检索相关信息。评估结果显示,KAG模型在语义推理相关任务上取得了显著提升,例如在上位词识别任务中明显优于Llama3和ChatGPT-3.5,在通用逻辑推理任务上的表现也超越了Llama3。
自然语言生成
为了使生成的内容更加贴近实际场景需求,KAG开发了两种高效的微调方法:
- K-LoRA 预训练:通过逆向操作知识提取流程,创建“三元组到文本”的生成任务,让模型学会识别KG注入的信息格式并习得目标领域的语言风格。
- 与KG反馈的对齐(AKGF):借鉴RLHF方法,利用KG作为自动评估器提供反馈,优化模型生成的答案。评分过程基于生成答案与KG中知识的匹配程度,奖励由正确匹配的知识三元组数量决定。
实验结果表明,这两种方法在生物医学问答数据集CMedQA和BioASQ上的生成性能有显著提升。
视觉语言下游任务
传统的检索增强型系统通常包含展示模型、检索器和生成模型等多个组件,导致系统复杂度高且存在级联损失问题。为此,KAG提出了一种名为OneGen的高效单次统一生成和检索模型,允许任何大型语言模型在一次前向传递中同时进行生成和检索,通过增加特殊标记(即检索标记)扩展原有词汇表,并将检索任务分配给自回归生成的检索标记。
在训练过程中,检索标记仅通过对比学习参与表示微调,其他输出标记则按语言模型目标进行训练。在推理阶段,利用检索标记进行高效的按需检索。不同于以往至少需要两个模型分别负责检索和生成的流水线方法,OneGen 将这两者统一在一个模型中,从而省去了单独的检索器需求,大幅降低了系统复杂性。
实验结果如表所示:
- OneGen 在 R→G 任务中展现了出色的效果,联合训练的检索和生成在 RAG 任务上实现了性能提升。Self-RAG 赋予 LLMs 自我评估和自适应检索的能力,而 OneGen 进一步增加了自我检索的功能。在所有数据集上均优于原始的 Self-RAG,特别是在 Pub 数据集上提升了 3.1 个百分点,在 ARC 数据集上提升了 2.8 个百分点,证明了联合训练的优势。
- OneGen 在训练上极为高效,经过指令微调的 LLMs 展现出强大的检索能力,而且只需极少的额外调整。它需要的检索数据更少且质量要求更低,即使仅用 6 万个噪声样本和不完整的文档,也能实现与合成数据相当的性能。
8、实验结果
主要结果
RAG框架性能比较:在使用ChatGPT-3.5作为骨干模型的RAG框架中,基于图方法的HippoRAG的性能优于NativeRAG。
KAG框架性能提升:KAG框架在EM和F1分数上均显著优于IRCoT + HippoRAG。这些提升主要归功于KAG框架中更有效的索引、知识对齐和混合求解库的开发。
检索性能比较:多步检索器通常优于单步检索器。单步检索器检索到的内容相似度很高,无法为需要推理的数据提供答案。多步检索器缓解了这一问题。KAG框架直接使用多步检索器,并通过互索引、逻辑形式求解和知识对齐等策略显著提升了检索性能。
消融实验
先看结论:
- 知识对齐:显著提升了召回率和图的连通性,增强了知识的语义区分和实例间的连通性。
- 逻辑形式求解器:通过多步骤查询分解和SPO三元组整合,显著提高了召回率,但计算时间增加。
- F1指标:LFSref3在计算时间减少的情况下,F1指标略有下降,但整体性能仍然优于LFSHref3。
- 迭代次数:增加迭代次数可以提高解决方案的完整性和准确性,但会增加计算时间。
引入知识对齐(K_Alignment)后,各项评价指标均有大幅提升,说明知识对齐显著增强了知识的语义区分。
通过图9可以看到,知识对齐也提升了图的连通性和实例间的连通性。1跳图显著右移,表明语义结构的添加增加了每个节点的邻居数量,增强了图的密度。2跳和3跳图分布不均,左侧稀疏,右侧密集,与增强知识对齐前相比,每个数据集的顶点都向右移动,左侧变得更稀疏,表明节点获得了新的多跳邻居。
由图8可以看到,CRref3在执行时间上表现最佳,但在召回率和F1分数上不如LFSref3和LFSHref3。LFSHref3虽然在召回率上表现最好,但计算时间较长。LFSref3在提高召回率的同时,保持了相对较高的计算效率,是一个在工业应用中较为可行的选择。
注:
- CRrefn (Chunks Retriever):为基线检索策略,目标是召回能够支持当前问题解答的前k个文档片段,n为多轮反思迭代数。
- LFSrefn(Logical Form Solver with Graph Retrieval):采用预定义的逻辑形式解析并回答问题。
- LFSHrefn(Logical Form Solver with Hybrid Retrieval):为了充分利用KGfr和RC之间的互索引结构,进一步探索KG结构对chunk检索的增强作用,修改了LFSre fn以禁用直接推理的图检索功能,转而全部答案均通过混合检索方法产生。
9、总结
KAG 等 “图谱 + RAG” 框架的本质,是通过知识图谱的结构性先验弥补 LLM 的 “认知不确定性”,但其效果高度依赖场景特性:
- 适合场景:需要多跳逻辑推理、结构化知识查询、长程依赖建模的任务(如法律条文解析、科学实验设计);
- 谨慎场景:纯文本摘要、低复杂度事实问答(如 “天气查询”),此时轻量化 RAG 或更高效;
- 禁忌场景:需实时动态知识(如股票行情)、强创意生成(如文学创作),图谱的静态结构可能限制灵活性。
随着DeepResearch的研究,这类框架同样可以和深度搜索融合,也许是未来可以研究的方向。
最后借鉴老刘说NLP的思考,来对比目前比较火的各基于图+RAG的方案:
- GraphRAG(MS) 通过层次聚类实现段落摘要的逐级生成,更关注答案生成的可理解性、完整性、多视角多跳问答等评测集量化指标较差,未提供逻辑符号推理的能力,适用摘要生成类任务;
- LightRAG 通过rdf五元组(带类型)抽取完成图谱构建 。问答阶段,通过对query 中所包含实体、实体归属的概念实现Chunk召回,未利用语义、逻辑、符号等图谱技术栈,适合摘要生成类任务;
- HippoRAG 通过rdf抽取+语义相似拉边,完成图谱构建,问答阶段,通过dpr+ppr实现Chunk召回。未利用语义、逻辑、符号等图谱技术栈。适合事实问答类任务;
- OpenSPG-KAG 基于知识抽取、语义对齐、文本&图互索引等完成图谱知识库构建,基于逻辑符号引导的混合推理, 实现事实问答&逻辑推理类任务。适合事实问答类任务+逻辑推理类任务。