算法介绍
更新时间:2024-05-14
算法介绍
百度Elasticsearch向量引擎提供了两种向量检索算法: linear 算法和 hnsw、hnsw_sq8、hnsw_qp、ivf、ivf_pq、ivf_hnsw、ivf_hnsw_pq 等 ANN 算法(Approximate Nearest Neighbor,近似最近邻算法)。
算法 | 含义 | 适用场景 | 缺点 | 支持距离算法 |
---|---|---|---|---|
linear | 线性计算所有向量数据 | 召回率100% 查询时间与数据量成正比 通常用于小数据量场景或效果对照 |
大数据量下效率较低 查询大量消耗cpu |
欧式距离(l2) 余弦距离(cosine) 内积(innerproduct) |
hnsw | 基于hnsw算法对数据进行近似计算 | 单机数据量小 对召回率要求高 对查询速度要求高 |
全内存 消耗内存大 |
欧式距离(l2) 余弦距离(cosine) 内积(innerproduct) |
hnsw_sq8 | 基于hnsw算法对数据进行近似计算,对向量进化标量量化 | 对召回率要求较高 对查询速度要求高 需求内存占用比较小 |
全内存 有精度损失,召回率比hnsw低 |
欧式距离(l2) 内积(innerproduct) |
hnsw_pq | 基于hnsw算法对数据进行近似计算,对向量进化乘积量化 | 对召回率要求适中 对查询速度要求高 需求内存占用比较小 |
全内存 精度较低,召回率比hnsw低,往往也比hnsw_sq8低,不过内存消耗更少 |
欧式距离(l2) 内积(innerproduct) |
ivf | 基于ivf算法对数据进行近似计算 | 单机数据量小 对召回率要求较高 对查询速度要求适中 |
全内存 消耗内存较大 查询计算量大,大数据量下效率较低 |
欧式距离(l2) 内积(innerproduct) |
ivf_pq | 基于ivf算法对数据进行近似计算,对向量进行乘积量化 | 对查询速度要求较高 对召回率要求适中 需求内存占用比较小 |
全内存 精度较低 查询计算量较大,大数据量下效率不高 |
欧式距离(l2) 内积(innerproduct) |
ivf_hnsw | 基于ivf算法对数据进行近似计算,分桶内构建hnsw索引 | 单机数据量小 对召回率要求较高 对查询速度要求适中 |
全内存 消耗内存较大 查询计算量大,大数据量下效率较低 |
欧式距离(l2) 内积(innerproduct) |
ivf_hnsw_pq | 基于ivf算法对数据进行近似计算,分桶内构建hnsw索引,对向量进行乘积量化 | 对查询速度要求高 对召回率要求较低 需求内存占用比较小 |
全内存 精度较低 |
欧式距离(l2) 内积(innerproduct) |
Elasticsearch Score详解
默认情况下,ES的检索结果会按照相关性分数排序并返回(由高到低),相关性分数体现了document和检索的相关程度,通过一个大于0的浮点数来体现。向量检索的场景下,会基于向量之间的距离为基础进行计算,不过为了满足相关性分数大于0的约束,ES检索结果的_source字段不一定会直接返回距离计算结果。
向量检索引擎支持的距离算法包括:余弦距离(cosine)、欧式距离(l2)、内积(innerproduct),距离公式和相关下分数计算逻辑如下:
linear
距离算法 | 距离公式 | Elasticsearch Score |
---|---|---|
l2 | ||
cosine | ||
innerproduct |
hnsw
距离算法 | 距离公式 | Elasticsearch Score |
---|---|---|
l2 | ||
cosine | ||
innerproduct |