向量检索-用最简单的语言

发布时间:2024年01月11日

? ? ? ?看之前首先要懂两个基本条件:

? ? ? ? 1. 什么是向量

? ? ? ? 2. 会使用向量的检索

? ? ? ? 3. 知道至少一种向量的索引

这里我们拿比较的流行的HNSW算法来进行分析:

???????最直接的做法是根据向量在给定数据集中采用KNN来找到K个最近的向量。但在实际应用中,待检索的数据往往是千万甚至亿级,KNN的计算量过大。因此,通常采用ANN(Approximate Nearest Neighbor,相似近邻)来快速相似检索

???????????????????????????????

相似性检索:????????

在NSW中,构建图的阶段通过节点的随机插入来引入随机性,构建出一个small world graph,从而实现快速检索。但NSW构造的图并不稳定,节点之间的差异较大:

  • 先插入的顶点,其连接的邻居节点,基本都比较远(弱连接属性强)

  • 后插入的顶点,其连接的邻居节点,基本都比较近(弱连接属性弱)

  • 对于具有聚类效应的点,由于后续插入的点可能都和其建立连接,对应节点的度可能会比较高

如何构造具有更稳定的small world graph呢?HNSW算法就在NSW基础之上引入了分层图的思想,通过对图进行分层,实现由粗到细的检索。

1、图构造

HNSW在构造图时如下图所示:

核心如下:

  • layer=0层包含了数据集中的所有点

  • layer=l层是以50%的概率随机从layer=l-1层中选择的点构成的。因此,最大层数为

  • 插入构图时,先计算新顶点可以深入到第几层(),在每层的NSW图中查找m个近邻,然后连接它们

2、图检索

对HNSW进行查询时,从最高层开始检索,逐层往下,从而实现快速搜索

?

总结:想要更高性能的相似性检索需要需要依赖索引,比如HNSW,当我们使用索引检索时它和暴力检索不同的的是:

? ? ? ? 1. 暴力检索会遍历所有节点,然后进行一 一返回

? ? ? ? 2. 使用索引检索时,它返回的是ANN 所有的近邻节点,返回近邻节点的时候它并不会按照从最相似的开始返回,而是将所有近邻结果全部返回,返回之后在进行排序。

? ? ? ? 3. 要返回多少近邻节点是算法中的参数,可以进行调节。当然,也可以返回之后在进行过滤。

文章来源:https://blog.csdn.net/m0_71917549/article/details/135519859
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。