分块
引言
分块方法
从一个 DoclingDocument
开始,原则上有两种可能的分块方法
- 将
DoclingDocument
导出为 Markdown(或类似格式),然后作为后处理步骤执行用户定义的分块,或者 - 使用 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
额外依赖项,例如或者如果您偏好 Open AI 分词器 (tiktoken),请安装pip install 'docling-core[chunking]'
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
选择退出)。它还负责附加所有相关的文档元数据,包括标题和图表标题。