LLM之RAG实战(六十)| 为什么您的 RAG 系统无法解决复杂的问题?

大模型向量数据库企业应用
传统 RAG(检索-增强-生成)方法现在遇到了瓶颈,因为它只是把外部文档当成一堆原始、无结构的文字塞进模型里。这些文字往往又乱又冗长,一条段落里可能混杂了多个事实,甚至互相矛盾。结果:
  1. 大模型容易被这些非原子化(non-atomic)的噪声干扰,答错或 hallucination。

  2. 如果问题需要多步推理(例如“先找 A,再用 A 去推 B”),这种“一次性扔整段文字”的做法无法让模型按部就班地思考,推理链断裂。

    简言之:把生肉文本直接喂给 LLM,既难咀嚼也难消化,复杂问题就更解不动了。

    为了克服这些限制,检索和结构化Retrieval and Structuring(RAS)范式应运而生。RAS 通过添加额外的知识结构步骤来扩展 RAG。

    在本博客中,我将逐步阐述RAS框架、不同的阶段以及框架中的实现步骤。

一、为什么我们需要为 RAG 构建数据?

 Structuring可以将检索到的非结构化文本转换为有组织的、可操作的知识,这可以解决传统 RAG 中的一些关键限制。

为什么结构化数据在 RAG 中很重要?

  1. 克服传统 RAG 的局限性

    传统的 RAG 将LLMs与外部信息联系起来,以减轻幻觉和过时知识等问题。然而,即使是 RAG 也面临局限性,因为它将文档处理为非结构化文本段落。非结构化文本通常包含不相关的细节,这些细节可能会破坏模型并导致误导性答案。常规 RAG 很难处理复杂的问题,尤其是当这些问题需要多步骤推理或有组织的、特定领域的知识时。

  2. 增强LLMs的生成和推理

    将外部知识构建为知识图谱等表示形式是提高 LLM 输出和推理能力的关键。当答案是根据结构化知识构建的时,模型不太可能出现幻觉。例如,KG-RAG 使用知识图谱来指导模型,因此响应更加准确和接地气。结构化数据让模型看到事实之间的联系。这有助于它解决需要更深入推理的更复杂的问题。

    RAS 与闭源模型和开源模型的性能比较表明,RAS 可以为 AI 应用带来的改进。

picture.image

二、什么是 RAS?

  检索和结构化 (RAS) 范式通过结合分类法和知识图谱等知识结构化技术来扩展传统 RAG,将非结构化文本转换为有组织的知识,以增强推理和验证。


 RAS 范式将三个关键组件统一到一个框架中: 信息检索 、 结构化知识表示 (如知识图谱)和大型语言模型 。


 传统的LLMs仅依赖于他们从大量训练中记住的内容(可能已经过时或不完整),因此他们可能会猜测或“产生幻觉”答案。


  RAG(检索增强生成)的发展是为了解决幻觉和过时/专有数据问题。RAG 框架使 LLM 能够查找相关书籍(检索非结构化文本段落)。问题是,他们可能会得到一堆巨大、凌乱的文本,这些文本令人困惑或包含非原子的、误导性的信息。


 RAS(检索和结构化)已经发展成为一种强大的策略, 可以消除混乱的数据问题
  • 第 1 步:检索 — LLM搜索所有相关文档。
  • 第 2 步:结构化 — 但 LLM不是提取原始文本,而是访问有组织的(知识图谱或分类法),这消除了混乱并隔离了事实和关系。
  • 第 3 步:生成 — 最后,LLM使用这种有组织的知识图谱来构建事实、准确且易于验证的答案。

picture.image

 从本质上讲,RAS 不仅教LLMs如何查找信息,还教LLMs如何正确组织和推理信息。

三、RAS 范式的基本原则

 RAS 框架增强了 LLM 执行知识密集型任务的能力,并实现更有效的知识发现。RAS 的核心是有效地使用结构化数据来改进检索过程和 LLM 的输出质量:

