首页/AI/RAG 与向量库速查/切分粒度与召回效果
Embedding 与检索50 条

切分粒度与召回效果

召回质量与切分粒度强相关:块过大时相关句被无关内容稀释、相似度下降;块过小时语义不完整、命中若干碎块也难以拼出答案;实践中用 256~512 token 起步并实测调整。

RAG 与向量库速查AI更新于 2026-10-13

粒度如何影响召回

召回质量与切分粒度强相关:块太大时相关句子被无关内容稀释,相似度下降;块太小时语义不完整,命中若干碎块也拼不出完整答案。实践中常从 256 到 512 token 起步,再用自有评测集实测调整,而不是照搬别人的参数。

基本信息

起步区间256 至 512 token,中文语料可再按标点结构微调
观测指标召回率、首位命中率、答案完整性
常用手段父子切片、句窗扩展、上下文补标题
结论来源自有评测集,而非通用经验值

粒度影响

粒度典型收益典型问题
小块(≤128 token)定位精确、区分度高上下文割裂,答案不完整
中块(256~512)语义与定位较平衡边界含义可能丢失
大块(≥1024)上下文完整相似度被稀释,检索退化为大段文本

用评测对比粒度

用评测对比粒度
for size in (256, 512, 1024):
    chunks = split(docs, chunk_size=size, overlap=64)
    index.rebuild(embed(chunks))
    print(size, eval_retrieval(queries, gold, index))   # 同期对比 recall@k

使用要点

  • 一次只改一个变量:粒度、模型、top-k 同时变,结论无法归因
  • 评测要固定查询集:同一批问题在三档粒度上跑,结果才可比
  • 同时看召回与答案质量:召回变好但答案变差,说明块被切得太碎
  • 记录切片长度分布:平均值正常但长尾过长的语料仍会出问题
  • 切片变更必须重建索引,不能只改检索参数

互补手段

手段解决什么代价
父子切片小块检索、大块给模型需要额外维护父块存储
句窗扩展命中后向前后各取若干句上下文长度增加
标题回填碎片补上所属章节标题依赖解析阶段的标题识别
上下文摘要为每片生成简短语境说明入库阶段增加一次模型调用
配合父块与子块或句窗策略,可以同时拿到小块的高定位与大块的上下文完整性;这也是缓解粒度难题的常见组合。

评测怎么做

  • 评测集要标注正确答案所在位置,才可能区分是没召回还是排得靠后
  • 分档统计:简单问题、跨段问题、含专名的问题各自看一遍
  • 召回率与答案完整性分开记录,二者常常此消彼长
  • 每档粒度都跑同样的查询与同样的 top-k,结果才可横向比较
  • 把结论连同当时的切片参数一起存档,避免下次重复试验

易错点

  • 不同粒度对比时未固定其它变量(模型、top-k),结论无法归因
  • 答案横跨多块时只检索单块,生成端无法拼出完整信息
  • 直接照搬他人参数用于自有语料,中文长句与结构差异被忽略
  • 调完粒度只重跑索引不重跑评测,无法判断效果是变好还是变差

数据来源与参考

  • LangChain 官方文档(文本切分策略)
  • Anthropic, Contextual Retrieval(切分与召回)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