如何科学评估 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.5 与
intfloat/multilingual-e5-small,并比较 contextual 与 content_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。它们只说明该固定数据集上的回归结果,不能外推为开放世界准确率。
方法论总结
- 固定数据集、来源 revision、Chunking 与 composition,才知道变动来自哪里。
- 同时报整体、分类和 hard negative;汇总提升不能覆盖局部退化。
- 把指标与用户路径对应:Top1/MRR 代表首屏质量,Recall@K 代表候选覆盖。
- 记录“未选择”的结果。E5 的深 K 覆盖与 BGE 的 Top rank 优势共同构成最终决策依据。
评测的目的不是选出永远最强的模型,而是让每次默认策略的变化都能被复现、质疑和更新。