3.1 结构增强检索(更智能地查找知识)

 结构化技术可帮助检索系统准确找到 LLM 的需求,特别是对于复杂或特定领域的问题。有 3 种基本方法可以增强检索能力:
  • 基于分类法的方法:RAS 不再“盲搜”,而是先拿一张领域专属的话题地图(taxonomy)去导航——搜什么、往哪搜,都由这张地图说了算;既省算力,又不用堆大量人工标注数据。
  • 基于知识图谱 (KG) 的方法:知识图谱有助于提高检索质量。例如,像 KG-RAG 这样的方法让 LLM 利用其推理能力逐步查询图。这种方法通常会找到更准确的信息,因为它着眼于关系和联系,而不仅仅是关键字。
  • 迭代循环:核心思想分四步:1)导航式检索:用一张领域话题地图(taxonomy)当指南针,先精准捞出与问题相关的文档,而不是大海捞针。2)秒变知识图谱:刚检索到的文档立刻被解析、抽成三元组,拼成一张只跟当前查询有关的小图谱(query-specific KG)。3)LLM 按需推理:大模型不再直接读原始文本,而是在这张结构化小图谱上推理,得出答案。4)不够就再转一圈:如果图谱信息仍不足,LLM 会生成一条更精细的子查询,回到第 1 步开始新一轮检索-构图-推理,直到答准为止。

3.2 结构增强型LLMs生成(更智能地使用知识)

 把检索到的知识“拼成图”后,关键问题变成:怎么让大模型真正“看图说话”,而不是继续盲猜——这能显著抑制幻觉、保证事实一致。


 ToG(Think-on-Graph)用“提示词导航”让模型在知识图谱上一步步踩点推理,每步都留下显式链,像走迷宫留脚印。


 GoT(Graph-of-Thought) 把模型自己的思考也画成图,支持多路径并行、回头再循环等复杂脑回路。


 GraphRAG 则负责把大图“压成”简短文字摘要,让模型一眼看懂全局,再回答需要鸟瞰整个语料的高难度问题。

picture.image

四、创建和添加 结构到RAG框架

4.1 为数据添加简单结构:

 向数据中添加结构需要多个步骤:首先构建分类结构,然后是分类结构的丰富、实体提取和知识图谱创建。

picture.image

第 1 步:创建结构化表示(分类法和实体)

 此阶段建立领域知识的组织结构,第一步是构建Taxonomy。

什么是Taxonomy?

 Taxonomy是一种树状结构。Taxonomy的构建从一个基本结构开始,称为“种子”。可以从宽度和深度方向可以逐步扩展这颗种子直至整个结构。


HiExpan 通过扩展实体来发展分类法,然后使用词类比进行细化。它旨在从以领域为中心的文本语料库创建特定于任务的分类法。用户可以提供种子分类来指导该过程,确保结果与他们的需求保持相关性。


首先,它会自动从语料库中生成关键术语列表。然后,从种子分类法开始,逐步发展分类法。对于每个节点,HiExpan 将其子节点视为一个集合,并递归地扩展它们,确保每组子节点保持连贯性和相关性。HiExpan 还包括一个弱监督关系提取模块。

picture.image

picture.image

CoRel:CoRel 使用预训练的语言模型来学习如何泛化亲子关系。ColRel 提供了一种构建更符合用户兴趣的分类法的新方法。ColRel 不是只使用宽泛的词对,而是从用户提供的种子分类法和文本语料库开始。然后,它会发展一个覆盖范围更丰富的自定义分类法。在这里,每个节点不仅仅是一个单词,而是一组相关术语,使分类更有意义,更符合用户的需求。

ColRel 使用两个主要模块:

  • 关系转移: 本模块了解用户关心的关系。它将这些关系转移到分类法中的不同路径,从而扩展了其宽度和深度。这意味着您可以获得更详细、更广泛的结构,根据您的兴趣量身定制。
  • 概念学习: 该模块强化了每个节点的含义。它通过嵌入分类法和文本语料库来实现这一点,因此每个概念都由一组连贯的相关术语表示。

picture.image

第 2 步:分类学扩充

  此步骤通过将构建的分类节点与描述性文本(例如关键字)相关联来增强它们。


  在此步骤中,我们使结构中的每个节点都更具信息性和区分性。这里使用的技术试图在富集过程中对树状结构进行建模。


 分类基因: TaxoGen 递归地对单词嵌入进行聚类,并使用本地语料库细化聚类。


 TaxoGen 将相关术语组合为一个主题,使分类法信息量更大。它首先将术语转换为嵌入以捕获其含义,然后使用特殊类型的聚类逐渐将广泛的主题分解为更具体的主题,同时确保通用术语保持在更高的级别,并且特定术语更深入。为了更精细地区分较小主题中的术语,TaxoGen 仅使用与该主题相关的文档来学习新的嵌入,从而能够区分细微的差异。该方法是完全自动化的,与以前的方法相比,可以创建更清晰、更有用的分类法,帮助用户和系统更好地导航和理解大型文本数据集。

