Indicizzare i vettori binari per la ricerca vettoriale
Azure AI Search supporta un tipo binario compresso Collection(Edm.Byte)
per ridurre ulteriormente l'archiviazione e il footprint della memoria dei dati vettoriali. È possibile usare questo tipo di dati per l'output dei modelli, ad esempio Modelli di incorporamento binario v3 di Cohere.
Per configurare un indice per i vettori binari sono necessari tre passaggi:
- Aggiungere un algoritmo di ricerca vettoriale che specifica la distanza di Hamming per il confronto tra vettori binari
- Aggiungere un profilo vettoriale che punta all'algoritmo
- Aggiungere il profilo vettoriale alla definizione del campo binario
Questo articolo presuppone che si abbia familiarità con la creazione di un indice in Azure AI Search. Usa le API REST per illustrare ogni passaggio, ma è anche possibile aggiungere un campo binario a un indice nel portale di Azure.
I tipi di dati binari sono disponibili a livello generale a partire dalla versione 2024-07-01 dell'API e vengono assegnati ai campi usando le API di Crea indice o Crea o aggiorna indice.
Suggerimento
Se si sta analizzando il supporto del vettore binario in relazione al footprint più piccolo, è anche possibile prendere in considerazione le funzionalità di quantizzazione dei vettori e riduzione dell'archiviazione in Azure AI Search. Gli input sono incorporamenti Float32 o Float16. L'output è costituito da dati memorizzati in un formato molto più piccolo. Per altre informazioni, vedere Ridurre le dimensioni dei vettori tramite la quantizzazione, i tipi di dati ristretti e le opzioni di archiviazione.
Prerequisiti
- Vettori binari, con 1 bit per dimensione, inseriti in un pacchetto in valori uint8 con 8 bit per valore. Questi possono essere ottenuti tramite modelli che generano direttamente vettori "binari in pacchetto" o quantificando vettori in vettori binari sul lato client durante l'indicizzazione e la ricerca.
Limiti
- Nessun supporto del portale di Azure nella procedura guidata di importazione e vettorializzazione dei dati.
- Nessun supporto per i campi binari nella competenza AML usata per la vettorizzazione integrata dei modelli nel catalogo dei modelli di Studio AI della piattaforma Azure.
Aggiungere un algoritmo di ricerca vettoriale e un profilo vettoriale
Gli algoritmi di ricerca vettoriale vengono usati per creare le strutture di navigazione delle query durante l'indicizzazione. Per i campi di vettori binari, i confronti dei vettori vengono eseguiti usando la metrica distanza di Hamming.
Per aggiungere un campo binario a un indice, configurare una richiesta
Create or Update Index
usando l'API REST o il portale di Azure.Nello schema dell'indice aggiungere una sezione
vectorSearch
che specifica profili e algoritmi.Aggiungere uno o più algoritmi di ricerca vettoriale con una metrica di somiglianza pari a
hamming
. Viene in genere usato l'approccio HNSW (Hierarchical Navigable Small Worlds), ma è anche possibile usare la distanza di Hamming con K-NN (k-nearest neighbor) completi.Aggiungere uno o più profili vettoriali che specificano l'algoritmo.
L'esempio seguente illustra una configurazione vectorSearch
di base:
"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"
}
}
]
}
Aggiungere un campo binario a un indice
La raccolta di campi di un indice deve includere un campo per la chiave del documento, i campi vettoriali e tutti gli altri campi necessari per gli scenari di ricerca ibrida.
I campi binari sono di tipo Collection(Edm.Byte)
e contengono incorporamenti in formato compresso. Ad esempio, se la dimensione di incorporamento originale è 1024
, la lunghezza del vettore binario compresso è ceiling(1024 / 8) = 128
. Per ottenere il modulo compresso, impostare la proprietà vectorEncoding
sul campo.
- Aggiungere un campo alla raccolta di campi e assegnargli il nome.
- Impostare il tipo di dati su
Collection(Edm.Byte)
. - Impostare
vectorEncoding
supackedBit
per la codifica binaria. - Impostare
dimensions
su1024
. Specificare la dimensione vettoriale originale (decompressa). - Impostare
vectorSearchProfile
su un profilo definito nel passaggio precedente. - Rendere il campo ricercabile.
La definizione di campo seguente costituisce un esempio delle proprietà da impostare:
"fields": [
. . .
{
"name": "my-binary-vector-field",
"type": "Collection(Edm.Byte)",
"vectorEncoding": "packedBit",
"dimensions": 1024,
"vectorSearchProfile": "myHnswProfile",
"searchable": true
},
. . .
]
Vedi anche
Gli esempi di codice nel repository azure-search-vector-samples illustrano flussi di lavoro end-to-end che includono definizione dello schema, vettorizzazione, indicizzazione e query.
È disponibile codice demo per Python, C# e JavaScript.