分块策略是一种将大型文档分解为较小、可管理的部分的方法,用于 AI 检索。糟糕的分块会导致结果不相关、效率低下并降低业务价值。它决定了获取相关信息以获得准确 AI 响应的有效性。有如此多的可用选项(页面级、部分级或基于 token 的分块,大小不等),您如何确定哪种方法最适合您的特定用例?
这篇博文分享了我们对不同数据集进行的大量实验的见解,这些实验可帮助您优化检索增强生成 (RAG) 系统的分块策略。
简介
分块是 RAG 工作流中的关键预处理步骤。它涉及将文档拆分成更小、可管理的部分,以便高效地索引、检索,并在生成响应时用作上下文。如果处理不当,分块可能会导致不相关或不完整的响应,让用户感到沮丧并破坏对系统的信任。它还会迫使检索器或生成器处理过多或不必要的信息,从而增加计算负担。
另一方面,智能分块策略提高了检索精度和上下文一致性,直接提高了生成答案的质量。对于用户而言,这意味着交互更快、更准确、更有用。对于企业而言,这意味着更高的用户满意度、更低的流失率,以及更高效的资源利用,从而降低运营成本。简而言之,分块不仅仅是一个技术细节,而是决定整个 RAG 系统有效性的基本设计选择。
我们的研究跨多个数据集评估了不同的分块策略,以根据您的特定内容和用例制定选择最佳方法的指南。
实验性设置

