跳到内容

分块

引言

分块方法

从一个 DoclingDocument 开始,原则上有两种可能的分块方法

  1. DoclingDocument 导出为 Markdown(或类似格式),然后作为后处理步骤执行用户定义的分块,或者
  2. 使用 Docling 原生分块器,即直接在 DoclingDocument 上操作

本页面介绍的是后一种方法,即使用 Docling 原生分块器。关于使用方法 (1) 的示例,请查看例如 此示例,该示例查看了 Markdown 导出模式。

一个 chunker 是 Docling 的一个抽象,它接收一个 DoclingDocument,并返回一个块流,每个块都将文档的某个部分捕获为字符串,并附带相应的元数据。

为了为下游应用程序提供灵活性和开箱即用的实用性,Docling 定义了一个分块器类层次结构,提供了一个基础类型 BaseChunker 以及特定的子类。

Docling 与 LlamaIndex 等生成式 AI 框架的集成是通过使用 BaseChunker 接口完成的,因此用户可以轻松插入任何内置、自定义或第三方的 BaseChunker 实现。

基础分块器

BaseChunker 基础类 API 定义了任何分块器应提供以下内容

  • def chunk(self, dl_doc: DoclingDocument, **kwargs) -> Iterator[BaseChunk]:返回所提供文档的分块。
  • def contextualize(self, chunk: BaseChunk) -> str:返回可能包含元数据增强的块序列化,通常用于输入嵌入模型(或生成模型)。

混合分块器

访问 HybridChunker

  • 如果您正在使用 docling 包,可以按如下方式导入
    from docling.chunking import HybridChunker
    
  • 如果您只使用 docling-core 包,如果要使用 HuggingFace 分词器,必须确保安装 chunking 额外依赖项,例如
    pip install 'docling-core[chunking]'
    
    或者如果您偏好 Open AI 分词器 (tiktoken),请安装 chunking-openai 额外依赖项,例如
    pip install 'docling-core[chunking-openai]'
    
    然后可以按如下方式导入
    from docling_core.transforms.chunker.hybrid_chunker import HybridChunker
    

HybridChunker 实现采用混合方法,在基于文档的 层级 分块之上应用对分词敏感的优化。

更具体地说

  • 它从层级分块器的结果开始,并基于用户提供的分词器(通常应与嵌入模型分词器对齐),它
  • 执行一次拆分,仅在需要时拆分块(即相对于 token 过大时),并且
  • 执行另一次合并,仅在可能时合并块(即具有相同标题和图表标题的过小连续块)— 用户可以通过参数 merge_peers(默认为 True)选择退出此步骤

👉 用法示例

层级分块器

HierarchicalChunker 实现使用来自 DoclingDocument 的文档结构信息,为每个检测到的独立文档元素创建一个块,默认情况下仅合并列表项(可以通过参数 merge_list_items 选择退出)。它还负责附加所有相关的文档元数据,包括标题和图表标题。