RAG优化策略

RAG各模块有哪些优化策略?

  • 文档块切分:设置适当的块间重叠、多颗粒度文档切分、基于语义的文档切分、文档块摘要
  • 文本嵌入模型:基于新语料微调嵌入模型、动态表征;
  • 提示工程优化:优化模板增加提示词约束、提示词改写;
  • 大模型迭代:基于正反馈微调模型、量化感知训练、提供大Context Window的推理模型;

如何利用知识图谱(KG)进行上下文增强?

增加一路与向量库平行的KG(知识图谱)上下文增强策略
在这里插入图片描述
根据用户Query抽取实体,然后把实体作为种子节点对图进行采样(必要时,可把KG中节点和Query中实体先向量化,通过向量相似度设置种子节点),然后把获取的子图转换成文本片段,从而达到上下文增强的效果。

典型RAG架构中,向量数据库存在哪些问题?

经典的RAG架构中(包括KG进行上下文增强),对召回的上下文无差别地与Query进行合并,然后访问大模型输出应答。但有时候召回的上下文可能与Query无关或者矛盾,此时就应舍弃这个上下文,尤其当大模型上下文窗口比较小的时候非常有必要。

self-RAG:如何让大模型对召回结果进行筛选?

self-RAG 的主要步骤如下:
1.判断是否需要额外检索事实性信息,仅当有需要时才召回;
2.平行处理每个片段:产生Prompt+一个片段的生成结果;
3.使用反思字段,检查输出是否相关,选择最符合需要的片段;
4.再重复检索;
5.生成结果会引用相关片段,以及输出结果是都符合该片段,便于查证事实;
在这里插入图片描述
创新点:
Reflection tokens(反思字符);通过生成反思字符这一特殊标记来检查输出。这些字符会分为retrieve 和 Critique两种类型,会标识:检查是否有检索的必要,完成检索后检查输出的相关性、完整性、检索片段是否支持输出的观点。模型会基于原有词库和反思字段来生成下一个token。

训练过程:
对于训练,模型通过将反思字符集成到其词汇表中来学习生成带有反思字符的文本。它是在一个语料库上进行训练的,其中包含由Critic模型预测的检索到的段落和反思字符。该Critic模型评估检索到的段落或任务输出的质量。使用反思字符更新训练语料库,并训练最终模型以在推理过程中独立生成这些字符。
为了训练 Critic 模型,手动标记反思字符的成本很高,于是作者使用 GPT-4 生成反思字符,然后将这些知识提炼到内部 Critic 模型中。 不同的反思字符会通过少量演示来提示具体说明。 例如,检索令牌会被提示判断外部文档是否会改善结果。
为了训练生成模型,使用检索和 Critic 模型来增强原始输出以模拟推理过程。 对于每个片段,Critic 模型都会确定额外的段落是否会改善生成。 如果是,则添加 Retrieve=Yes 标记,并检索前 K 个段落。 然后 Critic 评估每段文章的相关性和支持性,并相应地附加标记。 最终通过输出反思字符进行增强。
然后使用标准的 next token 目标在此增强语料库上训练生成模型,预测目标输出和反思字符。 在训练期间,检索到的文本块被屏蔽,并通过反思字符 Critique 和 Retrieve 扩展词汇量。 这种方法比 PPO 等依赖单独奖励模型的其他方法更具成本效益。 Self-RAG 模型还包含特殊令牌来控制和评估其自身的预测,从而实现更精细的输出生成。

Self-RAG的推理过程:
Self-RAG使用反思字符来自我评估输出,使其推理过程中具有适应性。根据任务的不同,可以定制模型,通过检索更多段落来有限考虑事实准确性,或强调开放式任务的创造力。该模型可以决定何时检索段落或使用设定的阈值来触发检索。
当需要检索时,生成器同时处理多个段落,产生不同的候选。进行片段化beam search以获得最佳序列。每个细分的分数使用Critic分数进行更新,该分数是每个批评标价类型的归一化概率的加权和。可以再推理过程中调整这些权重以定制模型的行为。与其他需要额外训练才能改变行为的方法不同,Self-RAG无需额外训练即可适应。

如何让RAG支持半结构化数据(文本+表格)?

其核心的流程如下所示:
1、将原始文档进行版面分析(基于Unstructured工具),生成原始文本和原始表格;
2、原始文本和原始表格经summary LLM处理,生成文本summary 和表格summary;
3、用同一个Embedding模型把文本summary和表格summary向量化,并存入多向量检索器;
4、多向量检索器存入文本/表格embedding的同时,也会存入相应的summary和raw data;
5、用户Query向量化后,用ANN检索召回raw data和raw table;
6、根据Query+raw text+raw table构造完整Prompt,访问LLM生成最终结果;
在这里插入图片描述

如何让RAG支持多模态RAG(文本+表格+图片)?

对于多模态RAG而言有三种技术路线,如下所示:

  • 选项一:对文本和表格生成summary,然后应用多模态Embedding模型把文本/表格summary、原始图片转化成为Embedding存入多向量检索器。对话时,根据Query召回原始文本/表格/图像。然后将其喂给多模态LLM生成应答结果;
  • 选项二:首先应用多模态大模型生成图片summary。然后对文本、表格、图片summary进行向量化存入多向量检索器中。当生成答案的多模态大模型不具备时,可以根据Query召回原始文本、表格、图片summary;
  • 选项三:前置阶段同选项2。对话时,根据Query召回原始文本、表格、图片。构造完整Prompt,访问多模态大模型生成应答结果。
    在这里插入图片描述

