Бөлісу құралы:


Векторы и эмбеддинги: часто задаваемые вопросы (вопросы и ответы)

Применимо к: Sql Server 2025 (17.x) База данныхSQL Azure Управляемого экземпляраSQL Azure в Microsoft Fabric

В этой статье содержатся часто задаваемые вопросы о векторах и внедрениях в ядро СУБД SQL.

Замечание

Функции векторов доступны в Управляемом экземпляре SQL Azure, настроенном с помощью политики Always-up-to-date .

Как поддерживать встраивание в актуальном состоянии?

Обновляйте векторы представлений каждый раз, когда изменяются базовые данные, которые они представляют. Эта практика особенно важна для сценариев, когда данные являются динамическими, например содержимым, созданным пользователем, или часто обновляемыми базами данных. Дополнительные сведения о нескольких стратегиях для поддержания актуальности внедрения см. в статьях "База данных" и "ИИ": решения для поддержания обновлений внедрения.

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

Чтобы получить дополнительные сведения о том, как выбрать правильный размер вектора, ознакомьтесь с встраиваемыми моделями и измерениями: оптимизация соотношения производительности и использования ресурсов.

Страница данных SQL Server может содержать до 8 060 байт, поэтому размер вектора влияет на количество векторов, которые можно хранить на одной странице. Например, если у вас есть вектор с 1024 измерениями, и каждое измерение является числом с плавающей запятой одинарной точности (4 байта), общий размер вектора составляет 4 104 байта (полезная нагрузка 4 096 байт + 8 байт заголовка). Этот размер ограничивает количество векторов, которые помещаются в одну страницу, до одного.

Какую модель внедрения следует использовать и когда?

Доступны многие модели внедрения. Выбор зависит от конкретного варианта использования и типа обрабатываемых данных. Некоторые модели поддерживают несколько языков, а другие поддерживают многомодальные данные (текст, изображения и многое другое). Некоторые модели доступны только в Интернете, а другие могут работать локально.

Помимо самой модели, рассмотрите размер модели и количество измерений, которые она создает. Более крупные модели могут обеспечить более высокую точность, но требуют больше вычислительных ресурсов и дискового пространства. Во многих случаях наличие дополнительных измерений значительно не изменяет качество для распространенных вариантов использования.

Дополнительные сведения о выборе правильной модели внедрения см. в разделе " Внедрение моделей и измерений": оптимизация коэффициента использования ресурсов производительности.

Как решить, когда использовать вещественные числа одинарной точности (4 байта) или половинной точности (2 байта) для векторов?

При хранении векторов внедрения в базу данных часто необходимо сбалансировать эффективность хранения с числовой точностью при выборе между плавающей запятой одинарной точности (float32) и половинной точности (float16).

К счастью, векторные представления обычно не сильно чувствительны к малым изменениям точности.

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

Использование float16 может значительно сократить использование хранилища и памяти, что особенно полезно при работе с крупномасштабными наборами данных.

А как насчет разреженных векторов?

В настоящее время тип векторных данных в ядре СУБД SQL предназначен для плотных векторов. Эти векторы представляют собой массивы чисел с плавающей запятой, где большинство элементов не равно нулю. Разреженные векторы, содержащие значительное количество нулевых элементов, не поддерживаются в собственном коде.

Производительность может значительно отличаться в зависимости от конкретного варианта использования, размера набора данных и сложности запросов. Однако возможности векторного поиска SQL Server эффективны и масштабируются. Они используют методы индексирования для оптимизации производительности поиска.

Что делать, если у меня есть несколько столбцов, которые я хочу использовать для создания внедрения?

Если у вас есть несколько столбцов, которые вы хотите использовать для создания эмбеддингов, у вас есть два основных варианта.

  • Создайте одно встраивание для каждого столбца или
  • Объедините значения нескольких столбцов в одну строку, а затем создайте единственное векторное представление для этой объединённой строки.

Дополнительные сведения об этих двух вариантах и связанных рекомендациях по проектированию баз данных см. в статье " Эффективное и элегантное моделирование внедрения".

Что насчет повторного ранжирования?

