解读向量数据库

不论是RAG,还是Agent,几乎每个LLM驱动的应用程序都可能会用到向量数据库。那么,向量数据库是什么?与传统数据库有何不同?又如何选择向量数据库呢?本文是老码农关于向量数据库的学习笔记。

首先,我们需要理解什么是向量?

向量是基于不同特征或属性来描述对象的数据表示。每个向量代表一个单独的数据点,例如一个词或一张图片,由描述其许多特性的值的集合组成。这些变量有时被称为“特征”或“维度”。例如,一张图片可以表示为像素值的向量,整个句子也可以表示为单词嵌入的向量。

一些常用的数据向量如下:

向量数据库是一种将数据存储为高维向量的数据库,高维向量是特征或属性的数学表示。每个向量都有一定数量的维度,根据数据的复杂性和粒度,维度可以从几十到几千不等。向量通常是通过对原始数据(如文本、图像、音频、视频等)应用某种变换或嵌入函数来生成的。嵌入函数可以基于各种方法,例如机器学习模型、单词嵌入、特征提取算法。向量数据库采用索引策略来简化向量相似的特定查询。这在机器学习应用程序中特别有用,因为相似性搜索经常用于发现可比较的数据点或生成建议。

向量数据库的主要功能包括:

向量数据库的构建是为了适应向量嵌入的特定结构,并且它们使用索引算法根据向量与查询向量的相似性来有效地搜索和检索向量。

向量数据库的工作原理可以通过CPU和GPU的工作原理进行类比。CPU和GPU分别是计算机的运算和图形处理核心,而向量数据库则是大模型的记忆和存储核心。在大模型学习阶段,向量数据库接收多模态数据进行向量化表示,让大模型在训练时能够更高效地调用和处理数据。通过多线程机制和矩阵运算,GPU提供了强大的计算能力,让大模型的训练变得更加快速和高效。

区别于传统数据库,向量数据库主要有三点不同:数据向量化,向量检索和相似度计算。数据的向量化采用embedding技术,嵌入作为一个桥梁,将非数字数据转换为机器学习模型可以使用的形式,使它们能够更有效地识别数据中的模式和关系。一般的,文本是一维向量,图像是二维矩阵,视频相当于三维矩阵。这些嵌入实质上是存储数据的上下文表示的数字列表(即向量)。在存储层内,数据库以m个向量堆栈的形式存储,每个向量使用n个维度表示一个数据点,总大小为m×n。为了查询性能的原因,这些堆栈通常通过分片进行划分。

向量检索是输入一个向量,从数据库中查找与输入向量最相似的topN个向量返回。要在向量数据库中执行相似性搜索和检索,需要使用表示所需信息或条件的查询向量。查询向量可以从与存储向量相同类型的数据导出,或者从不同类型的数据导出。使用相似性度量来计算两个向量在向量空间中的距离。相似性度量可以基于各种度量,如余弦相似性、欧氏距离、向量内积,hamming距离、jaccard指数。

其中,向量检索算法是向量数据库的核心之一。向量检索可以看为是近似最近邻搜索,通过预先的索引构建来减小数据查询时的搜索空间,加快检索速度。目前主要的几种检索算法有:

向量数据库中的索引可以按照数据结构和压缩级别两个层次进行组织实现。根据数据结构建立索引的分类如下:

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

相似性搜索和检索的结果通常是与查询向量具有最高相似性得分的向量的排序列表。然后,您可以访问与原始源或索引中的每个向量关联的相应原始数据。

根据向量数据库的的实现方式,我们可以将向量数据库大致分为4类:原生的向量数据库、支持向量的全文检索数据库、支持向量的NoSQL数据库和支持向量的关系型数据库。

原生的向量数据库是专门为存储和检索向量而设计的。包括Chroma,LanceDB,Marqo,Milvus/Zilliz,Pinecone,Qdrant,Vald,Vespa,Weaviate等,所管理的数据是基于对象或数据点的向量表示进行组织和索引。这里只介绍其中的三种,具体信息可以参考各自的官网。

Faiss是一个用于高效相似性搜索和密集向量聚类的开源库。Faiss是用C++编写的,带有完整的Python/numpy包装器,一些常用算法都有GPU实现,成为了很多开源向量数据库的基础。

