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 i modelli di incorporamento binario v3 di Cohere o qualsiasi altro modello o processo di incorporamento che restituisce vettori come byte binari.
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 un campo vettoriale di tipo
Collection(Edm.Byte)
e assegnare la distanza hamming
Questo articolo presuppone che si abbia familiarità con la creazione di un indice in Ricerca di intelligenza artificiale di Azure e l'aggiunta di campi vettoriali. Usa le API REST per illustrare ogni passaggio, ma è anche possibile aggiungere un campo binario a un indice nel portale di Azure o Azure SDK.
Il tipo di dati binario è disponibile a partire dall'API versione 2024-07-01 e viene assegnato ai campi usando le API 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 Comprimere usando la quantizzazione binaria o scalare e Assegnare tipi di dati narrow.
Prerequisiti
- Vettori binari, con 1 bit per dimensione, inseriti in un pacchetto in valori uint8 con 8 bit per valore. Questi valori possono essere ottenuti usando modelli che generano direttamente vettori binari in pacchetto o quantificando i 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.