Condividi tramite


Indicizzare vettori binari per la ricerca vettoriale

A partire dall'API REST 2024-05-01-preview, 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 di Cohere v3.

Esistono tre passaggi per configurare un indice per i vettori binari:

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

Prerequisiti

  • Vettori binari, con 1 bit per dimensione, inseriti in un pacchetto in valori uint8 con 8 bit per valore. Questi possono essere ottenuti usando 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 per la compressione scalare o la vettorizzazione integrata.
  • 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 vettorializzazione integrata dei modelli nel catalogo dei modelli di Azure AI Studio.

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 vettoriali binari, i confronti vettoriali vengono eseguiti usando la metrica distanza hamming.

  1. Per aggiungere un campo binario a un indice, configurare una richiesta Create or Update Index usando l'API REST 2024-05-05-01-preview 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. Non è possibile specificare la compressione scalare o un vettorizzatore in questa anteprima.

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.Binary) 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.

  1. Aggiungere un campo alla raccolta di campi e assegnargli il nome.
  2. Impostare il tipo di dati su Collection(Edm.Binary).
  3. Impostare vectorEncoding su packedBit per la codifica binaria.
  4. Impostare dimensions su 1024. Specificare la dimensione vettoriale originale (decompressa).
  5. Impostare vectorSearchProfile su un profilo definito nel passaggio precedente.

La definizione minima di una raccolta di campi dovrebbe essere simile all'esempio seguente:

  "fields": [ 
    { 
      "name": "Id", 
      "type": "Edm.String", 
      "key": true, 
      "searchable": true 
    }, 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile" 
    } 
  ]

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.