跳到主要内容

文档切分概述

RAG 系统中的文档切分(Chunking)是将长文档分割成更小、更易管理的片段的过程,防止大量噪声数据进入上下文,这些片段随后被转换为向量并存储在向量数据库中,以便查询时进行快速检索。

RAG 文档切分流程图

文档切分的重要性

文档切分直接影响 RAG 系统的性能表现:

  • 检索准确性:合理的切分能确保检索到的片段包含完整的相关信息,避免语义割裂
  • 上下文完整性:适当的块大小保持足够的上下文信息,使 LLM 能够生成准确的回答
  • 计算效率:合理的块大小平衡了检索精度和计算成本
  • 召回率与精确度:切分策略直接影响检索系统的召回率和精确度

切分粒度对 RAG 效果的影响

粒度是 RAG 性能的"第一性变量"。不同粒度级别对系统性能有显著影响:

粒度级别检索准确性生成质量计算成本典型策略
细粒度(句子级)低(上下文不足)SentenceWindowNodeParser
中等粒度(段落级)中高中高SentenceSplitter
粗粒度(文档级)低(噪声多)高(上下文完整)直接使用 Document
粒度选择的常见误区
  • 分块过大:包含过多无关信息(噪音),增加 LLM 理解上下文的难度,降低答案精确性,甚至可能超出上下文窗口限制
  • 分块过小:破坏语义连贯性,导致完整知识点被拆散到多个块中,LLM 无法获得完整背景
  • 未适应文档结构:不同文档类型(论文、手册、报告、网页)具有不同结构特点,死板的分块方式无法有效利用标题、列表、表格等结构信息
工程实践建议

层次化切分与句子窗口相结合,通过"粗检索 -- 细生成"的两阶段路径,有效平衡召回率与上下文完整性。

文档切分基本流程

文档切分通常包括以下步骤:

  1. 文档加载:使用适当的文档加载器加载文档内容(Unstructured、Reader 等)
  2. 预处理:根据文档类型进行必要的清洗和格式化
  3. 切分策略选择:根据文档特点和需求选择合适的切分方法
  4. 执行切分:应用选定的切分策略将文档分割成块
  5. 后处理:对切分结果进行必要的调整和优化

切分效果评估指标

评估文档切分效果的常用指标:

  • 语义完整性:切分后的块是否保持完整的语义信息,能够表达完整的含义
  • 上下文连贯性:相邻块之间的内容是否连贯,重叠部分保证思路不中断
  • 检索相关性:切分后的块是否能有效支持相关查询
  • 生成质量:基于切分块生成的回答质量
  • 计算效率:切分和检索过程的计算成本