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


Обзор векторов в подсистеме База данных SQL

Применимо к: База данных SQL Azure

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

Внедрение

Внедрение — это векторы, представляющие важные функции данных. Внедрение часто используется с помощью модели глубокого обучения, а модели машинного обучения и искусственного интеллекта используют их в качестве функций. Внедрение также может захватывать семантические сходства между аналогичными понятиями. Например, при создании внедрения для слов 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 vector;

или использование неявного приведения

DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT @v;

То же самое относится к преобразованию вектора в массив JSON:

DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(@v AS NVARCHAR(MAX)) AS vector;

Ограничения

В текущей предварительной версии приведение к типу данных JSON и из нее еще не поддерживается. Обходной путь — сначала преобразовать из NVARCHAR(MAX), а затем в json или из нее. Например, чтобы преобразовать вектор в тип JSON:

DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(CAST(@v AS NVARCHAR(MAX)) AS JSON) AS j;

и для преобразования из типа JSON в вектор:

DECLARE @j JSON = JSON_ARRAY(1.0, -0.2, 30)
SELECT CAST(CAST(@j AS NVARCHAR(MAX)) AS VECTOR(3)) AS v;

Дополнительные сведения об использовании векторов в SQL Server см. в следующих статьях: