I vettori sono sostanzialmente degli array di numeri che sono diventati molto utili nella negli embedding. Sono rappresentazioni matematiche in uno spazio ad alta dimensione, utili per descrivere dati complessi come parole, frasi, immagini o suoni. Sono fondamentali nell'IA per ricerche semantiche, raccomandazioni e rilevamento di anomalie, poiché catturano le caratteristiche essenziali dei dati in un formato che le macchine possono elaborare efficacemente.
Quando vogliamo effettuare una ricerca, oltre a campi di filtro con ricerca esatta o con ricerca testuale, tramite gli embedding possiamo fare ricerche di concetto e filtrarle/ordinarle secondo criteri di vicinanza. In Azure possiamo già usare Azure AI Search per effettuare questo lavoro, ma in alternativa è stata introdotta la possibilità di sfruttare questa caratteristica anche con Cosmos DB.
Per usufruire di questa caratteristica dobbiamo prima di tutto abilitare il supporto andando nella sezione Features del nostro account Cosmos DB ed abilitare la voce Vector Search for NoSQL API.
A questo punto dobbiamo creare un nuovo container, perché non possiamo applicare la ricerca vettoriale su container già esistenti. In fase di creazione (non più modificabile poi), dobbiamo istruire il motore in quali path andremo a salvare dei vettori, la tipologia, la dimensione e la funzione di calcolo della distanza. Nell'esempio seguente nel percorso /vector memorizziamo un embedding ADA di 1536 utilizzando la funzione di coseno, quella più comunemente usata.
Contestualmente alla creazione dobbiamo anche specificare i criteri di indicizzazione da adottare insieme agli altri, che normalmente troviamo nella indexing policy.
Abbiamo a disposizione tre tipologie di indicizzazione:
- flat: memorizza il vettore così com'è, fino ad una dimensione massima di 505. E' il metodo più preciso, ma anche il più lento nella ricerca;
- quantizedFlat: comprime il vettore di dimensione massima di 4096. E' un buon compromesso, perché rinuncia ad un po' di precisione, restando sempre lento visto che effettua una ricerca lineare come nel caso del flat. La documentazione parla di buone prestazioni fino a 100 mila vettori;
- diskANN: definisce un indice separato che effettua una ricerca più approssimata, ma garantisce ottime prestazioni.
Definiziamo quindi l'indice per il nostro vettore utilizzando la compressione, come nell'esempio.
A questo punto possiamo popolare il database e provare ad effettuare una query usando la funzione VectorDistance. A seconda della funziona usata restituisce un numero che, nel caso del cosino, restituisce un punteggio da 0 a 1 a seconda della similarità di due vettori.
SELECT c.title, VectorDistance(c.contentVector, [1,2,3, ...]) AS score FROM c ORDER BY VectorDistance(c.contentVector, [1,2,3, ...])
Grazie a questa funzione possiamo contestualmente effettuare altri filtri e selezionare quali campi vogliamo estrarre. Dal punto di vista del pricing, tutto questo va ad influenzare gli RU necessari per la ricerca e lo spazio dedicato alla memorizzazione degli indici.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Gestire domini wildcard in Azure Container Apps
Migliora la resilienza delle applicazioni con .NET e Azure Container Apps
Recuperare App Service cancellati su Azure
Eliminare una project wiki di Azure DevOps
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Migrare una service connection a workload identity federation in Azure DevOps
Utilizzare gRPC su App Service di Azure
Creare una libreria CSS universale: Cards
Path addizionali per gli asset in ASP.NET Core MVC
Cancellare una run di un workflow di GitHub
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- anche #vs13 update 4 è disponibile in RTM: https://aspit.co/azm
- Indicizzare Cosmos DB con #azure Search https://aspit.co/b4v di @CristianCivera #cosmosdb
- stando a @edbott, la consumer preview di #win8 sarà rilasciata il 29 febbraio! http://aspitalia.com/42