前言
书接上文 , 我学到了如何将分割后的文本 , 使用嵌入式模型向量化 , 并且使用 langchain.js 集成的多种向量数据库实现数据持久化
也就是 , 如下所有流程 ,已经跑通 ~
这一次 , 是时候一起学习什么是 RAG ~
RAG
什么是 RAG
RAG(Retrieval-Augmented Generation,检索增强生成) 成功地将检索系统与大语言模型相结合,旨在为用户提供更加精确和相关的答案。
具体来说,当我们提出一个问题时,检索系统首先从海量的文本资料中筛选出与之相关的文本片段,这些片段被称为“上下文”。
随后,大语言模型会利用这些上下文,作为额外的输入信息来生成相关的答案。
这种结合方法的优越性在于 :
- 传统的语言模型往往依赖其训练数据来回答问题
- 而RAG机制能够“引导”模型根据特定的、外部的上下文来形成答案。
这意味着,即使面对模型在其原始训练数据中从未见过的问题,只要该问题相关的上下文可以被检索到,RAG机制就能够协助模型生成合理的答案。
RAG 流程
检索增强生成的工作流程可以简要地分为以下两个主要阶段
- 索引阶段
- 查询阶段
此处有两个图 :
各位倔友,不妨点个赞 , 我专门染成绿色和浅蓝 , 就是想令各位心旷神怡 , 够走心 😍
索引阶段
1) 知识库构建
在这个步骤中,首先需要收集和整理大量的文本资料。这些资料可以是各种来源,如学术论文、新闻报道、维基百科等。这些文本资料构成了所谓的“知识库”。
2) 文本预处理
对收集到的文本进行分析和预处理,如分词、去除停用词、标注词性等。
这可以帮助后续的检索系统更快速、准确地找到相关信息。
3) 建立索引
使用特定的算法,如对预处理后的文本内容向量化处理后进行索引。这样在后续的查询阶段,可以迅速定位与查询相关的文本片段。
图的上半部分 索引阶段 已经跑通 , 只是一些细节和优化有待探索
索引阶段学习总结如下 :
- Langchain.js | Ducument Loader👈| 文本这样加载😱
- Langchain.js | Document Transformer👈| 文本这样转变😱
- Langchian.js |Embedding & Vector Store👈| 数据向量化后这样储存😱
查询阶段
1) 问题解析
当用户提出一个问题或查询请求时,首先需要对其进行解析,确定关键词
或关键短语,以便进行高效的检索。
2) 上下文检索
基于前一步解析出的关键信息,查询系统从知识库中检索出与之相关的
文本片段,即上下文。
3) 生成回答
拥有相关的上下文信息后,大语言模型(LLM)会将其作为输入,结合问题生成最终的答案。这使得答案更加精确和具有针对性。
LangChain提供了多种先进的技术能力,其中“检索增强生成”是其最主要的功能之一。
后期将会重点学习检索 Retriever ~ , 这一次 ,主要是在了解 RAG 的流程
RAG 原理
结合上述图解 , 以及顾名思义 : 检索(R) => 增强(A) => 生成(G)
-
检索(R) :
- 首先,RAG 的起点是检索过程。它会根据用户的问题或输入,在外部信息源中搜索相关信息。
-
增强(A) :
- 检索到的信息会对模型的输入进行增强。它会将检索到的信息作为额外的上下文提供给模型,使模型能够利用这些信息来生成更有依据和更准确的回答。
-
生成(G) :
- 最后,模型根据输入和增强的信息进行生成。RAG 的生成过程是基于检索到的信息和原始输入共同完成的,因此它生成的答案可以更具针对性和相关性,能够充分利用外部信息源的丰富内容。
RAG 与 Fine-turing
RAG 即我们上面的检索增强生成 , Fine- turing 即微调
对比 RAG 和 微调 , 他们本质的区别是 : RAG 不改变大模型的参数 , 但是 Fine-turing 会改变大模型的参数
我么探讨一下
- 使用RAG
- 还是微调
1) 使用 RAG 的场景
(1)需要外部信息源:当应用需要回答关于现实世界的特定问题时,RAG 具有独特的优势例如,对于最新的科技新闻、历史事件或特定的科学事实等,RAG能够从外部信息源(如唯基百科)中检索并生成答案。
在我之前的文章: Langchain.js | Ducument Loader👈| 文本这样加载😱
我就提及到 : 使用 google 的搜索引擎 api 加载数据 , 部分如下 :
(2)有限的训练数据:对于那些只有 有限训练数据的项目,RAG可以利用其检索功能从更大的数据集中学习,从而弥补训练数据的不足。
2)使用微调的场景
(1)追求高精度 : 微调针对特定任务优化模型,使其更加专业和精确。当准确性是关键需求时,如医学诊断或金融预测,微调是首选方法。
(2)充足的训练数据 : 微调需要大量的任务相关训练数据。当你拥有这些数据时,通过微调,模型可以在特定领域获得更好的表现。
(3)追求快速响应 : 尽管微调可能会使模型稍显复杂,但它仍然比RAG 更快。因为微调模型直接生成答案,不需要进行外部信息的检索。当应用场景需要快速反馈,例如紧急响应系统时,微调是更好的选择。
综上所述即
-
RAG:
- 核心在于从外部数据源检索信息,结合自身能力生成答案,更注重信息的检索和整合能力,能有效利用外部的大规模数据,不依赖大量的训练数据。
-
微调:
- 主要是对模型进行调整优化,使其更好地适应特定任务,通过大量任务相关数据对模型参数进行细致调整,侧重于利用自身已有的大量数据对模型进行针对性训练,提高其在特定领域的专业性和精确性。
总结
学习了
- 什么是 RAG
- RAG 流程
- RAG 原理
- RAG 与 Fine-turing 的区别
在 RAG 流程中 , 分为
- 索引阶段
- 查询阶段
索引阶段 , 已经轻度学习 , 接下来 , 进入查询阶段的学习 ~ , 😋 , 如何根据用户的提问 , 查询到准确的回答 , 避免答非所问 , This is a question !