Faiss支持多种向量搜索技术,提供了能够在不同大小的向量集中搜索的算法,甚至可以处理那些超过内存容量的向量集。

Faiss的主要优势之一是速度和可扩展性,即使在具有数十亿个向量的数据集中也可以进行快速搜索。此外,还提供了用于评估和调整参数的辅助代码。

Pinecone是一个基于云的向量数据库,可以开发实时相似性搜索应用,能够以毫秒级的延迟存储和探索高维向量嵌入,适用于推荐系统、图片和视频搜索以及自然语言处理等应用。

Pinecone的主要功能包括自动索引、实时更新、查询自动调整和用于与当前流程进行简单交互的RESTAPI。其架构专为可扩展性和稳健性而构建,可以轻松管理海量数据,同时保持高可用性。

Pinecone是一个可以托管的向量数据库平台,也就是说有商用方案,也有免费使用方案。其主要特点包括:

Pinecone采用了多种安全措施来保护用户的数据安全和隐私。多层次的访问控制机制可以控制用户的访问权限和操作权限,同时采用了数据加密、传输加密等技术来保护数据的安全性,还提供了数据备份和恢复等功能,可以防止数据丢失和损坏。

Pinecone在性能方面表现非常出色,它能够支持高达1百万次的QPS,且具有低延迟和高吞吐量的特点,还具有分布式部署、实时索引构建和高效的向量相似度搜索等优点,可以帮助用户快速处理大规模的向量数据。

此外,Pinecone还支持多种编程语言和框架,如Python、Java、TensorFlow等,使得用户可以轻松地将其集成到自己的应用程序中。

Milvus是一个开源的分布式向量数据库,它具备高可用、高性能、易拓展的特点,用于海量向量数据的实时召回。

Milvus基于Faiss、Annoy、HNSW等向量搜索库构建,可以轻松管理数百万个实体,可以根据不同的数据特点选择最合适的索引算法,核心是解决稠密向量相似度检索的问题。在向量检索的基础上,Milvus支持数据分区分片、数据持久化、增量数据摄取、标量向量混合查询、timetravel等功能,同时大幅优化了向量检索的性能,可满足任何向量检索场景的应用需求。

Milvus还具有分布式部署、高可用性和高扩展性等优点,可以帮助用户快速处理海量的向量数据。它也提供了多种安全措施来保护用户的数据安全和隐私,支持SSL/TLS加密和访问控制等技术,可以防止数据被非法访问和窃取,还提供了数据备份和恢复等功能,可以保护数据的完整性和可用性。

此外,Milvus还提供了多种客户端SDK,如Python、Java、C++等,使得用户可以方便地使用不同的编程语言来访问和操作Milvus。

这类数据库包括Elastic/Lucene、OpenSearch和Solr。它们都具有丰富的文本检索功能,如可定制的标记器,分词器,停用词列表和N-grams等,大部分都基于开源库,且有大型集成的生态系统,包括了向量库。

例如,Elasticsearch,是一个支持各种类型数据的分布式搜索和分析引擎。Elasticsearch在7.3版本中,添加了对向量数据索引的支持,支持混合查询,但是向量检索采用的仍然是暴力计算,性能损耗较大。在8.0版本引入了knnsearch其实就是一种近似最近邻搜索算法,相似度支持欧式距离,点积和余弦相似性,knnsearch底层其实使用的是HNSW。遗憾的是,这种方式无法进行混合检索。

几乎所有这些NoSQL数据库都是最近才通过添加向量搜索扩展而具备向量能力的,所以如果要是使用的话一定要做好测试。Cassandra,Rockset,AzureCosmosDB和MongoDB等都纷纷宣布了增加向量搜索的计划。NoSQL数据库的向量搜索性能可能差别很大,这取决于所支持的向量函数、索引方法和硬件加速。

对于支持向量的NoSQL数据库,探索尝试未尝不可,但在生产环境中使用要慎之又慎。

