VectorRetrievalgithub落地场景背景框架
检索模型——暴力搜索、倒排索引检索模型——kd-Tree、Annoy
KD-Tree:Annoy: 检索模型——LSH检索模型——PQ检索模型——NSW、HNSW
NSW:HNSW:result: 检索框架
Elastic SearchFaissMilvus 业界的落地情况
MilvusFaissMilvusFaiss
VectorRetrieval github仿真代码:https://github.com/KATEhuang920909/VectorRetrieval
落地场景落地场景:获取相似实体的需求都可以使用到
图片搜索:以图搜图,通过图片检索图片。具体应用如:车辆检索和商品图片检索等。视频搜索:针对视频信息的实时轨迹跟踪。文本搜索:基于语义的文本检索和推荐,通过文本检索近似文本。语音搜索:声纹匹配,音频检索。文件去重:通过文件指纹去除重复文件。 背景
高维及海量数据的存储:在常用的图片或视频处理场景中,向量数据通常在亿级别。高召回:为保证检索效果,精度召回率通常要求 95% 以上。高性能:为保证用户体验,向量检索的响应要求毫秒级。 框架
检索模型——暴力搜索、倒排索引BM25+semantic倒排索引+BM25/semantic
特点:维护成本低
缺陷:耗时,占用内存大,准确率有待提升
检索模型——kd-Tree、Annoy
构造:超平面去划分维度空间,方差最大的维度取中值检索:递归访问KD-Tree,回溯计算距离参数:返回个数K
Annoy:构造:聚类数为2的Kmeans
检索:递归访问Annoy-Tree,回溯计算距离
参数:返回个数K、树的深度
局部敏感哈希
通过hash映射,将向量集映射到不同的hash桶中。高维空间的两点若距离很近,那么设计一种哈希函数对这两点进行哈希值计算,使得他们哈希值有很大的概率是一样的,若两点之间的距离较远,他们哈希值相同的概率会很小。
构造:通过hash函数映射,将向量集映射到不同的hash桶中检索:hash函数映射到相应hash桶,对桶内样本求距离余弦距离:H(V) = sign(V·R)参数:hash函数个数、向量片段个数特点:1.将高维数据降维到低维数据,内存耗用少;一定程度上保持原始数据的相似度不变。缺陷:对于非均匀分布的向量空间效率和准确率较差。改进:
向量切片
检索模型——PQ针对N个训练样本,假设样本维度为128维,我们将其切分为4个子空间,则每一个子空间的维度为32维,然后我们在每一个子空间中,对子向量采用K-Means对其进行聚类(图中示意聚成256类),这样每一个子空间都能得到编码N*4。这样训练样本的每个子段,都可以用子空间的聚类中心来近似,对应的编码即为类中心的ID
搜索过程:比对目标向量与各个聚类中心的距离,选择出与目标向量最为接近的若干个聚类中心。接下来获取这些聚类中心所对应聚类中的所有向量及其子段,分别计算每个子段各向量与目标向量的距离,将这些子段的距离求和相加
构造:通过 聚类方法将向量集合划分为多个聚类,并记录各个聚类的中心点的坐标检索:比对聚类中心向量,选择对应簇的样本计算距离参数:聚类簇个数、向量片段个数特点:1.内存耗用更小;2.数据动态增删更灵活缺陷:对于高维向量搜索效果一般。优化:降维或者在PQ乘积量化之前,增加了一个粗量化,采用K-Means进行聚类 检索模型——NSW、HNSW
跳表
HNSW
NSW:构造:向图中逐个插入点,查找到与这个全新点最近的m个点,连接全新点到m个点的连线。检索:贪婪算法参数:连线个数m HNSW:
构造:基于跳表构建多层图网络检索:从上往下依次查询,每一层达到局部最大值后跳转参数:连线个数m、跳转概率特点:较高的搜索效率;较高准确度;缺陷:构建索引慢;占用内存大; result:
检索框架 Elastic SearchAPI可扩展7.2+: match all 查询类似于向量检索,暴力搜索向量检索插件 Faiss
开源库提供多种检索方法可存在内存和磁盘中C++实现,提供Python封装调用。大部分算法支持GPU实现 Milvus
API基于 Faiss等索引库之上多模态检索动态数据管理 业界的落地情况 Milvus
贝壳找房:智能客服、户型检索爱奇艺:视频检索搜狗:新闻检索、文本辅助标注丁香园:文章检索、社区讨论检索、商品检索 Faiss
58同城:职位检索 Milvus
贝壳找房:智能客服、户型检索爱奇艺:视频检索搜狗:新闻检索、文本辅助标注丁香园:文章检索、社区讨论检索、商品检索 Faiss
58同城:职位检索
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)