RAG系列:#5 RAG中的11种分块策略

原文:https://mp.weixin.qq.com/s/Yax05qsVj1tXi77za8Wm2g

欢迎关注公zh: AI-Frontiers

RAG往期文章推荐

RAG效果差?7个指标让你的准确率大幅提升

RAG评测完整指南:指标、测试和最佳实践

收藏!RAG核心工具大全: 7大解析工具+向量模型+数据库+检索排序

GraphRAG开源生态全景:6大主流开源项目,微软/蚂蚁/港大项目同台PK

**检索增强生成(RAG)**将 LLM 与信息检索系统相结合,以生成更准确、更符合上下文的响应。通过从外部文档中获取相关信息,解决了LLM固有的一些问题:

  • 幻觉问题 (Hallucination):当被问到知识盲区或不确定的内容时,大模型容易一本正经地编造看似合理但完全虚构的细节。比如,你问「蓝鳍X9的新型芯片性能如何?」,如果模型在训练时没学过,它可能会凭空捏造出这款芯片的参数、性能和评价。

  • 知识固化与过时:无法知晓训练截止日期之后发生的事,比如,你问「2026年世界杯决赛结果如何?」,模型只能回答「我的知识截止到某年某月,无法提供最新信息」或者胡编一个结果。

  • 缺乏领域深度与可溯源性 : 在回答高度专业或企业内部独有的问题时,往往不够深入,最关键的是,无法知道答案来自哪里。

RAG 的一个关键组成部分是「分块」: 将大型文档分割成更小、更易于管理的部分。然后对这些块进行索引,并在检索阶段使用这些块,为语言模型提供上下文相关的信息。

为什么分块很重要

在 RAG 中,分块有多种用途:

① 决定检索的命中精度与召回率

  • 块太大:如一整章,细节问题易被噪音干扰,模型难以找关键信息,回答不精确或产生幻觉

  • 块太小:如单个句子,丢失上下文,导致召回失败

  • 理想情况:块应包含独立、完整的语义单元(如一个概念的解释、一个问答对),兼顾语义完整与检索精度

② 突破大模型的上下文窗口与注意力限制

  • 上下文窗口限制:模型处理能力有限,超长文档无法一次输入。即使窗口够大,全文检索也面临速度慢、成本高、易被无关信息干扰等问题。分块是海量知识"索引化"的关键

  • 注意力稀释效应:输入整本书时,模型注意力被分散。给出少量精准、高相关度的"知识卡片",能让注意力集中,提升回答质量

③ 直接影响生成答案的连贯性与完整性

  • 合理分块能提供信息丰富、边界清晰的完整文本,便于模型提炼答案。分块破碎则输入碎片化,生成内容易前言不搭后语

分块策略概述

文本分块策略因其划分文本的方式和保留的上下文层次而异。主要包括:

  • 固定长度分块

  • 基于句子的分块

  • 基于段落的分块

  • 滑动窗口分块

  • 语义分块

  • 递归分块

  • 上下文增强型分块

  • 特定模态分块

  • 代理分块

  • 子文档分块

  • 混合分块

每种方法都有其独特的优势、适用于特定的应用场景。本文将详细介绍每种分块方法,比较不同的分块策略,探讨 如何选择合适的分块策略 ,并了解在 RAG 中实施分块的****最佳实践。

固定长度分块

原理:将文本分割成预定义长度的块,通常基于标记或字符

适用场景:简单的文档、常见问题解答,或者处理速度是首要考虑因素的情况

优势:

  • 简单易行:无需复杂算法即可轻松实现

  • 统一性:生成一致的块大小,简化索引

挑战:

  • 上下文丢失:可能导致句子或想法断裂,从而造成信息不完整

  • 相关性问题:关键信息可能跨越多个数据块,从而降低检索效率

实施技巧:

  • 选择合适的块大小,兼顾上下文和效率

  • 考虑结合重叠窗口来减少上下文丢失

基于句子的分块

原理:在句子边界处分割文本,确保每个部分都是一个完整的思想

适用场景:简短、直接的回复,例如客户查询或对话式人工智能

优势:

  • 上下文保留:保持单个句子的完整性

  • 易于实施:利用自然语言处理(NLP)工具进行句子检测

挑战:

  • 上下文有限:单个句子可能缺乏足够的上下文信息来回答复杂的问题

  • 长度可变:句子长度可能不同,导致句子块大小不一致

实施技巧:

  • 使用自然语言处理库进行精确的句子边界检测

  • 如果多个句子较短,请将它们合并成一个更完整的句子

基于段落的分块

