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