在上一篇内容中提到了在AI技术大力发展的背景下产生了大量的向量数据,而传统数据库无法直接处理非结构化数据背后的语义特征信息。因此,需要借助嵌入技术将将真实世界数字化的抽象出来。
本篇将为您介绍向量数据库的能力,为什么需要一个专用的向量数据库?感兴趣的小伙伴们一起看下去吧~
在大语言模型出现之前(2020 年以前),向量检索这项技术就已经发展成熟。随着深度学习的技术,这些数据可以被提取出来,广泛应用于图片、音频、视频的搜索和推荐、人脸识别、语音识别等传统人工智能应用领域。
但是,基于标量的数据库不具有处理这类型数据的能力,难以有针对性的执行实时分析,进行业务价值的挖掘。因此,既能够存储、处理此类嵌入向量数据,又能够充分利用这些数据,提供所需性能及其他特性的专用数据库至关重要。
向量数据库是一种用来存储,检索,分析及管理海量向量式数据集的数据库,可以高效存储和索引由AI模型产生的向量嵌入数据。
向量数据库与传统关系型数据库协同发展、相互补充。针对传统关系型数据库难以处理的大规模数据、低时延高并发检索、模糊匹配等领域,向量数据库可以通过数据的向量化来满足特定需求,尤其适用于相似性搜索、机器学习以及人工智能领域。以下是向量数据库的一些优势:
向量数据库是一种特殊类型的数据库,它可以存储和处理海量的向量数据,进行:
根据给定的向量,找出数据库中与之最相似的向量,例如在图像向量数据库中,用户输入一张图片进行搜索时,先将这张图片转换为一个向量,通过向量之间的近似检索,找到与输入图片最相似的图片;
根据给定的相似度度量,将数据库中的向量分类,例如根据图片的内容或风格,将图片分成不同的主题;
根据给定的目标维度,将数据库中的高维向量转换成低维向量,以便于可视化或压缩存储;
根据给定的算法或模型,对数据库中的向量进行计算或分析,例如根据神经网络模型,对图片进行分类或标注;
为了更好地理解向量数据库在此类应用中的作用,可以参考下图:
大概流程是通过使用embedding model为我们要索引的内容创建向量嵌入,然后接下来向量嵌入被导入到向量数据库中。当应用发起查询时,我们使用相同的嵌入模型为查询操作创建嵌入,并使用这些嵌入在数据库中查询类似的向量嵌入与原始内容相关联,然后返回结果。
借助向量数据库,我们可以为 AI 添加更多高阶功能,例如语义信息检索、长期记忆等。常见的应用场景有:
此处我们基于星环分布式向量数据库Hippo简单介绍几个比较常见的场景:
传统的搜索引擎更偏向于词/句的精确查询。通过向量引擎提供自然语言处理能力,可以更好地支持基于语义的查询分析,让查询更满足人性化的需求。
传统搜索引擎的查询机制大多使用TF-IDF等基于单词个数的搜索方法,我们只是计算单词的出现而不考虑句子结构。一次查询请求会将需要查询的词句切分成对应的token,然后在索引中检索包含上述词/句中一个/几个或者全部,根据出现频率打分返回结果;
但是这一类查询会存在两个问题:
而基于text embedding等技术的搜索,将会考虑句子的整体含义基于向量进行查询,数据的查询机制会发生较大的改变。在一个训练较好的embedding中,向量空间中的方向与词/句意义的不同方面相关联。例如,“加拿大”的向量可能在一个方向上接近“法国”,而在另一个方向上接近“多伦多”。
再比如说“上午吃饭了吗”和“我早餐过了”这两个句子没有一个单词一样,但是其语义是完全接近的,使用text embedding就可以很好的搜索出来。
所以上图中“今天的天气”也是这样,他在向量空间中是存在相关性的,因而可能更符合我们的查询需求。当然,效果好坏,其实还是取决于本身的模型训练质量和模型使用方式。
大(语言)模型的出现改变了人机交互方式,带来AI技术革命,但无论是通用模型,还是微调出来的行业模型,都存在着很多问题:
如何增强AI的知识,同时保护私有数据的安全?
需要通过外置的数据和工具来增强大模型能力(提示词工程)。
提示词工程示例
向量数据库可以作为LLM的中间载体承载LLM生成的各类内容,有效扩展LLM的时间与空间边界,使大模型拥有“长期记忆”,并协助解决目前企业最担忧的大模型泄露隐私问题。
基于星环分布式向量数据库Hippo,可以有效地解决大模型在知识时效性低、输入能力有限、准确度低等问题。通过将最新资料、专业知识、个人习惯等海量信息向量存储在星环分布式向量数据库Hippo中,可以极大地拓展大模型的应用边界,让大模型保持信息实时性,并能够动态调整,使大模型拥有“长期记忆”。
通过建立垂直领域的知识库,对大模型输出结果进行校正,可以提高结果的精准度,在一定程度上解决“AI幻觉”问题。此外,通过星环分布式向量数据库Hippo对向量数据进行存储,有效解除大模型对输入的限制,并且大模型在安全机制下访问向量数据库中的隐私数据,可以充分保证数据安全,杜绝隐私泄露风险。
星环向量数据库+OpenAI、Azure、ChatFLM...大模型搭建知识库的Demo示例及教程可查看:教程及演示示例
当然,除了上述提到的两个场景之外,向量数据库还可以通过与各类深度学习平台搭建的模型进行耦合,分析、挖掘用户行为与喜好等多方面相关数据向量化存储,通过向量相似度检索,将用户可能感兴趣的信息推送给客户,做到个性化的推荐效果。
一个优秀合格的向量数据库需要满足什么特点?
正如前面所提到的向量数据库有能力彻底改变电子商务解决方案、推荐系统、语义搜索、计算机安全、制药和许多其他行业的发展趋势。既然如此,从用户的角度出发,如果易用性不佳也没有一个好用的API,单靠一项技术如何落地呢?因此,我们认为一个优秀的向量数据库除了需要与底层技术相结合,还需满足下述特性(许多特性与结构化/半结构化数据的数据库功能重叠):
接下来的内容,我们将进一步讲解为什么需要专用的向量数据库而不仅仅是基于现有数据库增加向量索引,以及专用的向量数据库与向量搜索库相比有哪些优势。
基于现有数据库做封层的方式是通过把向量当成一个列,或者也可以单独做一个新的数据类型,通过浮点的数组去表示。然后为这个向量列建一个向量索引,这样的话只需要扩展一下aql语法或者套几个UDF,只要能够把向量数据的语义表现出来,能实现ANN能力就可以。虽然好像理论上是可以的,但是深入研究会发现,里面会存在一些架构问题,向量搜索的性能也无法达到预期。
基于现有数据库做封装的方式是将向量视为一列数据,单独做一个新的数据类型,然后为这个向量列建一个向量索引,这样的话只需要扩展一下SQL语法或者使用UDF来实现向量搜索能力。虽然这种方法在理论上看起来很简单,但深入研究后会发现其中涉及一些架构性问题,影响性能和效率,无法达到预期。
核心因素在于在现有数据库中扩展新索引时,必须遵循数据库的索引规范,比如PG中的索引页面结构。否则,新索引可能无法与数据库的内存管理和存储机制协同工作,从而导致向量索引的实现与专用数据库的实现相比存在性能损失。而向量索引是向量数据库的核心,是专门为向量搜索,以及管理向量嵌入而设计的,所以在性能上有天然的优势,这一点在许多公开的测试和性能评估中也得到了验证。
另一个问题是,现有数据库在资源使用模式上与像向量搜索这样的特殊需求不匹配。在传统数据库中,存储和计算分离,计算节点主要处理复杂算子,而存储节点处理数据 IO。然而,在向量搜索中,大部分资源开销都发生在存储节点上,导致存储和计算分离策略的效果有限。这可能会影响性能和扩展性。
此外,从用户成本的角度考虑,数据库是复杂的系统,我们在向量数据库中可能并不需要传统数据库中的所有功能。在面向 AI 的场景中,传统数据库的许多功能可能并不适用,这会导致用户为不需要的功能买单。特别是对于一些公司来说,他们可能只需要一个功能完善、专业的向量数据库,而不是一个功能繁杂的通用数据库。
所以,我们追求的是提供一种专业、高效的向量数据库,以满足向量搜索等特定需求,而不是将通用数据库的功能扩展到不同场景。从星环的角度来看,我们不太倾向于采用功能复杂的通用数据库方式。
比起使用独立向量索引,向量数据库具有以下优势:
简而言之,向量数据库通过解决独立向量索引的局限性(例如可扩展性挑战、繁琐的集成过程以及缺乏实时更新和内置安全措施),为处理向量嵌入提供了卓越的解决方案,确保了更多有效和简化的数据管理体验。
对于向量数据领域来说最主要的两块核心技术,一个是说怎么针对此类非结构化数据(文本、图像、音频等)做特征提取,做向量化,另一块是说在做了向量化后如何在数据库层面去更快的完成向量搜索。
向量嵌入是一个数字数组,可以用作高维空间中的坐标。而向量搜索领域的关键思想则是语义上相似的向量嵌入之间的距离较小。ANN(Approximate Nearset Neighbor)近似最近邻算法可以在极短的时间内搜索向量。
专用的向量数据库并不是唯一可以执行ANN算法的方式,在向量数据库出现之前还有许多用于向量检索的向量搜索库。
既然向量搜索库也可以实现向量相似性搜索技术,为什么还需要一个专用的向量数据库?
它们在功能和可用性上有所不同。
业界经常会有人认为说向量数据库仅仅需要把ANN搜索算法包装了一下,其实不然。向量数据库的核心其实是非结构化数据的一套成熟的解决方案。
像FAISS、ScaNN、DiskANN这类轻量级ANN库的目的是帮助构建向量索引,目的是在多维向量空间中更快的找到与查询向量近似最近邻的向量。但是,如果您的数据量不大,同时,您对并发访问的性能要求不高,这么做看似是可行的,但是随着数据集规模以及访问量的增长,规模问题会越来越难以解决。因此还是需要一个专用数据库来解决性能、扩展性、弹性、成本、用户友好等多方面的因素。
在AI技术快速发展的背景下,传统数据库难以处理非结构化数据的语义特征,因此向量数据库应运而生。向量数据库专门用于存储和处理由AI模型生成的大量向量数据,能够高效地执行相似性搜索、向量聚类和降维等操作,显著提升了图像识别、语音识别和推荐系统等应用的性能,与传统关系型数据库互为补充,共同满足现代数据处理需求。
本篇文章从源头介绍了为什么企业需要一个专门用于存储、检索、分析和管理海量向量数据的数据库,向量数据库的哪些特点让他具有不可替代性,希望对读者您了解向量数据库有所帮助。
为了让读者进一步了解向量数据库,下一篇将详细介绍向量数据库的底层架构以及各类索引算法的原理。
下一篇:向量数据库(三)向量数据库的底层架构及HNSW等索引算法讲解
在上一篇内容中提到了在AI技术大力发展的背景下产生了大量的向量数据,而传统数据库无法直接处理非结构化数据背后的语义特征信息。因此,需要借助嵌入技术将将真实世界数字化的抽象出来。
本篇将为您介绍向量数据库的能力,为什么需要一个专用的向量数据库?感兴趣的小伙伴们一起看下去吧~
在大语言模型出现之前(2020 年以前),向量检索这项技术就已经发展成熟。随着深度学习的技术,这些数据可以被提取出来,广泛应用于图片、音频、视频的搜索和推荐、人脸识别、语音识别等传统人工智能应用领域。
但是,基于标量的数据库不具有处理这类型数据的能力,难以有针对性的执行实时分析,进行业务价值的挖掘。因此,既能够存储、处理此类嵌入向量数据,又能够充分利用这些数据,提供所需性能及其他特性的专用数据库至关重要。
向量数据库是一种用来存储,检索,分析及管理海量向量式数据集的数据库,可以高效存储和索引由AI模型产生的向量嵌入数据。
向量数据库与传统关系型数据库协同发展、相互补充。针对传统关系型数据库难以处理的大规模数据、低时延高并发检索、模糊匹配等领域,向量数据库可以通过数据的向量化来满足特定需求,尤其适用于相似性搜索、机器学习以及人工智能领域。以下是向量数据库的一些优势:
向量数据库是一种特殊类型的数据库,它可以存储和处理海量的向量数据,进行:
根据给定的向量,找出数据库中与之最相似的向量,例如在图像向量数据库中,用户输入一张图片进行搜索时,先将这张图片转换为一个向量,通过向量之间的近似检索,找到与输入图片最相似的图片;
根据给定的相似度度量,将数据库中的向量分类,例如根据图片的内容或风格,将图片分成不同的主题;
根据给定的目标维度,将数据库中的高维向量转换成低维向量,以便于可视化或压缩存储;
根据给定的算法或模型,对数据库中的向量进行计算或分析,例如根据神经网络模型,对图片进行分类或标注;
为了更好地理解向量数据库在此类应用中的作用,可以参考下图:
大概流程是通过使用embedding model为我们要索引的内容创建向量嵌入,然后接下来向量嵌入被导入到向量数据库中。当应用发起查询时,我们使用相同的嵌入模型为查询操作创建嵌入,并使用这些嵌入在数据库中查询类似的向量嵌入与原始内容相关联,然后返回结果。
借助向量数据库,我们可以为 AI 添加更多高阶功能,例如语义信息检索、长期记忆等。常见的应用场景有:
此处我们基于星环分布式向量数据库Hippo简单介绍几个比较常见的场景:
传统的搜索引擎更偏向于词/句的精确查询。通过向量引擎提供自然语言处理能力,可以更好地支持基于语义的查询分析,让查询更满足人性化的需求。
传统搜索引擎的查询机制大多使用TF-IDF等基于单词个数的搜索方法,我们只是计算单词的出现而不考虑句子结构。一次查询请求会将需要查询的词句切分成对应的token,然后在索引中检索包含上述词/句中一个/几个或者全部,根据出现频率打分返回结果;
但是这一类查询会存在两个问题:
而基于text embedding等技术的搜索,将会考虑句子的整体含义基于向量进行查询,数据的查询机制会发生较大的改变。在一个训练较好的embedding中,向量空间中的方向与词/句意义的不同方面相关联。例如,“加拿大”的向量可能在一个方向上接近“法国”,而在另一个方向上接近“多伦多”。
再比如说“上午吃饭了吗”和“我早餐过了”这两个句子没有一个单词一样,但是其语义是完全接近的,使用text embedding就可以很好的搜索出来。
所以上图中“今天的天气”也是这样,他在向量空间中是存在相关性的,因而可能更符合我们的查询需求。当然,效果好坏,其实还是取决于本身的模型训练质量和模型使用方式。
大(语言)模型的出现改变了人机交互方式,带来AI技术革命,但无论是通用模型,还是微调出来的行业模型,都存在着很多问题:
如何增强AI的知识,同时保护私有数据的安全?
需要通过外置的数据和工具来增强大模型能力(提示词工程)。
提示词工程示例
向量数据库可以作为LLM的中间载体承载LLM生成的各类内容,有效扩展LLM的时间与空间边界,使大模型拥有“长期记忆”,并协助解决目前企业最担忧的大模型泄露隐私问题。
基于星环分布式向量数据库Hippo,可以有效地解决大模型在知识时效性低、输入能力有限、准确度低等问题。通过将最新资料、专业知识、个人习惯等海量信息向量存储在星环分布式向量数据库Hippo中,可以极大地拓展大模型的应用边界,让大模型保持信息实时性,并能够动态调整,使大模型拥有“长期记忆”。
通过建立垂直领域的知识库,对大模型输出结果进行校正,可以提高结果的精准度,在一定程度上解决“AI幻觉”问题。此外,通过星环分布式向量数据库Hippo对向量数据进行存储,有效解除大模型对输入的限制,并且大模型在安全机制下访问向量数据库中的隐私数据,可以充分保证数据安全,杜绝隐私泄露风险。
星环向量数据库+OpenAI、Azure、ChatFLM...大模型搭建知识库的Demo示例及教程可查看:教程及演示示例
当然,除了上述提到的两个场景之外,向量数据库还可以通过与各类深度学习平台搭建的模型进行耦合,分析、挖掘用户行为与喜好等多方面相关数据向量化存储,通过向量相似度检索,将用户可能感兴趣的信息推送给客户,做到个性化的推荐效果。
一个优秀合格的向量数据库需要满足什么特点?
正如前面所提到的向量数据库有能力彻底改变电子商务解决方案、推荐系统、语义搜索、计算机安全、制药和许多其他行业的发展趋势。既然如此,从用户的角度出发,如果易用性不佳也没有一个好用的API,单靠一项技术如何落地呢?因此,我们认为一个优秀的向量数据库除了需要与底层技术相结合,还需满足下述特性(许多特性与结构化/半结构化数据的数据库功能重叠):
接下来的内容,我们将进一步讲解为什么需要专用的向量数据库而不仅仅是基于现有数据库增加向量索引,以及专用的向量数据库与向量搜索库相比有哪些优势。
基于现有数据库做封层的方式是通过把向量当成一个列,或者也可以单独做一个新的数据类型,通过浮点的数组去表示。然后为这个向量列建一个向量索引,这样的话只需要扩展一下aql语法或者套几个UDF,只要能够把向量数据的语义表现出来,能实现ANN能力就可以。虽然好像理论上是可以的,但是深入研究会发现,里面会存在一些架构问题,向量搜索的性能也无法达到预期。
基于现有数据库做封装的方式是将向量视为一列数据,单独做一个新的数据类型,然后为这个向量列建一个向量索引,这样的话只需要扩展一下SQL语法或者使用UDF来实现向量搜索能力。虽然这种方法在理论上看起来很简单,但深入研究后会发现其中涉及一些架构性问题,影响性能和效率,无法达到预期。
核心因素在于在现有数据库中扩展新索引时,必须遵循数据库的索引规范,比如PG中的索引页面结构。否则,新索引可能无法与数据库的内存管理和存储机制协同工作,从而导致向量索引的实现与专用数据库的实现相比存在性能损失。而向量索引是向量数据库的核心,是专门为向量搜索,以及管理向量嵌入而设计的,所以在性能上有天然的优势,这一点在许多公开的测试和性能评估中也得到了验证。
另一个问题是,现有数据库在资源使用模式上与像向量搜索这样的特殊需求不匹配。在传统数据库中,存储和计算分离,计算节点主要处理复杂算子,而存储节点处理数据 IO。然而,在向量搜索中,大部分资源开销都发生在存储节点上,导致存储和计算分离策略的效果有限。这可能会影响性能和扩展性。
此外,从用户成本的角度考虑,数据库是复杂的系统,我们在向量数据库中可能并不需要传统数据库中的所有功能。在面向 AI 的场景中,传统数据库的许多功能可能并不适用,这会导致用户为不需要的功能买单。特别是对于一些公司来说,他们可能只需要一个功能完善、专业的向量数据库,而不是一个功能繁杂的通用数据库。
所以,我们追求的是提供一种专业、高效的向量数据库,以满足向量搜索等特定需求,而不是将通用数据库的功能扩展到不同场景。从星环的角度来看,我们不太倾向于采用功能复杂的通用数据库方式。
比起使用独立向量索引,向量数据库具有以下优势:
简而言之,向量数据库通过解决独立向量索引的局限性(例如可扩展性挑战、繁琐的集成过程以及缺乏实时更新和内置安全措施),为处理向量嵌入提供了卓越的解决方案,确保了更多有效和简化的数据管理体验。
对于向量数据领域来说最主要的两块核心技术,一个是说怎么针对此类非结构化数据(文本、图像、音频等)做特征提取,做向量化,另一块是说在做了向量化后如何在数据库层面去更快的完成向量搜索。
向量嵌入是一个数字数组,可以用作高维空间中的坐标。而向量搜索领域的关键思想则是语义上相似的向量嵌入之间的距离较小。ANN(Approximate Nearset Neighbor)近似最近邻算法可以在极短的时间内搜索向量。
专用的向量数据库并不是唯一可以执行ANN算法的方式,在向量数据库出现之前还有许多用于向量检索的向量搜索库。
既然向量搜索库也可以实现向量相似性搜索技术,为什么还需要一个专用的向量数据库?
它们在功能和可用性上有所不同。
业界经常会有人认为说向量数据库仅仅需要把ANN搜索算法包装了一下,其实不然。向量数据库的核心其实是非结构化数据的一套成熟的解决方案。
像FAISS、ScaNN、DiskANN这类轻量级ANN库的目的是帮助构建向量索引,目的是在多维向量空间中更快的找到与查询向量近似最近邻的向量。但是,如果您的数据量不大,同时,您对并发访问的性能要求不高,这么做看似是可行的,但是随着数据集规模以及访问量的增长,规模问题会越来越难以解决。因此还是需要一个专用数据库来解决性能、扩展性、弹性、成本、用户友好等多方面的因素。
在AI技术快速发展的背景下,传统数据库难以处理非结构化数据的语义特征,因此向量数据库应运而生。向量数据库专门用于存储和处理由AI模型生成的大量向量数据,能够高效地执行相似性搜索、向量聚类和降维等操作,显著提升了图像识别、语音识别和推荐系统等应用的性能,与传统关系型数据库互为补充,共同满足现代数据处理需求。
本篇文章从源头介绍了为什么企业需要一个专门用于存储、检索、分析和管理海量向量数据的数据库,向量数据库的哪些特点让他具有不可替代性,希望对读者您了解向量数据库有所帮助。
为了让读者进一步了解向量数据库,下一篇将详细介绍向量数据库的底层架构以及各类索引算法的原理。
下一篇:向量数据库(三)向量数据库的底层架构及HNSW等索引算法讲解