矢量数据库简单介绍:在 Postgres使用 pg_vector
作为向人工智能大规模转变的一部分,矢量数据库越来越受欢迎。它们也称为矢量化数据库,在人工智能领域发挥着至关重要的作用,因此了解它们的工作原理非常重要。为此,我们首先需要了解什么是向量。
什么是向量?
向量是表示文本或图像等 非结构化数据 的数字数组。
例如,让我们将这些句子表示为向量:
s1 = “I love data”
s2 = “I love candy”
我们可以采用所有单词并创建具有四个维度(每个术语一个)的所谓“词袋”(BoW)模型:
BoW 的问题在于,它们依赖于词频,并且假设每个单词独立于其他单词出现,这是不切实际的假设。这是一个显着的简化,因为在自然语言中,上下文和含义通常在很大程度上取决于词序和词之间的关系。例如,“not good”和“good”在 BoW 模型中被视为相同的两个单词,即使由于“not”的存在而导致它们的含义相反。
为了解决这些限制,开发了更先进的技术。其中包括诸如词嵌入(或嵌入)之类的模型,它们通过考虑单词出现的上下文来捕获更多语义信息。
什么是嵌入(Embedding)?
由神经网络创建的具有大量维度的向量,这些向量是通过预测每个单词的相邻单词可能是什么来创建的。
下面是使用 200 个维度的 Word2Vec 模型生成的嵌入的可视化。您可以使用 Tensorflow Projector 进行模拟.
这个想法是将这些嵌入保存到数据库中以便快速检索。
什么是矢量索引与矢量数据库?
“索引”是一种提高数据库表数据检索操作速度的数据结构。
矢量索引是一种用于根据矢量内容有效地组织和检索矢量的机制。
矢量数据库是一种专门为高效处理和存储矢量数据而设计的数据库。它是一个数据库,包含旨在管理矢量数据的功能,包括存储、检索和查询处理。它可以利用向量索引作为其高效面向向量操作策略的一部分。
什么是 pg_vector?
Postgres 的开源矢量相似性搜索。如果您现在拥有或使用 Postgres,则可以安装 pg_vector 扩展以向 Postgres 添加矢量数据库功能。转到项目GitHub - pgvector/pgvector: Open-source vector similarity search for Postgres以获取安装说明。
pg_vector 入门
要在 Postgres 中启用它,只需执行以下命令:
CREATE EXTENSION IF NOT EXISTS vector;
接下来,创建一个表来保存嵌入向