Condividi tramite


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.

  1. Per aggiungere un campo binario a un indice, configurare una richiesta Create or Update Index usando l'API REST o il portale di Azure.

  2. Nello schema dell'indice aggiungere una sezione vectorSearch che specifica profili e algoritmi.

  3. 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.

  4. 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 su packedBit per la codifica binaria.
  • Impostare dimensions su 1024. 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.