这些大都是关系型数据库并且支持sql查询,例如SingleStoreDB,PostgreSQL,Clickhouse和Kinetica的pgvector/SupabaseVector等。它们都宣布包含了向量搜索功能,如点积,余弦相似度,欧几里得距离和曼哈顿距离,并且使用相似度分数找到n个最近邻。由于提供了混合查询,可以将向量与其他数据结合起来以获得更有意义的结果。另外,大多数SQL数据库都可以作为服务部署,可以在云上进行完全的管理。

例如,Postgres通过pg_vector和pg_embdding两个插件来实现向量数据库,让PG数据库支持向量索引检索的能力。其索引算法使用的是基于Faiss的IVFFlat索引,提供了优异的召回率。

Chroma是一个Python/TypeScript包装器,基于C++编程语言的有OLAP数据库Clickhouse以及开源向量索引HNSWLib。但如今,快速响应且可扩展的数据库通常使用现代语言如Golang或Rust编写。在专为向量数据库而构建的供应商中,唯一使用Java构建的是Vespa。

Pinecone是完全闭源的,Zilliz也是一个闭源的完全托管的商业解决方案,但它完全建立在Milvus之上,其他向量数据库至少在代码库方面是源代码可用的,具体的许可证决定了代码的可许可性以及如何部署。

众多向量数据库的检索算法都采用了HNSW,其中,Milvus的检索算法支持最为丰富。

向量数据库的典型部署方式包括本地部署和托管/云原生,两者都遵循CS架构。还有一种新的选择是嵌入式模式,其中数据库本身与应用程序代码紧密耦合,以serverless的方式运行。目前,只有Chroma和LanceDB可用作嵌入式数据库。

综上所述,主流向量数据库的部分指标对比如下:

此外,在选择向量数据库时,还需要特别考量以下因素:

传统数据库,如关系数据库,旨在存储结构化数据。这意味着数据被组织到预定义的表、行和列中,确保数据的完整性和一致性。传统数据库往往针对CRUD进行优化,旨在高效地创建、读取、更新和删除数据条目,使其适用于从Web服务到企业软件的各种应用程序。但是,一旦定义了数据库结构,进行更改可能会非常复杂且耗时。这种刚性可确保数据一致性,但灵活性可能不如某些现代数据库的无模式或动态模式性质。

特别地,向量数据库与图数据库的对比如下:

借助向量数据库,我们能够快速加载和存储事件作为嵌入,并使用向量数据库作为为AI模型提供动力的大脑,提供上下文信息,长期记忆检索,语义上的数据关联等等。向量数据库的典型使用方式如下:1.使用embeding技术创建向量2.将这些向量存储到向量数据库3.应用索引策略来组织管理向量4.使用查询向量执行相似性搜索5.从向量数据库中取得相似的向量

由于向量数据库将要查询的数据存储为嵌入向量,并且语言模型(LLM)也将其内部的知识编码为嵌入向量,因此在生成式问答应用中是天生一对。向量数据库充当知识库的功能,而LLM可以直接在嵌入空间中查询数据的子集,一般可以使用以下方法进行操作:

同样,向量数据库也面临着许多与其他数据库技术相同的挑战,需要继续努力提高可扩展性、近似精度、延迟性能和经济性。许多向量数据库在核心数据库能力方面需要提升,例如安全性、弹性、运营支持和工作负载支持的多样化。随着AI应用的成熟,未来需要的不仅仅只限于向量搜索功能。

