揭秘RAG系统如何借助HNSW算法实现毫秒级精准答案检索,帮你深入理解向量数据库的核心技术。
了解 Hierarchical Navigable Small World (HNSW) 算法如何为当今的 RAG 系统提供高效搜索能力
目录
- • 基本语义搜索 (Semantic Search)
- • 可导航小世界图 (NSW)
- • 分层可导航小世界图 (HNSW)
- • HNSW 的实际应用场景
- • 总结与展望
- • 参考文献
基本语义搜索
检索增强生成(RAG)是为大型语言模型(LLM)注入外部知识的关键技术。几乎所有 RAG 系统都依赖一个向量数据库来执行语义搜索。在这种搜索模式下,存储在向量数据库中的文档嵌入向量会与用户的查询嵌入向量进行相似度比对。
一个典型的 RAG 系统包含三个核心组件:嵌入模型、向量数据库和 LLM。文档的嵌入向量会提前离线生成并存储。当你提交一个问题时,查询会被嵌入,然后与存储的向量进行匹配。最相关的匹配结果会被发送给 LLM,其中检索器(由嵌入模型和向量数据库组成)协助生成器(LLM)完成回答。向量数据库的核心任务就是找出与查询最相似的 top-K 篇文档。
在实际操作中,将查询向量与数据库中数百万甚至上亿个嵌入向量逐一比较,以找到精确匹配是极其缓慢的。为了提升速度,这些向量数据库通常会返回近似匹配的结果,牺牲少量精度换取毫秒级响应。
接下来,让我们深入理解向量数据库的工作原理,并重点剖析分层可导航小世界(HNSW)搜索算法——正是这一算法为当今众多 RAG 系统提供了强劲动力。
语义搜索的核心:从文本到向量
在语义搜索中,嵌入模型将文本转化为一个稠密向量,该向量能够捕捉文本的语义信息。通过使用相同的嵌入模型将查询和文档都转换为向量,我们可以通过识别查询向量的最近邻来执行语义搜索。这一过程被称为 K 近邻(KNN)搜索。
在 RAG 系统中,检索器的任务就是找到与用户查询最相似的文档。在这个简单示例中,文档1、5和7是从10个文档中筛选出的三个最接近的匹配项。
如何衡量向量之间的距离?
为了找到最近邻,我们需要测量两个向量之间的距离。常用的距离度量包括 余弦距离(关注两个向量之间的夹角)和点积(dot product)。
余弦距离的计算公式是 1 减去两个向量 v 和 w 的余弦相似度。然后,我们按距离升序排序,选取前 K 个最接近的匹配项作为结果。
然而,搜索所需的计算量会随着向量数据库中条目数量的增加而线性增长。例如,对于15篇文档,需要计算15次距离;如果数据库包含数百万篇文档,每次查询就需要计算数百万次距离,响应时间将不可接受。
