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


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

Простой способ уменьшить размер вектора — хранить внедрения в меньший формат данных. Большинство моделей внедрения выводили 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 (using 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 версии 3 с помощью int8 embedding_type 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 для возврата содержимого векторного поля.

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

Примечание.

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