人工智能学习

不同类型的检索增强生成(RAG)及协作笔记本讲解

本文主要是介绍不同类型的检索增强生成(RAG)及协作笔记本讲解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最近在探索 GitHub 的时候,我发现了一个提供各种 RAG 系统深度概述的仓库。对于希望开发生产级 RAG 系统的人来说,这是一个非常好的资源。它允许用户尝试不同的技术,并评估哪些技术最适合他们的特定数据集。在本文中,我将带您了解这些不同的 RAG 技术,并讨论每种技术的优缺点,以便您了解哪种技术最适合您的应用场景。详情请见这里 here。

GitHub - athina-ai/rag-cookbooks: 为LLM开发者的烹饪手册。通过在GitHub上创建账户来为athina-ai/rag-cookbooks的发展贡献自己的力量。
了解 RAG(如:检索和生成)

大型语言模型是基于固定的数据集进行训练的,这限制了它们处理私人或近期信息的能力。它们有时会“胡说”,提供虽然看似可信但实际上错误的答案。微调虽然可以有所帮助,但成本高昂,不适合频繁在新数据上重新训练。Retrieval-Augmented Generation (RAG) 框架通过使用外部文档来增强大型语言模型的回答,从而解决了这一问题,确保大型语言模型提供的信息不仅上下文相关,而且准确且最新。

RAG主要有四个部分:

  • 索引: 首先,将文档(无论何种格式)拆分成片段,并为这些片段创建嵌入。这些嵌入然后被添加到向量存储中。
  • 检索: 然后,检索器根据用户的查询,使用向量相似性从向量存储中找到最相关的文档。
  • 增强: 接下来,增强部分将用户的查询与检索到的上下文结合成一个提示,确保LLM有生成准确响应所需的信息。
  • 生成: 最后,将组合后的查询和提示传递给模型,模型生成对用户查询的最终响应。

这些RAG组件允许模型访问最新且准确的信息,从而根据外部知识生成回复。

不同RAG类型:流程图和代码

基础的RAG

简单的RAG是基础的检索增强生成技术。它通过将用户的查询与文档数据库中的语义相似度进行匹配来工作。当接收到查询时,系统会找到语义上最相关的文档并将其用作生成响应的上下文。虽然简单直接,这种方法可能受限于其简单性——可能会忽略细微关联或难以应对需要更深入了解的复杂查询。你可以在这里的Github仓库中找到代码。

好处:

  • 简单的实现和低计算开销
  • 适用于上下文清晰且简单的查询

不足:

  • 可能因为没有复杂的过滤功能,会检索到不相关的背景信息
  • 上下文窗口的限制可能会导致信息不完整或被截断

RAG混合型

混合RAG通过克服单一方法的限制,结合多种检索手段来解决问题。它通常将向量搜索(语义相近)与传统的基于关键字的检索(如BM25之类的)结合起来。这种方法使系统能够捕捉查询的深层含义及其精确的关键字匹配。通过使用多种搜索策略,混合RAG可以检索到更全面和更准确的文档,为响应生成提供更坚实的支持。

好处:

  • 结合了关键字搜索和语义搜索的优点,使搜索更加全面
  • 采用多种检索方法,使召回率更高

缺点:

  • 由于使用了多种搜索方法,计算成本增加
  • 在关键词搜索和语义搜索结果之间找到平衡比较复杂

Hyde(假设文档嵌入模型)RAG

Hyde RAG 提供了一种创新的文档检索方式。与其直接查找现有文档,它首先创建一个可能回答查询的假设文档。然后,利用这个假设文档生成嵌入向量,以帮助找到真正相关的真实文档。这就像先画出可能答案的草图,以帮助找到最相关的资料。这种方法对于复杂或抽象的查询特别有效,传统搜索方法可能就束手无策了。

好处:

  • 通过生成假设文档来实现更佳的语义匹配
  • 更好地应对复杂或抽象的问题

缺点:一些需要注意的地方:

  • 生成假设答案所增加的额外计算负担
  • 质量在很大程度上取决于初始假设内容的质量

RAG父文档检索器

这种方法通过将大型文档拆分成更小、更易管理的片段来解决文档检索中的一个常见问题。在搜索时,系统首先检索相关的小片段。如果某个片段看起来很有希望,它会检索整个文档。这种方法确保了初始搜索的准确性,最终提供的上下文是全面的。对于大型文档尤其有用,因为相关信息可能散落在不同的部分。

优点:

  • 在检索信息时保持更广泛的文档上下文
  • 减少上下文碎片化的问题

不足:

  • 可能包含与当前文档无关的父文档部分内容
  • 存储父子关系会占用更多的内存

RAG结合

RAG融合采用了多角度的信息检索方法。它生成与原始查询相关的多个子查询,为每个子查询检索相关文档,然后使用互反排名融合来合并和排序结果。这种方法使系统能够从多个角度处理查询,从而可能发现单个查询可能会遗漏的相关信息。这就像有多名研究人员从不同角度研究同一个主题一样。

好处:

  • 通过多种查询角度实现更稳健的检索
  • 更好地处理模糊查询的请求

缺点:不足之处:

  • 计算成本高得多
  • 实现和维护起来更麻烦

基于上下文的RAG

基于上下文的RAG通过将检索到的文档压缩为最相关的细节来提高效率和精确度。它提取并浓缩最重要的信息,而不是提供可能冗长的完整文档。这种方法通过去除冗余背景信息,保留关键信息,帮助语言模型生成更加简洁和集中的回答。当需要处理大量信息且简洁性至关重要时,这种方法特别有用。

好处:

  • 更好地处理与上下文相关的查询
  • 让对话更连贯

不足之处:

  • 需要保存对话历史,
  • 长对话可能会增加计算成本,

读取重构阅读RAG

这种方法首先优化原始查询,从而改进检索过程。在实际搜索文档之前,系统会重新构造查询,使其更精准有效。通过提升查询的清晰度和语义深度,Rewrite Retrieve Read RAG 可以检索到更多相关的文档,从而获取更准确和全面的信息。就像有一个研究助手帮您重新措辞您的问题,以便得到更好的搜索结果。

好处:

  • 通过优化查询来提高理解准确性
  • 通过迭代查询来提高准确性

缺点如下:

  • 多轮检索会增加延迟时间
  • 重写时可能会出现查询漂移

修正型RAG注:RAG指…(此处可添加RAG的解释,确保读者理解)

校正检索增强(Corrective RAG)采用了一种动态的信息检索方式。它通过不断精炼检索到的文档,去除无关信息,并可能进行额外的网络搜索来填补知识空白。这种方法确保语言模型能够使用最高质量和最相关的资料。特别适用于初始检索不完整或略显偏离目标的情况。

优点包括:

  • 具有自我纠错能力,从而减少错误
  • 最终的回答更准确

不足之处:

  • 多步处理导致延迟增加,且错误检测和修正的计算成本也更高
自我评估

自我RAG为检索和生成过程增添了反思性和自反式的自我评估成分。检索到文档后,语言模型会评估它们的相关性、准确性和完整性。这种方法就像是一个内置的事实核查器,使系统能够反思检索到的信息,并可能要求提供更多的背景信息或澄清。它旨在通过仔细审查来源材料来生成更可靠和值得信赖的答案。

优点:

  • 通过自我评估来提升质量控制
  • 提高响应的可靠度

注意:不足:

  • 显著的计算负担
  • 实施有效的自我评估比较复杂
自适应的RAG系统

(注:RAG指...,请根据实际情况补充定义或解释)

自适应RAG是最灵活的检索方式。它根据特定的查询类型动态调整其策略,在使用索引数据、进行网络搜索或在使用多种检索方法之间切换。这种方法确保每个查询都能使用最适合的检索方法,使其在不同类型的信息查找中都具有高度的灵活性和有效性。

好处:

  • 根据不同的查询类型动态调整
  • 根据查询的复杂性动态分配资源

缺点:

  • 实施和维护起来比较复杂
  • 需要复杂的策略选择机制
最后

当我们开始探索这些多样化的RAG技术,从朴素的RAG到自适应的RAG,很明显每种方法都有其独特的优点。有些技术在准确性上表现出色,而其他技术则更注重效率或上下文的保护。这种生态系统的精彩之处在于它的灵活性,你不必局限于使用单一的方法。实际上,我见过的很多生产系统结合多种技术来创建稳健、高性能的检索系统。

但是理解这些技术只是战斗的一半,可以说仅仅是开始。真正的学习来自于动手操作和实验。因此,我找到了一个全面的GitHub仓库,其中包含了所有这些RAG技术的实现。每个实现都包含了详细的Colab笔记本,你可以立刻运行,无需复杂的安装配置。详情请参阅 这里。

这篇关于不同类型的检索增强生成(RAG)及协作笔记本讲解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!