固定长度切分是什么
固定长度切分是最直接的方案:按固定的字符数或 token 数滑窗切开,可设少量重叠避免答案被切断。它实现简单、长度可控、结果可复现,对格式规整的文本够用。缺点是它不看语义:一句话或一个表格可能被拦腰截断,切出来的片段读起来缺头少尾。适合日志、CSV 记录这类本身就按行组织的文本。
基本信息
| 原理 | 按固定长度滑窗切开文本,可设重叠 |
|---|---|
| 长度口径 | 字符数或 token 数,取决于实现 |
| 重叠 | 相邻片段共享的尾部与头部内容 |
| 优点 | 实现简单、结果稳定、长度完全可控 |
| 缺点 | 不考虑语义边界,句子与表格可能被切断 |
| 适用文本 | 日志、CSV、格式规整且按行组织的文本 |
参数怎么设
| 参数 | 作用 | 取值思路 |
|---|---|---|
| 窗口长度 | 单个片段的最大长度 | 按嵌入模型输入上限与检索粒度取几百到上千字符 |
| 重叠长度 | 相邻片段共享的内容量 | 取窗口长度的百分之十到二十 |
| 长度口径 | 按字符还是按 token 计算 | 按模型计量口径更准,成本也更好估算 |
| 对齐方式 | 是否在空白或换行处尽量对齐 | 简单对齐能减少把词切两半 |
| 批量处理 | 大文件的切分与入库方式 | 流式处理,避免整文件读入内存 |
典型使用场景
- 日志分析:按行或固定窗口切分后做检索与统计
- 数据导入:把规整的分隔符文本切成记录片段
- 快速验证:先用最简单的切分方式跑通整条链路
- 对照基线:作为评估语义切分方案收益的对照组
- 超长单句文本:本身没有换行,只能按长度切
滑窗切分示例
滑窗切分示例
def fixed_split(text, size=800, overlap=120):
step = size - overlap # 步长小于窗口才能产生重叠
for i in range(0, len(text), step):
piece = text[i:i + size]
if piece.strip():
yield piece
if i + size >= len(text):
break
# 输出片段数约为 文本长度 / 步长,重叠越大片段越多
# 中文与英文混排时字符数口径会低估 token 数,长期方案应改按 token 切与语义切分的对比
| 维度 | 固定长度 | 语义切分 |
|---|---|---|
| 实现复杂度 | 低 | 中等,需要分隔符层级或结构信息 |
| 结果可复现 | 完全可复现 | 取决于实现与文档结构 |
| 片段可读性 | 可能缺头少尾 | 通常读得通 |
| 检索效果 | 一般 | 通常更好,尤其长文档 |
| 适用文本 | 规整的按行文本 | 结构清晰的文档与手册 |
把固定长度切分当作基线:先跑通链路与评测流程,再换成语义切分对比效果,改动前后有数据可比。
重叠设得过大时片段数量成倍增长:入库与检索成本同步上升,而召回未必改善,需要用评测确认收益。