向量召回率上不去?这 6 个细节我调了一周

张老师403 阅读

如果你的 RAG 召回率卡在 0.7 左右上不去,先别急着换 embedding 模型。我调了一周,没换模型没改架构,光靠下面这些细节就把召回率从 0.7 提到了 0.85。按优先级排序。

1. 查询改写(query rewriting)。用户的原话往往不适合直接检索。"这个怎么搞"这种问题,直接检索效果很差。让 LLM 先把问题改写成适合检索的形式(补充上下文、提取关键词)。这一步提升最大,能 +0.05 左右。

2. 多查询(multi-query)。一个问题让 LLM 生成 3-5 个不同角度的查询,分别检索再合并结果。覆盖不同表述方式,召回率提升明显,代价是检索成本 x3。

3. 分块重叠。我之前 0% 重叠,改成 15% 重叠后,边界问题导致的漏召回少了很多。特别是长段落文档,这个几乎是免费的提升。

4. 向量维度与归一化。检查 embedding 是否做了归一化(L2 norm)。余弦相似度和内积在未归一化时结果不同,有些库默认内积,你需要确认查询和文档的相似度计算方式一致。

5. top-k 别设太小。很多人 top-k=3,但召回阶段应该"宽进严出":先取 top-20,再用 rerank 精排到 3-5。召回和精排职责分开,别让召回阶段承担筛选职责。

6. 停用词与空白处理。中英文混排、全角半角不一致、多余空格,都会影响 embedding 质量。查询和文档入库前做统一清洗,包括全角转半角。

排查方法:当某个问题召回失败时,别瞎调。我把失败样本打印出来看:是 query 改写得不好?还是文档分块时信息被截断?还是相似度分数本身不高?定位到具体环节再改。用评估集反复跑,每次改一个变量,记录指标变化。

最后:如果这些细节都调完了还是不行,那才考虑换 embedding 模型或者上 rerank。顺序很重要——先把能用低成本手段解决的问题解决掉

评论0

还没有评论,来抢沙发~