Повторное ранжирование повышает релевантность результатов поиска путем повторной оценки первоначальных результатов на основе дополнительных критериев или моделей. В подсистеме СУБД SQL можно реализовать повторное ранжирование, объединив векторный поиск с полнотекстовым поиском (который обеспечивает ранжирование BM25), или с помощью дополнительных запросов SQL или моделей машинного обучения для уточнения результатов на основе конкретной бизнес-логики или предпочтений пользователей.

Дополнительные сведения см. в статье "Повышение возможностей поиска с помощью гибридного поиска и повторного ранжирования RRF".

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

Пример использования модели переранжирования можно найти в разделе "Семантическое переранжирование с помощью Azure SQL, SQL Server 2025 и моделей Cohere Rerank".

Когда следует использовать поиск ИИ (теперь ИИ Foundry) и использовать SQL для сценариев векторного поиска?

Поиск ИИ (теперь ИИ Foundry) — это специализированная служба, предназначенная для расширенных сценариев поиска, включая векторный поиск, обработку естественного языка и аналитические сведения на основе ИИ. Он предоставляет полный набор функций для создания интеллектуальных приложений поиска, таких как встроенная поддержка различных моделей ИИ, расширенных алгоритмов ранжирования и интеграции с другими службами ИИ.

Ядро СУБД SQL позволяет хранить любые данные и выполнять любой тип запроса: структурированный и неструктурированный. Вы можете выполнять векторный поиск по этим данным. Это хороший выбор для сценариев, где вам нужно искать все эти данные вместе, и вы не хотите использовать отдельную службу для поиска, которая усложняет архитектуру. Ядро СУБД SQL предлагает критически важные функции корпоративной безопасности, чтобы убедиться, что данные всегда защищены, например безопасность на уровне строк (RLS), динамическое маскирование данных (DDM), Always Encrypted, неизменяемые таблицы реестра и прозрачное шифрование данных (TDE).

Ниже приведен пример одного запроса, который можно запустить в SQL Azure или SQL Server, который объединяет векторные, геопространственные, структурированные и неструктурированные данные одновременно. Пример запроса получает первые 50 наиболее соответствующих ресторанов на основе описания ресторана, расположения ресторана и предпочтений пользователя. В нем используется векторный поиск описания и геопространственного поиска по расположению, фильтрация также по номерам звезд, количеству отзывов, категории и другим атрибутам.

DECLARE @p AS GEOGRAPHY = GEOGRAPHY::Point(47.6694141, -122.1238767, 4326);
DECLARE @e AS VECTOR(1536) = AI_GENERATE_EMBEDDINGS('I want to eat a good focaccia' USE MODEL Text3Embedding);

SELECT TOP (50) b.id AS business_id,
                b.name AS business_name,
                r.id AS review_id,
                r.stars,
                r.review,
                VECTOR_DISTANCE('cosine', re.embedding, @e) AS semantic_distance,
                @p.STDistance(geo_location) AS geo_distance
FROM dbo.reviews AS r
     INNER JOIN dbo.reviews_embeddings AS re
         ON r.id = re.review_id
     INNER JOIN dbo.business AS b
         ON r.business_id = b.id
WHERE b.city = 'Redmond'
      AND @p.STDistance(b.geo_location) < 5000 -- 5 km
      AND r.stars >= 4
      AND b.reviews >= 30
      AND JSON_VALUE(b.custom_attributes, '$.local_recommended') = 'true'
      AND VECTOR_DISTANCE('cosine', re.embedding, @e) < 0.2
ORDER BY semantic_distance DESC;

В предыдущем примере, поиск точного ближайшего соседа (ENN) находит наиболее релевантные отзывы на основе семантического расстояния встраиваний, с фильтрацией по геопространственному расстоянию и другим бизнес-атрибутам. Этот запрос демонстрирует возможность объединения векторного поиска с традиционными возможностями SQL для создания эффективного и эффективного интерфейса поиска.

Если вы хотите использовать поиск приблизительного ближайшего соседа (ANN), можно создать векторный индекс в reviews_embeddings таблице и использовать VECTOR_SEARCH функцию для выполнения поиска.

Просмотрите самоустраиваемую лабораторию внедрения ИИ для шифрования SQL Azure .