Поделиться через


Включение и использование pgvector в Azure Cosmos DB для PostgreSQL

Область применения: Azure Cosmos DB для PostgreSQL (на базе расширения базы данных Citus до PostgreSQL)

Расширение pgvector добавляет поиск сходства векторов с открытым исходным кодом в PostgreSQL.

В этой статье приводятся дополнительные возможности, включенные pgvector. В ней рассматриваются понятия сходства векторов и внедрения, а также приводятся рекомендации по включению pgvector расширения. Мы узнаем, как создавать, хранить и запрашивать векторы. Вы также можете обратиться к официальному README проекта.

Включение расширения

Расширения PostgreSQL должны быть включены в базе данных, прежде чем их можно будет использовать. Чтобы включить расширение, выполните команду из средства psql, чтобы загрузить упакованные объекты в базу данных.

SELECT CREATE_EXTENSION('vector');

Примечание.

Отключение использования расширения drop_extension()

Основные понятия

Сходство векторов

Сходство векторов — это метод, используемый для измерения того, как аналогичные два элемента представляют их как векторы, которые являются рядом чисел. Векторы часто используются для представления точек данных, где каждый элемент вектора представляет функцию или атрибут точки данных.

Сходство векторов обычно вычисляется с помощью метрик расстояния, таких как Euclidean distance или cosine сходство. Евклидеан расстояние измеряет прямое расстояние между двумя векторами в n-мерном пространстве, а косинус сходства измеряет косинус угла между двумя векторами. Значения метрик сходства обычно варьируются между 0 и 1, с higher значениями, указывающими на большее сходство между векторами.

Сходство векторов широко используется в различных приложениях, таких как системы рекомендаций, классификация текста, распознавание изображений и кластеризация. Например, в системах рекомендаций сходства векторов можно использовать для идентификации аналогичных элементов на основе предпочтений пользователя. В классификации текста векторное сходство можно использовать для определения сходства между двумя документами или предложениями на основе их векторных представлений.

Внедрение

Внедрение — это метод оценки "связанности" текста, изображений, видео или других типов информации. Оценка позволяет моделям машинного обучения эффективно определять связи и сходство между данными, позволяя алгоритмам определять закономерности и делать точные прогнозы. Например, в задаче анализа тональности слова с аналогичными внедренными выражениями могут иметь аналогичные оценки тональности.

Начало работы

Создайте таблицу tblvector с столбцом embedding типа vector(3) , представляющего трехмерный вектор.

CREATE TABLE tblvector(
    id bigserial PRIMARY KEY,
    embedding vector(3)
    );

После создания внедрения с помощью службы, такой как API OpenAI, можно сохранить полученный вектор в базе данных. Определение вектора в виде vector(3) обозначений [x,y,z] coordinates в трехмерной плоскости. Команда вставляет пять новых строк в tblvector таблицу с предоставленными внедрениями.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]'), (3, '[5,4,6]'), (4, '[3,5,7]'), (5, '[7,8,9]');

С помощью инструкции можно указать альтернативное INSERT INTO ... ON CONFLICT действие, например обновление записей, соответствующих критериям. Это позволяет обрабатывать потенциальные конфликты более эффективным и эффективным способом.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;

Команда DELETE удаляет строки из указанной таблицы на основе условий, указанных в предложении WHERE. Если предложение WHERE отсутствует, все строки в таблице удаляются.

DELETE FROM tblvector WHERE id = 1;

Чтобы получить векторы и вычислить сходство, используйте SELECT инструкции и встроенные операторы векторов. Например, запрос вычисляет расстояние Евклиида (L2) между заданным вектором и векторами, хранящимися в tblvector таблице, сортирует результаты по вычисляемого расстояния и возвращает ближайшие пять наиболее похожих элементов.

SELECT * FROM tblvector 
ORDER BY embedding <-> '[3,1,2]' 
LIMIT 5;

В запросе используется< оператор ->, который является "оператором расстояния", используемым для вычисления расстояния между двумя векторами в многомерном пространстве. Запрос возвращает все строки с расстоянием менее 6 от вектора [3,1,2].

SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;

Команда извлекает среднее значение столбца внедрения из таблицы "tblvector". Например, если столбец "внедрение" содержит вставки слов для языковой модели, среднее значение этих внедренных значений можно использовать для представления всего предложения или документа.

SELECT AVG(embedding) FROM tblvector;

Операторы вектора

pgvector представлено шесть новых операторов, которые можно использовать для векторов:

Operator Description
+ Добавление элементов с помощью мудрого элемента
- Вычитание элементов с помощью мудрого вычитания
* умножение элементов
<-> Евклидеан расстояние
<#> отрицательный внутренний продукт
<=> косинус расстояние

Векторные функции

cosine_distance

Вычисляет расстояние косинуса между двумя векторами.

cosine_distance(vector, vector)

Аргументы

vector

Во-первых vector.

vector

Во-вторых vector.

Возвращаемый тип

double precision расстояние между двумя предоставленными векторами.

inner_product

Вычисляет внутренний продукт двух векторов.

inner_product(vector, vector)

Аргументы

vector

Во-первых vector.

vector

Секунда vector

Возвращаемый тип

double precision как внутренний продукт двух векторов.

l2_distance

Вычисляет расстояние Евклиида (также известное как L2) между двумя векторами.

l2_distance(vector, vector)

Аргументы

vector

Во-первых vector.

vector

Секунда vector

Возвращаемый тип

double precision как расстояние Евклида между двумя векторами.

l1_distance

Вычисляет расстояние таксикаба (также известное как L1) между двумя векторами.

l1_distance(vector, vector)

Аргументы

vector

Во-первых vector.

vector

Секунда vector

Возвращаемый тип

double precision как расстояние от таксикаб между двумя векторами.

vector_dims(vector)

Возвращает измерения заданного вектора.

Аргументы

vector

vector.

Возвращаемый тип

integer представляет количество измерений заданного вектора.

vector_norms(vector)

Вычисляет норму Евклиида заданного вектора.

Аргументы

vector

vector.

Возвращаемый тип

double precision представляющий норму Евклиида данного вектора.

Агрегаты векторов

AVG

Вычисляет среднее значение обработанных векторов.

Аргументы

vector

vector.

Возвращаемый тип

vector представляет среднее значение обработанных векторов.

SUM

Аргументы

vector

vector.

Возвращаемый тип

vector представляет сумму обработанных векторов.

Next Steps

Узнайте больше о производительности, индексировании и ограничениях.pgvector