Включение и использование 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