什么是矢量数据库?
什么是矢量嵌入?
矢量嵌入是主题、字词、图像或任何其他数据的数字表示。矢量嵌入(也称为嵌入)由大型语言模型和其他 AI 模型生成。
矢量数据库或矢量搜索引擎可利用每个矢量嵌入之间的距离来确定矢量之间的相似度。距离可以代表数据对象的几个维度,从而使 Machine Learning 和 AI 能够理解模式、关系和底层结构。
矢量数据库是如何工作的?
矢量数据库的工作方式是使用算法对矢量嵌入建立索引和进行查询的。这些算法通过哈希、量化或基于图表的搜索来实现近似最近邻 (ANN) 搜索。
为了检索信息,ANN 搜索会找到查询的最近邻矢量。与 kNN 搜索(已知最近邻,或真正的 k 最近邻算法)相比,近似最近邻搜索的计算量较小,但准确性也较低。不过,它适用于高效、大规模地处理高维矢量的大型数据集。
矢量数据库管道类似于下图所示:
索引:使用哈希、量化或基于图表的技术,矢量数据库通过将矢量映射到给定的数据结构为矢量建立索引。这样可以实现更快的搜索速度。
- 哈希:哈希算法(例如位置敏感哈希 (LSH) 算法)最适合近似最近邻搜索,因为它可以快速得到结果,并生成近似结果。LSH 使用哈希表(想一想数独谜题)来映射最近邻。查询会被散列到一个表中,然后与同一表中的一组矢量进行比较,以确定相似度。
- 量化:量化技术(例如乘积量化 (PQ))会将矢量分解成较小的部分,并用代码表示这些部分,然后将这些部分重新组合在一起。结果是一个矢量及其分量的代码表示。这些代码的集合称为码本。当被查询时,使用量化的矢量数据库会将查询分解为代码,然后将其与码本进行匹配,以找到最相似的代码来生成结果。
- 基于图表:图表算法(例如分层可导航小世界 (HNSW) 算法)使用节点来表示矢量。它会对节点进行聚类,并在相似节点之间绘制线或边,从而创建分层图表。启动查询后,这种算法会在图表层次结构中导览,以找到包含与查询矢量最相似的矢量的节点。
矢量数据库还会为数据对象的元数据建立索引。因此,矢量数据库将包含两个索引:矢量索引和元数据索引。
查询:当矢量数据库接收到查询时,它会将索引矢量与查询矢量进行比较,以确定最近邻矢量。为了建立最近邻,矢量数据库依赖的是称为相似度度量的数学方法。目前有不同类型的相似度度量方法:
- 余弦相似度建立的相似度范围在 -1 到 1 之间。通过测量矢量空间中两个矢量之间的夹角余弦,它可以确定矢量是截然相反(用 -1 表示)、正交(用 0 表示),还是相同(用 1 表示)。
- 欧氏距离通过测量矢量之间的直线距离来确定 0 到无穷大范围内的相似度。完全相同的矢量用 0 表示,数值越大,表示矢量之间的差异越大。
- 点积相似度度量可确定负无穷大到无穷大范围内的矢量相似度。通过测量两个矢量的数量级和它们之间夹角余弦的乘积,点积为彼此远离的矢量赋予负值,为正交矢量赋予 0 值,为指向同一方向的矢量赋予正值。
后处理:矢量数据库管道的最后一步有时是后处理或后筛选,在这一步中,矢量数据库将使用不同的相似度度量来对最近邻进行重新排序。在这个阶段,数据库将根据查询的元数据筛选在搜索中识别的最近邻。
有些矢量数据库可能会在运行矢量搜索之前应用筛选。在这种情况下,它称为预处理或预筛选。
为什么矢量数据库很重要?
矢量数据库之所以重要,是因为它们包含矢量嵌入,并可以实现一系列的功能,例如:索引、距离指标和相似度搜索。换句话说,矢量数据库是专门为管理非结构化数据和半结构化数据而构建的。因此,矢量数据库是 Machine Learning 和 AI 数字领域的重要工具。
矢量数据库的核心组成部分
矢量数据库可能具有以下核心组成部分:
- 性能和容错:分片和复制的过程可确保矢量数据库具有高性能和容错性。分片涉及在多个节点上对数据进行分区,而复制涉及在不同节点上创建多个数据副本。如果某个节点出现故障,这样就可以启用容错功能并确保性能持续稳定。
- 监测功能:为了确保性能和容错性,矢量数据库需要监测资源使用情况、查询性能和整体系统运行状况。
- 访问控制功能:矢量数据库同样需要数据安全管理。访问控制规定可确保合规性、问责制和审计数据库使用情况的能力。这也意味着数据会受到保护:只有拥有权限的人员才能访问数据,并保留用户的活动记录。
- 可扩展性和可调整性:良好的访问控制功能会影响矢量数据库的可扩展性与可调整性。随着数据存储量的增加,横向扩展的能力就变得尤为重要。不同的插入率和查询率以及底层硬件的差异都会影响应用程序的需求。
- 多用户和数据隔离:在具备可扩展性和访问控制功能的同时,矢量数据库还应能够为多用户或多租户提供支持。除此之外,矢量数据库还应能够实现数据隔离,这样的情况下,除非另有要求,否则任何用户的活动(如插入、删除或查询)对其他用户而言都是私密的。
- 备份:矢量数据库会定期创建数据备份。在系统发生故障时,备份就是矢量数据库的一个关键组成部分 — 在数据丢失或数据损坏的情况下,备份可以帮助将数据库恢复到以前的状态。这样可以最大限度地减少中断时间。
- API 和 SDK:矢量数据库采用 API 构建,界面非常易于用户操作。API 是一种应用程序编程接口,或者说是一种软件,可让应用程序通过请求和响应相互“对话”。API 层简化了矢量搜索体验。SDK(软件开发工具包)通常会封装多个 API,是数据库用于通信和管理的编程语言。SDK 有助于开发人员方便地使用矢量数据库,因为他们在开发特定用例(语义搜索、推荐系统等)时不必担心底层结构。
矢量数据库和传统数据库之间有什么区别?
传统数据库以表格形式存储信息,并通过为数据点赋值来建立数据索引。当收到查询时,传统数据库会返回与查询完全匹配的结果。
矢量数据库以嵌入形式存储矢量,支持矢量搜索,并会基于相似度度量(而不是精确匹配)返回查询结果。矢量数据库在传统数据库无法做到的方面进行了“提升”:它的设计初衷就是使用矢量嵌入进行操作。
在某些应用领域(例如相似度搜索、人工智能和 Machine Learning 应用),矢量数据库较比传统数据库更为适合,因为它不仅可以进行高维度搜索和定制索引,而且还具有可扩展性、灵活性和高效性。
矢量数据库的应用
矢量数据库可用于 AI、Machine Learning (ML)、自然语言处理 (NLP) 和图像识别应用。
- AI/ML 应用:矢量数据库可以提升 AI 在语义信息检索和长期记忆方面的能力。
- NLP 应用:矢量相似度搜索是矢量数据库的关键组成部分,在自然语言处理应用中非常有用。矢量数据库可以处理文本嵌入,这使计算机能够“理解”人类(或自然)语言。
- 图像识别和检索应用:矢量数据库会将图像转换为图像嵌入。通过相似度搜索,它们能够检索相似的图像或识别匹配的图像。
矢量数据库还可用于异常检测和人脸检测等方面的应用。
适用于 Elasticsearch 的矢量数据库
Elasticsearch 包含一个用于矢量搜索的矢量数据库。借助 Elastic,开发人员能够使用 Elasticsearch Relevance Engine (ESRE) 构建自己的矢量搜索引擎。
使用 Elasticsearch 工具,您可以构建一个矢量搜索引擎,以用于搜索非结构化和结构化数据,应用筛选和分面搜索,对文本和矢量数据应用混合搜索,并在本地部署、云端或混合环境中运行的同时实现文档和字段级的安全性。
脚注
1 作者:Gu, Huaping;标题:“Unleashing the Power of Vectors:Embeddings and Vector Databases - Linkedin.”(释放矢量的力量:嵌入和矢量数据库 - Linkedin。) 发布日期:2023 年 4 月 2 日 (LinkedIn);网址:www.linkedin.com/pulse/unleashing-power-vectors-embeddings-vector-databases-huaping-gu