RAG 是 Retrieval Augmented Generation(检索增强生成)的缩写。让我们分解这个术语,以便更清楚地了解什么是 RAG:
R -> 检索
A -> 增强
G -> 生成
基本上,我们现在使用的大语言模型(LLM)并不是实时更新的。如果我向一个 LLM(例如 ChatGPT)提问,它可能会产生幻觉(hallucination)并给出错误的答案。为了应对这种情况,我们用更多的数据(仅限部分人访问的数据,而非全球公开的数据)训练 LLM。然后我们向基于这些数据训练的 LLM 提问,这样它就能提供相关的信息。如果我们不使用 RAG,可能会出现以下情况:
- 增加幻觉的可能性
- LLM 过时
- 准确性和事实性降低
你可以参考下面提到的图表:
RAG 是一个混合系统,它结合了基于检索的系统与 LLM 的优势,以生成更准确、相关且信息丰富的决策。这种方法在生成过程中利用外部知识源,增强模型提供最新且符合上下文信息的能力。在上面的图表中:
- 第一步,用户向 LLM 提出查询。
- 查询然后被发送到
- 然后
- 检索到的文档与原始查询一起发送到语言模型(LLM)。
- 生成器同时处理查询和相关文档,生成一个响应,然后将其返回给用户。
现在我知道你完全有兴趣从基础到高级学习 RAG。那么,让我告诉你一个完美的路线图,只需 5 天就能学会 RAG 系统。是的,你没听错,只需 5 天你就能掌握 RAG 系统。让我们直接进入学习路线图:
第 1 天: 为 RAG 打下基础
第 1 天的核心目标是从整体上理解 RAG,并探索 RAG 的关键组成部分。以下是第 1 天的主题细分:
RAG 概述:
- 认识 RAG 的功能、重要性及其在现代 NLP 中的地位。
- 主要观点是,检索增强生成(retrieval-augmented generation)通过引入外部信息来提升生成模型的效果。
关键组成部分:
- 分别学习检索和生成。
- 了解检索(例如:密集段落检索(DPR)、BM25)和生成(例如:GPT、BART、T5)的架构。
第 2 天: 构建自己的检索系统
第 2 天的核心目标是成功实现一个检索系统(即使是一个基础的系统)。以下是第 2 天的主题细分:
深入探讨检索模型:
- 学习密集检索与稀疏检索的区别:
- 密集检索: DPR, ColBERT。
- 稀疏检索: BM25, TF-IDF。
- 探索每种方法的优缺点。
检索的实现:
- 使用如 elasticsearch(用于稀疏检索)或 faiss(用于密集检索)的库,完成基本的检索任务。
- 通过 Hugging Face 的 DPR 教程,理解如何从知识库中检索相关文档。
知识数据库:
- 了解知识库的结构。
- 学习如何为检索任务准备数据,如预处理语料库和文档索引。
第 3 天: 微调生成模型并观察结果
第 3 天的目标是微调生成模型并观察结果,理解检索在增强生成中的作用。以下是第 3 天的主题细分:
深入探讨生成模型:
- 检查已训练的模型,如 T5、GPT-2 和 BART。
- 学习生成任务(例如:问答或摘要)的微调过程。
生成模型的动手实践:
- 应用 Hugging Face 提供的 Transformer 模型,在一个小型数据集上优化模型。
- 测试使用生成模型生成问题的答案。
探索检索与生成的交互:
- 研究生成模型对检索数据的输入方式。
- 认识到检索如何提升生成响应的精度和质量。
第 4 天:实现一个可运行的 RAG 系统
现在,我们距离目标更近了。今天的主要目标是在一个简单的数据集上实现一个可运行的 RAG 系统,并熟悉调整参数的方法。以下是第四天的主题分解:
结合检索和生成:
- 将生成和检索的组件整合到一个系统中。
- 实现检索输出和生成模型之间的交互。
使用 LlamaIndex 的 RAG 流水线:
- 通过官方文档或教程学习 RAG 流水线的功能。
- 利用 LlamaIndex 的 RAG 模型,设置并执行一个示例。
动手实验:
- 开始尝试不同的参数,例如检索的文档数量、生成的束搜索策略,以及温度缩放。
- 尝试在简单的知识密集型任务上运行模型。
第 5 天:构建和微调一个更强大的 RAG 系统
最后一天的目标是通过微调创建一个更强大的 RAG 模型,并了解不同类型的 RAG 模型。以下是第五天的主题分解:
- 高级微调: 探索如何为特定领域的任务优化生成和检索组件。
- 扩展: 使用更大的数据集和更复杂的知识库来扩展你的 RAG 系统规模。
- 性能优化: 学习如何最大化内存使用和检索速度(例如,通过在 GPU 上使用 faiss)。
- 评估: 学习如何在知识密集型任务中评估 RAG 模型,使用各种指标如 BLEU、ROUGE 等来衡量问题的解决情况。