来聊聊向量数据库(二)向量数据库的能力有哪些,为什么需要专用的向量数据库而非向量搜索库或者基于传统数据库增加向量索引??

友情链接

背景

上一篇内容中提到了在AI技术大力发展的背景下产生了大量的向量数据,而传统数据库无法直接处理非结构化数据背后的语义特征信息。因此,需要借助嵌入技术将将真实世界数字化的抽象出来。

本篇将为您介绍向量数据库的能力,为什么需要一个专用的向量数据库?感兴趣的小伙伴们一起看下去吧~

向量数据库介绍

在大语言模型出现之前(2020 年以前),向量检索这项技术就已经发展成熟。随着深度学习的技术,这些数据可以被提取出来,广泛应用于图片、音频、视频的搜索和推荐、人脸识别、语音识别等传统人工智能应用领域。

但是,基于标量的数据库不具有处理这类型数据的能力,难以有针对性的执行实时分析,进行业务价值的挖掘。因此,既能够存储、处理此类嵌入向量数据,又能够充分利用这些数据,提供所需性能及其他特性的专用数据库至关重要。

向量数据库是一种用来存储,检索,分析及管理海量向量式数据集的数据库,可以高效存储和索引由AI模型产生的向量嵌入数据。

向量数据库与传统关系型数据库协同发展、相互补充。针对传统关系型数据库难以处理的大规模数据、低时延高并发检索、模糊匹配等领域,向量数据库可以通过数据的向量化来满足特定需求,尤其适用于相似性搜索、机器学习以及人工智能领域。以下是向量数据库的一些优势:

  • 高维搜索:向量数据库可以高效、快速地对高维向量数据进行相似性搜索,常用于机器学习和人工智能应用,例如图像识别、自然语言处理和推荐系统;
  • 可扩展性:向量数据库可以水平扩展,高效存储和检索大量向量数据。可扩展性对于需要实时搜索和检索大量数据的应用程序来说非常重要;
  • 灵活性:向量数据库可以处理各种向量数据类型,包括稀疏向量和稠密向量。 它们还可以处理多种数据类型,包括数字、文本和二进制等等;
  • 高性能:向量数据库可以高效地执行相似性搜索,检索效率通常来说比传统的数据库更高;
  • 可定制的索引:向量数据库允许针对特定场景和数据类型定制索引方案;

向量数据库的能力

向量数据库是一种特殊类型的数据库,它可以存储和处理海量的向量数据,进行:

a) 向量检索

根据给定的向量,找出数据库中与之最相似的向量,例如在图像向量数据库中,用户输入一张图片进行搜索时,先将这张图片转换为一个向量,通过向量之间的近似检索,找到与输入图片最相似的图片;

b) 向量聚类

根据给定的相似度度量,将数据库中的向量分类,例如根据图片的内容或风格,将图片分成不同的主题;

c) 向量降维

根据给定的目标维度,将数据库中的高维向量转换成低维向量,以便于可视化或压缩存储;

d) 向量计算

根据给定的算法或模型,对数据库中的向量进行计算或分析,例如根据神经网络模型,对图片进行分类或标注;


image.png

为了更好地理解向量数据库在此类应用中的作用,可以参考下图:

image.png

大概流程是通过使用embedding model为我们要索引的内容创建向量嵌入,然后接下来向量嵌入被导入到向量数据库中。当应用发起查询时,我们使用相同的嵌入模型为查询操作创建嵌入,并使用这些嵌入在数据库中查询类似的向量嵌入与原始内容相关联,然后返回结果。

应用场景

借助向量数据库,我们可以为 AI 添加更多高阶功能,例如语义信息检索、长期记忆等。常见的应用场景有:

  • 电子商务解决方案
  • 推荐系统
  • 异常检测
  • 语义信息检索
  • 训练长期记忆
  • 根据视觉内容和风格查找与给定图像相似的图像等等...

此处我们基于星环分布式向量数据库Hippo简单介绍几个比较常见的场景:

1. 文本检索

传统的搜索引擎更偏向于词/句的精确查询。通过向量引擎提供自然语言处理能力,可以更好地支持基于语义的查询分析,让查询更满足人性化的需求。

image.png

传统搜索引擎的查询机制大多使用TF-IDF等基于单词个数的搜索方法,我们只是计算单词的出现而不考虑句子结构。一次查询请求会将需要查询的词句切分成对应的token,然后在索引中检索包含上述词/句中一个/几个或者全部,根据出现频率打分返回结果;

