Vector Search in Azure Cosmos DB voor NoSQL
VAN TOEPASSING OP: NoSQL
Azure Cosmos DB voor NoSQL biedt nu efficiënte vectorindexering en zoekopdrachten. Deze functie is ontworpen om high-dimensionale vectoren te verwerken, waardoor een efficiënte en nauwkeurige vectorzoekopdracht op elke schaal mogelijk is. U kunt nu vectoren rechtstreeks opslaan in de documenten naast uw gegevens. Elk document in uw database kan niet alleen traditionele schemavrije gegevens bevatten, maar ook high-dimensionale vectoren als andere eigenschappen van de documenten. Deze colocatie van gegevens en vectoren maakt efficiënte indexering en zoekopdrachten mogelijk, omdat de vectoren worden opgeslagen in dezelfde logische eenheid als de gegevens die ze vertegenwoordigen. Het bijeenhouden van vectoren en gegevens vereenvoudigt het beheer van gegevens, AI-toepassingsarchitecturen en de efficiëntie van vectorbewerkingen.
Azure Cosmos DB for NoSQL biedt de flexibiliteit die het biedt bij het kiezen van de vectorindexeringsmethode:
- Een "platte" of k-dichtstbijzijnde buren exacte zoekopdrachten (ook wel brute-force genoemd) kunnen 100% terughalen voor kleinere, gerichte vectorzoekopdrachten. met name in combinatie met queryfilters en partitiesleutels.
- Een gekwantiseerde platte index die vectoren comprimeert met behulp van op DiskANN gebaseerde kwantisatiemethoden voor een betere efficiëntie in de kNN-zoekopdracht.
- DiskANN, een suite met geavanceerde vectorindexeringsalgoritmen die door Microsoft Research zijn ontwikkeld om efficiënt en nauwkeurig vectorzoekopdrachten op elke schaal mogelijk te maken.
Meer informatie over vectorindexering vindt u hier
Vectorzoekopdrachten in Azure Cosmos DB kunnen worden gecombineerd met alle andere ondersteunde Azure Cosmos DB NoSQL-queryfilters en -indexen met behulp van WHERE
componenten. Hierdoor kunnen uw vectorzoekopdrachten de meest relevante gegevens voor uw toepassingen zijn.
Deze functie verbetert de kernmogelijkheden van Azure Cosmos DB, waardoor het veelzijdiger is voor het verwerken van vectorgegevens en zoekvereisten in AI-toepassingen.
Wat is een vectorarchief?
Een vectorarchief of vectordatabase is een database die is ontworpen voor het opslaan en beheren van vector-insluitingen, die wiskundige representaties van gegevens in een hoogdimensionale ruimte zijn. In deze ruimte komt elke dimensie overeen met een functie van de gegevens en kunnen tienduizenden dimensies worden gebruikt om geavanceerde gegevens weer te geven. De positie van een vector in deze ruimte vertegenwoordigt de kenmerken. Woorden, woordgroepen of volledige documenten en afbeeldingen, audio en andere typen gegevens kunnen allemaal worden gevectoriseerd.
Hoe werkt een vectorarchief?
In een vectorarchief worden vectorzoekalgoritmen gebruikt om insluitingen te indexeren en op te vragen. Sommige bekende vectorzoekalgoritmen omvatten Hiërarchische Navigable Small World (HNSW), Omgekeerd bestand (IVF), DiskANN, enzovoort. Vectorzoekopdrachten is een methode waarmee u vergelijkbare items kunt vinden op basis van hun gegevenskenmerken in plaats van door exacte overeenkomsten in een eigenschapsveld. Deze techniek is handig in toepassingen zoals het zoeken naar vergelijkbare tekst, het vinden van gerelateerde afbeeldingen, het maken van aanbevelingen of zelfs het detecteren van afwijkingen. Het wordt gebruikt om een query uit te voeren op de vector-insluitingen van uw gegevens die u hebt gemaakt met behulp van een machine learning-model met behulp van een API voor insluitingen. Voorbeelden van insluitings-API's zijn Azure OpenAI Embeddings of Hugging Face in Azure. Vectorzoekopdrachten meten de afstand tussen de gegevensvectoren en uw queryvector. De gegevensvectoren die zich het dichtst bij uw queryvector bevinden, zijn de vectoren die het meest vergelijkbaar zijn met semantisch.
In de Integrated Vector Database in Azure Cosmos DB for NoSQL kunnen insluitingen naast de oorspronkelijke gegevens worden opgeslagen, geïndexeerd en opgevraagd. Deze aanpak elimineert de extra kosten voor het repliceren van gegevens in een afzonderlijke pure vectordatabase. Bovendien houdt deze architectuur de vector insluitingen en oorspronkelijke gegevens bij elkaar, waardoor multimodale gegevensbewerkingen beter worden gefaciliteerd en betere gegevensconsistentie, schaal en prestaties mogelijk zijn.
De vectorindexerings- en zoekfunctie inschakelen
Voor het indexeren en zoeken van vectoren in Azure Cosmos DB voor NoSQL is het inschakelen vereist op de pagina Functies van uw Azure Cosmos DB. Volg de onderstaande stappen om u te registreren:
- Navigeer naar de resourcepagina van Azure Cosmos DB for NoSQL.
- Selecteer het deelvenster Functies onder het menu-item Instellingen.
- Selecteer de functie Vector Search in Azure Cosmos DB for NoSQL.
- Lees de beschrijving van de functie om te bevestigen dat u deze wilt inschakelen.
- Selecteer Inschakelen om de vectorindexering en zoekfunctie in te schakelen.
Notitie
De registratieaanvraag wordt automatisch goedgekeurd; Het kan echter 15 minuten duren voordat het account volledig is geactiveerd.
Tip
U kunt ook de Azure CLI gebruiken om de mogelijkheden van uw account bij te werken om NoSQL Vector Search te ondersteunen.
az cosmosdb update \
--resource-group <resource-group-name> \
--name <account-name> \
--capabilities EnableNoSQLVectorSearch
Container Vector-beleid
Als u vectorzoekopdrachten uitvoert met Azure Cosmos DB voor NoSQL, moet u een vectorbeleid voor de container definiëren. Dit biedt essentiële informatie voor de database-engine om efficiënte overeenkomsten te zoeken naar vectoren die in de documenten van de container zijn gevonden. Dit informeert ook het vectorindexeringsbeleid van de benodigde informatie, als u ervoor kiest om er een op te geven. De volgende informatie is opgenomen in het ingesloten vectorbeleid:
- "pad": de eigenschap met de vector (vereist).
- "datatype": het gegevenstype van de vectoreigenschap (standaard Float32).
- "dimensies": de dimensionaliteit of lengte van elke vector in het pad. Alle vectoren in een pad moeten hetzelfde aantal dimensies hebben. (standaard 1536).
- "distanceFunction": de metrische waarde die wordt gebruikt voor het berekenen van afstand/gelijkenis. Ondersteunde metrische gegevens zijn:
- cosinus, die waarden heeft van -1 (minst vergelijkbaar) met +1 (meest vergelijkbaar).
- dot product, dat waarden van -inf (minst vergelijkbaar) heeft met +inf (meest vergelijkbaar).
- euclidean, die waarden heeft van 0 (meest vergelijkbaar) met +inf) (minst vergelijkbaar).
Notitie
Elk uniek pad kan maximaal één beleid hebben. Er kunnen echter meerdere beleidsregels worden opgegeven op voorwaarde dat ze allemaal een ander pad richten.
Het containervectorbeleid kan worden beschreven als JSON-objecten. Hier volgen twee voorbeelden van geldig containervectorbeleid:
Een beleid met één vectorpad
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
}
]
}
Een beleid met twee vectorpaden
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
},
{
"path":"/vector2",
"dataType":"int8",
"distanceFunction":"dotproduct",
"dimensions":100
}
]
}
Beleid voor vectorindexering
Vectorindexen verhogen de efficiëntie bij het uitvoeren van vectorzoekopdrachten met behulp van de VectorDistance
systeemfunctie. Vectorenzoekopdrachten hebben een lagere latentie, hogere doorvoer en minder RU-verbruik bij het gebruik van een vectorindex. U kunt de volgende typen vectorindexbeleid opgeven:
Type | Description | Maximumdimensies |
---|---|---|
flat |
Slaat vectoren op dezelfde index op als andere geïndexeerde eigenschappen. | 505 |
quantizedFlat |
Kwantificeert vectoren (comprimeert) voordat deze op de index worden opgeslagen. Dit kan de latentie en doorvoer verbeteren ten koste van een kleine hoeveelheid nauwkeurigheid. | 4096 |
diskANN |
Hiermee maakt u een index op basis van DiskANN voor snelle en efficiënte zoekopdrachten. | 4096 |
Notitie
Voor de quantizedFlat
en diskANN
indexen moeten ten minste 1000 vectoren worden ingevoegd. Dit is om de nauwkeurigheid van het kwantisatieproces te garanderen. Als er minder dan 1000 vectoren zijn, wordt in plaats daarvan een volledige scan uitgevoerd en leidt dit tot hogere RU-kosten voor een vectorzoekquery.
Enkele punten om te noteren:
De
flat
indextypen enquantizedFlat
indextypen maken gebruik van de index van Azure Cosmos DB om elke vector op te slaan en te lezen bij het uitvoeren van een vectorzoekopdracht. Vectorzoekopdrachten met eenflat
index zijn brute-force zoekopdrachten en produceren 100% nauwkeurigheid of relevante overeenkomsten. Dat wil gezegd, het is gegarandeerd dat de meest vergelijkbare vectoren in de gegevensset worden gevonden. Er is echter een beperking van505
dimensies voor vectoren op een platte index.De
quantizedFlat
index slaat gekwantiseerde (gecomprimeerde) vectoren op de index op. Vectorzoekopdrachten metquantizedFlat
indexen zijn ook brute-force zoekopdrachten, maar hun nauwkeurigheid kan iets minder zijn dan 100% omdat de vectoren worden gekwantiseerd voordat ze aan de index worden toegevoegd. Vectorzoekopdrachten metquantized flat
moeten echter lagere latentie, hogere doorvoer en lagere RU-kosten hebben dan vectorzoekopdrachten in eenflat
index. Dit is een goede optie voor kleinere scenario's of scenario's waarbij u queryfilters gebruikt om de vectorzoekopdracht te beperken tot een relatief kleine set vectoren.quantizedFlat
wordt aanbevolen wanneer het aantal vectoren dat moet worden geïndexeerd ongeveer 50.000 of minder per fysieke partitie is. Dit is echter slechts een algemene richtlijn en de werkelijke prestaties moeten worden getest, omdat elk scenario anders kan zijn.De
diskANN
index is een afzonderlijke index die specifiek is gedefinieerd voor vectoren die gebruikmaken van DiskANN, een suite met high performance vector indexeringsalgoritmen die zijn ontwikkeld door Microsoft Research. DiskANN-indexen kunnen een aantal van de laagste latentie, de hoogste doorvoer en de laagste RU-kostenquery's bieden, terwijl ze nog steeds hoge nauwkeurigheid behouden. Over het algemeen is DiskANN de meest presterende van alle indextypen als er meer dan 50.000 vectoren per fysieke partitie zijn.
Hier volgen voorbeelden van geldig vectorindexbeleid:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "diskANN"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Belangrijk
Het vectorpad is toegevoegd aan de sectie 'excludedPaths' van het indexeringsbeleid om te zorgen voor geoptimaliseerde prestaties voor invoeging. Als u het vectorpad niet toevoegt aan 'excludedPaths', leidt dit tot hogere RU-kosten en latentie voor vectorinvoegingen.
Belangrijk
Jokertekens (*, []) worden momenteel niet ondersteund in het vectorbeleid of de vectorindex.
Vectorzoekopdrachten uitvoeren met query's met VectorDistance()
Zodra u een container met het gewenste vectorbeleid hebt gemaakt en vectorgegevens in de container hebt ingevoegd, kunt u een vectorzoekopdracht uitvoeren met behulp van de functie Vector Distance in een query. Een voorbeeld van een NoSQL-query die de overeenkomstscore als alias SimilarityScore
projecteert en sorteert in volgorde van meest vergelijkbaar met minst vergelijkbaar:
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore
FROM c
ORDER BY VectorDistance(c.contentVector, [1,2,3])
Belangrijk
Gebruik altijd een TOP N
component in de SELECT
instructie van een query. Anders probeert de vectorzoekopdracht veel meer resultaten te retourneren en kost de query meer RU's en heeft de query een hogere latentie dan nodig is.
Huidige beperkingen
Vectorindexering en -zoekopdrachten in Azure Cosmos DB voor NoSQL hebben enkele beperkingen.
quantizedFlat
endiskANN
voor indexen moeten ten minste 1000 vectoren worden geïndexeerd om ervoor te zorgen dat de kwantisatie nauwkeurig is. Als er minder dan 1000 vectoren worden geïndexeerd, wordt in plaats daarvan een volledige scan gebruikt en kunnen de RU-kosten hoger zijn.- Vectoren die zijn geïndexeerd met het
flat
indextype kunnen maximaal 505 dimensies zijn. Vectoren die zijn geïndexeerd met hetquantizedFlat
ofDiskANN
indextype kunnen maximaal 4096 dimensies zijn. - De
quantizedFlat
index maakt gebruik van dezelfde kwantisatiemethode als DiskANN. - De snelheid van vectorinvoegingen moet worden beperkt. Zeer grote opname (meer dan 5M-vectoren) kan extra opbouwtijd van de index vereisen.
- Gedeelde doorvoerdatabases worden niet ondersteund.
- Op dit moment worden vectorindexering en zoekopdrachten niet ondersteund voor accounts met Analytical Store (en Synapse Link) en gedeelde doorvoer.
- Zodra vectorindexering en zoeken is ingeschakeld voor een container, kan deze niet worden uitgeschakeld.
Volgende stap
- DiskANN + Azure Cosmos DB - Microsoft Mechanics Video
- .NET - Instructies voor indexeren en query's uitvoeren op vectorgegevens
- Python - Instructies voor indexeren en queryvectorgegevens
- Java - Instructies voor indexeren en queryvectorgegevens
- VectorDistance systeemfunctie
- Overzicht van vectorindex
- Vectorindexbeleid
- Index beheren
- Integraties: