ANN 搜索
ANN 搜索(近似最近邻搜索,Approximate Nearest Neighbor)是一种在海量数据中查找与查询最相似项目的方法,它不追求“完全准确”,而是以“几乎准确”换取极快的速度。它是向量数据库和 RAG 检索的核心技术。
工作原理
首先,用嵌入模型把文档或图像转换成一串数字(向量),并预先建立索引,以便快速查找这些向量。典型的索引方式包括把向量按相似程度分组的 IVF,以及把相近向量连成多层网络的 HNSW 等。查询到来时,用同样的方式把查询也转换成向量,再沿着索引只挑选可能性高的候选进行比较。由于不比较全部数据,所以速度很快,但结果可能与真正最近的项目略有不同。
为什么重要
精确的最近邻查找(KNN)在数据增长到数百万至数十亿条时,哪怕只有一个查询也要计算与所有数据的距离,速度太慢。ANN 搜索牺牲少许准确率,大幅缩短搜索时间,使大规模服务能够实现实时搜索。RAG 中检索与查询相关文档片段的步骤、语义搜索、相似图片·商品推荐等,都依赖这项技术。向量数据库主打的核心功能,归根结底也是快速的 ANN 搜索。
注意事项
ANN 搜索需要在速度和准确率之间权衡。设置为查看更多候选时,准确率会提高但速度变慢;反之则速度更快,但漏掉的结果会增多。能在多大程度上找出真正相近的项目,通常用召回率(recall)来评估。此外,建立和维护索引需要耗费内存和时间,因此要选择适合数据规模和更新频率的方式。所以,为了进一步提高检索质量,有时还会在后面接一个重排序器。
示例
假设要用 RAG 搭建一个公司内部文档聊天机器人。先把内部文档分块并嵌入后存入向量数据库,向量数据库会预先建立 HNSW 等 ANN 索引。员工提问时,先对问题进行嵌入,再通过 ANN 搜索瞬间找出几个最相似的文档片段,一并交给 LLM,LLM 便以这些内容为基础撰写回答。