picture.image

 NetTaxo: NetTaxo 通过合并网络结构信息来扩展 TaxoGen。主要思想是让文档之间的联系和文本的实际内容协同工作,以创建更丰富、更准确的主题层次结构。这使得发现主要主题及其子主题变得更加容易和准确,帮助人们快速查找信息并了解不同主题是如何联系在一起的。总体而言,NetTaxo 通过同时使用文本及其关系网络超越了旧系统,从而产生了信息量更大、更有用的主题分类法。

picture.image

第 3 步:信息提取(实体和关系挖掘)

  信息提取 (IE) 侧重于提取作为知识结构构建块的实体级信息。


  在这一步中,我们确定现实世界的实体以及它们之间的关系,这对于知识图谱的构建至关重要。


  此步骤中使用的技术包括实体挖掘( 用于提取实体的命名实体识别 -NER)和细粒度实体类型 (FET)( 用于将实体分类为本体)、 关系提取。

第 4 步:知识图谱构建(KG)

 在此步骤中,提取的信息将具体化为知识图谱 (KG)。在这里,我们尝试将现实世界的实体表示为节点,将它们的关系表示为边。

创建知识图谱的一些关键技术和框架是:

 流水线方法: 历史上使用开放信息提取 (OpenIE) 工具来提取三元组,然后对其进行过滤和合并。


 开放信息提取 (OpenIE) 注释器提取开放域关系三元组,表示关系的主题、关系和对象。


  除了提取关系三元组外,注释器还从给定的原始句子中生成与相关片段相对应的许多句子片段。这些存储在 CoreMap(即句子)的 EntailedSentencesAnnotation 键上。

picture.image

 端到端模型:REBEL 等框架和专用模型利用预训练语言模型将原始文本直接翻译成结构化知识。


 基于 LLM 的构建:KnowledgeGraph GPT 等现代方法直接提示LLM(例如 GPT-4)将纯文本转换为 KG。


 因此,总结了简单 RAS 循环中的所有步骤以及可以使用的框架。下面的流程将有助于更好地理解流程和步骤。

picture.image

向 RAG 添加简单结构

 Kg-gen 包为该问题提供了简单的实现。它是一个文本到 KG 生成器,使用 LLM 模型直接从纯文本构建高质量的图表。Kg-gen 将相关实体分组在一起,这有助于减少稀疏性并使图形更有用。该软件包易于使用,可通过 pip install kg-gen 作为 Python 库使用。
  
from kg_gen import KGGen  
  
# Initialize KGGen with optional configuration  
kg = KGGen(  
    model="openai/gpt-4o",  # Default model    
    temperature=0.0,        # Default temperature    
    api_key="YOUR_API_KEY"  # Optional if set in environment or using a local model  
)  
      
# EXAMPLE 1: Single string with context  
text_input = "Linda is Josh's mother. Ben is Josh's brother. Andrew is Josh's father."  
graph_1 = kg.generate(  
    input_data=text_input,    
    context="Family relationships"  
)  
      
# Output: # entities={'Linda', 'Ben', 'Andrew', 'Josh'}   
# edges={'is brother of', 'is father of', 'is mother of'}   
# relations={('Ben', 'is brother of', 'Josh'),  
#           ('Andrew', 'is father of', 'Josh'),          
#           ('Linda', 'is mother of', 'Josh')}

对于大文本,您可以指定一个 chunk_size 参数来处理较小块的文本:

  
graph = kg.generate(  
    input_data=large_text,    
    chunk_size=5000  # Process in chunks of 5000 characters  
)

您可以在生成期间或生成之后对相似的实体和关系进行聚类:

  
# During generation  
graph = kg.generate(  
    input_data=text,    
    cluster=True,    
    context="Optional context to guide clustering"  
)  
      
# Or after generation  
clustered_graph = kg.cluster(  
    graph,    
    context="Optional context to guide clustering"  
)

聚合多个图形

您可以使用聚合方法组合多个图形:

  
graph1 = kg.generate(input_data=text1)  
graph2 = kg.generate(input_data=text2)  
combined_graph = kg.aggregate([graph1, graph2])
  1. 高级:动态添加结构(迭代 RAS 循环)

    在高级 RAS 系统中,结构化过程通常是动态和迭代的,结合分类法和 KG 来根据查询定制上下文。

    此技术由需要更加动态的高级 RAG 应用程序使用。在这里,我们动态构建和完善针对用户查询量身定制的特定结构化知识上下文。

    以下是 RAS 如何构建和使用知识来回答问题的四个关键阶段:

