我有一些向量,来自嵌入面,我想将它们存储在数据库中。我需要能够从给定的嵌入式脸部从数据库中找到类似的向量。
我尝试使用PostgreSQL中的数组类型,但没有任何减法支持。
- 短期问题是:我们可以在PostgreSQL中的数据库级别上有效地执行数组减法?
- 长期问题是:此类数据和计算是否有更好的数据库系统?
特定问题是,假设我在表中有一些向量数据
{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])