一文读懂RAG:从基础到进阶,解锁语言模型新能力
📖阅读时长:19分钟
🕙发布时间:2025-02-18
近日热文:全网最全的神经网络数学原理(代码和公式)直观解释
欢迎关注知乎和公众号的专栏内容
LLM架构专栏
知乎LLM专栏
知乎【柏企】
公众号【柏企科技说】【柏企阅文】
大语言模型(LLMs)凭借其令人惊叹的模仿人类文本创作的能力,彻底改变了世界。这些模型在内容创作和智能回复等任务上表现卓越,推动着人工智能领域不断向前发展。它们通过大量数据进行训练,但知识局限于所训练的数据,这使得它们在提供最新信息时显得力不从心,进而可能给出过时的答案或错误信息,也就是所谓的 “信息幻觉” 问题。为了解决这些难题,一种名为检索增强生成(Retrieval-Augmented Generation,简称RAG)的动态框架应运而生。它融合了传统大语言模型与检索系统的优势,拓展了模型的应用场景。
什么是RAG
RAG是一种旨在提升大语言模型性能的策略性增强技术。在文本生成过程中,它引入了信息检索步骤,以此确保模型的回复准确且及时。RAG技术不断演进,目前主要发展出了两种模式:
- 基础RAG(Naive RAG):这是最基础的版本,系统只是简单地从知识库中检索相关信息,然后直接将其提供给大语言模型以生成回复。
- 进阶RAG(Advanced RAG):该版本更进了一步。在检索前后增加了额外的处理步骤,用于优化检索到的信息。这些步骤提高了生成回复的质量和准确性,确保其能与模型输出无缝融合。
基础RAG
基础RAG是RAG体系中最为简单的版本,它提供了一种将检索数据与大语言模型相结合的直接方法,能够高效地响应用户的需求。
一个基础的系统包含以下组件:
- 文档分块(Document Chunking):流程起始于将文档分割成较小的片段。这一步至关重要,因为较小的片段更易于管理和处理。比如,当有一篇长篇文档时,会将其分解成多个部分,方便系统后续检索相关信息。
- 嵌入模型(Embedding Model):嵌入模型是RAG系统的关键组成部分。它将文档片段和用户查询都转换为数值形式,通常称为嵌入向量。这种转换是必要的,因为计算机更易于理解数值数据。嵌入模型运用先进的机器学习技术,以数学方式表示文本的含义。例如,当用户提出一个问题时,模型会将这个问题转化为一组能够捕捉查询语义的数字。
- 向量数据库(如MyScaleDB)(Vector Database (like MyScaleDB)):文档片段转换为嵌入向量后,会被存储在像MyScaleDB这样的向量数据库中。向量数据库专为高效存储和检索这些嵌入向量而设计。当用户提交查询时,系统会通过比较查询的嵌入向量与数据库中存储的嵌入向量,在向量数据库中查找最相关的文档片段。这种比较有助于识别与用户问题最为相似的片段。
- 检索(Retrieval):向量数据库识别出相关的文档片段后,便会进行检索。这个检索过程十分关键,因为它缩小了用于生成最终回复的信息范围。本质上,它就像一个过滤器,确保只有最相关的数据进入下一阶段。
- 大语言模型(Large Language Model):相关片段检索完成后,大语言模型开始发挥作用。它的任务是理解检索到的信息,并针对用户的查询生成连贯的回复。大语言模型会结合用户查询和检索到的片段,给出不仅相关,而且在上下文语境中合适的回复。该模型负责解读数据,并以用户易于理解的自然语言组织回复内容。
- 回复生成(Response Generation):最后,系统基于大语言模型处理后的信息生成回复,并将其反馈给用户,以清晰简洁的方式提供用户所需要的信息。
通过了解从用户查询到最终回复的数据流程,我们就能明白基础RAG系统的每个组件在确保用户获得准确相关信息方面所发挥的关键作用。
优势
- 实施简单:RAG的搭建十分直接,它将检索与生成直接整合,降低了增强语言模型的复杂性,无需复杂的修改或添加额外组件。
- 无需微调:RAG的一大显著优势是无需对大语言模型进行微调。这不仅节省了时间、降低了运营成本,还能加快RAG系统的部署速度。
- 准确性提升:借助外部最新信息,基础RAG显著提高了生成回复的准确性。这确保了输出内容不仅相关,还能反映最新可得的数据。
- 减少幻觉:RAG通过将回复建立在检索过程中获取的真实事实数据之上,缓解了大语言模型生成错误或虚构信息这一常见问题。
- 可扩展性和灵活性:基础RAG的简单性使其更易于在不同应用中进行扩展,因为它可以在不对现有检索或生成组件进行重大更改的情况下进行适配。这种灵活性使其能够在最小化定制的情况下部署到多个领域。
缺点
- 处理有限:检索到的信息直接使用,没有进一步的处理或优化,这可能导致生成的回复在连贯性上出现问题。
- 依赖检索质量:最终输出的质量在很大程度上依赖于检索模块查找最相关信息的能力。检索效果不佳会导致回复的准确性和相关性降低。
- 可扩展性问题:随着数据集的增长,检索过程可能会变慢,从而影响整体性能和响应时间。
- 上下文限制:基础RAG可能难以理解查询的更广泛上下文,导致回复虽然准确,但可能不完全符合用户的意图。
通过审视这些优缺点,我们可以全面了解基础RAG的优势和面临的挑战,这为改进提供了方向,也为进阶RAG的发展创造了契机。
进阶RAG
进阶RAG在基础RAG的基础上,为整个流程增添了一层复杂性和精细度。与直接整合检索信息的基础RAG不同,进阶RAG包含了额外的处理步骤,这些步骤优化了回复的相关性和整体质量。
下面我们来了解它的工作原理:
检索前优化(Pre-Retrieval Optimizations)
在进阶RAG中,甚至在实际检索开始之前,就对检索过程进行了优化。这个阶段包含以下操作:
- 索引改进(Indexing Improvements):索引方法在数据库中高效组织和检索数据方面起着至关重要的作用。传统的索引方法,如B树(B-Trees)和哈希索引(Hash indexing),已被广泛应用于这一目的。然而,随着数据量的增加,这些算法的搜索速度会下降。因此,对于更大的数据集,我们需要更高效的索引方法。MyScale的MSTG(Multi-Strategy Tree-Graph,多策略树图)索引算法就是这样一种先进技术的典范。该算法在速度和性能方面优于其他索引方法。
MSTG融合了层次图和树结构的优势。通常,图算法在无过滤搜索中速度更快,但在过滤搜索中可能效率不高;而树算法在过滤搜索中表现出色,但在无过滤搜索中速度较慢。通过结合这两种方法,MSTG确保了在无过滤和过滤搜索中都具有高性能和高准确性,使其成为各种搜索场景的可靠选择。
- 查询改写(Query Re-writing):在检索过程开始之前,原始用户查询会经过多项优化,以提高其准确性和相关性。这一步确保检索系统获取最相关的信息。在此过程中会运用查询改写、扩展和转换等技术。例如,如果用户的查询过于宽泛,查询改写可以通过添加更多上下文或特定术语来细化它,而查询扩展则可能添加同义词或相关术语,以涵盖更广泛的相关文档。
- 动态嵌入(Dynamic Embeddings):在基础RAG中,可能会对所有类型的数据使用单一的嵌入模型,这可能导致效率低下。然而,进阶RAG会根据特定的任务或领域对嵌入向量进行微调。这意味着嵌入模型经过训练或调整,能够更好地捕捉特定类型查询或数据集所需的上下文理解。
通过使用动态嵌入,系统变得更加高效和准确,因为嵌入向量与手头特定任务的细微差别更加契合。
- 混合搜索(Hybrid Search):进阶RAG还采用混合搜索方法,结合不同的搜索策略来提高检索性能。这可能包括基于关键词的搜索、语义搜索和神经搜索。例如,MyScaleDB支持过滤向量搜索和全文搜索,由于其友好的SQL语法,允许使用复杂的SQL查询。这种混合方法确保系统能够检索到高度相关的信息,而不受查询性质的影响。
检索后处理(Post-Retrieval Processing)
检索过程结束后,进阶RAG并未停止,它会进一步处理检索到的数据,以确保最终输出具有最高的质量和相关性。
- 重排序(Re-ranking):检索完成后,进阶RAG会采取额外的步骤优化信息,这一步骤称为重排序,它确保将最相关和最有用的数据置于优先位置。最初,系统会检索出与用户查询可能相关的多条信息,但并非所有这些信息都具有同等价值。重排序根据与查询的匹配程度、上下文契合度等额外因素对这些数据进行排序。
通过重新评估检索到的内容,重排序将最相关的部分排在前面。这确保了生成的回复不仅准确,而且连贯,能够直接满足用户的需求。该过程使用各种标准,如语义相关性和上下文适宜性,对信息进行重新排序。这种优化使得最终回复更加聚焦和精确,提高了输出的整体质量。
- 上下文压缩(Context Compression):即使使用重排序算法对相关文档进行了筛选,这些筛选后的文档中仍可能存在与回答用户查询无关的数据。消除或去除这些无关数据的过程就是我们所说的上下文压缩。这一步骤在将相关文档传递给大语言模型之前执行,确保大语言模型仅接收到最相关的信息,从而能够提供尽可能好的结果。
优势
为了更好地理解这两种方法之间的差异,我们来探讨一下进阶RAG相较于基础RAG所具有的特定优势。
- 重排序提升相关性:重排序确保最相关的信息排在首位,提高了最终回复的准确性和流畅性。
- 动态嵌入优化上下文理解:动态嵌入针对特定任务进行定制,帮助系统更准确地理解和回应用户的不同查询。
- 混合搜索实现更精准检索:混合搜索使用多种策略更有效地查找数据,确保结果具有更高的相关性和精确性。
- 上下文压缩实现高效回复:上下文压缩去除不必要的细节,使流程更快,生成的答案更聚焦、质量更高。
- 深化用户查询理解:通过在检索前对查询进行改写和扩展,进阶RAG确保充分理解用户查询,从而得到更准确、更相关的结果。
进阶RAG在语言模型生成回复的质量方面实现了重大改进。通过增加优化阶段,它有效地解决了基础RAG中存在的诸如连贯性和相关性等关键问题。
对比分析:基础RAG与进阶RAG
通过对比基础RAG和进阶RAG,我们可以看到进阶RAG如何在基础RAG的基本框架上进行拓展。它引入的关键改进提升了检索的准确性、效率和整体质量。
结论
在选择基础RAG和进阶RAG时,需要考虑应用程序的具体需求。基础RAG适用于更简单的应用场景,在这些场景中,速度和简单实施是首要考虑因素,它在对深度上下文理解要求不高的情况下能够提升大语言模型的性能。而进阶RAG更适合复杂的应用,通过诸如优化筛选和重排序等额外处理步骤,提高了准确性和连贯性,使其成为处理更大数据集和复杂查询的首选方案。
## 推荐阅读
1. DeepSeek-R1的顿悟时刻是如何出现的? 背后的数学原理
2. 微调 DeepSeek LLM:使用监督微调(SFT)与 Hugging Face 数据
3. 使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT
4. DeepSeek R1:了解GRPO和多阶段训练
5. 深度探索:DeepSeek-R1 如何从零开始训练
6. DeepSeek 发布 Janus Pro 7B 多模态模型,免费又强大!
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。