但是这一类查询会存在两个问题:

  1. 如果查询的词句口语化/简写/概念性的描述,不存在于词库,那么目标词汇在索引中查不到返回就是不符合预期的;
  2. 除了整句的完整查询外,查询的匹配度一般根据出现频率定义,举个例子我希望查询星环科技,如果一个文章包含大量科技这个词汇,那么即使没有星环,在某些情况查询的得分依旧很高,仍旧属于无用价值;

而基于text embedding等技术的搜索,将会考虑句子的整体含义基于向量进行查询,数据的查询机制会发生较大的改变。在一个训练较好的embedding中,向量空间中的方向与词/句意义的不同方面相关联。例如,“加拿大”的向量可能在一个方向上接近“法国”,而在另一个方向上接近“多伦多”。

再比如说“上午吃饭了吗”和“我早餐过了”这两个句子没有一个单词一样,但是其语义是完全接近的,使用text embedding就可以很好的搜索出来。

所以上图中“今天的天气”也是这样,他在向量空间中是存在相关性的,因而可能更符合我们的查询需求。当然,效果好坏,其实还是取决于本身的模型训练质量和模型使用方式。

2. 基于大语言模型(LLM)的知识库应用

大(语言)模型的出现改变了人机交互方式,带来AI技术革命,但无论是通用模型,还是微调出来的行业模型,都存在着很多问题:

  • 知识更新不及时
  • 隐私数据不安全
  • 模型回答易幻觉
  • 推理算力成本高

如何增强AI的知识,同时保护私有数据的安全?

需要通过外置的数据和工具来增强大模型能力(提示词工程)。

image.png

提示词工程示例

向量数据库可以作为LLM的中间载体承载LLM生成的各类内容,有效扩展LLM的时间与空间边界,使大模型拥有“长期记忆”,并协助解决目前企业最担忧的大模型泄露隐私问题。

image.png

基于星环分布式向量数据库Hippo,可以有效地解决大模型在知识时效性低、输入能力有限、准确度低等问题。通过将最新资料、专业知识、个人习惯等海量信息向量存储在星环分布式向量数据库Hippo中,可以极大地拓展大模型的应用边界,让大模型保持信息实时性,并能够动态调整,使大模型拥有“长期记忆”。

通过建立垂直领域的知识库,对大模型输出结果进行校正,可以提高结果的精准度,在一定程度上解决“AI幻觉”问题。此外,通过星环分布式向量数据库Hippo对向量数据进行存储,有效解除大模型对输入的限制,并且大模型在安全机制下访问向量数据库中的隐私数据,可以充分保证数据安全,杜绝隐私泄露风险。

星环向量数据库+OpenAI、Azure、ChatFLM...大模型搭建知识库的Demo示例及教程可查看:教程及演示示例

3. 相似性推荐

当然,除了上述提到的两个场景之外,向量数据库还可以通过与各类深度学习平台搭建的模型进行耦合,分析、挖掘用户行为与喜好等多方面相关数据向量化存储,通过向量相似度检索,将用户可能感兴趣的信息推送给客户,做到个性化的推荐效果。

image.png

为什么需要向量数据库?

一个优秀合格的向量数据库需要满足什么特点?

正如前面所提到的向量数据库有能力彻底改变电子商务解决方案、推荐系统、语义搜索、计算机安全、制药和许多其他行业的发展趋势。既然如此,从用户的角度出发,如果易用性不佳也没有一个好用的API,单靠一项技术如何落地呢?因此,我们认为一个优秀的向量数据库除了需要与底层技术相结合,还需满足下述特性(许多特性与结构化/半结构化数据的数据库功能重叠):

  • 扩展性:随着大模型时代的发展,生成式AI方面的技术门槛变得很低,向量化数据的规模与以往相比有着大幅度的提升,当向量数据库中存储的非结构化数据元素的数量增长到数亿或数十亿,跨多个节点的水平扩展能力将成为非常重要的因素之一;
  • 多租户和数据隔离:支持多租户是所有数据库系统的一个重要因素,可以将不同租户的数据和资源分开,保障了数据隔离性;
  • 丰富的接口:用于与向量数据库通信与管理。例如星环Hippo支持Python/RestFul/Java接口;
  • 强大的运维能力:使用起来简单,有监控运维能力,通过直观的用户界面以及管理控制台保障系统的稳定运行;
  • 易用性:向量搜索本质上是一种近似搜索,需要考虑多维度,比如召回率,所以需要调整的参数特别多。所以易用性很重要,用户需要可以轻松地使用向量数据库,聚焦在业务本身即可,无需关心底层的实现细节;

