Chunking 有哪些常用策略
一句话速记
切块决定「被检索的语义单元」;策略要在主题完整性**、单块 token 上限、与 embedding 最大长度 之间折中;重叠(overlap) 缓解边界切断,结构感知 对 Markdown/代码/表格 更稳。**
按粒度
| 策略 | 做法 | 适合 | 风险 |
|---|---|---|---|
| 固定 token/字符 窗 | 每 N token 或 N 字一截,滑窗+overlap | 实现简单、吞吐大 | 句中切断、语义碎 |
| 按句/段 | 以标点、段落为界 | 叙述文、新闻 | 长段仍超模型口 |
| 按结构 | Markdown 标题、章节、HTML 块、AST | 技术文档、手册 | 解析要对 |
| 语义切块 | 向量化句子,相似度低于阈值时切开 | 少平白切断 | 算力、慢、阈值难 |
| 特殊内容 | 表格整行/整表、代码以函数/文件 边界 | 表格问答、代码 | 块大小离群、需后处理 |
Overlap:相邻块共享末/首 50~200 token,降低「答案跨两边界」的漏检;代价是存储膨胀、去重要考虑。
与 embedding 的约束
- 块不宜长过所用 embedding 的最大序列(按 tokenizer 计)。
- 过短块:语境不足,噪声大;过长:向量平均、指代糊。
多语言
- 中日韩:按字、子词 的 tokenizer 与英文「按词」的等长不直接可比;以 token 计 更稳。
- 混合语料时块大小与 overlap 要单测。
延伸追问
- Q:块越大越好吗?
答:否。检索是找小命中;块大则一命中带大量无关、挤占上下文。 - Q:需要人工规则吗?
答:高价值产品常 规则+统计 混合,尤其法条/条款 边界。
我的记法
TODO
状态
- 已背速记
- 能讲通俗版
- 能答追问
参考资料
- LangChain / LlamaIndex 等中 TextSplitter 的说明作实现参考即可。