向量数据库是一种相对较新的与抽象数据表示交互的方式,这些数据表示来自于深度学习结构等不透明的机器学习模型。这些表示通常被称为向量或嵌入向量,它们是用于训练机器学习模型以完成情感分析、语音识别、目标检测等任务的数据的压缩版本。
这些新型数据库在许多应用中表现出色,如语义搜索和推荐系统。
什么是Qdrant?
Qdrant是一个开源向量数据库,专为下一代AI应用程序设计。它是面向云原生的,并提供RESTful和gRPC API以管理嵌入。Qdrant的特性强大,支持图像、语音和视频搜索,以及与AI引擎的集成。
什么是向量数据库?
向量数据库是一种专门设计用于高效存储和查询高维向量的数据库。在传统的OLTP和OLAP数据库中(如上图所示),数据以行和列的方式组织(这些被称为表),查询是基于这些列中的值进行的。然而,在某些应用中,如图像识别、自然语言处理和推荐系统,数据通常以高维空间中的向量形式表示,这些向量加上一个ID和有效负载,就是我们存储在类似于Qdrant的向量数据库中的元素。
在这个背景下,向量是对象或数据点(point)的数学表示,向量的每个元素对应于对象的某个特征或属性。例如,在图像识别系统中,向量可以表示一个图像,向量的每个元素代表像素值或该像素特征/描述符。在音乐推荐系统中,每个向量表示一首歌曲,向量的每个元素代表歌曲的某个特征,比如节奏、流派、歌词等。
向量数据库针对高维向量的高效存储和查询进行了优化,通常使用了专门的数据结构和索引技术,如层次式可导航小世界(HNSW,用于实现近似最近邻搜索)和乘积量化等。这些数据库能够在允许用户按照某个距离度量标准,找到与给定查询向量最接近的向量的同时,实现快速相似性和语义搜索。最常用的距离度量标准有欧式距离、余弦相似度和点积,在Qdrant中这三种度量标准得到了完全的支持。
以下是对这三种向量相似度算法的简要介绍:
- 余弦相似度(Cosine Similarity) - 余弦相似度是一种衡量两个事物相似程度的方式。可以将其视为一把标尺,用于测量两个点之间的距离,但与其测量距离不同,它测量的是两个事物之间的相似程度。它常用于文本中比较两个文档或句子之间的相似程度。余弦相似度的输出范围从0到1,其中0表示两个事物完全不相似,1表示两个事物完全相同。这是一种简单而有效的比较两个事物的方法!
- 点积(Dot Product) - 点积相似度度量是另一种衡量两个事物相似程度的方式,类似于余弦相似度。在处理数字时,它通常用于机器学习和数据科学中。点积相似度通过将两组数字中的值相乘,然后将这些乘积加起来来计算得到。和越高的总和意味着两组数字越相似。它就像一个衡量两组数字彼此匹配程度的比例尺。
- 欧式距离(Euclidean Distance) - 欧式距离是一种测量空间中两点之间距离的方式,类似于我们在地图上测量两个地方之间距离的方式。它的计算方式是找到两点坐标之间差值的平方和的平方根。这种距离度量方式通常在机器学习中用于衡量两个数据点的相似性或差异性,换句话说,用于了解它们之间有多远。
现在我们知道了向量数据库是什么,以及它们在结构上与其他数据库的不同之处,接下来让我们来了解一下为什么它们很重要。
为什么我们需要向量数据库?
向量数据库在需要相似性搜索的各种应用中起到关键作用,比如推荐系统、基于内容的图像检索和个性化搜索。通过利用其高效的索引和搜索技术,向量数据库能够更快、更准确地检索已经表示为向量的非结构化数据,从而能够将与用户查询最相关的结果呈现给用户。
此外,使用向量数据库的其他好处包括:
- 高维数据的高效存储和索引。
- 能够处理数十亿个数据点的大规模数据集。
- 支持实时分析和查询。
- 能够处理来自图像、视频和自然语言文本等复杂数据类型所导出的向量。
- 提高机器学习和人工智能应用的性能并减少延迟。
- 与构建自定义解决方案相比,减少开发和部署时间和成本。
请注意,使用向量数据库的具体好处可能因您组织的用例和最终选择的数据库功能而异。
现在让我们从高层次评估一下Qdrant的架构方式。
Qdrant架构的高层次概述
上图是Qdrant主要组件的高层次概述。以下是Qdrant的关键术语。
- 集合(Collections):集合是一组命名的点(points)(具有有效负载的向量,大白话就是向量数据,这里集合类似MYSQL的表,点类似表里面的行数据),可以在这些点之间进行搜索。同一集合中每个点的向量必须具有相同的维度,并由单一的度量标准进行比较。可以使用命名向量来在单个点中拥有多个向量,每个向量都可以具有自己的维度和度量要求。
- 度量标准:用于测量向量之间的相似性,必须在创建集合时选择。度量标准的选择取决于向量的获取方式,特别是将用于编码新查询的神经网络(度量标准就是我们选择的向量相似度算法)。
- 点(Points):点是Qdrant操作的核心实体,由向量、可选的id和有效负载组成(可以简单的把点类比成MYSQL表的一行数据)。
- id:向量的唯一标识符。
- 向量:数据的高维表示,例如图像、声音、文档、视频等。
- 有效负载:有效负载是一个JSON对象,可以添加到向量中的附加数据(主要用于存储向量关联的业务属性)。
- 存储:Qdrant可以使用两种存储选项,内存中存储(将所有向量存储在内存中,具有最高速度,因为磁盘访问仅用于持久化)、Memmap存储(在磁盘上创建与文件相关联的虚拟地址空间)。
- 客户端:您可以使用的编程语言SDK与Qdrant进行连接,也可以直接使用rest api操作Qdrant。