Condividi tramite


Assegnare tipi di dati ristretti ai campi vettoriali in Ricerca di intelligenza artificiale di Azure

Un modo semplice per ridurre le dimensioni dei vettori consiste nell'archiviare gli incorporamenti in un formato di dati più piccolo. La maggior parte dei modelli di incorporamento restituisce numeri a virgola mobile a 32 bit, ma se si quantizzano i vettori o se il modello di incorporamento lo supporta in modo nativo, l'output potrebbe essere float16, int16 o int8, che è notevolmente inferiore a float32. È possibile adattare queste dimensioni di vettore più piccole assegnando un tipo di dati narrow a un campo vettoriale. Nell'indice vettoriale i tipi di dati narrow utilizzano meno spazio di archiviazione.

I tipi di dati vengono assegnati ai campi in una definizione di indice. È possibile usare il portale di Azure, le API REST di ricerca o un pacchetto di Azure SDK che fornisce la funzionalità.

Prerequisiti

  • Modello di incorporamento che restituisce formati di dati di piccole dimensioni, ad esempio modelli di incorporamento di testo-3 o Cohere V3.

Tipi di dati narrow supportati

  1. Esaminare i tipi di dati usati per i campi vettoriali per l'utilizzo consigliato:

    • Collection(Edm.Single) Virgola mobile a 32 bit (valore predefinito)
    • Collection(Edm.Half) Virgola mobile a 16 bit (narrow)
    • Collection(Edm.Int16) Intero con segno a 16 bit (narrow)
    • Collection(Edm.SByte) Intero con segno a 8 bit (narrow)
    • Collection(Edm.Byte) Intero senza segno a 8 bit (consentito solo con tipi di dati binari compressi)
  2. Da tale elenco determinare il tipo di dati valido per l'output del modello di incorporamento o per i vettori sottoposti a quantizzazione personalizzata.

    La tabella seguente fornisce collegamenti a diversi modelli di incorporamento che possono usare un tipo di dati narrow (Collection(Edm.Half)) senza quantizzazione aggiuntiva. È possibile eseguire il cast da float32 a float16 (usando Collection(Edm.Half)) senza alcun lavoro aggiuntivo.

    Modello di incorporamento Output nativo Assegnare questo tipo in Azure AI Search
    text-embedding-ada-002 Float32 Collection(Edm.Single) oppure Collection(Edm.Half)
    text-embedding-3-small Float32 Collection(Edm.Single) oppure Collection(Edm.Half)
    text-embedding-3-large Float32 Collection(Edm.Single) oppure Collection(Edm.Half)
    Modelli di incorporamento di Cohere V3 con int8 embedding_type Int8 Collection(Edm.SByte)

    È possibile usare altri tipi di dati narrow se il modello genera incorporamenti nel formato di dati più piccolo o se si dispone di una quantizzazione personalizzata che converte i vettori in un formato più piccolo.

  3. Assicurarsi di comprendere i compromessi di un tipo di dati ristretto. Collection(Edm.Half) contiene meno informazioni, cosa che porta a una risoluzione inferiore. Se i dati sono omogenei o densi, la perdita di dettagli o sfumature aggiuntive potrebbe causare risultati inaccettabili in fase di query perché saranno disponibili meno dettagli per distinguere i vettori vicini.

Assegnare il tipo di dati

Definire e compilare un indice. È possibile usare il portale di Azure, creare o aggiornare l'indice (API REST) o un pacchetto di SDK Azure per questo passaggio.

Questa definizione di campo usa un tipo di dati narrow, Collection(Edm.Half), che può accettare un incorporamento float32 archiviato come valore float16. Come è true per tutti i campi vettoriali dimensions e vectorSearchProfile sono impostati. Le specifiche di vectorSearchProfile sono irrilevanti per il tipo di dati.

È consigliabile impostare e stored su retrievable true se si desidera controllare visivamente i valori del campo. In una ricompilazione successiva è possibile modificare queste proprietà in false per ridurre i requisiti di archiviazione.

{
    "name": "nameEmbedding",
    "type": "Collection(Edm.Half)",
    "searchable": true,
    "filterable": false,
    "retrievable": true,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": null,
    "synonymMaps": [],
    "dimensions": 1536,
    "vectorSearchProfile": "myHnswProfile"
}

Tenere presente che i campi vettoriali non sono filtrabili, ordinabili o facetable. Non possono essere usati come chiavi e non usano analizzatori o mappe sinonimiche.

Utilizzo di un indice di produzione

I tipi di dati vengono assegnati nei nuovi campi al momento della creazione. Non è possibile modificare il tipo di dati di un campo esistente e non è possibile eliminare un campo senza ricompilare l'indice. Per gli indici stabiliti già in produzione, è comune risolvere questo problema creando nuovi campi con le revisioni desiderate e quindi rimuovendo i campi obsoleti durante la ricompilazione pianificata dell'indice.

Controllare i risultati

  1. Verificare che il contenuto del campo corrisponda al tipo di dati. Supponendo che il campo vettoriale sia contrassegnato come retrievable, usare Esplora ricerche o Search - POST per restituire il contenuto del campo vettoriale.

  2. Per controllare le dimensioni dell'indice vettoriale, fare riferimento alla colonna delle dimensioni dell'indice vettoriale nella pagina Indici di gestione della ricerca > nella portale di Azure oppure usare il metodo GET Statistics (API REST) o azure SDK equivalente per ottenere le dimensioni.

Nota

Il tipo di dati del campo viene usato per creare la struttura dei dati fisici. Se si vuole modificare un tipo di dati in un secondo momento, eliminare e ricompilare l'indice oppure creare un secondo campo con la nuova definizione.