THE END
1.一文带你读懂向量数据库(上)澎湃号·湃客澎湃新闻什么是向量数据库? 向量数据库的概述:向量数据库是一种数据库,专门设计用于存储和查询向量数据,常用于机器学习和数据科学领域。向量数据库可以高效地存储大规模的向量 什么是向量数据库? 向量数据库的概述:向量数据库是一种数据库,专门设计用于存储和查询向量数据,常用于机器学习和数据科学领域。向量数据库可以高效地存https://m.thepaper.cn/kuaibao_detail.jsp?contid=27773552
2.什么是向量数据库向量数据库简介向量数据库是一种专门用于存储和查询向量数据的数据库。向量数据的典型结构是一个一维数组,其中的元素是数值(通常是浮点数)。这些数值表示对象或数据点在多维空间中的位置、特征或属性。例如: 在自然语言处理中,一篇文章可以用一个词向量表示,每个词可以用一个数字表示其在词向量空间中的位置。 在图像处理中,一张图https://cloud.tencent.com/developer/techpedia/1953
3.2024年精选推荐的16个向量数据库:提升你的AI应用性能在人工智能时代,向量数据库已成为数据管理和AI模型不可或缺的一部分。向量数据库是一种专门设计用来存储和查询向量嵌入数据的数据库。这些向量嵌入是AI模型用于识别模式、关联和潜在结构的关键数据表示。随着AI和机器学习应用的普及,这些模型生成的嵌入包含大量属性或特征,使得它们的表示难以管理。这就是为什么数据从业者https://juejin.cn/post/7368419638987161600
4.向量数据库一文全面了解向量数据库的基本概念原理算法选型向量数据库的原理和实现,包括向量数据库的基本概念、相似性搜索算法、相似性测量算法、过滤算法和向量数据库的选型等等。向量数据库是崭新的领域,目前大部分向量数据库公司的估值乘着 AI 和 GPT 的东风从而飞速的增长,但是在实际的业务场景中,目前向量数据库的应用场景还比较少,抛开浮躁的外衣,向量数据库的应用场景还https://blog.csdn.net/a2875254060/article/details/139222079
5.列式数据库和向量化语言&开发SiddharthTeotia列式数据库有助于减少联机分析处理 (OLAP) 的负载,因为查询会涉及到列的一个子集,但这些列都有大量的行数。 列式存储格式使我们可以采用一些基于每列的轻量级压缩算法(lightweight compression algorithms) 。 向量化的数据处理通过有效使用 CPU 缓冲机制的方法,来开发更快速的分析查询引擎。 https://www.infoq.cn/article/columnar-databases-and-vectorization
6.向量数据库简介其它特征向量检索工具SPTAG 是由 Microsoft 于2019年5月发布的,基于最近邻搜索的向量检索算法库。 SPTAG 的优点是搜索速度快,毫秒内智能搜索数十亿条向量,并且在查询精确度和内存占用上表现佳。但缺点也很明显,其建图时间长,而且每次添加新向量进数据库,必须重新建图。 综上所述,当前工业界针对向量检索的实现中,并没有一个能擅长所有https://www.bookstack.cn/read/milvus-0.6-zh/aboutmilvus-vector_db.md
7.三大开源向量数据库大比拼向量数据库具有一系列广泛的好处,特别是在生成式人工智能方面,更具体地说,是在大语言模型(LLM)方面。这些好处包括先进的索引和精确的相似度搜索,有助于交付强大的先进项目。本文将对三种开源向量数据库:Chroma、Milvus和Weaviate进行如实的比较。我们将探讨它们的用例、关键特性、性能指标及支持的编程语言等,以便https://baijiahao.baidu.com/s?id=1782548694686573731&wfr=spider&for=pc
8.向量数据库Rapids VectorDB 是柏睿数据在RapidsDB(柏睿分布式全内存数据库)之上研发的一款轻量化、可扩展、高性能的向量数据库。 Rapids VectorDB 和现在的LLM以及大数据结合形成“飞轮效应”,助力企业迈向AI Native时代,为企业提供更全面的AI基础设施。企业可以借助柏睿柏睿数据的Rapids VectorDB为公司的数字化转型搭上智能的翅https://boraydata.cn/Vector_database.html
9.ZillizCloud向量数据库由Milvus 提供支持的 Zilliz 向量数据库管理系统支持亿级矢量搜索,并受到超过 1,000 家企业用户的信赖。https://zilliz.com.cn/
10.向量数据库灵活性:向量数据库提供高度的灵活性、允许容纳不同类型的数据和结构。 性能:它们提供高性能数据管理和检索、对于提高AI和ML操作的速度和效率至关重要。 可自定义索引编制:向量数据库提供可自定义的索引编制选项、可根据特定需求优化数据组织和检索。 向量数据库和用例。 http://docs.netapp.com/zh-cn/netapp-solutions/ai/vector-database-vector-database.html
11.向量数据库开源软件OSCHINA向量数据库(1) PostgresML- 基于 PostgreSQL 的 AI 应用数据库 荐 PostgresML是PostgreSQL的机器学习扩展,能让你使用SQL查询对文本和表格数据进行训练和推理。有了PostgresML,你可以将机器学习模型无缝集成到PostgreSQL数据库中 收藏32 评论1 更新于 2023/12/07 https://www.oschina.net/project/tag/505/vector-dbms
12.向量数据库向量数据库 出处:mp.weixin.qq.com 摘要随着各种大型语言模型 (LLM)的开源, 开发人员也意识到向量数据库越来越重要,因为它可以进一步增强这些模型。阅读原文 xiaozi 于2024-06-06 分享1377 海报分享 关联话题: #360 欢迎在评论区写下你对这篇文章的看法。评论https://tool.lu/index.php/article/6f5/detail
13.向量数据库大模型知识库向量数据存储向量数据检索腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持千亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用https://cloud.tencent.cn/product/vdb
14.向量数据图数据库火山引擎是字节跳动旗下的云服务平台,将字节跳动快速发展过程中积累的增长方法、技术能力和应用工具开放给外部企业,提供云基础、视频与内容分发、数智平台VeDI、人工智能、开发与运维等服务,帮助企业在数字化升级中实现持续增长。本页核心内容:向量数据图数据库https://www.volcengine.com/theme/869645-X-7-1
15.向量数据库和普通数据库的区别星环科技为您提供向量数据库和普通数据库的区别相关内容,帮助您快速了解向量数据库和普通数据库的区别。如果想了解更多向量数据库和普通数据库的区别资讯,请访问星环科技官网(www.transwarp.cn)查看更多丰富向量数据库和普通数据库的区别内容。https://www.transwarp.cn/keyword-detail/34397-1
16.什么是向量数据库,其工作原理是什么?InterSystems向量数据库(vector database)是一种数据库,用于存储、管理和查询代表图像、文本或其他信息等复杂数据的高维向量。 向量数据库是专为存储、管理和查询图像、文本甚至抽象概念等复杂数据而设计的强大工具。但是,向量数据库真正的超强之处在于能够以闪电般的速度进行相似性搜索,眨眼间就能在数字草堆中找到针。 https://www.intersystems.cn/cn/resources/what-are-vector-databases-and-how-do-they-work/
17.向量数据库Milvus向量数据库Milvus是专门设计用于处理输入向量查询的数据库,它能够处理百亿级别的向量索引。与现有的关系型数据库主要处理遵循预定义模式的结构化数据不同,Milvus从底层设计用于处理从非结构化数据转换而来的嵌入向量。 立即购买 使用限制 学习路径 了解 产品简介 简介 产品优势 应用场景 概念解释 上手 快速入门 购买向https://docs.ksyun.com/products/231
18.向量数据库技术全景本文深入探讨了向量数据库的基础概念、架构设计及实现技术,详细介绍了HNSW、FAISS和Milvus等关键算法和工具,旨在为高效管理和检索高维向量数据提供全面的技术指南。 关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验室成员,国家级大学生赛事https://www.jianshu.com/p/07f021480744
19.国内首个向量数据库标准发布科技日报北京11月15日电 (记者都芃)15日,中国信通院联合腾讯云计算(北京)有限责任公司、中移(苏州)软件技术有限公司等多家企业共同编制的、国内首个向量数据库标准正式发布,将为我国向量数据库研发、测试及选型提供重要参考,推动我国人工智能产业高质量发展。 https://kjt.hebei.gov.cn/www/kxpj22/kjqy89/293766/index.html
20.向量数据库—大模型时代的存储新基座人人都是产品经理今年,黄仁勋的一次演讲让众多人的目光聚焦到向量数据库上,作者也介绍,如果大模型是肉体,那向量数据库则是灵魂。那么,向量数据库到底存在哪些我们不知道的潜在能力呢?让我们看看作者的分析吧~ AI大模型基座在以【日更】进展的同时,也给资本市场带来了焦虑的情绪价值:估值 130 亿美元的 AI 写作工具 Grammarly 在 Chahttps://www.woshipm.com/ai/5848163.html