本文将介绍向量检索版支持的各类向量模型。
向量检索介绍
在当前的信息化时代里,信息的模态在文本的基础上,增加了图片、视频、音频等多模态信息;多模态能呈现文本无法表达的信息,如:颜色、形状、运动动态、声音、空间关系……
同时各个领域信息的模态也有大幅度的变化:
信息在这种多模态的场景下被分为两大类(结构化和非结构化):
非结构化的数据往往让计算机难以理解,传统的文本分词检索场景以无法满足各个领域的搜索需求,而向量完美地解决了这个难题。
那么什么是向量,又如何通过向量检索呢?
将物理世界产生的非结构化数据,转化为结构化的多维向量,用这些向量标识实体和实体间的关系。
再计算向量之间距离,通常情况下,距离越近、相似度越高,召回相似度最高的TOP结果,完成检索。
向量检索算法
linear
linear算法会线性计算所有向量数据。
适用场景:100%召回率
劣势:大数据量下效率较低、资源(CPU、内存)消耗较严重
聚类算法
量化聚类(Quantized Clustering)
介绍:
量化聚类(Quantized Clustering)是阿里巴巴开发的基于kmeans聚类的向量检索算法。先利用向量文档聚类n个中心点,并将每个文档归属到离其最近的中心点下,进而构建出n个倒排链。n个中心点及其对应的倒排链就是QC索引的主要内容。检索时,请求先和部分中心点进行距离计算,并从中挑选距离最近的多个中心点,接着,请求和中心点对应倒排链下的文档进行距离计算,最终返回距离最近的topk个文档结果。
特别的, QC支持了数值fp16/int8量化功能,可以减少索引大小、提升检索性能。但是,对召回效果可能有损。用户可以根据业务需要,权衡是否需要配置。
QC算法适用实时数据场景,亦或者有GPU资源,且对延迟要求较高的场景。
参数调优:
性能对比:
HNSW(Hierarchical Navigable Small World)
介绍:
HNSW(Hierarchical Navigable Small World)是基于近邻图的向量检索算法。先构建一个近邻图, 距离接近的向量之间建立边关系。向量以及其近邻信息就是HNSW索引的主要内容。检索时,从入口节点开始遍历,计算请求和入口节点的所有近邻距离,选择距离最近的近邻,作为下一步的遍历节点,进而迭代游走,直至收敛并停止检索。收敛指的是当前检索节点的所有近邻中没有比已经检索到的最近节点更接近请求。
为了加速收敛,借鉴跳表查询的逻辑,HNSW构建了一个多层近邻图结构。检索从上而下进行。每一层图的检索逻辑大致相同(第0层逻辑有些差异),在第k层图遍历收敛到一个节点后,会将其作为第k-1层的入口节点并继续在第k-1层遍历。相较于第k-1层图, 第k层图包含的节点更加稀疏,节点之间的距离更长,这使得第k层图游走时的步长更大,迭代更快。
参数调优:
HNSW(Hierarchical Navigable Small World)配置
QGraph算法
介绍:
QGraph(Quantized Graph)是开放搜索自研的一种基于HNSW的改进算法,在索引构建过程中会自动对用户的原始数据进行量化,然后再构建成图索引。与HNSW算法相比,QGraph算法可以有效降低索引大小,节省内存开销,最高可以将索引降为原来的1/8。同时,借助于CPU指令对整数计算的优化,QGraph的性能相对于HNSW提升数倍。量化之后向量的区分度降低,QGraph的召回率较HNSW会降低,在真实场景中可通过更多的召回来降低这一影响。
QGraph支持对数据进行int4、int8和int16量化。不同级别的量化对向量索引内存占用、查询性能和召回率的影响不同。一般随着整数位数越小,向量索引占用的内存越小,性能越高,召回率越低。其中,int16量化由于底层CPU指令集的问题,性能和召回率与未量化时几乎相同。
参数调优:
向量距离类型
向量检索的过程是通过计算向量之间的相似度,最后返回相似度较高的TopK向量集合。在这个过程中,向量之间的相似度是通过计算距离来得到。通常,分数越小表示,向量距离越近;分数越大,表示距离越远。
在不同向量空间中,定义了不同的距离度量(Distance Metrics)方式来计算这些向量的距离。在向量检索版中支持的度量方式有:欧式度量、内积度量。
欧式距离(SquareEuclidean)
欧式距离是指两个向量之间的平面上距离。作为一种最常用的距离度量方式,欧式距离可以通过计算两个向量之间的坐标差的平方和的平方根来得到。欧式距离越小,表示两个向量越相似。欧式距离度量的计算公式如下:
内积距离(InnerProduct)
内积是指两个向量之间的点积或数量积,内积结果越大,代表越相似。它可以通过计算两个向量对应位置上的元素相乘,并对乘积结果求和得到。内积度量常见于搜索推荐场景,通常而言,是否使用内积测量取决于算法是否使用内积模型。内积度量的计算公式如下:
向量检索算法的选择
向量检索算法 | 优势 | 劣势 | 场景 |
量化聚类(Quantized Clustering) | CPU、内存资源占用较低。 |
| 适用于亿级别数据集,对数据准确性和查询延迟要求不是非常高的场景。 |
HNSW(Hierarchical Navigable Small World) | 召回率高、查询速度快。 | CPU、内存资源占用较高。 | 适用于千万级别数据集,并且对数据准确性和查询延迟有严格要求的场景。 |
linear | 召回率100%。 |
| 适用于万级别的数据。 |
QGraph(Quantized Graph) | CPU、内存资源占用低,耗时短,查询性能高。 | 召回率较HNSW低。 | 适用于海量数据(十亿及以上),对查询耗时和查询性能要求较高,对准确性要求不苛刻的场景。 |