一句话定义
自建评测 = 用自家数据分布构造带 ground truth 的查询集,按固定协议测出 recall/QPS/p99/内存,产出权衡曲线与分桶报告——它是调参、选型、排错的总裁判;配套的"基准陷阱清单"防止评测本身说谎。
为什么重要
公开基准(SIFT、GIST、ann-benchmarks 数据集)与自家负载几乎必然不同构:维度、分布、过滤模式、更新频率、硬件全不同。没有自建评测的团队,所有索引参数都在拍脑袋;有了它,kp-009 的调参、kp-023 的选型争论、kp-030 的排错才有一致的事实基础。这套流程的成本约两天,回报贯穿项目全程。
前置知识
kp-024(指标定义与测量纪律)、kp-006(Flat 产 ground truth)。
核心概念
- 查询集:几百~几万条真实查询(或仿真查询),带过滤条件与选择率标注。
- ground truth(GT):Flat 精确检索算出的标准答案,k 与业务消费口径一致。
- 协议固定:硬件、数据量、并发、预热量、统计窗口全部写进评测脚本,可重复执行。
- 分桶:按选择率/查询长度/类目分桶分别统计,防"平均数掩盖局部塌陷"。
原理与机制
六步工作流(可执行清单):
- 采样数据:从生产库分层抽样(按类目/时间/租户覆盖),规模贴近真实(至少十万级,最好百万级)。
- 构造查询:优先用真实查询日志;不足时用 LLM 基于文档生成问题(生成时不得让模型看到目标文档原文,防止泄漏——详见陷阱 1);标注每条查询的过滤条件与期望选择率。
- 计算 GT:用 Flat/暴力对每个查询算 top-k(k 与业务一致,如 10);存档固化,后续所有对比复用同一份 GT。
- 跑被测配置:每组配置独立进程、预热 N 次后开始统计;记录 recall@k、p50/p99、QPS(并发爬坡)、内存峰值、建库耗时。
- 产出曲线与分桶表:每索引一条 recall-延迟曲线;按选择率分桶的召回表;成本列(内存 GB 与月费折算)。
- 归档与复跑:脚本、数据指纹、环境参数入库;每次索引/参数/数据变更后重跑,形成回归基线。
基准陷阱清单(评测说谎的七种方式):
| 陷阱 | 表现 | 防法 |
|---|---|---|
| 1 数据泄漏 | LLM 生成的查询几乎照抄文档原句,检索"太好做" | 生成查询与文档做 n-gram 重叠检查;人工抽检 |
| 2 查询分布偏斜 | 全是高频简单查询,长尾与过滤场景未覆盖 | 按真实日志分布采样;强制包含低选择率桶 |
| 3 冷缓存 | 首批查询拉高延迟 | 固定预热次数并丢弃预热样本 |
| 4 单线程测吞吐 | QPS 被严重低估 | 并发爬坡协议(kp-024) |
| 5 跨库不同口径 | 各库用不同 ef/索引参数对比 | 每库扫参数取各自最优工作点,曲线对曲线 |
| 6 静态库假设 | 只测查询忽略写入影响 | 加测批量导入速率与 upsert 干扰下的 p99 |
| 7 指标错位 | 用 top-1 recall 评 top-10 业务 | k 与业务消费口径对齐 |
公式或模型
本节不适用:流程篇,指标公式见 kp-024。
图示
生产数据 ─采样─► 评测集 ─Flat─► GT(固化)
│
┌───────────────┼───────────────┐
配置A 配置B 配置C
└───────► 曲线 + 分桶表 + 成本 ◄───────┘
│
回归基线(每次变更复跑)实例或案例
某团队评测"IVF-PQ vs HNSW":公开跑分显示 HNSW 全面占优;自建评测(1.2 亿真实文本向量、含 30% 带租户过滤查询)显示——无过滤场景 HNSW 确实领先,但租户过滤桶(选择率 0.002)中 IVF-PQ 配标量预过滤的 p99 反而低 40%(图遍历在稀疏合法子图上退化)。若按公开跑分选型将付出真实代价——分桶 + 自家数据改变了结论。
直观类比
自建评测像"新车试驾走你的通勤路线":车评人赛道圈速(公开基准)能淘汰烂车,但你的路线有一段烂路(低选择率过滤)和每天两次满载(写入高峰)——只有走自己的路线,数字才对你有效。
常见误区
- "评测一次就永久有效"——数据分布漂移后结论失效;把评测脚本接进变更流程,触发式复跑。
- "评测集越大越好"——GT 计算与运行成本随规模线性涨;1k~10k 条查询足以稳定估计 recall(置信区间可算),规模应花在数据侧而非查询侧。
- "只测查询路径"——导入时长、合并窗口、更新积压都是选型事故高发区(陷阱 6),评测协议必须含写路径。
自测题
- 如何检测 LLM 生成查询集的数据泄漏?
- 为什么要"每库各自扫到最优工作点"再比曲线?
- 过滤场景的评测协议必须包含什么?
答:对每条生成查询与其来源文档计算 n-gram 重叠率,超阈值判泄漏;再加人工抽检"看查询能否脱离原文回答"。
答:不同索引参数敏感性不同,拿库 A 的默认参数比库 B 的调优参数是口径作弊;只有曲线对曲线才反映真实能力边界。
答:按选择率分桶(如 0.001/0.01/0.1/0.5)的查询组,分别报告 recall@k 与 p99,并强制包含最低选择率桶。
与其他知识点的关系
kp-009 的调参流程是本工作流在单索引上的特化;kp-016 的融合收益、kp-031 的量化代价都用同一套协议度量;kp-023 误区 5/6 由本篇的纪律兜底。
延伸阅读
Aumüller, Bernhardsson, Faithfull, "ANN-Benchmarks"(SISAP 2017)——可复用的评测协议设计(参数扫描、曲线产出、环境固定),自建评测的直接模板。