No history yet

生产级分块与混合检索

超越固定大小:智能分块策略

我们知道,将文档分割成小块(chunking)是 RAG 流程的起点。简单的固定大小分块,比如每 512 个字符切一刀,虽然实现简单,但在处理复杂文档时往往会“切坏”上下文。一句话可能被从中间截断,一个完整的逻辑段落可能被分散到两个甚至更多个数据块中,这会严重影响检索质量。

为了解决这个问题,我们需要更智能的分块策略,让切分点更符合内容的自然边界。

目标是让每个数据块都成为一个独立、有意义的上下文单元。

两种主流的高级分块方法是语义分块(Semantic Chunking)和递归字符分块(Recursive Character Text Splitting)。

语义分块

这种方法不再依赖固定的字符数,而是利用语言模型来识别文本中的语义边界。它会分析句子之间的关系,寻找主题转变或论点结束的地方作为切分点。例如,模型可能会在段落结尾、讨论新话题的句子之前进行切分。

  • 优点:能最大限度地保留每个数据块的上下文完整性和独立性,非常适合用于叙述性强、逻辑连贯的文档,如法律合同或研究论文。
  • 缺点:计算成本较高,因为它需要在分块前对文档进行额外的语义分析。

递归字符分块

这是一种更偏向规则的智能分块方法。它尝试按预设的层次结构顺序(例如:段落 \n\n、句子 .、空格 )来分割文本。它会首先尝试按段落分割,如果分割后的数据块仍然太大,它就会在那个数据块内部,退一步按句子分割,以此类推,直到数据块大小符合要求。

  • 优点:实现简单,计算开销远小于语义分块,同时又能很好地尊重文档的自然结构(如段落和句子),是一种在效果和效率之间取得良好平衡的实用方法。
  • 缺点:对于没有明确分隔符的非结构化文本,效果可能不如语义分块。