SonnetDB:向量召回率评估中的精确基线与参数记录

本文介绍 SonnetDB 向量召回率评估的准备方法,重点是建立真实精确基线,避免把相同查询调用或示意曲线当成基准结果。

先固定同一候选集合

对每个查询,固定数据快照、向量维度、度量、k、TAG 和时间条件,以及删除、替换与权限范围。精确基线应遍历同一可见候选集合,计算距离并按统一规则取 top-k;ANN 结果必须使用相同候选身份进行比对。

对时序数据,身份可能需要包含 series、时间和字段,不能只用一个 block 内的局部位置混合不同 block。距离并列时应先规定等距结果的处理办法,再计算交集,避免把等价结果误计为漏召回。

Recall@k 的分母需要说明

当每个查询确实存在至少 k 个有效候选时,可用 ANN top-k 与精确 top-k 的交集数量除以 k。若有效候选少于 k,建议按实际精确结果数量计算并明确说明,或把这种查询单独报告;精确结果为空时不应静默除零或写成满分。

汇总时保留逐查询数据,并说明采用查询均值还是加权汇总。返回了 k 条不意味着与精确 top-k 一致,召回率也不等于嵌入模型的业务相关性。

相同调用不能同时证明精确与 ANN

当前 measurement KNN 会根据索引度量、相关删除状态以及索引可用性选择执行路径。索引候选不足时存在有条件的精确补扫。因此,相同的 index.Search 或 knn 查询调用不能仅靠两行注释分别标记为"精确基线"和"ANN"。

评估工具应使用已确认的独立精确实现或可验证的精确执行路径,并记录实际 ANN 是否命中、是否发生回退。小数据集或候选限制覆盖全部数据时,结果可能看起来完全一致;这不证明一般数据规模下的 ANN 召回率。

构建与查询参数分别记录

当前公共 VectorIndexHnswOptions 默认 M=16、EfConstruction=200、EfSearch=50,可指定 Seed。这是该公共入口的默认值,不代表所有 SQL、文档索引与段索引入口都采用相同设置。构建时的候选参数和查询时的候选参数负责不同阶段,报告应记录实际入口、最终生效值和随机种子。

调参应固定其他条件,分别报告构建时间、索引大小、查询延迟分布及 Recall@k;保留冷/热缓存、并发量、硬件、运行版本和查询集合。是否改善以及改善多少由实测决定,不从参数大小推导固定增益,也不把一次随机向量测试作为生产验收。

本文删除原稿中未经证据支持的 50 万向量延迟表、固定召回率、统一 ef 默认值和不完整 SQL。封面是评估流程概念图,原参数曲线已替换,不表示实际运行结果。本文依据 2026-10-20 当前源码审阅;本轮未运行数据库、真实模型或性能基准。

依据:KnnExecutor.cs、VectorIndexHnswOptions.cs 与 HnswIndex.cs。

相关推荐
Zan5 小时前
SQLite + SQLx 实战:为什么已经发布的数据库迁移文件,绝对不能再修改?
数据库·后端·面试
这个DBA有点耶6 小时前
数据同步的三个工程底线:DDL同步、断点续传、一致性校验——开源CDC的边界与KFS的路径
数据库·dba·代码规范
SelectDB7 小时前
列式存储为什么适合分析类负载?原理、限制与日志场景应用
数据库
数据库小学妹7 小时前
MySQL大字段治理:行溢出机制、覆盖索引与拆表
数据库·mysql·性能优化
爱吃奥利奥_wen8 小时前
SQL Server 基础语法详解:从建库建表到约束与增删改查
服务器·数据库·oracle
这个DBA有点耶9 小时前
MySQL 8.0不可见索引:删索引怕出事,不删又拖慢写入——中间态怎么用?
数据库·mysql·代码规范
测试界的小码农10 小时前
【图数据库实战进阶(01):从零认识 Neo4j,搭建第一个图数据库项目】
数据库·neo4j
x_SpiderMan10 小时前
搭建Oracle RAC 集群
数据库·oracle
测试界的小码农10 小时前
【图数据库实战进阶(03):Neo4j 图数据建模实战——节点、关系与属性应该怎么设计?】
数据库·oracle·neo4j