看到了吧,在现有大语言模型的理解能力下,我们已经不需要 fine-tune 了,只需要外接一个知识库,就能很快地得到最新的知识。
简单,好用。
Vector DB 的发展历程 —— 好莱坞英雄成长史
Vector DB 的故事就像一部好莱坞大片中的励志英雄,从默默无闻到大放异彩。它的起源可以追溯到生物技术和基因研究领域的兴起。在 20 世纪 70 年代末,DNA 测序作为一个新兴的研究领域开始引起人们的关注。为了存储大量的 DNA 链数据,科学家们需要一种新的方法,这种方法需要能够处理高维向量。这就是 Vector DB 的诞生,它是一种可以将任何类型的数据转化为向量的数据库,能够计算数据之间的相似度,从而实现数据的分类、聚类和检索等功能。
然而,这个时期的 Vector DB 还相当初级,它只能处理文本数据,无法处理图像、音频、视频等其他类型的数据;它只能计算数据的表面相似度,无法计算数据的深层相似度;它只能处理静态的数据,无法处理动态的数据。尽管如此,它已经展现出了其独特的潜力和魅力。
在 Vector DB 出现之前,大家普遍使用的是关系型数据库,如 MySQL、Oracle 等,这些数据库以表格的形式存储数据,适合存储结构化数据,但对于非结构化数据,如文本、图像、音频等,处理起来就相对困难。而且,关系型数据库在处理大规模数据时,性能会下降,不适合大数据处理。这就像是在一个拥挤的图书馆里找一本书,你知道它在哪个书架上,但是找到它还需要花费大量的时间。但是在当时,这已经足够了。
随着时间的推移,我们看到 Vector DB 在不同的领域和应用中不断成长和进化。从 20 世纪 90 年代末到 2000 年初,美国国立卫生研究院和斯坦福大学都开始使用 Vector DB,他们利用 Vector DB 进行了一系列的基因研究,发表了多篇高质量的论文 [2]。随着 2005 年到 2015 年间基因研究的深入和加速,Vector DB 也在并行中增长,像 UniVec 数据库这样的工具在 2017 年就已经被广泛使用 [5],它们在基因序列比对、基因组注释等领域发挥了重要作用 [3,4]。
此时,随着数据类型和规模的多样化,关系型数据库的局限性也逐渐暴露出来。首先,关系型数据库主要适用于结构化数据,对于非结构化数据,如文本、图像、音频等,处理起来就相对困难。其次,关系型数据库在处理大规模数据时,性能会下降,不适合大数据处理。最后,关系型数据库的查询语言(如 SQL)虽然强大,但对于复杂的查询和分析任务,可能需要编写复杂的 SQL 语句,这对于非专业的用户来说,可能是一个挑战。
在 2017 年和 2019 年之间,我们见证了 Vector DB 的爆炸式增长,它开始被应用于自然语言处理、计算机视觉、推荐系统等领域。这些领域都需要处理大量和多样化的数据,并从中提取有价值的信息。Vector DB 通过使用诸如余弦相似度、欧氏距离、Jaccard 相似度等度量方法 [6],以及诸如倒排索引、局部敏感哈希、乘积量化等索引技术 [18],实现了高效和准确的向量检索。大家大多应该听说过或者用过推荐系统、以图搜图 (淘宝的用图搜产品)、哼唱搜歌、问答机器人等等,这些的内核都是 Vector DB。
就在我们以为故事已经到达高潮的时候,Vector DB 又给我们带来了一个惊喜。在今年,Vector DB 开始被用于与大语言模型结合的应用。它为大语言模型提供了一个外部知识库,使得大语言模型可以根据用户的查询,在 Vector DB 中检索相关的数据,并根据数据的内容和语义来更新上下文,从而生成更相关和准确的文本。这些大语言模型通常使用深度神经网络来学习文本数据中隐含的规律和结构,并能够生成流畅和连贯的文本。Vector DB 通过使用诸如 BERT、GPT 等预训练模型将文本转换为向量,并使用诸如 FAISS、Milvus 等开源平台来构建和管理向量数据库。
Vector DB 成功地解决了很多挑战,并为人们带来了很多价值。它采用了一种新的数据结构和算法,可以有效地存储和检索向量,可以保证检索的准确性和效率,可以处理大规模和复杂的数据。它还可以与其他工具和平台结合,提供更多功能和服务。它已经成为了一个不可或缺的工具,为人们提供了更好的信息获取和交流体验。它不仅打败了其他 DB,还赢得了用户的心。
然而,这部大片依然未完待续,Vector DB 仍有改进的空间。例如,它在处理大规模数据时,可能会面临存储和计算资源的挑战,这就像是在一个无底的大海中寻找一颗珍珠;在处理复杂的查询时,可能会面临性能和准确性的挑战,这就像是在一个复杂的迷宫中寻找出口;在处理动态的数据时,可能会面临数据更新和同步的挑战,这就像是在一个不断变化的沙漠中寻找一个固定的地标。
然而,我们有理由相信,随着技术的不断发展和进步,Vector DB 将会越来越强大,越来越完善,为我们的生活带来更多的便利和价值。就像我们的励志英雄,无论面临多大的困难和挑战,都会不断地前进,不断地成长,最终实现自己的目标。这部大片还没有结束,Vector DB 依然在刻苦努力着,保持着这来之不易的成功。
在介绍 Vector DB 近期做出的努力之前,不得不说的是,Vector DB 和关系型数据库是各有优势的,选择哪种数据库取决于具体的应用需求。如果你需要处理的是结构化数据,并且数据规模不大,那么关系型数据库可能是一个好选择。但如果你需要处理的是非结构化数据,或者需要处理大规模的数据,那么 Vector DB 可能是一个更好的选择。
Vector DB 的技术内核 —— 超级英雄的武器
为了更加了解我们的超级英雄,我们先从超级英雄的日常生活开始。想象一下,你是一个超级英雄,你的任务是理解和处理海量的信息。你的工具是一种叫做 Vector DB 的新型数据库,它可以存储和处理嵌入向量 (Embeddings)。Sounds cool, right? 但是,这并不是一件轻松的事情。你需要处理的问题包括如何将数据转化为向量 (向量嵌入),如何度量向量之间的相似性 (相似度度量),如何索引和检索向量 (向量索引和检索),以及如何压缩向量以节省存储空间 (向量压缩)。这些都是 Vector DB 的核心技术,也是你作为超级大脑的主要烦恼。
那让我们来一起探索 Vector DB 的技术内核,看看这个超级英雄每天是如何工作的。让我们用一个例子来更方便的理解这些步骤。假设作为超级英雄,你的任务是管理一个巨大的图书馆。这个图书馆有各种各样的书,包括小说、诗歌、科学论文、历史书籍等等。你的目标是让读者能够快速准确地找到他们想要的书。
首先,你需要将每本书转化为一个向量。这就像是给每本书创建一个独特的指纹,这个指纹可以反映出书的内容、风格、主题等关键信息。这个过程就是向量嵌入。这是一个很大的话题,这篇文章里暂时不会很详细的涉及,但是得益于 AI 的发展,现在嵌入都能较好的表征他们想要表征的数据了 [7]。
在假设我们能够得到很好的表征之后,你就需要度量向量之间的相似性了。这就像是比较两本书的指纹,看看它们有多么相似。这个过程就是相似度度量。在早期,我们可能会使用欧几里得距离或者余弦相似度来度量相似性。但是,随着时间的推移,我们发现这些方法在处理高维数据时可能会遇到困难。
因此,现代的相似度度量方法,如最近邻搜索 (Nearest Neighbor Search) 和局部敏感哈希 (Locality-Sensitive Hashing) 等,被开发出来 [8]。这些方法可以更有效地处理高维数据,提供更准确的相似度度量。接下来,你需要索引和检索向量。这就像是创建一个图书馆的目录,让读者可以根据他们的需求快速找到他们想要的书。这个过程就是向量索引和检索。在早期,我们可能会使用线性搜索或者树形结构来索引和检索向量。但是,随着数据量的增长,这些方法可能会变得效率低下。因此,现代的向量索引和检索方法,如倒排索引 (Inverted Index) 和乘积量化 (Product Quantization) 等,被开发出来 [9]。这些方法可以更有效地处理大规模数据,提供更快速的索引和检索。
最后,你需要压缩向量以节省存储空间。这就像是将书的内容进行压缩,让它们占用更少的空间。这个过程就是向量压缩。在早期,我们可能会使用简单的压缩算法,如 Huffman 编码或者 Run-Length 编码来压缩向量。但是,随着数据量的增长,这些方法可能无法满足压缩需求。因此,现代的向量压缩方法,如乘积量化 (Product Quantization) 和优化乘积量化 (Optimized Product Quantization) 等,被开发出来 [10]。这些方法可以更有效地压缩向量,提供更高的压缩比。
读到这里,如果你是 AI 专业的人,你可能已经意识到,虽然向量嵌入和相似度度量都是重要的问题,但是在 Vector DB 的发展中,得益于 AI 的发展,嵌入已经不算最大的问题了。当下要解决的最主要的问题其实是向量索引和向量检索。这是因为,随着数据量的增长,如何有效地索引和检索向量成为了一个巨大的挑战。
索引,检索,压缩 —— 超级英雄的烦恼
(非技术人员撤离警告)
但是你知道吗,即使已经成了超级英雄,也有自己的烦恼。超级英雄的故事已经讲完了,我们来看看 VectorDB 究竟做了什么努力。首先,我们正式的定义一下这个过程(图 2):