接下来的内容,我们将进一步讲解为什么需要专用的向量数据库而不仅仅是基于现有数据库增加向量索引,以及专用的向量数据库与向量搜索库相比有哪些优势。

为什么不选择基于现有数据库做封层,增加一个向量索引?

基于现有数据库做封层的方式是通过把向量当成一个列,或者也可以单独做一个新的数据类型,通过浮点的数组去表示。然后为这个向量列建一个向量索引,这样的话只需要扩展一下aql语法或者套几个UDF,只要能够把向量数据的语义表现出来,能实现ANN能力就可以。虽然好像理论上是可以的,但是深入研究会发现,里面会存在一些架构问题,向量搜索的性能也无法达到预期。

基于现有数据库做封装的方式是将向量视为一列数据,单独做一个新的数据类型,然后为这个向量列建一个向量索引,这样的话只需要扩展一下SQL语法或者使用UDF来实现向量搜索能力。虽然这种方法在理论上看起来很简单,但深入研究后会发现其中涉及一些架构性问题,影响性能和效率,无法达到预期。

核心因素在于在现有数据库中扩展新索引时,必须遵循数据库的索引规范,比如PG中的索引页面结构。否则,新索引可能无法与数据库的内存管理和存储机制协同工作,从而导致向量索引的实现与专用数据库的实现相比存在性能损失。而向量索引是向量数据库的核心,是专门为向量搜索,以及管理向量嵌入而设计的,所以在性能上有天然的优势,这一点在许多公开的测试和性能评估中也得到了验证。

另一个问题是,现有数据库在资源使用模式上与像向量搜索这样的特殊需求不匹配。在传统数据库中,存储和计算分离,计算节点主要处理复杂算子,而存储节点处理数据 IO。然而,在向量搜索中,大部分资源开销都发生在存储节点上,导致存储和计算分离策略的效果有限。这可能会影响性能和扩展性。

此外,从用户成本的角度考虑,数据库是复杂的系统,我们在向量数据库中可能并不需要传统数据库中的所有功能。在面向 AI 的场景中,传统数据库的许多功能可能并不适用,这会导致用户为不需要的功能买单。特别是对于一些公司来说,他们可能只需要一个功能完善、专业的向量数据库,而不是一个功能繁杂的通用数据库。

所以,我们追求的是提供一种专业、高效的向量数据库,以满足向量搜索等特定需求,而不是将通用数据库的功能扩展到不同场景。从星环的角度来看,我们不太倾向于采用功能复杂的通用数据库方式。

比起使用独立向量索引,向量数据库具有以下优势:

  • (1) 数据管理:向量数据库提供众所周知且易于使用的数据存储功能,例如插入、删除和更新数据。这使得向量数据的管理和维护比使用像 FAISS 这样的独立向量索引更容易,如果使用独立的向量索引的话还需要投入更多精力集成存储解决方案;
  • (2) 元数据存储和过滤:向量数据库可以存储与每个向量条目相关联的元数据。 然后,用户可以使用额外的元数据过滤器来查询数据库,以进行更细粒度的查询;
  • (3) 可扩展性:向量数据库旨在随着数据量和用户需求的增长而扩展,为分布式和并行处理提供更好的支持。独立向量索引可能需要自定义解决方案来实现类似级别的可扩展性(例如在星环成熟的分布式系统架构上进行部署和管理);
  • (4) 实时更新:向量数据库通常支持实时数据更新,允许对数据进行动态更改。但是独立的向量索引需要完整的重新索引过程来合并新数据(比如查询向量和集合中每个向量之间的距离),会非常耗时而且计算量大,可能很难扩展到数百万或数十亿个向量;
  • (5) 备份和收集:向量数据库可以处理针对数据进行备份存储,比如星环Hippo还支持跨集群备份的特性,可以满足企业针对灾备方面的需求,可以同步不同集群中针对向量数据执行的操作,支持update/delete/insert,时效性为准实时;
  • (6) 生态系统集成:向量数据库可以更轻松地与数据处理生态系统的其他组件集成,例如分析工具(星环)、可视化平台(星环)等等,大大简化了数据管理的工作流程。 它还可以轻松集成其他 AI 相关工具,如OpenAI、Azure等等;
  • (7) 数据安全和访问控制:向量数据库通常提供内置的数据安全功能和访问控制机制来保护敏感信息,比如Hippo的核心特性之一,企业级安全,拥有基于SASL的用户认证能力以及基于SSL / TLS的数据加密传输机制。这类特性在独立的向量索引解决方案中无法实现;

