Ricerca vettoriale in Azure Cosmos DB for NoSQL (anteprima)
SI APPLICA A: NoSQL
Azure Cosmos DB for NoSQL offre ora indicizzazione vettoriale e ricerca in anteprima. Questa funzionalità è progettata per gestire vettori di alta dimensionalità, consentendo una ricerca vettoriale efficiente e accurata su qualsiasi scala. È ora possibile archiviare i vettori direttamente nei documenti insieme ai dati. Ogni documento nel database può contenere non solo dati tradizionali senza schema, ma anche vettori ad alta dimensionalità come altre proprietà dei documenti. Questa coubicazione di dati e vettori consente un'indicizzazione e una ricerca efficienti, poiché i vettori vengono archiviati nella stessa unità logica dei dati che rappresentano. Mantenere insieme vettori e dati semplifica la gestione dei dati, le architetture delle applicazioni di intelligenza artificiale e l'efficienza delle operazioni basate su vettori.
Azure Cosmos DB for NoSQL offre la flessibilità offerta nella scelta del metodo di indicizzazione vettoriale:
- Una ricerca esatta "flat" o k-nearest neighbors o vicino più prossimo (talvolta chiamata anche forza bruta) può fornire il 100% di richiamo di recupero per ricerche vettoriali più piccole e incentrate. in particolare quando si combinano con filtri di query e chiavi di partizione.
- Indice flat quantizzato che comprime i vettori usando metodi di quantizzazione basati su DiskANN per migliorare l'efficienza nella ricerca kNN.
- DiskANN, una suite di algoritmi di indicizzazione vettoriali all'avanguardia sviluppati da Microsoft Research per una ricerca vettoriale efficiente e ad alta precisione su qualsiasi scala.
Altre informazioni sull'indicizzazione vettoriale sono disponibili qui
La ricerca vettoriale in Azure Cosmos DB può essere combinata con tutti gli altri filtri e indici di query NoSQL supportati di Azure Cosmos DB tramite clausole WHERE
. Ciò consente alle ricerche vettoriali di essere i dati più rilevanti per le applicazioni.
Questa funzionalità migliora le funzionalità di base di Azure Cosmos DB, rendendola più versatile per la gestione dei dati vettoriali e dei requisiti di ricerca nelle applicazioni di intelligenza artificiale.
Che cos'è un archivio di vettori?
Un archivio vettoriale o un database vettoriale è un database progettato per archiviare e gestire incorporamenti vettoriali, che sono rappresentazioni matematiche dei dati in uno spazio ad alta dimensionalità. In questo spazio, ogni dimensione corrisponde a una caratteristica dei dati e decine di migliaia di dimensioni possono essere usate per rappresentare dati sofisticati. La posizione di un vettore in questo spazio rappresenta le sue caratteristiche. Parole, frasi o interi documenti, immagini, audio e altri tipi di dati possono essere vettorizzati.
Come funziona un archivio vettoriale?
In un archivio vettoriale, gli algoritmi di ricerca vettoriale vengono usati per indicizzare ed eseguire query sugli incorporamenti. Alcuni algoritmi di ricerca vettoriale noti includono Hierarchical Navigable Small World (HNSW), Inverted File (IVF), DiskANN e così via. La ricerca vettoriale è un metodo che consente di trovare elementi simili in base alle caratteristiche dei dati anziché in base alle corrispondenze esatte in un campo di proprietà. Questa tecnica è utile nelle applicazioni come la ricerca di testi simili o di immagini correlate, la creazione di elementi consigliati o anche il rilevamento di anomalie. Viene usato per eseguire query sui vettori di incorporamento dei dati, creati usando un modello di Machine Learning usando un'API di incorporamento. Esempi di API di incorporamento sono gli incorporamenti OpenAI di Azure o Hugging Face in Azure. La ricerca vettoriale misura quindi la distanza tra i vettori di dati e i vettori di query. I vettori di dati più vicini al vettore di query sono quelli che risultano più simili dal punto di vista semantico.
Nel database vettoriale integrato in Azure Cosmos DB for NoSQL è possibile archiviare, indicizzare ed eseguire query insieme ai dati originali. Questo approccio elimina il costo aggiuntivo della replica dei dati in un database vettoriale puro separato. Inoltre, questa architettura mantiene insieme gli incorporamenti vettoriali e i dati originali, che facilitano meglio le operazioni di dati multi modale e consentono una maggiore coerenza, scalabilità e prestazioni dei dati.
Eseguire la registrazione nella funzionalità di anteprima ricerca vettoriale
La ricerca vettoriale per Azure Cosmos DB for NoSQL richiede la registrazione delle funzionalità di anteprima nella pagina Funzionalità di Azure Cosmos DB. Per effettuare la registrazione, seguire questa procedura:
Passare alla pagina della risorsa Azure Cosmos DB for NoSQL.
Selezionare il riquadro "Funzionalità" nella voce di menu "Impostazioni".
Selezionare "Ricerca vettoriale in Azure Cosmos DB for NoSQL".
Leggere la descrizione della funzionalità per confermare la registrazione nell'anteprima.
Selezionare "Abilita" per registrarsi all'anteprima.
Nota
La richiesta di registrazione verrà approvata automaticamente, ma potrebbero essere necessari alcuni minuti prima che diventi effettiva.
Suggerimento
In alternativa, usare l'interfaccia della riga di comando di Azure per aggiornare le funzionalità dell'account per supportare la ricerca vettoriale NoSQL.
az cosmosdb update \
--resource-group <resource-group-name> \
--name <account-name> \
--capabilities EnableNoSQLVectorSearch
Criteri vettoriali dei contenitori
Per eseguire la ricerca vettoriale con Azure Cosmos DB for NoSQL è necessario definire criteri vettoriali per il contenitore. In questo modo vengono fornite informazioni essenziali per il motore di database per eseguire una ricerca efficiente di somiglianza per i vettori presenti nei documenti del contenitore. In questo modo si informa anche il criterio di indicizzazione vettoriale delle informazioni necessarie, se si sceglie di specificarne una. Le informazioni seguenti sono incluse nei criteri vettoriali contenuti:
- "path": proprietà contenente il vettore (obbligatorio).
- "datatype": tipo di dati della proprietà vettoriale (valore predefinito Float32).
- "dimensions": la dimensionalità o la lunghezza di ogni vettore nel percorso. Tutti i vettori in un percorso devono avere lo stesso numero di dimensioni. (Valore predefinito=1536).
- "distanceFunction": metrica usata per calcolare la distanza/somiglianza. Metriche supportate:
- cosine, con valori compresi tra -1 (meno simili) e +1 (più simili).
- dot product, con valori compresi tra -inf (meno simili) e +inf (più simili).
- euclidean, con valori compresi tra 0 (meno simili) e +inf (più simili).
Nota
Ogni percorso univoco può avere al massimo un criterio. Tuttavia, è possibile specificare più criteri, purché siano destinati a un percorso diverso.
I criteri del vettore del contenitore possono essere descritti come oggetti JSON. Di seguito sono riportati due esempi di criteri di vettori di contenitori validi:
Criteri con un singolo percorso vettoriale
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
}
]
}
Criteri con due percorsi vettoriali
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
},
{
"path":"/vector2",
"dataType":"int8",
"distanceFunction":"dotproduct",
"dimensions":100
}
]
}
Criteri di indicizzazione vettoriale
Gli indici vettoriali aumentano l'efficienza durante l'esecuzione di ricerche vettoriali usando la funzione di sistema VectorDistance
. Le ricerche vettoriali hanno una latenza inferiore, una velocità effettiva più elevata e un consumo minore di UR quando si usa un indice vettoriale. È possibile specificare i tipi seguenti di criteri di indice vettoriale:
Tipo | Descrizione | Dimensioni massime |
---|---|---|
flat |
Archivia i vettori nello stesso indice di altre proprietà indicizzate. | 505 |
quantizedFlat |
Quantizza (comprime) i vettori prima di archiviarli nell'indice. Ciò può migliorare la latenza e la velocità effettiva a scapito dell'accuratezza. | 4096 |
diskANN |
Crea un indice basato su DiskANN per una ricerca approssimativa veloce ed efficiente. | 4096 |
Nota
Gli indici quantizedFlat
e diskANN
richiedono l'inserimento di almeno 1.000 vettori. Ciò consente di garantire l'accuratezza del processo di quantizzazione. Se sono presenti meno di 1.000 vettori, viene eseguita invece un'analisi completa, che comporta costi di UR più elevati per una query di ricerca vettoriale.
Alcuni punti da notare:
I tipi di indice
flat
equantizedFlat
usano l'indice di Azure Cosmos DB per archiviare e leggere ogni vettore durante l'esecuzione di una ricerca vettoriale. Le ricerche vettoriali con un indiceflat
sono ricerche di forza bruta e producono precisione o richiamo al 100%. Ovvero, è garantito trovare i vettori più simili nel set di dati. Tuttavia, esiste una limitazione delle dimensioni505
per i vettori in un indice flat.L'indice
quantizedFlat
archivia i vettori quantizzati (compressi) nell'indice. Le ricerche vettoriali con indicequantizedFlat
sono anche ricerche di forza bruta, ma la loro accuratezza potrebbe essere leggermente inferiore al 100% perché i vettori vengono quantizzati prima di aggiungere all'indice. Tuttavia, le ricerche vettoriali conquantized flat
devono avere una latenza inferiore, una velocità effettiva più elevata e un costo UR inferiore rispetto alle ricerche vettoriali su un indiceflat
. Questa è un'opzione valida per gli scenari più piccoli o per gli scenari in cui si usano filtri di query per restringere la ricerca vettoriale a un set relativamente ridotto di vettori.quantizedFlat
deve essere usato quando sono presenti almeno 1.000 vettori e meno di 100.000 vettori nel contenitore.L'indice
diskANN
è un indice separato definito in modo specifico per i vettori che usano DiskANN, una suite di algoritmi di indicizzazione a vettori con prestazioni elevate sviluppati da Microsoft Research. Gli indici DiskANN possono offrire una certa latenza più bassa, la velocità effettiva più elevata e le query sui costi delle UR più basse, mantenendo comunque un'accuratezza elevata.
Importante
Durante l'anteprima iniziale, gli indici vettoriali non possono essere modificati dopo la creazione. Sarà invece necessario creare un nuovo contenitore con un nuovo criterio di indice vettoriale, se è necessaria una modifica.
Ecco alcuni esempi di criteri di indice vettoriale validi:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "DiskANN"
}
]
}
Importante
Percorso vettoriale aggiunto alla sezione "excludedPaths" dei criteri di indicizzazione per garantire prestazioni ottimizzate per l'inserimento. Se non si aggiunge il percorso vettoriale a "excludedPaths", l’addebito e la latenza delle RU risulteranno più elevati.
Importante
Al momento nell'anteprima della ricerca vettoriale non usare i caratteri di percorso annidato o caratteri jolly nel percorso dei criteri vettoriali. Le operazioni di sostituzione sui criteri vettoriali non sono attualmente supportate.
Eseguire la ricerca vettoriale con query usando VectorDistance()
Dopo aver creato un contenitore con i criteri vettoriali desiderati e aver inserito i dati vettoriali nel contenitore, è possibile eseguire una ricerca vettoriale usando la funzione di sistema Vector Distance in una query. Un esempio di query NoSQL che proietta il punteggio di somiglianza con l'alias SimilarityScore
e li ordina dal più simile a quello meno simile:
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore
FROM c
ORDER BY VectorDistance(c.contentVector, [1,2,3])
Limiti e vincoli correnti
L'indicizzazione e la ricerca vettoriali in Azure Cosmos DB for NoSQL presentano alcune limitazioni nelle fasi iniziali dell'anteprima pubblica.
È possibile specificare al massimo un tipo di indice DiskANN per ogni contenitore
L'indicizzazione vettoriale è supportata solo nei nuovi contenitori.
I vettori indicizzati con il tipo di indice
flat
possono essere al massimo di 505 dimensioni. I vettori indicizzati con il tipo di indicequantizedFlat
oDiskANN
possono essere al massimo di 4.096 dimensioni.quantizedFlat
utilizza lo stesso metodo di quantizzazione di DiskANN.La frequenza di inserimenti di vettori deve essere limitata durante l'uso di un'anteprima anticipata di DiskANN. L'inserimento molto grande (in eccesso a 5 milioni di vettori) può richiedere tempi di compilazione aggiuntivi per l'indice.
I database con velocità effettiva condivisa non sono supportati.
Al momento dell'anteprima, La ricerca vettoriale non è supportata negli account con archivio analitico (e Collegamento a Synapse), velocità effettiva condivisa, chiavi gestite dal cliente, backup continuo, Analisi archiviazione e tutte le versioni ed elimina feed di modifiche. Dopo aver abilitato l'anteprima della ricerca vettoriale, non può essere disabilitata.
Importante
Al momento dell'anteprima, La ricerca vettoriale non è supportata negli account con archivio analitico (e Collegamento a Synapse), velocità effettiva condivisa, chiavi gestite dal cliente, backup continuo, Analisi archiviazione e tutte le versioni ed elimina feed di modifiche. Dopo aver abilitato l'anteprima della ricerca vettoriale, non può essere disabilitata.
Passaggio successivo
- DiskANN + Azure Cosmos DB - Microsoft Mechanics Video
- .NET - Procedura per indicizzare ed eseguire query sui dati vettoriali
- Python - Procedura per indicizzare ed eseguire query sui dati vettoriali
- Java - Procedura per indicizzare ed eseguire query sui dati vettoriali
- Funzione di sistema VectorDistance
- Panoramica dell'indice vettoriale
- Criteri di indice vettoriale
- Gestire l'indice
- Integrazioni: