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。

相关推荐
ClouGence1 小时前
数据如何随时可用?广西水牛先生的 MySQL 实时同步实践
数据库·mysql·数据分析
斯晨的AI笔记1 小时前
rsync 部署避坑:脚本执行位被 git 模式位抹掉,巡检备份双静默失败的排查与根治
数据库
这个DBA有点耶1 小时前
innodb_autoinc_lock_mode的三种模式:批量插入时自增锁的持有逻辑与调优
数据库·架构·代码规范
我命由我123451 小时前
5-1.Python 编码进阶 - 函数进阶(参数、返回值、递归、函数作为参数传递、lambda 匿名函数)
java·服务器·数据库·后端·python·java-ee·python3.11
小蒜学长2 小时前
基于Spring Boot+Vue3的在线游戏技术指导师匹配系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·在线游戏技术指导
Web3&Basketball3 小时前
DeepSeek V4.1 Flash 实测:Token 砍半、Search API 跑通
数据库·人工智能·python·大模型·api调用·deepseek·推理优化
川石课堂软件测试3 小时前
涨薪技术|0到1学会性能测试第9课-HTTP响应统计
数据库·功能测试·网络协议·http·kubernetes·单元测试·测试用例
竣达技术3 小时前
Modbus 转 SNMP 协议转换器|自定义协议 + SNMP TRAP 主动上报
运维·服务器·网络·数据库·安全