首页/AI/RAG 与向量库速查/用小评测集选择 Embedding 模型
Embedding 与检索50 条

用小评测集选择 Embedding 模型

用自有小评测集选模型:同一批问题与标注答案,比较各模型 top-k 命中率与 MRR,兼顾延迟与成本,避免只凭直觉选型。

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

为什么用小评测集选

选 embedding 模型不必等大工程:准备 100 到 300 条真实问题并标注对应片段,固定切分与索引参数,只替换模型,比较 Recall@k 与 MRR,同时记录单条延迟与费用。这样得到的结论比看公开榜单可靠,因为考的是你自己的语料与问法分布——榜单靠前的模型在你的领域里未必更好。

基本信息

评测集规模100 到 300 条真实问题起步,覆盖高频与长尾
核心指标Recall@k 看是否召回,MRR 看排位
控制变量切片、索引参数、top-k 全部固定,只换模型
同时记录单条延迟、显存占用、自建或调用成本

典型使用场景

  • 首次选型:在通用小模型与领域大模型之间做取舍
  • 升级评估:新版模型对自家语料的召回是涨还是跌
  • 维度权衡:把向量从 1024 维降到 512 维,量化评估精度损失
  • 国产化或私有化:自建模型与云端接口之间比较延迟与效果
  • 回归门禁:把评测脚本接进发布流程,换模型前必须跑一遍

Recall@k 对比

Recall@k 对比
def recall_at_k(queries, k=5):
    hit = 0
    for q, gold_ids in queries:                 # gold_ids 为标注的正确片段
        ids = [h["doc_id"] for h in search(embed(q), top_k=k)]
        hit += any(g in ids for g in gold_ids)  # 命中任一即算召回
    return hit / len(queries)

for name in ["bge-base-zh-v1.5", "bge-large-zh-v1.5"]:
    print(name, recall_at_k(queries))   # 切换模型时其余参数保持不变

指标读法

指标含义指标偏低时的常见原因
Recall@5前 5 条是否含正确片段切分把答案切碎,或模型语义能力不足
Recall@20候选池的覆盖能力top-k 太小,或过滤条件过严
MRR正确片段平均排在第几位区分度不足,排名被相似噪声挤占
P95 延迟体验与容量规划依据模型过大,或批量推理未开启
评测集 100 到 300 条真实问题即可起步,务必覆盖高频问题与长尾问法(缩写、型号、错别字),并随产品迭代补充。
对比实验要一次只改一个变量:同时换模型又改切分参数,效果变化无法归因到具体改动。
评测集要留出与调参集分离的验证部分:用同一批问题反复调参再报分数,指标会系统性偏乐观,上线后表现回落。

易错点

  • 换模型同时改切片参数,无法归因效果变化
  • 评测集只放简单问题,选出的模型在长尾表现差
  • 只比召回不看延迟与成本,上线后推理开销超预算
  • 评测脚本不入版本库,指标无法跨时间对比

数据来源与参考

  • MTEB 论文(评测方法)
  • RAGAS 文档(检索评测思路)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