在PostgreSQL中存储向量数据的有效方法是什么?



我有一些向量,来自嵌入面,我想将它们存储在数据库中。我需要能够从给定的嵌入式脸部从数据库中找到类似的向量。

我尝试使用PostgreSQL中的数组类型,但没有任何减法支持。

  1. 短期问题是:我们可以在PostgreSQL中的数据库级别上有效地执行数组减法?
  2. 长期问题是:此类数据和计算是否有更好的数据库系统?

特定问题是,假设我在表中有一些向量数据

{1, 2, 3},
{4, 5, 6},
{7, 8, 9}

我想弄清楚这三个向量中的哪一个是最接近的(欧几里得距离(与矢量{5, 5, 5}

首先需要的操作是减去两个向量,然后找到差的长度||{5, 5, 5} - {4, 5, 6}||_2

在我的情况下,向量将具有128个维度。

似乎您要使用PostGIS,这是PostgreSQL的简单扩展,它允许一堆几何数据类型扩展。(点,向量,弧等(

,因为您想搜索嵌入的向量并要求欧几里得距离,所以适用于用例>

它支持距离功能:

  • 内部产品
  • l 2 距离(欧几里得距离(
  • 余弦距离

l 2 距离通常用于面部识别。

余弦距离由Openai建议其嵌入 l 2 。但是,它会产生相同的结果。

您可以找到上面链接中大多数编程语言的库的安装说明和引用。

如果您对Openai嵌入感兴趣(Bing带您到这里(:

  • openai-cookbook,尤其是图像解释了很多。可以使用PostgreSQL,而不是QDRANT
  • 立即尝试。这是一个单页的JavaScript应用程序,可以为您创建嵌入式。有趣的是,他们不使用矢量数据库,而只需在代码中自行执行此操作,您可以下载所有代码(它们提供链接(。如果您对自己的方式感兴趣,请查看javascript函数 find_closest_paragraphs 在代码中。

将其转换为字符串。或者,您可以定义自定义数据类型并存储值

join(str(s) for s in encodings[0][0:64])

最新更新