如何存储高维(N > 100)向量和索引以通过余弦相似度进行快速查找?

J. *_*lor 6 postgresql index database-design dimension array

我正在尝试在 PostgreSQL 表中存储word/doc 嵌入的向量,并希望能够快速将具有最高余弦相似度的 N 行提取到给定的查询向量。我正在使用的向量是numpy.array长度为100 <= L <= 1000的浮点数。

我查看了相似度搜索cube模块,但它仅限于<= 100维的向量。我使用的嵌入将产生最少100 维且通常更高的向量(取决于训练 word2vec/doc2vec 模型时的设置)。

在 Postgres 中存储大维向量(numpy 浮点数组)并根据余弦相似度(或其他向量相似度度量)执行快速查找的最有效方法是什么?

小智 2

2023 年的答案是使用pgvector扩展。

截至撰写本文时,最大维度数(此处定义)为 16k。