一句话定义:后置分块(Late AI 词典:Chunking">Chunking)是一种为检索增强生成(RAG)准备向量的做法——先把整篇文档喂给长上下文嵌入模型(long-context embedding model)编码一遍,拿到每个 token 的向量,再按切分边界把向量切开,让每一块的向量都带上全文语境。
它解决什么问题
做 RAG 时,我们通常先切块(chunking),再逐块做嵌入(embedding)。问题是:每一块都是"被剪断的纸条"。比如某块写着"该公司第三季度毛利率回升",可"该公司"是谁?前面那块才提到。单独嵌入这一块,向量里没有答案,检索时也很难被问"某某公司三季度毛利率如何"的问题命中。这就是上下文丢失。
后置分块把顺序倒过来:
1. 把整篇(或在模型上下文窗口内的尽量长的部分)送进嵌入模型一次;
2. 模型给出每个 token 的向量——因为是双向注意力,这些向量天然"看过"全文,代词、指代、省略都能对上号;
3. 这时才按你想要的边界切分,对每块内的 token 向量做池化(通常是平均池化,mean pooling),得到一个块向量。
打个比方:传统做法是把文章剪成纸条,蒙上眼睛逐张读、逐张做笔记;后置分块是先把整篇文章读完读懂,再回头按段落做笔记,笔记自然带着"你刚读完上文"的理解。
和相邻概念的区别
| 做法 | 什么时候嵌入 | 块的上下文从哪来 | 主要代价 |
|---|---|---|---|
| 传统分块 | 先切块,再逐块嵌入 | 只有块内文字 | 便宜、简单,但会丢上下文 |
| 上下文检索(给块加 LLM 生成的前缀) | 先切块,补写说明文字后再嵌入 | 靠额外生成的自然语言补足 | 每块都要调用一次大模型,慢且贵 |
| 后置分块 | 先编码,后切块 | 模型注意力里的全文信息 | 需要长上下文嵌入模型,算力更集中 |
| 父文档 / 句子窗口检索 | 仍按小块嵌入 | 检索命中后把更大窗口交给生成模型 | 改善的是"喂给模型什么",不是向量本身 |
关键区别在于:后置分块改的是向量质量,且不需要额外调用大模型、不需要训练;上下文检索是把上下文"写进文本",后置分块是让上下文"留在向量里"。
对从业者的实际意义
- 如果你的 RAG 经常答错"它""该方案""上述情况"这类指代型的查询,后置分块是值得一试的低成本改动,落地时基本就是换个嵌入调用方式。
- 它依赖长上下文嵌入模型,注意文档长度上限:超长文档仍需要先切段,只是段内后置分块。
- 切块边界依然由你定(按段落、按标题、按字数),但边界不再决定语义——只决定向量被切在哪里。
- 对非技术同事的解释可以很简单:过去是"先撕纸再阅读",现在是"先通读再做笔记"。
具体支持哪些模型、上下文窗口多大,请以各家官方页面为准。
