← 返回笔记索引

项目实践

如何科学评估 RAG 检索效果:zglab-rag 的数据集、指标与模型选择

记录 zglab-rag 如何用固定检索数据集、分类指标与 hard negative 比较 Embedding、检索与排序策略。

如何科学评估 RAG 检索效果:zglab-rag 的数据集、指标与模型选择

目录

为什么不能凭感觉调 RAG

检索系统很容易出现“某个问题看起来更好了”的错觉:一次模型替换可能改善熟悉问题,却让项目名、 故障文档或低频技术词退化。zglab-rag 因此把 Chunk 策略、Embedding、BM25 参数、Hybrid 融合、 Reranker 和 Top-K 都视为可比较的实验变量,而不是凭体验直接写入默认配置。

flowchart LR
    D[固定评测数据集] --> B[构建候选索引]
    B --> Q[运行同一组 Query]
    Q --> M[Recall / HitRate / MRR / latency]
    M --> C[按 category 与 hard negative 复核]
    C --> P[是否提升默认策略]

评测对象与数据集

检索数据集包含 identity、knowledge、project、problem、mixed_technical 五类问题,以及单独用于 诊断的 hard negative。实际 Embedding benchmark 有 47 条计分 Query、3 条 hard negative,语料为 707 个 Chunk。relevant target 定位到 section;一条超长 section 若被二级切分,命中其中任一切片即 视为命中该 target。

hard negative 不进入 Recall 与 MRR 的分母,因为当前阶段尚未用少量负例设置拒答阈值。它们保留 Top1、Top2 和 margin,用于观察“没有证据时是否仍出现高分召回”。

指标的含义

指标 回答的问题 注意点
Recall@K K 个结果是否覆盖相关 section target 多 target 分别计入,适合观察候选是否找全
HitRate@K 一条 Query 是否至少命中一个相关结果 反映用户至少看到一个正确入口的概率
MRR 第一个相关结果排得多靠前 对 Top1/Top3 排序变化敏感
latency 检索或排序增加多少时间 不能只报告质量而忽略在线预算

只看 Recall@20 也不够:用户通常不会阅读 20 个结果。只看 MRR 同样不够:相关内容不在候选集合时, 再强的 Reranker 也无法补回。

BGE 与 E5 的实际比较

在不改变 Chunking、数据集或 query 标注的前提下,比较了 BAAI/bge-small-zh-v1.5intfloat/multilingual-e5-small,并比较 contextualcontent_only composition。最终正式 baseline 选择 BGE contextual,但这个决定来自具体权衡,不是宣称它在所有 K 上绝对更好。

配置 Recall@1 Recall@5 Recall@10 Recall@20 MRR
BGE contextual 0.5213 0.7872 0.8511 0.9255 0.6542
E5 content-only 0.4255 0.7766 0.9043 0.9681 0.6468

两组都在 47 条计分 Query 上运行。BGE contextual 在更靠前结果上表现更好:Recall@1 高 0.0958, MRR 高 0.0074;E5 content-only 在 Recall@10、Recall@20 上更高。这说明选择 BGE 是优先提高 首个相关结果质量的产品取舍,而不是把较深 K 的覆盖差异隐藏起来。

contextual 指把 title 和 section path 与正文组成稳定的 embedding 输入,content_only 则只编码 正文。它的价值来自让短段落保留章节语义,但是否有效仍必须通过同一数据集验证。

分类结果和边界

BGE contextual 的分类 MRR 分别为:identity 0.6788、knowledge 0.6435、project 0.9333、problem 0.4203、mixed_technical 0.4652。项目类较高,不代表系统对故障复盘或混合技术问题同样成熟;低分 分类正是继续改进数据、文档组织或检索策略的输入。

flowchart TD
    Q[Query] --> T{属于计分 Query?}
    T -->|是| R[计算 target Recall、HitRate、MRR]
    T -->|hard negative| N[只记录分数与 margin]
    R --> G[按 category 聚合]
    N --> G
    G --> D[质量与风险共同决策]

生成层还有另一套 22 条 Query 的评测:18 条应回答问题和拒答类问题分开统计。一次已记录运行中, evidence hit rate、citation validity rate、平均 citation coverage、should-answer accuracy 与拒答 正确率均为 1.0。它们只说明该固定数据集上的回归结果,不能外推为开放世界准确率。

方法论总结

  1. 固定数据集、来源 revision、Chunking 与 composition,才知道变动来自哪里。
  2. 同时报整体、分类和 hard negative;汇总提升不能覆盖局部退化。
  3. 把指标与用户路径对应:Top1/MRR 代表首屏质量,Recall@K 代表候选覆盖。
  4. 记录“未选择”的结果。E5 的深 K 覆盖与 BGE 的 Top rank 优势共同构成最终决策依据。

评测的目的不是选出永远最强的模型,而是让每次默认策略的变化都能被复现、质疑和更新。