picture.image

第 1 阶段:行动计划(弄清楚你需要什么)

这是战略起点。该系统充当指导整个过程的计划器。

1. 评估需求: 规划模型首先查看主要问题以确定它是否已经有足够的信息。


2. 无检索: 如果模型确定可以使用其现有知识直接回答问题,则该过程到此停止。它直接生成答案。


3. 生成子查询: 如果知识不足,规划者会战略性地确定知识需求。它生成一个有针对性的子查询,这是一个较小的、有针对性的问题,旨在填补知识中的特定空白。


这种迭代规划机制有助于 RAS 超越旧的单通道方法的限制。

第 2 阶段:主题范围检索(高效查找信息)

 一旦计划器生成子查询,RAS 必须找到相关文档。与仅依赖一般相似性的传统 RAG 不同,RAS 使用主题范围的方法,可显着减少搜索空间。这使得检索更快、更集中。


 1. 主题范围界定: 系统使用分类器来确定子查询的主题分布。然后,它使用这些主题信息将搜索范围缩小到特定于主题的子语料库。


 2. 密集检索: 只有在这个较小的相关子语料库中,系统才会执行语义匹配以找到最相关的文本段落。

第 3 阶段:动态知识结构化(组织事实)

 这是定义 RAS 的阶段。它将检索到的非结构化文本转换为清晰、有组织的事实。


 1. 文本到三重转换: 检索到的文本段落被转换为结构化图形表示,称为知识三元组 (主语-谓语-宾语事实)。这种结构化格式可以实现有效的推理。


 2. 迭代丰富: 这些新事实被合并到特定于主查询的不断发展的知识图谱 (KG) 中。这个 KG 随着每次迭代而增长和扩展。


 3. 重新评估: 在 KG 充实后,行动计划者审查新的、积累的知识。它决定知识现在是否足以回答主查询,或者是否需要生成另一个重点子查询以继续检索过程。

第 4 阶段:知识增强生成(用结构回答)

 最后一步。一旦规划者认为结构化信息足够,Answerer 模型就会接管。


 1. 利用结构: 回答者使用累积的、编码的知识图谱,以及子查询链和检索到的事实来生成最终响应。


 2. 准确的输出: 通过将其响应建立在 KG 的精确、结构化知识的基础上,该模型可以产生准确、连贯的答案 。这种结构化的推理能力有助于 RAS 在复杂任务上超越旧的 RAG 方法的性能


 因此,总结迭代 RAS 循环中的所有步骤。下面的流程将有助于更好地理解流程和步骤。

picture.image

RAS 的实现 - 高级(迭代 RAS 周期)

RAS 论文提供了代码实现, 可在此处访问。

可以按照说明设置 RAS 并测试它是否适用于复杂的查询。

picture.image

五、RAS 中的技术挑战

 检索和结构化 (RAS) 方法开辟了使大型语言模型 (LLM) 更智能、更有用的新方法。但这并非没有障碍。为了使 RAS 充分发挥其潜力,研究人员仍需要应对一些棘手的技术挑战。


 这些挑战中的大多数都分为三个相关领域:我们检索信息的速度有多快,信息有多好,以及它们组合在一起的程度如何。

5.1 检索效率

  第一个挑战是速度。随着数据的增长,快速准确地找到正确信息的难度也随之增加。


 扩展和延迟: 更大的模型和更大的数据库意味着检索系统的压力更大。由于 RAS 中的额外步骤,它具有更多延迟。

picture.image

 真正的挑战是如何确保结果在大规模上保持快速和相关性。这将需要新的方式来索引和处理大量请求而不减慢速度。


  适应性策略: 并非所有查询都是相等的。有些很简单,有些很复杂。系统需要适应,决定何时进行更深入的挖掘以及何时进行表面搜索就足够了。这种灵活性可以提高性能和用户体验。

5.2 知识质量

 RAS 依赖于将混乱的非结构化文本转化为干净的结构化知识。这并不容易。错误悄悄出现。出现不一致。它们可以破坏整个系统。


 噪音和不一致。 用于构建分类法和知识图谱的自动化工具可能会在数据中引入错误或矛盾。


 稳健的验证。 质量控制很重要。未来的研究需要更强大的验证方法,最好是引入领域专家并允许迭代改进的方法。


 跨域的一致性。 知识不是统一的。医学、法律和工程学都有自己的规则和背景。挑战在于建立尊重这些差异并在专业领域仍然有意义的结构化知识。

