Индексирование двоичных векторов для поиска векторов
Поиск ИИ Azure поддерживает упакованный двоичный тип Collection(Edm.Byte)
для дальнейшего уменьшения объема памяти и хранения векторных данных. Этот тип данных можно использовать для выходных данных из таких моделей, как внедрение двоичных моделей Cohere версии 3.
Существует три шага по настройке индекса для двоичных векторов:
- Добавление алгоритма поиска вектора, указывающего расстояние Хамминга для сравнения двоичных векторов
- Добавление профиля вектора, указывающего на алгоритм
- Добавление профиля вектора в определение двоичного поля
В этой статье предполагается, что вы знакомы с созданием индекса в службе "Поиск ИИ Azure". Он использует REST API для иллюстрации каждого шага, но можно также добавить двоичное поле в индекс в портал Azure.
Типы двоичных данных обычно доступны начиная с API версии 2024-07-01 и назначаются полям с помощью API создания индекса или создания или обновления индекса .
Совет
Если вы изучаете поддержку двоичного вектора для его меньшего объема, вы также можете рассмотреть функции векторной квантизации и сокращения хранилища в поиске ИИ Azure. Входные данные — float32 или float16 внедрения. Выходные данные хранятся в гораздо меньшем формате. Дополнительные сведения см. в разделе "Уменьшение векторного размера" с помощью квантизации, узких типов данных и параметров хранения.
Необходимые компоненты
- Двоичные векторы с 1 битом на измерение, упакованные в значения uint8 с 8 битами на значение. Их можно получить с помощью моделей, которые непосредственно создают "упакованные двоичные" векторы или путем квантизации векторы в двоичные векторы на стороне клиента во время индексирования и поиска.
Ограничения
- В мастере импорта и векторизации данных не поддерживается портал Azure.
- Нет поддержки двоичных полей в навыке AML, используемом для интегрированной векторизации моделей в каталоге моделей Azure AI Studio.
Добавление алгоритма поиска вектора и профиля вектора
Алгоритмы поиска векторов используются для создания структур навигации запросов во время индексирования. Для двоичных векторных полей сравнение векторов выполняется с помощью метрики расстояния Хамминга.
Чтобы добавить двоичное поле в индекс, настройте
Create or Update Index
запрос с помощью REST API или портал Azure.В схеме индекса добавьте раздел, указывающий
vectorSearch
профили и алгоритмы.Добавьте один или несколько алгоритмов поиска векторов с метрикой
hamming
сходства. Обычно используется иерархические навигационные небольшие миры (HNSW), но вы также можете использовать расстояние Хамминга с исчерпывающими К-ближайшими соседями.Добавьте один или несколько профилей векторов, которые указывают алгоритм.
В следующем примере показана базовая vectorSearch
конфигурация:
"vectorSearch": {
"profiles": [
{
"name": "myHnswProfile",
"algorithm": "myHnsw",
"compression": null,
"vectorizer": null
}
],
"algorithms": [
{
"name": "myHnsw",
"kind": "hnsw",
"hnswParameters": {
"metric": "hamming"
}
},
{
"name": "myExhaustiveKnn",
"kind": "exhaustiveKnn",
"exhaustiveKnnParameters": {
"metric": "hamming"
}
}
]
}
Добавление двоичного поля в индекс
Коллекция полей индекса должна содержать поле для ключа документа, векторных полей и других полей, необходимых для сценариев гибридного поиска.
Двоичные поля имеют тип Collection(Edm.Byte)
и содержат внедрение в упакованную форму. Например, если исходное измерение внедрения имеет 1024
значение, длина упакованного двоичного вектора равна ceiling(1024 / 8) = 128
. Вы получите упакованную форму, задав vectorEncoding
свойство в поле.
- Добавьте поле в коллекцию полей и присвойте ему имя.
- Задайте для типа
Collection(Edm.Byte)
данных значение . packedBit
Установите значениеvectorEncoding
для двоичного кодирования.- Задайте для параметра
dimensions
значение1024
. Укажите исходное (распаковаемое) векторное измерение. - Задайте
vectorSearchProfile
профиль, определенный на предыдущем шаге. - Сделайте поле доступным для поиска.
Следующее определение поля является примером свойств, которые необходимо задать.
"fields": [
. . .
{
"name": "my-binary-vector-field",
"type": "Collection(Edm.Byte)",
"vectorEncoding": "packedBit",
"dimensions": 1024,
"vectorSearchProfile": "myHnswProfile",
"searchable": true
},
. . .
]
См. также
Примеры кода в репозитории azure-search-vector-samples демонстрируют комплексные рабочие процессы, включающие определение схемы, векторизацию, индексирование и запросы.
Существует демонстрационный код для Python, C# и JavaScript.