分块 (Chunk)

将大型数据或文本分割成便于处理的小单元。广泛应用于 AI 的 token 限制应对、流式传输、文件传输等场景。

分块 (chunk) 是将大型数据按照一定大小或有意义的单位进行分割后得到的片段。这个源自英语"块"的词已成为通用技术术语。在文本处理、网络通信和 AI 领域中,chunk 各有不同的含义,但"将大的东西分成易于处理的单位"这一本质是共通的。

在 AI/LLM (大语言模型) 领域,分块 (chunking) 是指将文本分割成适合模型上下文窗口大小的处理。GPT-4 的上下文窗口为 128,000 个 token,Claude 为 200,000 个 token,但处理超长文档时仍可能超出限制。通常的做法是将文档分割成适当的块,分别处理后再整合结果。

分块的质量取决于分割粒度和边界的选择。固定长度分块 (如每 1,000 字分割一次) 实现简单,但可能在句子或段落中间截断,导致上下文丢失。语义分块则在段落、章节、标题等结构性边界处分割,使每个块成为语义完整的单元。设置重叠区域 (让前后块共享部分内容) 可以减轻边界处的信息损失。

HTTP 的分块传输编码 (Transfer-Encoding: chunked) 是在响应大小事先未知时,将数据分成小块逐步发送的机制。ChatGPT 等 AI 应用的流式响应就采用了这种方式 - 生成的文本以 chunk 为单位实时发送,用户无需等待完整响应即可开始阅读。

在自然语言处理 (NLP) 中,分块是指从已标注词性的词序列中提取名词短语、动词短语等语块的处理。例如将"北京的著名景点"识别为一个完整的名词短语,而非"北京"、"的"、"著名"、"景点"四个独立的词。中文的分块处理与分词密切相关,需要先完成准确的分词才能进行有效的短语识别。

从字符计数的角度看,块大小的设计至关重要。RAG (检索增强生成) 系统将文档分块后存入向量数据库,块太小会丢失上下文,块太大则降低检索精度。一般推荐 200 至 1,000 字 (或 100 至 500 个 token),但最佳大小取决于文档的性质和用途。中文由于每个字承载的信息量较大,同等信息量下的最佳块大小 (按字符数计) 通常小于英文。

分享这篇文章