Назначение узких типов данных векторным полям в службе "Поиск ИИ Azure"

Примечание.

Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.

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

Типы данных назначаются полям в определении индекса. Используйте портал Azure, REST API службы поиска или пакет Azure SDK, который предоставляет эту функцию.

Предварительные требования

  • Модель эмбеддинга, которая выводит небольшие форматы данных, такие как text-embedding-3 или эмбеддинговая модель Cohere V3.

Поддерживаемые узкие типы данных

  1. Просмотрите типы данных, используемые для векторных полей , для рекомендуемого использования:

    • Collection(Edm.Single): 32-разрядная плавающая точка (по умолчанию)
    • Collection(Edm.Half): 16-разрядная плавающая точка (с узким диапазоном)
    • Collection(Edm.Int16): 16-разрядное целое число со знаком (узкое)
    • Collection(Edm.SByte): 8-разрядное целое число со знаком (узкое)
    • Collection(Edm.Byte): 8-разрядное целое число без знака (разрешено только с упакованными двоичными типами данных)
  2. Из этого списка определите, какой тип данных действителен для выходных данных модели внедрения или для векторов, которые проходят настраиваемую квантизацию.

    В следующей таблице приведены ссылки на несколько моделей внедрения, которые могут использовать узкий тип данных без Collection(Edm.Half)дополнительной квантизации. Вы можете выполнить приведение из float32 в float16, используя Collection(Edm.Half), без лишних усилий.

    Модель внедрения Собственные выходные данные Назначьте этот тип в Поиск с использованием ИИ Azure
    text-embedding-ada-002 Float32 Collection(Edm.Single) или Collection(Edm.Half)
    text-embedding-3-small Float32 Collection(Edm.Single) или Collection(Edm.Half)
    text-embedding-3-large Float32 Collection(Edm.Single) или Collection(Edm.Half)
    Модели эмбеддингов Cohere V3 с типом embedding_type int8 Int8 Collection(Edm.SByte)

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

  3. Понять компромиссы ограниченного типа данных. Collection(Edm.Half) имеет меньше информации, что приводит к снижению разрешения. Если данные являются однородными или плотными, потеря дополнительных деталей или нюансов может привести к неприемлемым результатам во время запроса, так как есть меньше деталей, которые можно использовать для разбиений близлежащих векторов.

Назначение типа данных

Определите и создайте индекс. На этом шаге можно использовать портал Azure, индексы — создание или обновление (REST API) или пакет azure SDK.

Это определение поля использует узкий тип данных, Collection(Edm.Half), который принимает встраивание float32, хранящееся в виде значения float16. Как и для всех векторных полей, задайте свойства dimensions и vectorSearchProfile. Конкретные характеристики vectorSearchProfile не имеют значения для типа данных.

Установите значения retrievable и stored на true, если вы хотите визуально просмотреть значения поля. При последующей перестройке эти свойства можно установить в значение false, чтобы уменьшить требования к объёму хранилища.

{
    "name": "nameEmbedding",
    "type": "Collection(Edm.Half)",
    "searchable": true,
    "filterable": false,
    "retrievable": true,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": null,
    "synonymMaps": [],
    "dimensions": 1536,
    "vectorSearchProfile": "myHnswProfile"
}

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

Работа с производственным индексом

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

Проверка результатов

  1. Убедитесь, что содержимое поля соответствует типу данных. Предполагая, что поле вектора помечается как retrievable, используйте обозреватель поиска или поиск — POST (REST API) для возврата содержимого векторного поля.

  2. Чтобы проверить размер векторного индекса, обратитесь к столбцу размера векторного индекса на странице индексов управления > поиском на портале Azure. Можно также использовать индексы — получение статистики (REST API) или эквивалентный метод Azure SDK.

Примечание.

Тип данных поля создает структуру физических данных. Чтобы изменить тип данных позже, удалите и перестроите индекс или создайте второе поле с новым определением.