假设一个帮助机器人要找「导出取消后如何恢复」的说明。向量索引只打开了讲导出设置的分区,真正讲恢复的段落在另一个分区。模型只能使用检索送到它面前的内容。排查这种回答时,可以先问:检索有没有查到正确的位置?
算四个点就能看出来
这个示意例子里,查询 q = (1, 0),所以点积得分就是向量的第一维。分区 A 有 (3, 1)、(3, −1),分区 B 有 (5, 0)、(−1, 0)。两个质心的得分分别是 3 和 2。只能查一个分区时,质心路由会打开 A,但全局最高分 5 在 B。四个向量的得分都可以直接手算。
配图是 Boloop 为这个例子制作的说明图,展示点积得分,未使用基准测试数据。
Apple 改了什么
Apple 的研究文章介绍了两个用离线精确匹配结果训练的模型。SupportNet 估计每个分区可能包含的最高分。KeyNet 预测一个键向量,再用预测结果查询现有近似索引。两种方法都可能漏掉最佳匹配。ICML 论文作者是 Theo X. Olausson、João Monteiro、Michal Klein 和 Marco Cuturi。
在 Apple 的 Natural Questions 实验中,小型 SupportNet 达到 95% 路由召回时用时 1.74 ms,质心路由为 3.36 ms。这里的路由召回指成功打开精确最佳匹配所在分区的比例。耗时包含该实验中的路由模型推理。你的语料端到端耗时和回答正确率需要单独测量。
怎么在自己的索引上测
- 固定语料快照和嵌入模型。准备留出的查询,包含短问题、少见词和新文档的问题。对同一快照做穷举检索,保存精确 top-k。
- 在同一召回目标下比较两条路由。保持硬件、并发一致,记录路由召回、精确近邻 recall@k,以及检索 p50/p95 延迟。再取一组人工标注的相关段落,检查向量最近的内容能否回答问题。
- 对比前写好失败条件,单独观察少见词和新文档。如果某一组经常漏掉重要段落,试验为它多探查几个分区,量出成本;在影子流量中验证时保留原路由。
- 把重训和更新索引的时间算进去。语料稳定、类似查询量大时,训练成本更容易摊薄。文档或嵌入变化频繁时,上线前用较新快照再测一次。
本站的建议是:即使学习型路由跑得更快,也保留精确近邻对照和相关性核查。回答出错时,就能追查证据究竟在哪一步丢失。更通用的验证做法可参见AI 生成代码验收清单。
Boloop 核对了资料和手算示例。本文未重跑 Apple 的基准测试。