经过测试的分块策略
我们测试了三种主要的 chunking 方法,以了解它们对检索质量和响应准确性的影响:
- 基于标记的分块:使用 NVIDIA NeMo Retriever 提取的内容,将文档拆分成固定大小的标记块。 测试大小:128、256、512、1,024 和 2,048 个令牌 数据块之间有 15% 的重叠 (我们测试了 10%、15% 和 20% 的重叠值,并发现 15% 的重叠值在 FinanceBench 上具有 1,024 个令牌块,表现最佳。虽然不是全网格搜索,但此结果与行业实践中常见的 10–20% 重叠情况相符。)
- 页面级分块:文档的每一页都成为一个单独的分块。 使用 NeMo Retriever 提取和 NeMo Retriever-parse 实现,确保公平比较不同的分块策略。
- 章节级分块:使用 nemoretriever-parse,根据文档的原生组织 (例如标题、段落和其他格式元素) ,根据结构化文档布局部分对文档进行分割。 为进行公平比较,我们使用相同的 nemoretriever-parse 提取模型比较了页面级和章节级分块。
数据集
我们在不同的数据集中评估了这些策略:
- DigitalCorpora767:由 Digital Corpora 767 个 PDF 文件组成的公共数据集,包含 991 个人工注释的问题,涵盖文本、表格、图表和信息图。
- 收入:包含 512 个 PDF (收入报告、咨询演示文稿) 的内部集合,其中每个包含 3000 多个图表、表格和信息图实例,以及 600 多个人工注释的检索问题。
- FinanceBench:一个基准数据集,用于评估大语言模型 (LLM) 在回答与上市公司相关的财务问题时的性能,使用 10-K 提交和收益报告等真实的财务文档。
- KG-RAG:Docugami KG-RAG 数据集是一个文档和带注释的问答对的存储库,旨在评估检索增强生成 (RAG) 系统,具有逼真的长篇商业文档,以及单个和多个文档中不同的问题复杂性。
- RAGBattlePacket:德勤税务咨询 PDF 报告合集。
评估方法
我们建立了一个全面的评估框架,以系统比较不同数据集的 chunking 策略,并衡量其对 RAG 系统性能的影响。
- 主要指标:端到端 RAG 回答准确性
- 评估流程:每个配置进行多个试验,并使用多个判断模型
评估指标
在评估中,我们使用了 RAGAS 评估框架中的 NV 答案准确性指标,该指标用于测量模型的响应与给定问题的参考地面实况之间的一致性。
答案准确性(Answer Accuracy)指标的工作原理是:
- 使用 LLM-as-a-judge 来评估生成的回答的正确性。
- 将模型的输出与 ground-truth 参考进行比较。
- 评分标准为 0-4,其中: 0:响应不准确或无法解决问题。 2:响应与引用部分对齐。 4:响应与引用完全一致。
为确保鲁棒性,每次评估都涉及对不同的判断模型进行多次判断,并对分数进行平均值,以生成最终的准确度指标。在实验中,我们使用以下功能强大的模型作为评委:
- Mixtral 8x22B Instruct (mistralai/mixtral-8x22b-instruct-v0.1)
- Llama 3.1 70B Instruct (meta/llama-3.1-70b-instruct)
使用这些大语言模型担任评委可提供高质量的评估,而多评委方法 (即“评委委员会”) 有助于最大限度地减少来自任何单个评估器模型的偏差,从而在不同的分块策略中实现更可靠的性能测量。
摄取框架
在实验中,我们使用了两种不同的文档提取框架,以确保公平比较不同的分块策略:
- NVIDIA NeMo Retriever:用于为页面级和基于 token 的分块策略提取内容。这组微服务专为解析复杂的非结构化 PDF 和其他企业文档而设计,使我们能够: 在保留文档结构的同时提取高质量文本。 从财务报告和技术文档中截取表格和图表。 高效处理来自不同数据集的数百份文档。
- nemoretriever-parse:专门用于部分级分块的模型,因为它可以智能检测部分标题和文档结构。为了公平地比较页面级和部分级分块,我们还使用 nemoretriever-parse 提取进行版本的页面级分块测试。
这种双框架方法使我们能够利用每个工具的优势,同时确保我们的分块策略比较反映真正的性能差异,而不是提取伪影。在比较页面级与部分级分块时,我们使用相同的 nemoretriever-parse 提取来消除基于提取的任何方差,从而提供更可控的比较。
需要注意的是,虽然我们的 chunking 策略 (page-level, section-level, 和 token-based) 应用于文档的文本内容,但表格和图表是作为单独的实体提取的。这些元素未被分割或分块,而是作为完整单元保留,以保持其完整性和上下文。这种方法可确保复杂信息在检索过程中保持不变,允许 RAG 系统在需要时访问完整的表格和图表。
RAG 系统实现
在实验中,我们使用了 NVIDIA RAG Blueprint 中的组件,该组件为企业级 RAG 工作流提供了全面的参考实现。此蓝图提供:
- 模块化微服务架构,可实现轻松的组件交换和评估。
- 支持 multimodal 数据处理 (包含文本、图像、图表和表格的文档) 。
- 与先进的 NeMo Retriever 微服务集成,用于嵌入、重排序和 LLM 推理
- 广泛的可配置性,可用于试验不同的hyperparameters。
NVIDIA RAG Blueprint 特别适合分块实验,因为它提供:
- 多种预构建 chunking 策略。
- 用于高效存储和检索的 Vector database 集成。
- 用于衡量性能差异的 Robust 评估功能。
如果您要进行 chunking 实验或构建生产级 RAG 系统,此蓝图可以作为一个很好的起点,在缩短开发时间的同时提供定制所需的灵活性。
为确保对分块策略进行公平、可靠的评估,我们在 RAG 工作流中对以下组件进行了标准化:
- 嵌入模型:NVIDIA/LLAMA-3.2-NV-embedqa-1b-v2
- 重排序模型:NVIDIA/LLaMA-3.2-NV-RerankQA-1B-V2
- 检索 top-k:10 (用于生成的检索上下文数量)
- 生成器模型:NVIDIA/LLaMA-3.1-Nemotron-70B-Instruct
通过在所有实验中保持这些组件的一致性,我们确保性能差异可归因于分块策略,而非 RAG 工作流其他部分的变化。NVIDIA 的这些先进模型为我们的检索和生成功能奠定了基础,帮助我们区分不同的分块策略对整体 RAG 性能的影响。
结果和分析
我们的实验跨数据集产生了一些有趣的模式。
按分块策略划分的整体性能

