Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: SQL Server 2025 (17.x) — предварительная версия
базы данных
SQLAzure Для Управляемого экземпляра
SQL Azureв Microsoft Fabric
Векторы — это упорядоченные массивы чисел (обычно с плавающей запятой), которые могут представлять сведения о некоторых данных. Например, изображение может быть представлено как вектор значений пикселей, или строка текста может быть представлена как вектор значений ASCII. Процесс преобразования данных в вектор называется векторизацией.
Замечание
- Поддержка векторов в предварительной версии и подлежит изменению. Не забудьте прочитать условия использования предварительной версии в соглашениях об уровне обслуживания (SLA) для веб-служб.
- Функции векторов доступны в Управляемом экземпляре SQL Azure, настроенном с помощью политики Always-up-to-date .
Встраивания
Внедрение — это векторы, представляющие важные функции данных. Внедрение часто используется с помощью модели глубокого обучения, а модели машинного обучения и искусственного интеллекта используют их в качестве функций. Внедрение также может захватывать семантические сходства между аналогичными понятиями. Например, при создании встраивания для слов person
и human
, мы ожидаем, что их встраивания (векторное представление) будут похожи по значению, поскольку слова также семантически похожи.
Azure OpenAI предоставляет модели для создания встраиваний из текстовых данных. Служба разбивает текст на маркеры и создает внедрения с помощью моделей, предварительно обученных OpenAI. Дополнительные сведения см. в статье "Создание внедрения с помощью Azure OpenAI".
Когда эмбеддинги созданы, их можно сохранить в базе данных SQL Server. Это позволяет хранить внедрения вместе с данными, которые они представляют, и выполнять векторные поисковые запросы для поиска аналогичных точек данных.
Векторный поиск
Векторный поиск ссылается на процесс поиска всех векторов в наборе данных, аналогичном конкретному вектору запроса. Таким образом, вектор запроса для слова human
выполняет поиск всего набора данных для аналогичных векторов и таким образом аналогичных слов: в этом примере он должен найти слово person
как близкое совпадение. Это близкое расстояние или расстояние измеряется с помощью метрик расстояния, например косинусного расстояния. Чем ближе векторы, тем больше они похожи.
SQL Server обеспечивает встроенную поддержку векторов с помощью типа векторных данных. Векторы хранятся в оптимизированном двоичном формате, но предоставляются в виде массивов JSON для удобства. Каждый элемент вектора хранится в виде значения с плавающей запятой одной точности (4 байта). Наряду с типом данных существуют выделенные функции для работы с векторами. Например, можно найти расстояние между двумя векторами с помощью функции VECTOR_DISTANCE . Функция возвращает скалярное значение с расстоянием между двумя векторами на основе указанной метрики расстояния.
Поскольку векторы обычно представлены в виде массивов чисел с плавающей точкой, создание вектора можно выполнить, просто приведя массив JSON к типу данных вектора. Например, следующий код создает вектор из массива JSON:
SELECT
CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS v1,
CAST(JSON_ARRAY(1.0, -0.2, 30) AS VECTOR(3)) AS v2;
Или используйте неявное приведение
DECLARE @v1 VECTOR(3) = '[1.0, -0.2, 30]';
DECLARE @v2 VECTOR(3) = JSON_ARRAY(1.0, -0.2, 30);
SELECT @v1 as v1, @v2 as v2;
То же самое относится к преобразованию вектора в массив JSON:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT
CAST(@v AS NVARCHAR(MAX)) AS s,
CAST(@v AS JSON) AS j
Точное расстояние поиска и вектора (точные ближайшие соседи)
Точный поиск, также известный как поиск k-Ближайшего соседа (k-NN), включает вычисление расстояния между заданным вектором и всеми другими векторами в наборе данных, сортировке результатов и выбор ближайших соседей на основе указанной метрики расстояния. Этот метод гарантирует точное извлечение ближайших соседей, но может быть вычислительно интенсивным, особенно для больших наборов данных.
Функции векторного расстояния используются для измерения близости между векторами. Распространенные метрики расстояний включают расстояние Евклиида, сходство косинуса и точечный продукт. Эти функции важны для выполнения поиска k-NN и обеспечения точных результатов.
Точный ближайший векторный поиск (ENN) выполняет исчерпывающий расчет расстояний по всем индексированным векторам, чтобы гарантировать получение ближайших соседей на основе указанной метрики расстояния. Этот метод является точным, но ресурсоемким, что делает его подходящим для небольших наборов данных или сценариев, где точность является первостепенной.
В ядре СУБД SQL поиск k-NN можно выполнять с помощью функции VECTOR_DISTANCE, которая позволяет эффективно вычислять расстояния между векторами и облегчает поиск ближайших соседей.
В следующем примере показано, как сделать k-NN, чтобы вернуть первые 10 самых похожих векторов, хранящихся в content_vector
таблице, в заданный вектор @qv
запроса.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDING(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT TOP (10) id, VECTOR_DISTANCE('cosine', @qv, [content_vector]) AS distance, title
FROM [dbo].[wikipedia_articles_embeddings]
ORDER BY distance
Использование точного поиска рекомендуется, если у вас нет большого количества векторов для поиска (менее 50 000 векторов в качестве общей рекомендации). Таблица может содержать гораздо больше векторов, пока предикаты поиска сокращают количество векторов, используемых для поиска соседей до 50 000 или меньше.
Приблизительный векторный индекс и векторный поиск (приблизительные ближайшие соседи)
Определение всех векторов, близких к заданному вектору запроса, требует значительных ресурсов для вычисления расстояния между вектором запроса и векторами, хранящимися в таблице. Поиск всех векторов, близких к заданному вектору запроса, включает полное сканирование таблицы и значительное использование ЦП. Это называется запросом K-Ближайшего соседя или KNN и возвращает ближайшие векторы k.
Векторы используются для поиска аналогичных данных для моделей ИИ для ответа на запросы пользователей. Это включает запрос базы данных для векторов k, ближайших к вектору запроса, используя метрики расстояния, такие как скалярное произведение, косинусное сходство или евклидово расстояние.
Запросы KNN часто борются с масштабируемостью, что делает приемлемым в результате чего во многих случаях допустим компромисс с некоторой потерей точности, особенно уменьшением полноты, для значительного увеличения скорости. Этот метод называется приблизительными ближайшими соседями (ANN).
Отзыв является важной концепцией, которая должна быть знакома всем пользователям, использующим или планирующих использовать векторы и внедрения. На самом деле, отзыв измеряет пропорцию приблизительных ближайших соседей, которые определены алгоритмом, по сравнению с точными ближайшими соседями, которые будут возвращать исчерпывающий поиск. Таким образом, это хорошее измерение качества приближения, которое выполняет алгоритм. Идеальная точность, которая эквивалентна без какой-либо погрешности, равна 1.
Для приложений ИИ компромисс является довольно разумным. Так как векторные представления уже приблизительно отражают понятия, использование ANN существенно не влияет на результаты, если полнота близка к 1. Это гарантирует, что возвращаемые результаты очень похожи на результаты из KNN, обеспечивая значительно улучшенную производительность и значительно сокращая использование ресурсов, что очень полезно для операционных баз данных.
Важно понимать, что термин "index" при использовании векторного индекса имеет другое значение, чем индекс, с которым вы работаете в реляционных базах данных. Фактически индекс вектора возвращает приблизительные результаты.
В подсистеме MSSQL индексы векторов основаны на алгоритме DiskANN . DiskANN основывается на создании графа, чтобы быстро перемещаться по всем индексированных векторам, чтобы найти ближайшее совпадение с заданным вектором. DiskANN — это графовая система для индексирования и поиска больших наборов векторных данных с использованием ограниченных вычислительных ресурсов. Он эффективно использует диски SSD и минимальную память для обработки значительно большего объема данных, чем индексы в памяти, сохраняя высокие запросы в секунду (QPS) и низкую задержку, обеспечивая баланс между памятью, ЦП и операцией ввода-вывода и производительностью поиска.
Сначала можно создать векторный индекс с помощью команды T-SQL CREATE VECTOR INDEX, а затем использовать функцию T-SQL VECTOR_SEARCH для выполнения приблизительного поиска.
DECLARE @qv VECTOR(1536) = AI_GENERATE_EMBEDDING(N'Pink Floyd music style' USE MODEL Ada2Embeddings);
SELECT
t.id, s.distance, t.title
FROM
VECTOR_SEARCH(
TABLE = [dbo].[wikipedia_articles_embeddings] AS t,
COLUMN = [content_vector],
SIMILAR_TO = @qv,
METRIC = 'cosine',
TOP_N = 10
) AS s
ORDER BY s.distance