固定长度切分是什么
固定长度切分按字符数划窗:每块取 size 个字符,窗口每次前进 size 减 overlap 步。它零依赖、结果稳定可复现,是所有切分策略里最容易实现也最容易解释的基线。代价是不看内容结构——句子、条款、表格都可能被拦腰截断,语义完整性只能靠重叠部分兜底。工程上它适合两类场景:完全没有结构信息的长文本,以及作为其它策略的对照基线,用来量化“结构感知切分到底带来了多少收益”。
基本信息
| 参数 | chunk_size(块长)、chunk_overlap(重叠) |
|---|---|
| 步长 | step = size − overlap,必须为正 |
| 输出特征 | 块长整齐均匀,块数与语料长度成正比 |
| 实现依赖 | 无,几行代码即可 |
| 主要缺陷 | 不看句子与段落边界 |
典型使用场景
- 无结构长文本:日志、访谈记录、OCR 后无层级的纯文本
- 对照基线:与递归切分、标题切分、语义切分在同一评测集上比较
- 快速验证:先把检索链路跑通,再逐步替换更精细的切分策略
- 长度受限的写入:目标系统对单条文本长度有硬上限时的保底方案
- 压力测试:用均匀块长估算索引体积与检索延迟的上限
滑窗切分
滑窗切分
def fixed_chunks(text, size=500, overlap=50):
step = size - overlap # 步长必须为正
assert step > 0, 'overlap 必须小于 size'
return [text[i:i + size] for i in range(0, len(text), step)]
chunks = fixed_chunks(open('doc.txt', encoding='utf-8').read())
print(len(chunks), chunks[0][:60])参数影响
| 参数 | 调大 | 调小 |
|---|---|---|
| chunk_size | 语义更完整,噪声与成本上升 | 命中更精准,上下文易割裂 |
| chunk_overlap | 边界更稳,重复与体积上升 | 体积更小,切口风险增加 |
| step | — | 必须为正,否则原地打转 |
什么情况下够用
- 文本本身段落短且均匀,比如 FAQ 条目集合
- 只做粗召回,后面还有重排精确筛选
- 语料是机器生成的高度规整文本,结构噪声很低
- 作为 A/B 的对照组,用来证明升级切分策略的收益
做切分策略对比实验时,embedding 模型、评测集与检索参数必须完全一致,否则无法判断指标变化来自切分还是来自其它变量。