原理:将文档拆分成段落,每个段落通常包含一个完整的想法或主题

适用场景:结构化文档,如文章、报告或论文

优势:

  • 更丰富的语境:提供比基于句子的片段更多信息

  • 逻辑划分:与文本的自然结构一致

挑战:

  • 大小不一致:段落长度可能差异很大

  • 标记限制:较长的段落可能会超出模型的上下文长度限制

实施技巧:

  • 监控数据块大小,确保其保持在可接受的 token 限制范围内

  • 如有必要,可将较长的段落进一步拆分,同时尽量保持上下文连贯性

滑动窗口分块

原理:通过在文本上滑动窗口来创建重叠的文本块,确保相邻的文本块共享内容

适用场景:需要保持各部分之间上下文联系的文档,例如法律或医学文本

优势:

  • 上下文连续性:重叠部分有助于保持信息的流畅性

  • 改进检索:提高检索结果中包含相关信息的概率

挑战:

  • 冗余:内容重叠会导致信息重复

  • 计算成本:数据块越多,处理和存储需求就越高

实施技巧:

  • 根据文档性质优化窗口大小和重叠部分

  • 在检索过程中使用去重技术来处理冗余数据

语义分块

原理:利用 embedding 或机器学习模型,根据语义含义分割文本,确保每个部分在主题或思想上是连贯的

适用场景:需要深入理解的复杂查询,例如技术手册或学术论文

优势:

  • 上下文相关性:数据块按有意义的方式分组,从而提高检索准确率

  • 灵活性:能够适应文本固有的结构和内容

挑战:

  • 复杂性:需要高级自然语言处理模型和计算资源

  • 处理时间:语义分析可能很耗时

实施技巧:

  • 利用预训练模型进行语义分割

  • 计算成本与语义块粒度之间的平衡

递归分块

原理:使用字符、标题、副标题、段落和句子等层次分隔符,将文本逐步分解成更小的部分

适用场景:大型、层级结构化的文档,如书籍或篇幅较长的报告。

优势:

  • 层级上下文:维护文档的结构关系

  • 可扩展性:对超大型文本有效

挑战:

  • 实现复杂:需要处理多层文本结构

  • 潜在的上下文丢失:即使是最小的数据块,如果管理不当,也可能丢失上下文

实施技巧:

  • 利用文档结构(如 HTML 标签)来识别层次结构

  • 存储有关每个数据块在层次结构中的位置的元数据,以便在检索时提供上下文信息

上下文增强型分块

原理:通过添加来自周围块的摘要或元数据来丰富每个块,从而在序列之间保持上下文

适合场景:篇幅较长、需要保证多个部分之间连贯性的文档

优势:

  • 增强上下文:提供额外信息,而不会显著增加数据块大小

  • 提高一致性:帮助模型生成更准确、更符合语境的响应

挑战:

  • 复杂性:需要额外的处理才能生成摘要或元数据

  • 存储开销:增强型数据块会占用更多存储空间

实施技巧:

  • 生成简洁的摘要,以最大限度地减少额外的令牌使用

  • 考虑将关键术语或概念作为元数据包含在内,而不是提供完整的摘要

特定模态分块

原理:分别处理不同的内容类型(文本、表格、图像),并根据其性质对每种内容进行分块处理

适合场景:混合媒体文档,例如科学论文或用户手册

优势:

  • 定制化方法:针对每种内容类型优化分块

  • 提高准确率:专门的处理可以提高检索效率

挑战:

  • 实现复杂度:每种模态都需要自定义逻辑

  • 整合难度:在检索过程中整合来自不同模态的信息可能具有挑战性

实施技巧:

  • 使用OCR识别包含文本的图像

  • 将表格转换为结构化数据格式

  • 保持不同模式下索引系统的一致性

代理分块

原理:采用大型语言模型 (LLM) 分析文本,并根据内容结构和语义建议块边界

适用场景:需要保留含义和上下文的复杂文档

优势:

  • 智能分割:利用 LLM 的理解能力创建有意义的块

  • 适应性强:能够有效处理多样化和非结构化的内容

挑战:

  • 计算密集型:处理整个文档需要大量资源

  • 成本:由于计算成本,可能不适用于大规模应用

实施技巧:

  • 对关键文档有选择地使用主体分块

  • 优化 LLM 提示,使其能够高效地识别逻辑块边界

子文档分块

原理:对整个文档或大段内容进行总结,并将这些总结作为元数据附加到各个部分

适用场景:提高大型文档集合的检索效率

优势:

  • 分层检索:允许检索系统在多个上下文级别上运行

  • 上下文深度:为模型提供额外的信息层

