什么是大模型RAG检索、增强、生成? 专有名词一次性讲完!
前戏 前文, 我们使用ollama离线部署了一个qwen-5b模型, 今天我们对RAG一些名词进行系统解释, 白话文解释, 再也不用懵逼了。 RAG是Retrieval-Augmented Generation的缩写, 中文意思是检索增强生成, 顾名思义, 没啥争议。 举个不恰当的例子, 想象你在写一篇关于小狗的文章, 但你对小狗的知识有限。RAG就像你使用搜索引擎查找关于小狗的信息, 然后将这些信息作为参考资料,来帮助你写出更全面的文章。至于增强的过程, 就是你通过整理这些参考资料, 去掉一些没用的, 甚至可能还会返回去图书馆找资料, 只为了给你的读者具象化地讲解, 最好是图文并茂。至于生成, 就是把检索增强后的文档丢给大模型, 然后由大模型回答问题。 除了这三个大概念外, 其实还有些预处理过程, 也是必不可少的优化手段。 我们按照顺序一一厘清, 尽可能覆盖所有的细节。 预处理 预处理是指用户输入和知识库构建的过程。可能涉及到的一些步骤如下。 数据清理 数据清理是RAG中一个重要的步骤, 它包括对原始数据进行预处理, 包括文本清理、实体识别、实体链接等。 分块 在 RAG 系统中, “分块”(Chunking)是指将长文本或文档分割成更小、更易于管理和处理的片段或块的过程。分块有利于提高检索效率, 改善上下文管理, 增强检索相关性。 以下是分块的一些优化手段: 固定大小分块(Fixed-size Chunking): 将文档分割成等长的块, 每个块包含固定数量的单词或字符。 结构化分块(Structured Chunking):根据文档的结构(如段落、标题、句子)来分割文档。 上下文丰富的分块(Context-rich Chunking):在分块时, 保留一些额外的上下文信息, 以便每个块都能提供足够的信息。确定合适的重叠量, 以便在块之间保持上下文的连贯性。 语义分块(Semantic Chunking): 基于文本的语义内容来分割文档, 确保每个块包含相关的概念或主题。使用 NLP 技术(如主题建模)来识别和分割语义上连贯的段落。 多模态分块(Multimodal Chunking)对于包含多种类型内容(文本、图像、视频)的文档, 采用适合不同模态的分块策略。为每种内容类型定制分块方法, 以保留各自的语义信息。 … 知识库构建 知识库是RAG的核心, 它包含所有与用户需求相关的信息, 如文档、问题、实体等。 实体识别和链接: 在文本中识别出实体(如人名、地点、组织等), 并将它们与知识库中的相应条目链接起来。 知识提取: 从文本中提取结构化信息, 如事实、关系和概念, 并将它们存储在知识库中。 知识表示和存储: 选择合适的数据模型来表示知识, 如语义网络、图数据库、向量数据库等。 索引构建: 为知识库中的数据构建索引, 以加快检索速度。 检索分类器 确定哪些请求是否要走检索, 大模型的知识储备是否已经足够。如果已经足够, 直接跳过检索, 避免频繁的检索导致性能下降。 ...