向量检索是输入一个向量,从数据库中查找与输入向量最相似的topN个向量返回 。要在向量数据库中执行相似性搜索和检索,需要使用表示所需信息或条件的查询向量 。查询向量可以从与存储向量相同类型的数据导出,或者从不同类型的数据导出 。使用相似性度量来计算两个向量在向量空间中的距离 。相似性度量可以基于各种度量 , 如余弦相似性、欧氏距离、向量内积,hamming距离、jaccard指数 。
其中,向量检索算法是向量数据库的核心之一 。向量检索可以看为是近似最近邻搜索 , 通过预先的索引构建来减小数据查询时的搜索空间,加快检索速度 。目前主要的几种检索算法有:
- 基于树的方法,例如KDTree和Annoy
- 基于图的方法 , 例如HNSW
- 基于乘积量化的方法,例如SQ和PQ
- 基于哈希的方法,例如LSH
- 基于倒排索引的方法

文章插图
图片
根据数据压缩方式建立索引, 主要包括平坦压缩和量化压缩 。平坦压缩是指以未经修改的形式存储向量的索引,量化中索引的底层向量被分解成由较少字节组成的块(通常通过将浮点数转换为整数)以减少内存消耗和搜索过程中的计算成本 。

文章插图
图片
相似性搜索和检索的结果通常是与查询向量具有最高相似性得分的向量的排序列表 。然后,您可以访问与原始源或索引中的每个向量关联的相应原始数据 。
3. 向量数据库的分类根据向量数据库的的实现方式, 我们可以将向量数据库大致分为4类:原生的向量数据库、支持向量的全文检索数据库、支持向量的NoSQL数据库和支持向量的关系型数据库 。
3.1 原生的向量数据库原生的向量数据库是专门为存储和检索向量而设计的 。包括Chroma, LanceDB, Marqo, Milvus/ Zilliz, Pinecone, Qdrant, Vald, Vespa, Weaviate等, 所管理的数据是基于对象或数据点的向量表示进行组织和索引 。这里只介绍其中的三种 , 具体信息可以参考各自的官网 。
FaissFaiss是一个用于高效相似性搜索和密集向量聚类的开源库 。Faiss是用C++编写的,带有完整的Python/ target=_blank class=infotextkey>Python/numpy包装器,一些常用算法都有GPU实现,成为了很多开源向量数据库的基础 。

文章插图
图片
Faiss能构建不同的索引类型,并提供了欧式距离或者点积的相似度计算功能 , 有些索引类型是简单的基线 , 例如精确搜索 。大多数可用的索引结构需要考虑搜索时间,搜索质量,每个索引向量使用的内存等 。
Faiss支持多种向量搜索技术,提供了能够在不同大小的向量集中搜索的算法,甚至可以处理那些超过内存容量的向量集 。
【解读向量数据库】Faiss的主要优势之一是速度和可扩展性 , 即使在具有数十亿个向量的数据集中也可以进行快速搜索 。此外,还提供了用于评估和调整参数的辅助代码 。
PineconePinecone是一个基于云的向量数据库,可以开发实时相似性搜索应用,能够以毫秒级的延迟存储和探索高维向量嵌入,适用于推荐系统、图片和视频搜索以及自然语言处理等应用 。
Pinecone 的主要功能包括自动索引、实时更新、查询自动调整和用于与当前流程进行简单交互的 REST API 。其架构专为可扩展性和稳健性而构建 , 可以轻松管理海量数据 , 同时保持高可用性 。

文章插图
图片
Pinecone是一个可以托管的向量数据库平台,也就是说有商用方案,也有免费使用方案 。其主要特点包括:
- 支持全托管服务
- 高度可伸缩
- 实时数据摄取
- 低延迟的搜索
- 与LangChain集成
推荐阅读
- Python内置数据库:轻量级SQLite
- 灵活就业人员为何参保意愿不高?专家解读
- Oracle数据库存在不可用索引性能问题
- 每个程序员都必须了解的十种数据库
- 笔记本电脑性能分析:处理器、内存、硬盘和显卡的深度解读
- 深度优化数据库性能:Linux 内核参数调整解析
- 14个开源免费数据库监控工具,MySQL、Oracle、Postgres或MSSQL
- 初识向量数据库与pgvector实践
- 直面数据库的“崖山海战”:YashanDB另辟蹊径站上新高地
- 国内首个向量数据库标准发布
