RAG-分块策略
分块策略在检索增强生成(RAG)方法中起着至关重要的作用,它使文档能够被划分为可管理的部分,同时保持上下文。每种方法都有其特定的优势,适用于特定的用例。将大型数据文件拆分为更易于管理的段是提高LLM应用效率的最关键步骤之一。目标是向LLM提供完成特定任务所需的确切信息,不多也不少。
什么是分块
分块涉及将文本划分为可管理的单元或“块”,以实现高效处理。这种分割对于语义搜索、信息检索和生成式 AI 应用等任务至关重要。每个块都保留上下文和语义完整性,以确保结果连贯。
分块技术及其策略
策略名称 | 描述 | 优点 | 缺点 | 实施建议 |
---|---|---|---|---|
固定长度分块 | 将文本按预定义长度(如基于令牌或字符)分割,适合简单文档或快速处理。 | 简单性、统一性、效率 | 上下文丢失、相关性问题、潜在信息丢失 | 选择合适大小,考虑使用重叠窗口以保持上下文 |
基于句子的分块 | 按句子边界分割,确保每个块是完整的思想,适合短响应如客户查询。 | 保持上下文、易于实现、更好的可读性 | 块大小不一致、不适合长句、控制力弱 | 使用NLP库检测句子,必要时合并短句 |
段落分块 | 将文档按段落分割,每个段落通常包含完整想法或主题,适合结构化文档。 | 更丰富的上下文、逻辑分割 | 大小不一致、可能超出行牌限制 | 监控块大小,必要时分割大段落以保持上下文 |
文档分块 | 将整个文档视为一个块或最小分割,保持完整结构和上下文,适合法律或医学文档。 | 保持完整上下文、适合结构化文本、简单 | 可扩展性问题、效率低、缺乏细节提取 | 适用于不希望分割影响流程的场景 |
滑动窗口分块 | 通过滑动窗口创建重叠块,确保相邻块共享内容,适合需保持跨部分上下文的文档。 | 上下文连续性、提高检索效果 | 冗余、计算成本高 | 优化窗口大小和重叠,使用去重技术处理冗余 |
语义分块 | 使用嵌入或机器学习模型按语义意义分割,确保每个块主题连贯。 | 上下文相关性、灵活性、提高检索准确性 | 复杂性、处理时间长、计算成本高、阈值调整 | 利用预训练模型,平衡成本和粒度 |
递归分块 | 使用层次分隔符或多个分隔符逐步分割为小块,适合大型结构化文档。 | 层次上下文、可扩展性、意义块、细粒度控制 | 实现复杂、可能丢失上下文、复杂性高、计算开销大 | 使用文档结构标识层次,存储块位置元数据 |
上下文增强分块 | 为每个块添加周围块的摘要或元数据,保持序列间的上下文,适合长文档。 | 增强上下文、提高连贯性 | 复杂性、存储开销大 | 生成简洁摘要,考虑用关键术语或概念作为元数据 |
模式特定分块 | 按内容类型(如文本、表格、图像)分别处理,每个类型按其性质分块。 | 定制方法、提高准确性 | 实现复杂、集成困难 | 使用OCR处理图像,将表格转为结构化数据,保持索引一致 |
代理分块 | 使用AI(如大型语言模型)按内容结构和语义建议块边界,或按代理角色任务组织。 | 任务导向效率、聚焦相关数据、灵活性、智能分割 | 复杂设置、计算密集、成本高、可能过分专业化、丢失全局上下文 | 选择性使用,优化LLM提示,明确代理角色和任务规则 |
子文档分块 | 总结整个文档或大节并将摘要作为元数据附加到单个块,适合大型文档集。 | 层次检索、上下文深度 | 额外处理、元数据管理复杂 | 自动化摘要生成,高效存储摘要 |
混合分块 | 结合多种分块策略,动态适应不同查询类型或文档结构,适合多用途系统。 | 灵活性、优化性能 | 逻辑复杂、维护难度大 | 制定选择策略的标准,广泛测试以确保可靠性 |
基于令牌的分块 | 按预定义令牌数(如单词或子词)分割,确保块在模型令牌限制内。 | 优化语言模型、精确控制块大小、一致性 | 上下文碎片化、忽略语义结构、灵活性有限 | 确保块在模型令牌限制内 |
分块优化关键策略
- 重叠块:包括块之间的某些重叠可以确保在段落之间不会丢失关键信息。这对于需要无缝过渡的任务尤其重要,如对话生成或摘要。
- 动态块大小:根据模型的容量或文本的复杂性调整块大小可以提升性能。较小的块适合 BERT 等模型,而较大的块适用于需要更广泛上下文的生成任务。
- 递归:递归或多级分块允许处理复杂的文本结构,例如将文档拆分为章节、节和段落。
- 向量化的对齐:分块技术的选择对检索系统中的向量表示有显著影响。句子转换器和 BERT 或 GPT 等嵌入通常用于与分块粒度对齐的最佳向量化