做检索增强生成时,注意力很容易放在提示词和模型参数上,但实际体验的瓶颈往往在检索环节。 如果检索没拿到正确的段落,后面的模型再强也只能凭空编。
分块是个绕不开的问题
文档要切块才能做向量检索。块太小,语义不完整,检索到的片段答不上问题; 块太大,噪声变多,关键信息被稀释。重叠比例也是为了缓解切分把句子切断的问题。
实验
取一份结构比较规整的说明文档,构造一批「答案只出现在某一段」的问题。 分别测试块大小为 256、512、1024 token,重叠比例取 0、10%、20%, 记录召回率和最终回答的正确率。
结果
- 块太小(256)时,召回率尚可,但回答经常缺少上下文,正确率偏低。
- 块太大(1024)时,检索到的段落里混入大量无关内容,模型容易被干扰。
- 512 左右配合 10% 到 20% 的重叠,在两个指标上都比较均衡。
- 完全没有重叠时,跨块的答案出现明显漏检。
一点体会
这些数字只对这份文档成立,换一种文体可能要重新调。但结论是通用的: 分块策略值得单独评估,不能随便设一个默认值就上线。 另外,给每个块补一句标题或摘要作为上下文,能明显改善检索质量。