此图显示了每个分块策略在所有数据集中的平均端到端 RAG 准确率,误差条表示标准差。值得注意的是,页面级分块实现了最高的平均准确率 (0.648) 和最低的标准差 (0.107) ,这表明数据集之间的性能更加一致。与此同时,所有基于 token 的方法都将性能稳定保持在 0.603 和 0.645 之间。

使用相同的nemoretriever-parse提取直接比较页面级分块与部分级分块时,我们发现在测试数据集中,页面级分块的平均性能优于部分级分块。这进一步证实了我们的发现,即页面级分块通常是最有效的策略。
特定于数据集的性能

此图表按数据集和分块策略分解了 RAG 准确性,揭示了不同内容类型对各种分块方法的响应方式。某些数据集 (例如 FinanceBench 和 RAGBattlePacket) 在使用中等大小的数据块 (512-1024 个 token) 时显示最佳性能,而数据块较大 (2048 个 token) 时性能下降。其他数据集 (例如 KG-RAG) 在分块策略方面显示出更多的可变性,并且数据块大小与性能之间没有明确的线性关系。

查看页面和部分分块策略之间的数据集特定比较,我们可以看到,在大多数情况下,页面级分块的性能优于部分级分块,只有 FinanceBench 在部分级分块方面表现出略胜一筹的性能。这表明,虽然文档结构很重要,但自然页面边界通常会提供更连贯、更有效的数据块进行检索。
主要观察结果
- 总的赢家是页面级分块:我们的实验清楚地表明,页面级分块在所有数据集中实现了最高的平均准确率 (0.648) 和最低的标准差 (0.107) ,显示出不同内容类型之间的性能更加一致。与基于token的分块和部分级分块相比,页面级分块展现出卓越的整体性能。查看特定于数据集的发现,我们可以看到这种模式的明显证据。一些金融数据集 (例如 KG-RAG) 在使用页面级分块 ( 0.520) 时表现最佳,而其他数据集 (例如 FinanceBench) 在使用 1,024-token分块 ( 0.579) 时表现最佳,但在使用页面级分块 ( 0.566) 时仍显示出强劲的结果。RAGBattlePacket 在使用页面级分块 (0.790) 时也表现出了出色的性能,在使用 1,024-token分块 (0.804) 时非常接近最佳结果。
- 即使在相似的文档类型中,模式也不一致:即使在同一文档类别中,最佳分块策略也存在显著差异。这一观察结果在财务文档中尤为明显,我们在三个数据集中观察到三种不同的最佳策略:FinanceBench 在处理 1,024-token 块时表现最佳 (0.579) ,Earnings 在处理 512-token 块时表现最佳 (0.681) ,以及 KG-RAG 以页面级别分块时表现最佳 (0.520) 。这些变化表明,除了宽泛的内容类别之外,特定的文档结构、信息密度和查询的性质也会显著影响最佳分块策略。这凸显了测试多种分块方法的重要性,即使在处理相似的文档类型时也是如此。
- 极端数据块大小显示收益递减:非常小 (128 个token) 和非常大 (2048 个token) 的数据块通常低于中等大小的数据块。在大多数数据集中,数据块大小的极端显示性能较低。对于 KG-RAG,128 个token块的性能最差 (0.421) ,明显低于其他策略。同样,对于 RAGBattlePacket (0.749 vs 0.804) 和 FinanceBench (0.506 vs 0.579) ,2048 个token块的性能低于 1024 个token块。这表明,对于大多数文档类型而言,在中间块大小范围内,这是一个“最佳点”。
- 性能曲线并不总是线性的:对于某些数据集,性能并没有随着数据块的大小而呈线性增长或下降。收益呈现非线性模式,其中性能在峰值 512 个token ( 0.681) 时略有下降,为 1024 个token ( 0.663) ,然后进一步下降,为 2048 个token ( 0.651) 。这与 RAGBattlePacket 形成对比,RAGBattlePacket 在下降到 2048 个token (0.749) 之前,从 128 个token (0.749) 增加到 1024 个token (0.804) ,呈现了更线性的改进。这些不同的曲线凸显了数据块大小与检索效率之间的复杂关系。
- 查询特征会影响最佳数据块大小:每个数据集中查询的性质与最有效的数据块策略相关。DigitalCorpora767 和 Earnings 数据集主要包含寻求特定信息的类因式查询,在处理中小型数据块 (256-512 个 token) 时表现良好。这些数据集在较小的数据块大小上表现出了一致的性能,其中 DigitalCorpora767 保持了相对稳定的准确性 (从 256 个 token 保持到 1,024 个 token),而 Earnings 在 512 个 token (0.681) 时实现了峰值性能。相比之下,FinanceBench、KG-RAG 和 RAGBattlePacket 数据集具有更复杂的分析查询,需要更广泛的上下文和更深入的推理,通常受益于更大的块 (1,024 个 token) 或页面级分块。
选择分块策略的指南
根据我们的发现,以下是选择 chunking 策略的实用建议:
1. 首先考虑页面级 chunking
我们的实验清楚地表明,page-level chunking可在不同文档类型中提供非常一致的性能。我们建议:
- 首先,将页面级分块作为默认策略 (使用 NeMo Retriever 提取)
- 虽然并非总是适合每个dataset,但它提供了更高的平均准确性和更稳定的性能
- 页面级分块可提供更容易的引用和引用功能,因为页面是静态边界,而与基于token的分块不同,分块索引取决于所选的块大小,这会降低不同配置中引用的稳定性
2. 考虑您的内容类型以进行优化
如果您想尝试页面级分块之外的其他功能:
- 财务文档:如果您的文档类似于 FinanceBench,请尝试使用 512 或 1,024-token 块 (使用 NeMo Retriever 提取) 。章节级分块对于财务文档也很有效,有时甚至优于页面级分块
- 多样化文档:token大小的较小块 (256-512 个token) 在各种内容集合中表现出色
3. 查询特征会影响性能
- Factoid 查询 (寻找特定事实) :页面级分块或更小的数据块 (256-512 个 token,使用 NeMo Retriever 提取)
- 复杂的分析查询:页面级分块或大块 ( 1024 个 token,使用 NeMo Retriever 提取)
我们建议您根据自己的数据评估这些策略,以确认它们非常适合您的特定用例。不同的查询模式和内容结构可能需要不同的方法,因此使用实际数据测试对于优化性能至关重要。
4. 测试多种方法
虽然页面级分块是我们建议的起点,但我们仍然建议您针对特定用例尝试多种分块策略:
- 首先将页面级分块作为基准。
- 根据您的内容类型,选择 1-2 种其他分块策略。
- 对你的 dataset 进行小规模评估。
- 分析定量指标和定性响应质量。
- 根据结果进行迭代和优化。
总结
我们对不同数据集的全面评估表明,页面级分块是 RAG 系统最有效的分块策略,可提供最高的平均准确性和最一致的性能。与基于 token 的分块和部分级分块方法相比,情况确实如此。
虽然特定内容类型偶尔会受益于替代策略,但页面级分块提供了一个出色的默认选择,可平衡文档类型、查询样式和检索场景之间的性能。这表明,自然分页边界通常会封装非常适合执行检索任务的一致性信息单元。
针对特定 RAG 系统的最佳分块策略可能仍会因您的独特用例、内容类型和查询模式而异。通过从页面级分块开始,并根据本文中提供的指南系统评估替代方案,您可以优化 RAG 系统的性能,并为用户提供更准确、更相关的响应。
请记住,分块只是 RAG 系统中众多超参数之一。为获得真正的最佳性能,请考虑探索其他维度,例如嵌入模型、重排序策略和生成参数。
开始使用 NVIDIA RAG Blueprint
我们建议您亲自试用 NVIDIA RAG Blueprint。此企业级参考实现提供了以下所需的所有组件:
- 在您自己的数据集上试验不同的chunking策略
- 利用 state-of-the-art 嵌入和重排序模型
- 以更短的开发时间构建生产就绪型 RAG 系统