挑战:

  • 额外处理:需要生成和管理摘要

  • 元数据管理:增加了索引系统的复杂性

实施技巧:

  • 利用自然语言处理技术实现摘要过程自动化

  • 高效存储汇总信息,以最大限度地减少对存储空间的影响

混合分块

原理:结合多种分块策略,动态适应不同的查询类型或文档结构

适用场景:能够处理各种查询和文档类型的多功能系统

优势:

  • 灵活性:可根据内容和需求切换策略

  • 性能优化:在各种使用场景下平衡速度和准确性

挑战:

  • 复杂逻辑:需要复杂的决策算法

  • 维护:组件越多,出错的可能性就越大

实施技巧:

  • 制定选择分块策略的标准(例如,文档类型、查询复杂度)

  • 对混合方法进行广泛的测试和验证,以确保其可靠性

分块策略的比较分析

分块 策略 上下文 保留度 实现 复杂度 计算 成本 最适合场景
固定长度分块 低 低 低 简单文档,对速度要求高的应用场景
基于句子的分块 中 低 低 短查询,对话式人工智能
基于段落的分块 中高 低 中 结构化文档
滑动窗口分块 高 中 高 对上下文要求高的文本
语义分块 高 高 高 技术或学术文档
递归分块 高 中 中 大型、分层结构的文档
上下文增强分块 非常高 高 高 需要连贯性的长文档
特定模态分块 可变 高 可变 混合媒体文档
代理分块 非常高 非常高 非常高 需要深度理解的复杂文档
子文档分块 高 高 高 大型文档集合
混合分块 可变 非常高 可变 多功能系统

选择合适的分块策略

选择合适的分块策略取决于以下几个因素:

  • 文档类型:结构化文档与非结构化文档、长度和模式

  • 查询复杂度:简单常见问题 vs. 复杂技术咨询

  • 资源可用性:计算能力和时间限制

  • 预期结果:速度 vs. 准确性 vs. 上下文保留

指南:

  • 为了提高速度:使用固定长度或基于句子的分段

  • 对于上下文:选择滑动窗口、语义或上下文增强型分块

  • 对于混合内容:采用特定模态或混合分块

  • 对于大型系统:使用递归或子文档分块在效率和上下文之间取得平衡

RAG 中分块实施的最佳实践

  • 监控代码块大小:确保代码块保持在语言模型的标记限制内

  • 保持原意:避免随意拆分句子或逻辑单元

  • 优化检索:使用适合分块策略的高效索引和检索机制

  • 处理冗余:实施去重以管理重叠内容

  • 广泛测试:使用特定数据和查询评估不同的策略,以找到最佳方法

  • 利用元数据:使用元数据增强数据块,以提高检索相关性

分块是检索增强生成(RAG)过程中的一个关键步骤,它直接影响系统的效率和准确性。理解各种分块策略及其适用场景,有助于开发者根据自身需求定制RAG系统。通过权衡上下文保留、计算成本和实现复杂度之间的利弊,可以选择最合适的分块方法来有效地增强语言模型

相关推荐
AI-Frontiers13 小时前
一文看懂 RAGFlow 四层存储:元数据、对象、检索、缓存如何协作
rag
数据库小学妹6 天前
AI数据库是什么?一次 RAG 召回失败的排查与选型(附 SQL)
向量检索·rag·ai数据库·融合数据库·ai原生数据库
啦啦啦!6 天前
RAG初阶学习
学习·ai·知识库·rag
寻道码路6 天前
大模型工程化实战(十二):RAG 数据工程底座——采集到入库流水线(离线+在线双链路)
大模型·知识库·rag·ai工程化·llmops`·数据工程底座·文档采集
论文复现现场7 天前
企业知识库 RAG 用什么模型便宜?GLM-5.3-Flash 长文本 API 实测
python·rag·企业知识库·大模型api·glm-5.3-flash
云烟成雨TD7 天前
LlamaIndex 系列【32】检索增强策略:自问自答(Self Ask)
ai·agent·rag·llamaindex
云烟成雨TD7 天前
LlamaIndex 系列【35】节点后处理器(Node Postprocessor)
ai·agent·rag·llamaindex
jianpeng的工程笔记7 天前
WeKnora 搭建研发 EDA 知识库:Docker 部署、RAG 与 Wiki 实践
docker·知识库·eda·rag
ysu_03147 天前
【2026】AI Agent 工程化落地六大挑战:从路径坍缩到成本失控
人工智能·ai·rag·ai agent·大模型应用·langgraph·agent工程化