我有一些来自嵌入面孔的向量,我想将它们存储在数据库中。我需要能够在给定参考嵌入面的情况下从数据库中找到相似的向量。
我尝试在 PostgreSQL 中使用数组类型,但不支持减法。
具体问题是,假设我在表中有一些向量数据
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
我想找出这三个向量中哪一个与向量{5, 5, 5}
最接近(以
欧几里德距离表示)。
所需的操作是先将两个向量相减,然后求差的长度
||{5, 5, 5} - {4, 5, 6}||_2
在我的场景中,向量将有 128 维。
您似乎想使用PostGIS,它是 PostgreSQL 的一个简单扩展,它允许一大堆几何数据类型扩展。 (点、矢量、圆弧等)
由于您想要搜索嵌入向量并要求欧几里得距离,因此适合您用例的 Postgres 插件是:https://github.com/pgvector/pgvector。
支持距离功能:
L2距离通常用于人脸识别。
OpenAI 建议使用余弦距离 作为其嵌入 L2,但会产生相同的结果
您可以在上面的链接中找到大多数编程语言的安装说明和库参考。
如果您对 OpenAI 嵌入感兴趣(Bing 将您带到这里):
join(str(s) for s in encodings[0][0:64])