一句话定义:分块重叠(Chunk Overlap)是指把长文档切成若干小块(Chunk)喂给检索系统或大模型时,让相邻两块在交界处故意重复保留一小段相同内容。
原理:像裁纸时两次下刀留一截重叠
假设你把一本 100 页的说明书撕成单页发给同事,最怕的不是页数多,而是某句话正好被撕在两页之间——上半句在这页,下半句在那页,谁看都读不懂。文档切分也是一样:程序按固定字数硬切,很容易把一句话、一个表格、一段因果论证拦腰截断。
分块重叠的做法是:切完第 1 块(比如第 1~500 字)后,第 2 块不从第 501 字开始,而是往回退 50 字,从第 451 字开始。这样无论边界落在哪里,被切断的句子都会完整地出现在至少一个块里。就像接力赛交接棒时两人同时握着棒跑一段,保证不掉棒。
重叠太小、太大分别伤到什么
- 太小(或为 0):边界处的信息断裂。典型症状是检索召回的块里只有半句话,或者出现"上述期限""该条款"这类指代,而它指向的内容在上一块里。用户提问时,模型拿到残缺上下文,答案是"根据资料无法确定"。
- 太大:一是冗余,同一段文字被存成多个向量,存储和索引成本上升;二是检索时多个高度相似的块同时命中,挤占本就有限的AI 词典:上下文窗口">上下文窗口,还把真正有用的其他段落挤出去;三是块内主题被稀释,一个块里混着上一节的尾巴和下一节的开头,向量表示变得模糊。
行业里常见的经验取值是块大小的 10%~20%,但这只是起点,必须用你自己的文档和问题集去测。合同、法律条文、代码这类强边界文本,重叠可以小一些,甚至改为按段落、按标题切;口语转录、连续叙述类文本,重叠可以稍大。具体参数以你所用框架的官方页面为准。
和相邻概念的区别
| 概念 | 管的是什么 | 典型问题 |
|---|---|---|
| 分块大小(Chunk Size) | 每块多长 | 太大抓不准重点,太小丢上下文 |
| 分块策略(Chunking Strategy) | 在哪里下刀 | 按字数硬切,还是按段落、标题、语义切 |
| 分块重叠(Chunk Overlap) | 相邻块重复多少 | 边界信息是否断裂 |
| 上下文扩展(Context Expansion) | 命中后额外带回前后块 | 补上下文,但不改变索引本身 |
注意最后一项常被混淆:重叠是"切的时候就多留一份",上下文扩展是"检索到之后再回去取邻居"。前者增加索引体积,后者增加查询时的读取量,两者可以叠加使用。
对实际工作的意义
做 RAG(Retrieval-Augmented Generation,检索增强生成)的从业者,遇到"答案明明在文档里却答不出来",先别急着换模型,去看看切分边界。把重叠从 0 调到合理值,往往比换更大的模型更立竿见影。对普通职场人来说,这也解释了一个常见困惑:同一个知识库,问法稍微一变答案质量就忽高忽低——问题可能不在模型笨,而在于那半句话恰好被切断了。
