922 字
约 3 分钟
10
S20-B02 · 分块与 Embedding
适用读者:RAG 效果差、但不知道问题在"切片"的人。
前置:S20-B01。
实测环境:Python(分块实验,2026-11-05)。
覆盖旧文:1063(90) 1064(77) 1068(106) 571(260) 1062(93) 2054(175) 578(168) = 969 点。
覆盖扩展:E-S20-003(分块策略)、E-S20-004(向量维度)。
上一篇:S20-B01 · RAG 是什么、为什么需要、完整流程
下一篇:S20-B03 · 检索与重排。
1. 一句话结论
分块的目标不是"切得均匀",而是"让每个块能独立回答问题"。固定大小分块会把关键句切成两半——检索到片段也答不全。
2. 实测:固定分块切断关键句
原文(143 字符,退款政策),关键句是:
若商品存在质量问题,用户可在签收后 15 天内申请退款,商家承担运费。
实测结果:
| 策略 | 块数 | 关键句是否完整 |
|---|---|---|
| 固定 40 字符 | 4 | ❌ 被切断 |
| 固定 60 字符 | 3 | ❌ 被切断 |
| 固定 80 字符 | 2 | ✅ |
| 固定 120 字符 | 2 | ✅ |
| 句子分块 | 5 | ✅ |
这就是"跨 chunk 信息不完整"(A-577)的复现:块太小 → 语义被切碎;块太大 → 检索精度下降、噪声变多。
3. 四种分块策略(E-S20-003)
| 策略 | 做法 | 适合 |
|---|---|---|
| 固定大小 | 按字符/token 切(常带重叠) | 简单,但会切断语义 |
| 句子/段落 | 按标点/段落切 | 结构清晰的文档 |
| 递归分块 | 先段落再句子,按 token 上限逐层切 | 通用推荐(A-1068) |
| 语义分块 | 按语义相似度断点 | 质量高、成本高 |
判据:
文档有明确结构(标题/段落)?
├── 有 → 递归/段落分块
└── 没有 → 句子分块 + 重叠(overlap 10%~20%)
重叠(overlap)的作用:让被切断的语义在相邻块里"补回来"——这是最便宜的补救手段。
4. Embedding:维度意味着什么(E-S20-004)
| 事实 | 含义 |
|---|---|
| 维度 = 向量长度(如 1536) | 表达能力的上限 |
| 维度越高 | 语义更细,但存储与计算成本线性上升 |
| 换模型必须重建索引 | 不同模型的向量空间不通用 |
成本直觉:100 万条 × 1536 维 × 4 字节 ≈ 6.1 GB(仅向量,未计索引开销)。
判据:"换了 embedding 模型吗?" 换了 → 全量重建(否则新旧向量不可比)。
5. 五个误区
| 误区 | 真相 |
|---|---|
| "块越小越精确" | 语义被切碎(实测 40/60 都切断) |
| "块越大越好" | 噪声多、检索精度低 |
| "换模型不用重建索引" | 向量空间不通用 |
| "重叠是浪费" | 是最便宜的语义补救 |
| "分块不用管文档结构" | 表格/标题信息常在这一步丢 |
6. 自检
- 固定分块为什么会切断关键句?
- 四种分块策略怎么选?
- overlap 的作用?
- 维度与成本的关系?
- 换 embedding 模型后必须做什么?
7. 下一篇
S20-B03 · 检索与重排:向量、BM25、混合、HyDE
分块讲完,下一篇讲"怎么把对的块找出来"。
本篇属于系列《S20 · AI 应用与工程》。旧文来源:A-1063/1064/1068/571/1062/2054/578;扩展点 E-S20-003/004。分块切断为 Python 实测。
S20-B02 · 分块与 Embedding
https://www.clxhxhhr.top/posts/5465/ 评论
0 条
还没有评论,先写一条吧。