简而言之,向量数据库通过解决独立向量索引的局限性(例如可扩展性挑战、繁琐的集成过程以及缺乏实时更新和内置安全措施),为处理向量嵌入提供了卓越的解决方案,确保了更多有效和简化的数据管理体验。

为什么选择向量数据库而非向量搜索库?

对于向量数据领域来说最主要的两块核心技术,一个是说怎么针对此类非结构化数据(文本、图像、音频等)做特征提取,做向量化,另一块是说在做了向量化后如何在数据库层面去更快的完成向量搜索。

向量嵌入是一个数字数组,可以用作高维空间中的坐标。而向量搜索领域的关键思想则是语义上相似的向量嵌入之间的距离较小。ANN(Approximate Nearset Neighbor)近似最近邻算法可以在极短的时间内搜索向量。

专用的向量数据库并不是唯一可以执行ANN算法的方式,在向量数据库出现之前还有许多用于向量检索的向量搜索库。

既然向量搜索库也可以实现向量相似性搜索技术,为什么还需要一个专用的向量数据库?

它们在功能和可用性上有所不同。

业界经常会有人认为说向量数据库仅仅需要把ANN搜索算法包装了一下,其实不然。向量数据库的核心其实是非结构化数据的一套成熟的解决方案。

像FAISS、ScaNN、DiskANN这类轻量级ANN库的目的是帮助构建向量索引,目的是在多维向量空间中更快的找到与查询向量近似最近邻的向量。但是,如果您的数据量不大,同时,您对并发访问的性能要求不高,这么做看似是可行的,但是随着数据集规模以及访问量的增长,规模问题会越来越难以解决。因此还是需要一个专用数据库来解决性能、扩展性、弹性、成本、用户友好等多方面的因素。

大多数的向量搜索库具有以下弊端:

  • 向量搜索库的功能有限,只能处理少量的数据,并且很难根据更大的数据集和更高的用户需求进行扩展;
  • 向量搜索库不允许对其索引数据进行任何修改,需要在构建索引之前导入所有数据,如果要对索引进行任何更改,则需要从头开始重建;而且需要更多的技术专业知识进行手动配置,学习成本很高;
  • 数据导入期间无法查询;

向量数据库的优势:

  • 相比之下,向量数据库则是非结构化数据存储和检索的更佳解决方案,可以存储和查询数百万甚至数十亿个向量,处理各种类型的数据源,同时提供实时响应;而且具有高度可扩展性,可以满足用户不断增长的业务需求;
  • 向量数据库区别于向量搜索库的一个关键因素之一是能够存储和实时更新数据,向量数据库具有完整的 CRUD(创建、读取、更新和删除)的支持,解决了向量搜索库无法变更索引数据的局限性;
  • 专用向量数据库还提供许多用户友好的功能,比如星环Hippo提供的灾难恢复、基于角色的访问控制、多租户管理、企业级安全能力、友好的监控运维能力等等,用户可以更专注于业务本身,系统的稳定运行更加有保障;

总结

在AI技术快速发展的背景下,传统数据库难以处理非结构化数据的语义特征,因此向量数据库应运而生。向量数据库专门用于存储和处理由AI模型生成的大量向量数据,能够高效地执行相似性搜索、向量聚类和降维等操作,显著提升了图像识别、语音识别和推荐系统等应用的性能,与传统关系型数据库互为补充,共同满足现代数据处理需求。

本篇文章从源头介绍了为什么企业需要一个专门用于存储、检索、分析和管理海量向量数据的数据库,向量数据库的哪些特点让他具有不可替代性,希望对读者您了解向量数据库有所帮助。

为了让读者进一步了解向量数据库,下一篇将详细介绍向量数据库的底层架构以及各类索引算法的原理。

下一篇:向量数据库(三)向量数据库的底层架构及HNSW等索引算法讲解


评论
登录后可评论
发布者
星小环分享号
文章
180
问答
205
关注者
27
banner
关注星环科技
获取最新活动资讯

加入TDH社区版技术交流群

获取更多技术支持 ->

扫描二维码,立即加入