Re: vector search support

Поиск
Список
Период
Сортировка
От Oliver Rice
Тема Re: vector search support
Дата
Msg-id 44B7369A-AFB9-4694-B554-41BBDA2D7CEF@oliverrice.com
обсуждение исходный текст
Ответ на vector search support  (Nathan Bossart <nathandbossart@gmail.com>)
Ответы Re: vector search support  ("Jonathan S. Katz" <jkatz@postgresql.org>)
Список pgsql-hackers
Hi Nathan,

A nice side effect of using the float8[] to represent vectors is that it allows for vectors of different sizes to coexist in the same column.

We most frequently see (pgvector) vector columns being used for storing ML embeddings. Given that different models produce embeddings with a different number of dimensions, the need to specify a vector’s size in DDL tightly couples the schema to a single model. Support for variable length vectors would be a great way to decouple those concepts. It would also be a differentiating feature from existing vector stores.

One drawback is that variable length vectors complicates indexing for similarity search because similarity measures require vectors of consistent length. Partial indexes are a possible solution to that challenge

-------
Oliver Rice


On Apr 21, 2023, at 7:07 PM, Nathan Bossart <nathandbossart@gmail.com> wrote:

Attached is a proof-of-concept/work-in-progress patch set that adds
functions for "vectors" repreѕented with one-dimensional float8 arrays.
These functions may be used in a variety of applications, but I am
proposing them with the AI/ML use-cases in mind.  I am posting this early
in the v17 cycle in hopes of gathering feedback prior to PGCon.

With the accessibility of AI/ML tools such as large language models (LLMs),
there has been a demand for storing and manipulating high-dimensional
vectors in PostgreSQL, particularly around nearest-neighbor queries.  Many
of these vectors have more than 1500 dimensions.  The cube extension [0]
provides some of the distance functionality (e.g., taxicab, Euclidean, and
Chebyshev), but it is missing some popular functions (e.g., cosine
similarity, dot product), and it is limited to 100 dimensions.  We could
extend cube to support more dimensions, but this would require reworking
its indexing code and filling in gaps between the cube data type and the
array types.  For some previous discussion about using the cube extension
for this kind of data, see [1].

float8[] is well-supported and allows for effectively unlimited dimensions
of data.  float8 matches the common output format of many AI embeddings,
and it allows us or extensions to implement indexing methods around these
functions.  This patch set does not yet contain indexing support, but we
are exploring using GiST or GIN for the use-cases in question.  It might
also be desirable to add support for other linear algebra operations (e.g.,
operations on matrices).  The attached patches likely only scratch the
surface of the "vector search" use-case.

The patch set is broken up as follows:

* 0001 does some minor refactoring of dsqrt() in preparation for 0002.
* 0002 adds several vector-related functions, including distance functions
  and a kmeans++ implementation.
* 0003 adds support for optionally using the OpenBLAS library, which is an
  implementation of the Basic Linear Algebra Subprograms [2]
  specification.  Basic testing with this library showed a small
  performance boost, although perhaps not enough to justify giving this
  patch serious consideration.

Of course, there are many open questions.  For example, should PostgreSQL
support this stuff out-of-the-box in the first place?  And should we
introduce a vector data type or SQL domains for treating float8[] as
vectors?  IMHO these vector search use-cases are an exciting opportunity
for the PostgreSQL project, so I am eager to hear what folks think.

[0] https://www.postgresql.org/docs/current/cube.html
[1] https://postgr.es/m/2271927.1593097400%40sss.pgh.pa.us
[2] https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms

--
Nathan Bossart
Amazon Web Services: https://aws.amazon.com
<v1-0001-Refactor-dsqrt.patch>

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Jacob Champion
Дата:
Сообщение: Re: Docs: Encourage strong server verification with SCRAM
Следующее
От: "Jonathan S. Katz"
Дата:
Сообщение: Re: Docs: Encourage strong server verification with SCRAM