检索分块:重叠能保留边界,也会制造重复
长文档切块时,关键句可能刚好跨过边界。保留部分重叠能缓解上下文断裂,但会增加索引体积与重复检索。
问题从哪里出现
长文档切块时,关键句可能刚好跨过边界。保留部分重叠能缓解上下文断裂,但会增加索引体积与重复检索。
理解核心机制
固定窗口的步长等于块大小减重叠长度。下面按字符演示区间和覆盖关系;真实系统应根据语言、标题结构与 tokenizer 决定切分单位。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
def chunks(text, size, overlap):
if not 0 <= overlap < size:
raise ValueError("require 0 <= overlap < size")
start = 0
while start < len(text):
end = min(start + size, len(text))
yield start, end, text[start:end]
if end == len(text):
break
start = end - overlap
result = list(chunks("abcdefghijkl", 5, 2))
assert result[0][2][-2:] == result[1][2][:2]
print(result)适用边界与常见误区
字符窗口不保证语义完整,重叠也无法补救错误解析或丢失标题。每块应保留来源、偏移量和版本,以便引用定位与去重。
继续练习
在一段带标题和表格的文本上比较固定窗口与段落切分,检查答案证据是否完整落在可检索块内。