乐于分享
好东西不私藏

面试题:RAG 中的文档是怎么存的?粒度?切割(Chunking)策略了解?

面试题:RAG 中的文档是怎么存的?粒度?切割(Chunking)策略了解?

RAG中文档的存储和切割,是决定检索质量的核心环节。下面从文档存储方式和文档切割策略两个部分来详细拆解。

一、 文档是怎么存的?

简单来说,RAG系统中文档的存储分为两步:先“切”,再“存”。

  1. 存储前的准备:解析与分块在存储前,系统会先解析源文档(如PDF、Word、HTML等),提取其中的文本内容。然后,会执行关键的文档切割(Chunking) 步骤,将长文档切分成更小的、便于处理的语义片段。

  2. 核心存储:向量数据库切分完成后,每个文本块(Chunk)会被一个嵌入模型(Embedding Model) 转换成固定长度的数值列表,即向量(Vector)。这个向量代表了该文本块的语义。随后,这些向量会被存入专门的向量数据库。

    • 主流向量数据库:包括开源的 Chroma、FAISS,以及商业或云服务提供的 Qdrant、Weaviate、Milvus 和 pgvector等。
    • 混合存储架构:许多生产级系统会采用“向量数据库 + 传统检索引擎”的混合架构。向量数据库处理语义相似度搜索,而 Elasticsearch 或 PostgreSQL 的全文索引则负责处理精确的关键词匹配查询,从而提升召回率。

二、 文档切割(Chunking)策略

分块的质量直接决定了RAG的性能上限。如果切割不当,再强大的模型也无法基于支离破碎的信息给出可靠答案。以下是几种主流的切割策略:

1. 固定大小分块(Fixed-size Chunking)

  • 原理:严格按照预设的字符数或Token数进行切割。通常会设置一个重叠区(Overlap),让相邻块共享一部分内容,以缓解上下文被切断的问题。
  • 优缺点:优点是实现简单、速度快。缺点是极易破坏语义完整性,可能直接从句子或段落中间切断。
  • 适用场景:作为快速构建的基准线(Baseline),或处理日志等结构单一的文本。

2. 递归分块(Recursive Chunking)

  • 原理:这是目前最推荐的策略之一。它使用一个分隔符优先级列表(如:先按段落\n\n,再按换行\n,再按句号。,最后按字符)进行递归切割。优先用最高级的分隔符切分,如果切出的块仍过大,再用下一级分隔符继续切,直到所有块都符合大小要求。
  • 优缺点:优点是尽可能保留了段落、句子等高层级的语义结构,是固定大小和纯语义分割之间的一个优秀折中方案。缺点是实现稍复杂,性能开销略高于固定大小分块。
  • 适用场景:绝大多数通用文档的首选,尤其适合带有段落、章节等结构的文档。例如,在基准测试中,512 token大小、15%重叠的递归分块达到了69%的端到端准确率,优于纯语义分块。

3. 语义分块(Semantic Chunking)

  • 原理:不依赖物理结构,而是通过计算句子间的嵌入向量相似度来决定切割点。当相邻句子的相似度低于某个阈值时,意味着主题发生了变化,就在此处切割。
  • 优缺点:优点是能创建主题高度统一、逻辑连贯的块,检索质量高。缺点是计算成本高,因为需要调用嵌入模型计算相似度,速度较慢。
  • 适用场景:对检索精度要求极高的场景,或处理主题跳跃较多的复杂文档。

4. 基于结构的分块(Structure-aware Chunking)

  • 原理:利用文档自身的结构信息(如Markdown/HTML的标题层级、PDF的章节、表格、代码块等)进行智能分割。例如,将一个一级标题及其下所有内容作为一个大块。
  • 优缺点:优点是完美贴合文档逻辑,信息组织性强。缺点是依赖高质量的文档解析器,通用性较弱。
  • 适用场景:处理格式固定的文档,如法律合同、学术论文、技术手册等。

5. 延迟分块(Late Chunking / Dynamic Chunking)

  • 原理:这是一种较新的策略,不在索引时切分,而是在查询时动态决定如何从文档中提取信息块。
  • 优缺点:优点是灵活性极高,能根据问题动态聚焦。缺点是实现复杂,目前还不普及。
  • 适用场景:前沿研究或对灵活性有极高要求的特定智能体(Agent)应用。

三、 粒度选择与实战建议

1. 如何选择分块大小(Chunk Size)?

分块大小没有标准答案,需要在“信息完整性”和“检索精度”之间权衡。

  • 块太大:会引入噪声,稀释关键信息,导致检索精度下降。
  • 块太小:上下文不足,可能导致语义丢失。

实践建议:

  • 推荐起点:许多企业级应用推荐从 300-500 Tokens 开始尝试。如果嵌入模型的最佳输入是512或1024 Tokens,可以以此为参考。
  • 重叠大小(Overlap):通常设置为块大小的 **10%-20%**。
  • 核心原则:优先按结构切,而不是按长度切。在处理有明确结构的文档时,基于结构的切分效果通常优于固定大小切分。

2. 如何评估分块效果?

评估不能只看直觉,需要建立量化指标:

  • 检索指标:关注命中率(Hit Rate)、MRR(Mean Reciprocal Rank) 等,直接衡量检索到的块是否相关。
  • 端到端指标:最终还是要看问答的准确率。例如,前述基准测试显示,512 token的递归分块能达到69%的端到端准确率。
  • 风险分布:注意分块粒度决定了“缺失型”或“冲突型”错误的风险分布。

面试回答模板

“面试官,RAG中的文档存储,核心是将文档解析、切块后,通过嵌入模型转化为向量,并存储在专门的向量数据库中,以便进行高效的语义检索。

而文档切割是决定RAG性能上限的关键一步。主流的策略有几种:固定大小分块实现简单但易破坏语义;递归分块通过优先级分隔符递归切割,是平衡效果与效率的通用首选;语义分块通过计算向量相似度切分,精度高但成本也高;基于结构的分块则利用文档自身的标题、段落结构,非常适合处理格式固定的专业文档。

在粒度上,一般建议从 300-500 Tokens 开始尝试,并设置 10%-20% 的重叠。没有完美的策略,关键是要根据文档类型和业务场景,通过实验来选择和调优。核心原则是:分块要尽量对齐自然语义边界,避免硬切。”

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料