01—RAG基础认知
大模型开发/技术交流
- LLM
2天前49看过
分享一下最近做RAG产品研究时,做的准备及研究阶段的笔记
前置知识
大模型获取知识的方式:
-
参数化知识:训练过程中得到,以参数权重的形式存储,以微调的方式更新,更新周期长、成本高
-
非参数化知识:从外部资源获得,以文件形式存储,容易更新且周期短成本低
通用模型针对垂直领域的局限性:幻觉、知识时效性、领域知识不足及数据安全问题的局限性。
因此一个高质量RAG产品的数据有如下特征:
-
具有高质量的领域知识与私有数据
-
数据有实时性的保障
-
数据安全
RAG
通过将非参数化的外部知识库、文档与大模型相结合,RAG 使模型在生成内容之前,能够先检索相关信息,从而弥补模型在知识专业性和时效性上的不足,减少生成不确定性,在确保数据安全的同时,充分利用领域知识和私有数据。
定义
通过引入外部知识库,利用检索模块(Retriever)从大量文档中提取相关信息,并将这些信息传递给生成模块(Generator),从而生成更准确且有用的回答。
RAG 的核心思想在于通过检索与生成的有机结合,弥补大模型在处理领域问题和实时任务时的不足
应用场景与边界
应用场景
-
企业或领域知识管理与问答系统
-
客户支持与智能客服系统
-
医疗、金融等对数据准确性、时效性要求极高的专业领域
边界
为保证RAG产品产出内容的逻辑正确,问答范围应约束在提供的领域知识库内容中,否则应不予回答;
因为Generation阶段是对模型的使用,输入是由检索内容与用户问题组成的提示词,在回答知识库内容外的问题时与直接使用LLM无异,若此时模型提供回答则不可避免使用其参数化知识(训练内容),模型生成的内容的不可推导性和不确定性会导致幻觉的出现。
标准技术流程
RAG 标准流程由索引(Indexing)、检索(Retriever)和生成(Generation) 三个核心阶段组成。
索引阶段,通过处理多种来源多种格式的文档提取其中文本,将其切分为标准长度的文本块(chunk),并进行嵌入向量化(embedding),向量存储在向量数据库(vector database)中。
检索阶段,用户输入的查询(query)被转化为向量表示,通过相似度匹配从向量数据库中检索出最相关的文本块。
最后生成阶段,检索到的相关文本与原始查询共同构成提示词(Prompt),输入大语言模型(LLM),生成精确且具备上下文关联的回答。
索引
在模型不使用VLM的情况下,大致分为四步:
-
首先,将各类数据源及其格式(如书籍、教材、领域数据、企业文档等,txt、markdown、doc、ppt、excel、pdf、html、json 等格式)统一解析为纯文本格式。
-
接着,根据文本的语义或文档结构,将文档分割为小而语义完整的文本块(chunks),确保系统能够高效检索和利用这些块中包含的信息。
-
然后,使用文本嵌入模型(embedding model),将这些文本块向量化,生成高维稠密向量,转换为计算机可理解的语义表示。
-
最后,将这些向量存储在向量数据库 (vector database) 中,并构建索引,完成知识库的构建。这一流程成功将外部文档转化为可检索的向量,支撑后续的检索和生成环节。
检索
该阶段的首要目标是:确保最相关的结果能够出现在候选列表中。
实现该目标的方式有语义检索和关键词检索。
语义检索一句话描述就是:通过语义(余弦)相似度来匹配文本切块,针对用户表达不完全契合文本内容但是语义相近的场景有很大优势,但是并非万能,以下场景中传统关键词检索更具优势:
-
精确匹配:如名称、姓名、编号等,匹配的少量差异天差地别;
-
少量字符的匹配:用户习惯于输入几个关键词,而少量字符并不能完整表达语义,进行向量检索时效果可能较差;
-
以及低频词汇的匹配:低频词汇往往承载了关键意义,比如一些名词和动词对具体事实的描述更具有代表性,但是一些助词、语气词等却占用了更多的文本量。
向量检索和关键词检索各有其独特优势,混合检索(Hybrid Search)通过结合这多种检索技术,可以弥补两者的不足。
向量检索主要依赖于全局语义相似性,通过将查询和文档映射到高维语义空间中进行匹配。然而,这种方法往往忽略了查询与文档具体内容之间的细粒度交互。所以还需要重排模型的介入。
(鸽一下,后续介绍)
生成
将检索到的相关文本块与用户的原始查询整合为增强提示词(Prompt),并输入到大语言模型(LLM)中。LLM 基于这些输入生成最终的回答。
(鸽一下,后续介绍,会补充一些提示词写法)
总结
标准技术流程之外,若提供的数据、文档格式混乱,为保证索引质量,还需要进行数据清洗和预处理,使之形成结构化数据。
索引阶段的分块策略对索引的合理建立和检索阶段内容的完整性影响较大,分块策略有如下几种:
固定大小分块(Fixed Size Chunking)、重叠分块(Overlap Chunking)、递归分块(Recursive Chunking)、文档特定分块(Document Specific Chunking)、语义分块(Semantic Chunking)、混合分块(Mix Chunking)
其中文档特定分块需要文档有清晰的文档结构或标识,递归分块需要文档预处理阶段的处理原则适当。
知识库的使用人员即是使用者也是共建者,形成各个知识库的文档和数据的特征不尽相同,产品应在全生命周期应为其提供灵活的配置以及时修正各个阶段甚至更详细步骤的结果。
注释
-
递归分块:如换行符\n\n、\n ,句号、逗号、感叹号、空格等
-
文档特定分块:根据文档的格式(如 Markdown、Latex、或编程语言如 Python 等)进行定制化分割
-
语义分块:基于文本的自然语言边界(如句子、段落或主题中断)进行分段
-
混合分块:结合多种分块方法
————————————————
版权声明:本文为稀土掘金博主「天才球员芝麻圆」的原创文章
原文链接:https://juejin.cn/post/7439023899546271755
如有侵权,请联系千帆社区进行删除
评论