在大语言模型(LLM)、检索增强生成(RAG)等知识检索与问答场景中,chunk指的是数据块,具体是将海量长文本、文档、知识库等原始数据,按照一定规则拆分后得到的小尺寸、结构化的信息片段。
为什么需要把数据拆成 chunk?
- 突破模型上下文窗口限制
大语言模型的可处理文本长度(上下文窗口)是有限的(比如 GPT-3.5 为 4k/16k tokens,GPT-4 为 8k/32k tokens)。如果直接把几万甚至几十万字的文档喂给模型,要么无法处理,要么会丢失大量关键信息。拆分后的小 chunk 可以适配模型的输入长度。 - 提升检索效率与精准度
用户的query(查询语句)通常是短文本(比如“注意力机制的核心原理”)。如果直接检索完整的长文档,不仅计算量极大,还容易匹配到无关内容;而拆分成 chunk 后,每个 chunk 的主题更聚焦,检索时只需比对小片段,能快速定位到和 query 语义相似的内容。 - 降低信息冗余
长文档中往往包含大量和 query 无关的内容,拆分后的 chunk 可以过滤掉冗余信息,只把相关的片段送入模型生成回答,提升回答的准确性。
常见的 chunk 拆分规则
- 固定长度拆分
按字符数或tokens 数拆分(比如每个 chunk 包含 200–500 tokens),操作简单,但缺点是可能截断完整的句子、段落或语义单元(比如把一个完整的公式推导拆成两半)。 - 语义/结构拆分
按文本的自然结构(段落、章节、标题)或语义边界拆分,比如以句号、分号、章节标题为分隔符,或者用模型自动识别语义连贯的片段。这种方式能保证 chunk 内部的内容关联性,是 RAG 场景的主流拆分方法。 - 重叠窗口拆分
在拆分时让相邻 chunk 保留部分重叠内容(比如前一个 chunk 的末尾 50 tokens 和后一个 chunk 的开头 50 tokens 重叠),避免因拆分截断关键信息。
举个例子
一篇 1 万字的《机器学习实战》章节,直接检索“随机森林的调参方法”效率极低。
将其拆分为多个 chunk:
- chunk1:随机森林的基本原理(300 字)
- chunk2:随机森林的核心参数(n_estimators、max_depth 等)(400 字)
- chunk3:调参的实战步骤与案例(500 字)
检索时就能快速匹配到chunk2 和 chunk3,再将这两个 chunk 的内容喂给模型,生成精准的回答。
简单来说,chunk 是海量原始数据和精准检索之间的“桥梁”,是最小的信息检索单元。