← 中文资源

简体中文版本

向量搜索

向量搜索返回嵌入与查询向量最近的对象,把语义相似度转化为一次索引查找。

阅读英文原文

概念定义

向量搜索又称相似度搜索,它接收查询嵌入并返回在某种距离度量下距离最近的已存向量。朴素做法会给每个向量打分,数千条目可行,但百万级就过慢,因此生产系统改用近似索引,用可测量的小幅召回损失换取延迟与内存的大幅改善。

为什么重要

它是语义检索的核心机制。它不匹配表层词元而匹配含义,因此在换述、拼写错误与多语言场景下都有效。在检索增强生成中,它挑选模型应阅读的段落,其召回率直接决定了回答质量的上限。

工程实践

度量方式要与嵌入训练方式一致,若度量假设单位长度就先归一化,并在线性评分与向量评分之间做混合检索。元数据过滤要在索引内部预过滤而不是检索之后,设定相似度下限避免弱邻居,并在标注集上持续测量召回率,使近似保持诚实。索引的构建参数与查询强度需要反复调优:加大搜索范围能提高召回却增加延迟,减小内存占用则往往牺牲质量,因此应把召回率、延迟与内存三者一起权衡,并记录每次变更后的基准结果,避免凭感觉调整。

代码示例

export function binarySearch(sorted, target, compare = (a, b) => a - b) {
  let low = 0;
  let high = sorted.length;
  while (low < high) {
    const mid = (low + high) >>> 1;
    const cmp = compare(sorted[mid], target);
    if (cmp < 0) {
      low = mid + 1;
    } else {
      high = mid;
    }
  }
  const found = low < sorted.length && compare(sorted[low], target) === 0;
  return { index: low, found };
}