5.3 集成复杂性

  即使拥有快速检索和高质量的知识,最困难的部分也可能是集成。让结构化信息与 LLM 推理携手工作远非易事。


 协调不同的来源。 知识来自四面八方。不同的来源可能会发生冲突、重叠或过时。系统需要解决这些问题的方法,同时保持信息新鲜。


 保持一致性。 随着新数据的添加,旧知识可能需要更新。渐进式学习和冲突解决对于保持一切一致性至关重要。


 实时适应性。LLM 不仅需要准确的数据,还需要实时的数据。这意味着能够动态摄取和核对信息的框架。


 平衡性能。 最后,还有权衡。更多的结构通常意味着更多的计算开销。挑战在于在不减慢LLMs速度的情况下赋予LLMs更丰富的推理能力。

六、研究机会

 检索和结构化 (RAS) 方法仍在不断发展。随着数据类型、规模和复杂性的增长,未来的研究有几个有前途的方向。

6.1 多模态知识整合

 今天的数据不仅仅是文本。它是图像、视频、音频等等。未来的 RAS 系统将需要无缝处理所有这些问题。


 这意味着建立统一的索引策略,可以连接不同格式的含义。例如,将视频片段链接到一段文本,或将图像链接到音频描述。将视觉语言模型与文本编码器相结合的神经架构是朝着这个方向迈出的一步。它们使LLMs能够跨格式进行推理,并在答案中引用非文本线索。

6.2 跨语言系统

  知识不受语言的束缚。但大多数结构化系统仍然如此。


  多语言嵌入和并行语料库等技术可以帮助构建跨语言的分类法。迁移学习还可以在重用资源丰富的语言的结构方面发挥作用,以支持那些资源较少的语言。为了进一步提高准确性,标准化的跨语言基准和稳健的领域适应方法将至关重要。

6.3 交互式和自精炼系统

 静态检索系统有局限性。人们希望自然地完善他们的查询,通常是通过对话。


 交互式界面可以支持这一点。同时,使用强化学习或元学习等自我完善机制可以帮助系统发现并纠正自己的错误。更好的是,如果模型能够在适应用户反馈的同时解释其纠正步骤,它们不仅会变得更智能,而且会变得更加透明。

6.4 人机协作框架

  对于复杂的结构化任务,人类的专业知识仍然是必不可少的。专家可以完善分类法并审查边缘情况。众包可以帮助保持数据的相关性和最新性。人机框架在确保系统尊重隐私和公平原则方面也发挥着作用。真正的力量来自于机器规模与人类判断的结合。

6.5 个性化知识传递

 并非所有用户都想要相同的东西,也并非所有用户都以相同的方式提出问题。个性化通过考虑用户个人资料、过往行为或直接反馈,使检索更具相关性。当然,隐私保护方法需要从一开始就融入其中。随着时间的推移,这些系统可以通过在核心架构之上分层添加上下文线索来适应。

结束语:

 检索和结构化 (RAS) 方法是将 LLM 从令人印象深刻但不完美的工具转变为可靠的知识驱动系统的下一步。


  传统的 RAG 试图通过引入外部文档来解决现有问题。这种方法虽然有效,但效果不佳。RAG 在处理杂乱、非结构化的数据时经常会崩溃。重复、不完整或难以解析的信息仍然会使其陷入困境。


 RAS 的核心理念很简单。我们将非结构化数据转化为结构化、可验证的知识。我们通过使用文本结构化方法来构建分类法、创建层次结构并提取实体,从而实现这一点。


  然而,RAS 仍面临挑战。检索需要更快、更具可扩展性。知识图谱在增长过程中需要保持准确性和连贯性。结构化数据需要维护、完善和验证。


 展望未来,RAS 研究将朝着更深层次的集成和适应性方向发展。这包括能够处理不同类型数据(例如文本、图像、视频和音频)的系统。它正朝着跨语言结构的方向发展,实现跨语言知识共享。

参考文献:

[1] A Survey on Retrieval And Structuring Augmented Generation with Large Language Models

[2] RAS: Retrieval-And-Structuring for Knowledge-Intensive LLM Generation

[3] https://github.com/pat-jj/RAS

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
CV 技术在视频创作中的应用
本次演讲将介绍在拍摄、编辑等场景,我们如何利用 AI 技术赋能创作者;以及基于这些场景,字节跳动积累的领先技术能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论