RAG
RAG概述
- 检索增强生成(Retrieval-Augmented Generation,RAG)指的是在LLM回答问题之前从外部知识库中检索相关信息,RAG有效地将LLM的参数化知识与非参数化的外部知识库结合起来,使其成为实现大型语言模型的最重要方法之一
- 优秀框架:LlamaIndex,langchain
RAG流程
文档加载
文档清洗
- 去掉无用消息,减少干扰信息,让查询准确
文本去重
- 去除重复内容:确保每个文档的内容是独一无二的,避免在检索过程中返回重复的结果。
- 相似度检测:使用例如基于哈希签名或词向量模型进行相似内容的检测与去重。
格式化清理
- 删除多余的空格和换行:标准化文本中的空格、换行符,确保文本布局整齐。
- 规范标点符号: 统一标点符号的形式和使用,例如全角半角的转换,标点符号后的空格等。
- 格式转换: 将各种文档格式(PDF、Word、HTML 等)转换为纯文本(TXT)或标准的结构化格式(JSON,XML等)
无效内容过滤
- 去除HTML标签,保留纯文本内容
- 删除脚本和广告:过滤掉网页中不相关的脚本和广告内容,保留核心信息
正则化处理
- 大小写标准化: 统一文本的大小写,例如全小写处理。
- 规范数字和日期格式: 将数字和日期统一格式化,便于后续处理和检索。
- 字符编码统一: 确保所有文档使用相同的字符编码,避免乱码问题。
分词和词性标注
- 分词: 将文本切分为单词或词组,提高检索和生成的精度。
- 词性标注 为文本添加词性标签,提升语义理解和上下文分析能力。
- 用于标记每个单词的词性(如名词、动词、形容词等)。词性标注有助于语义理解和句法分析,广泛应用于文本处理任务,如信息检索、机器翻译和文本生成。
- 词性标注可以通过多种方法实现,包括基于规则的方法、统计方法和深度学习方法。
停用词和噪音词去除
- 停用词处理: 去除常见的且没有具体意义的停用词(如 “the”, “is” 等)。
- 去除可能干扰检索和生成的噪音词汇或符号(如 “u0000”, 无意义的符号串等)。
语言检测与编码
- 语言检测:识别并标记文档的语言,确保多语言文档的正确处理。
- 统一编码:确保所有文档编码一致,例如 UTF-8,避免字符处理问题。
内容裁剪与归一化
- 去除冗长段落:去除或简化冗长且无关的段落,保留关键内容。
- 句子和段落结构化:重构文本的句子和段落,使其更具逻辑性和连贯性。
拼写与预发纠正
- 拼写检查与纠正:自动识别和修正文本中的拼写错误。
- 语法校正:通过语法分析工具,修正明显的语法错误,提高文本质量。
文档切分
- 切分的目的
- 为了让内容更好地表达其语意,将原始文档分割成某个大小的块,同时保留它们的含义(如将文本分割成句子或段落,而不是将单个句子切分成两部分)
- 是否适合分块的判断方式
- 如果文本块在没有上下文的情况下对人类有意义,那么它对语言模型也有意义。因此,找到语料库中文档的最佳块大小对于确保搜索结果的准确性和相关性至关重要
- 实现方式
- 固定长度的切分
- 自然段落的切分
- 基于句子的切分
- 混合方法
索引构建
- 将切分后的文档片段存入索引中,以便高效检索。
向量索引
- 向量索引是一种存储和访问高维向量的方法,常用于相似性搜索。它利用文本向量化技术(如TF-IDF、Word2Vec、GloVe、BERT、Sentence Transformers等),将文本转换成高维向量表示,然后通过索引进行存储和高效检索。向量索引可以帮助快速找到与查询语义相似的文档片段,使得检索过程更加精确和高效。
内容索引
- 一种基于文档内容的索引方法,亦称全文索引。它用于对文本文档进行索引,以支持全文检索。内容索引可以是倒排索引、布尔索引等,旨在通过关键词、短语和其他内容特征快速检索相关文档。
层次索引
- 一种分层结构的索引方法,通常用于支持高效的范围查询和多级分类的检索。树形数据结构(如 B 树、B+ 树、R 树等)和分层索引(如 HNSW)都是层次索引的具体实现。
- 适用于从大量文档中高效检索信息,先通过摘要过滤出文档块,再进行内容搜索
假设性问题
- 利用生成性语言模型(LLM)为每个文本块生成假设性问题并将这些问题转化为向量是为了增强文档片段的语义表示。这种方法的核心目标是利用假设性问题来捕捉文档中的重要信息和语义特征,从而提高检索的准确性和效果
丰富上下文
句子窗口检索
- 将文档切分为较小的句子窗口(窗口可以是单句、多句或段落),每个窗口中包含的内容彼此紧密相关。句子窗口能够确保上下文丰富、信息集中,同时不会造成信息溢出或分散。
- 步骤
- 将长文档切分成较小的句子窗口,每个窗口包含固定数量的句子,例如 3-5 句。
- 使用向量化技术(如 BERT、GPT 等)将每个窗口转换为向量表示,以捕捉窗口中的语义信息。
自动合并检索(父文档检索器)
- 组合来自不同窗口或段落的相关检索结果,以生成一个更全面的上下文。它可以在索引阶段进行多级检索,以合并相关上下文,提高检索器的准确度和丰富度。
- 步骤
- 使用句子窗口检索来初步检索相关内容。
- 检索结果中,自动合并相关窗口,组合成一个更大的上下文单元。
混合检索
- 混合检索(Hybrid Retrieval)是一种将多种检索方法结合使用的技术,旨在提高信息检索的准确性和效果。常见的混合检索包括结合向量检索和关键词检索,以获得更全面和精确的检索结果。
提高检索效果
前置处理
- 查询改写
- 通过对用户输入的查询进行处理转换,使其更能反映用户的实际信息需求,从而帮助系统返回更相关的结果
- 在复杂查询的情况下,LLM 可以将其分解为几个子查询
- 查询路由
- QA
后置处理
- 过滤和重排
- 通过过滤、重新排序或某些转换来对结果进行精细化处理
RAG评估
评估方法
独立评估
- 独立评估涉及对检索模块和生成模块(即阅读和合成信息)的评估。
检索模块
- 评估 RAG 检索模块的性能通常使用一系列指标,这些指标用于衡量系统(如搜索引擎、推荐系统或信息检索系统)在根据查询或任务排名项目的有效性。这些指标包括命中率 (Hit Rate)、平均排名倒数 (MRR)、归一化折扣累积增益 (NDCG)、精确度 (Precision) 等。
生成模块
- 生成模块指的是将检索到的文档与查询相结合,形成增强或合成的输入。这与最终答案或响应的生成不同,后者通常采用端到端的评估方式。生成模块的评估主要关注上下文相关性,即检索到的文档与查询问题的关联度。
端到端评估
- 端到端评估是对 RAG 模型对特定输入生成的最终响应进行评估,涉及模型生成的答案与输入查询的相关性和一致性。
关键指标
- 三个关键指标:答案的准确性、答案的相关性和上下文的相关性。
评估框架
- RAGAS
RAG边界
- 想象成给模型提供一本教科书,让它根据特定的问题去查找信息。这种方法适用于模型需要解答具体问题或执行特定信息检索任务的情况。但 RAG 并不适合于教会模型理解广泛的领域或学习新的语言、格式或风格。
RAG
https://x-leonidas.github.io/2025/05/07/24AI/RAG/