RAG Fusion优化策略

检索增强这块主要是借鉴了RAG Fusion技术,这个技术原理比较简单,概括起来就是,当接受用户Query时,让大模型生成5-10个相似的Query,然后每个Query去匹配5-10个文本块,接着对所有返回的文本块再做个倒序融合排序,如果有需求就在加一个精排,最后取top k个文本块拼接至Prompt;
优点:
增加了文本块的召回率; 对用户的Query自动进行了文本纠错、分解长句等功能;
缺点:
无法从根本上解决理解用户意图的问题;

模块化RAG优化策略

打破了传统RAG框架,这个框架涉及索引、检索和生成,现在提供了更广泛的多样性和更好的灵活性
模块介绍:
- 搜索模块:融合了直接在(附加)语料库中进行搜索的方法。这些方法包括利用大语言模型生成的代码、SQL、Cypher等查询语言,或是其他定制工具。其搜索数据源多样,涵盖了搜索引擎、文本数据、表格数据等等;
- 记忆模块:本模块充分利用大语言模型本身的记忆功能来引导信息检索。其核心原则是寻找与当前输入最为匹配的记忆。这种增强检索的生成模型能够利用其自身的输出来提升自我,在推理过程中使用文本更加贴近数据分布,而非仅依赖训练数据;
- 额外生成模块:面对检索内容中的冗余和噪声问题,这个模块通过大语言模型生成必要的上下文,而非直接从数据源中进行检索。通过这种方式,由大语言模型生成的内容更可能包含于检索任务相关的信息;
- 任务适应模块:该模块致力于将RAG调整以适应各种下游任务;
- 对齐模块:在RAG的应用中,查询与文本之间的对齐一直是影响效果的关键因素。在模块化RAG的发展中,研究这么发现,在检索器中添加一个可以训练的Adapter模块能够有效解决对齐问题。
- 验证模块:在现实世界中,我们无法总是保证检索到的信息的可靠性。检索到不相关的数据可能会导致大语言模型产生错误的信息。因此,可以在检索文档后加一个额外的验证模块,以评估检索到的文档与查询之间的相关性,这样就可以题上RAG的鲁棒性;

RAG新模式优化策略

RAG的组织方法具有高度的灵活性,能够根据特定问题的上下文,对RAG流程中的模块进行替换或重新配置。在基础RAG中,包含了检索和生成这两个核心模块,这个框架因具备了高度的适应性和多样性。目前主要的研究围绕两种模式:

  • 增加或替换模块:在增加或替换模块的策略中,保留了原有的检索-阅读结构,同时加入新模块以增强特定功能。有研究提出来一种重写-检索-阅读的流程,从而提高阅读器在后续任务中的表现。
  • 调整模块间的工作流程:在调整模块间流程的领域,重点在于加强语言模型和检索模型之间的互动。

RAG索引优化——嵌入优化策略

1、微调嵌入
影响因素:影响到RAG的有效性;
目的:让检索到的内容与查询之间的相关性更加紧密;
作用:可以比作在语音生成前对“听觉”进行调整,优化检索内容对最终输出的影响。特别是在处理不断变化或罕见术语的专业领域,这些定制化的嵌入方法能够显著提高检索的相关性;
2、动态嵌入:
不同于静态嵌入,动态嵌入根据单词出现的上下文进行调整,为每个单词提供不同的向量表示。例如在Transformer模型中,同一个单词根据周围不同词汇,其嵌入的也会有所不同;
3、检索后处理流程:
动机:
一次性向大语言模型展示所有相关文档可能会超出其处理的上下文窗口限制;
将多个文档拼接成一个冗长的检索提示不仅效率降低,还会引入噪声,影响大模型聚焦关键信息;
优化方法:
ReRank(重排)、Prompt压缩、RAG管道优化、混合搜索、递归检索与查询引擎、StepBack-Prompt方法、子查询

RAG如何提升索引数据的质量?

索引的数据决定了RAG答案的质量,因此首要任务是在摄取数据之前尽可能对其进行整理。通过删除重复、冗余信息,识别不相关的文档,检查事实的准确性来实现这一点。使用过程中,对RAG的维护也很重要,还需要添加机制来更新过时的文档。在构建RAG时,清理数据是一个经常被忽视的步骤,因为我们通常倾向于导入所有的文档而不验证他们的质量;
常用的方法有以下:
1、通过清理特殊字符、奇怪编码、不必要的HTML标签来消除文本噪声
2、通过实施一些主题提取、降维技术和数据可视化,发现与主题无关的文档,删除;
3、通过使用相似性度量删除冗余文档;

如何通过添加元数据提升RAG效果?

将元数据与索引向量结合使用有助于更好地构建它们,同时提高搜索的相关性。
以下是元数据有用的情景:

  • 如果搜索的项目中,时间是一个维度,可以根据日期元数据进行排序;
  • 如果搜索的科学论文,并且你事先知道你要找到的信息总是位于特定部分,比如实验部分,你可以将文章部分添加为每个块的元数据并对其进行过滤仅匹配实验;

如何通过查询与文档对齐提升RAG效果?

LLMs 和 RAGs 之所以强大,因为它们可以灵活地用自然语言表达查询,从而降低数据探索和更复杂任务的进入门槛。然而,有时,用户用几个词或短句的形式作为输入查询,查询结果会出现与文档之间存在不一致的情况。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值