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


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

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

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

Замечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Когда использовать поиск ИИ (теперь ИИ 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 .