2023-07-06 12:13:07
来 源
中存储
大数据
向量数据库(Vector Database )专门用于存储和查询向量数据。向量化一般是专门的模型去实现,而不是数据库负责。

在了解什么是向量数据库(Vector Database )之前,必须先对常见的关系型数据库进行分析。

关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。

  • 同一组的实体具有相同的数据结构
  • 实体通过主键(ID)组织数据结构 (使用 树 进行存储)
  • 实体数据结构中的大部分属性都是可以参与比较的
  • 至于那些不可以参与比较的属性,无法被检索
    • 例如,数据只是编码,不能反映实体的关系,例如"太阳"、"月亮"、"星星" 编码上的比较不能反映

举例,我们可以将图片(转为二进制)存放到关系型数据库,但是我们没有办法直接以图搜图

字符串(自然语言文本)基本上也可以认为是无法比较的,因为大部分的操作都是十分昂贵的

向量化

向量可以进行比较,如果将那些不可以比较的数据转换成为向量,且这些向量的分布和距离可以反映出实体的关系,那么就可以通过比较向量的关键进行检索,也就可以实现图搜图、文搜文的功能了

巧了,通过深度学习的模型,就可以实现向量化(或者应该称为vector embeddings)。例如可以将不同尺寸、不同内容的图片映射成为同一个空间内的向量,或者将不同长度的文本映射到同一个向量空间内,在同一个空间中,相邻的向量具有相近的语义含义。(实际上向量数据库正是为了辅助深度学习而生的)

虽然向量化是基础,但是向量化一般是专门的模型去实现,而不是数据库负责。(因为模型和业务强相关,且会定期更新)

向量数据库专门用于存储和查询向量数据。如果把大模型比作人的大脑,那么向量数据库就如同海马体,能够为大模型提供长期记忆。向量数据库可以突破时间和空间上的限制,助力企业广泛挖掘数据价值。

假设一个图书馆就是一个数据库,而书就是数据库中的数据。在传统的数据库中,我们通过书名、作者、出版日期等关键词去搜索我们想要的书籍。这个过程类似于我们在数据库中通过关键词检索需要的数据。

然而,向量数据库的运作机制又是怎样的呢?在一个"向量"图书馆中,假设你不仅想找到一本特定的书,你还想找到所有和这本书类似的书,例如内容、风格、主题都相似的书。这在传统图书馆中可能是一项极具挑战的任务,因为这需要逐一浏览和对比每一本书的内容。

然而,在"向量"图书馆中,每本书都会被转换成一个向量,它像书的指纹,包含了书的所有特征信息。然后,我们可以通过计算这些向量之间的距离或相似度,找到与特定书最相似的其他书籍。这就是向量数据库的核心工作原理。

开源的向量数据库

Faiss

  • Facebook 开源的
  • 一个 C++ library
  • vector indices

Milvus

  • 基于 Faiss 开发
  • 引擎层用 C++ 写的

Qdrant

  • 基于 Rust 的向量数据库

总结

将上述提到的基本概念进行总结,向量数据库有3个关键

  • 向量化(编码)
    • 不同于字符串文本编码或者图片的编码,向量化的模型可能会不断更新,这就对向量数据库提出了更新和版本管理的需求
    • 向量化的质量,决定了向量数据库效果的上限
    • 向量化过程无法通用,至少目前没有办法,是和业务强相关的
  • 数据结构
    • 合理地构建数据结构管理向量,并保证计算和检索时候的性能
    • 这个点决定了向量数据库的性能,即决定了向量数据库效果的下限
  • 距离计算
    • 如何更合理的计算向量间的距离,同时尽量减少资源的占用

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。