Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Cosmos DB voor NoSQL biedt nu efficiënte vectorindexering en zoekopdrachten. Deze functie is ontworpen om multimodale, hoogdimensionale vectoren te verwerken, waardoor efficiënt en nauwkeurig vectorzoekopdrachten op elke schaal mogelijk zijn. 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 multimodale 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 flexibiliteit door u de vectorindexeringsmethode te laten kiezen:
- Een flat of k-dichtstbijzijnde buren exacte zoekopdracht (ook wel brute-force genoemd) kan 100% ophaal recall bieden voor kleinere, gerichte vectorzoekopdrachten. vooral in combinatie met queryfilters en partitionsleutels.
- 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, uiterst nauwkeurig multimodale vectorzoekopdrachten op elke schaal mogelijk te maken.
Zie Vectorindexen voor meer informatie over vectorindexering.
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 leveren.
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 vectoropslag?
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 vectoropslag?
In een vectorarchief worden vectorzoekalgoritmen gebruikt om insluitingen te indexeren en op te vragen. Sommige bekende vectorzoekalgoritmen zijn Hiërarchische Navigable Small World (HNSW), Inverted File (IVF) en DiskANN. 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 het dichtst bij de queryvector van uw zoekopdracht liggen, zijn degene die semantisch het meest vergelijkbaar zijn.
In de geïntegreerde vectordatabase 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
Voer de volgende stappen uit om deze functie in te schakelen voor Azure Cosmos DB for NoSQL:
- Ga naar de resourcepagina van uw Azure Cosmos DB voor NoSQL.
- Selecteer Functies in het linkerdeelvenster onder Instellingen.
- Selecteer Vector Search voor NoSQL-API.
- Lees de beschrijving van de functie om te bevestigen dat u deze wilt inschakelen.
- Selecteer Inschakelen om vectorzoekopdrachten in te schakelen in Azure Cosmos DB voor NoSQL.
Advies
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
De registratieaanvraag wordt automatisch goedgekeurd, maar het kan 15 minuten duren voordat deze van kracht is.
Containervectorbeleid
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:
-
path: het eigenschapspad dat vectoren bevat (vereist). -
datatype: Het gegevenstype van de vectoreigenschap. Ondersteunde typen zijnfloat32(standaard),int8enuint8. -
dimensions: De dimensionaliteit of lengte van elke vector in het pad. Alle vectoren in een pad moeten hetzelfde aantal dimensies hebben. De standaardwaarde is1536. -
distanceFunction: De metrische waarde die wordt gebruikt voor het berekenen van afstand/overeenkomsten. Ondersteunde metrische gegevens zijn:- cosinus (standaard), die waarden van -1 (minst vergelijkbaar) heeft 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 als ze allemaal gericht zijn op een ander pad.
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 | Beschrijving | 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 op basis van DiskANN een index voor snelle en efficiënte benaderende zoekacties. | 4096 |
Notitie
De quantizedFlat en diskANN indexen vereisen dat 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, wat leidt tot hogere RU-kosten voor een vectorzoekquery.
Enkele punten om rekening mee te houden:
De
flatindextypen enquantizedFlatindextypen gebruiken de index van Azure Cosmos DB om elke vector op te slaan en te lezen bij het uitvoeren van een vectorzoekopdracht. Vectorzoekopdrachten met eenflatindex zijn brute-force zoekopdrachten en produceren 100% nauwkeurigheid of volledigheid. Dat wil gezegd, het is gegarandeerd dat de meest vergelijkbare vectoren in de gegevensset worden gevonden. Er is echter een beperking van505dimensies voor vectoren op een platte index.De
quantizedFlatindex slaat gekwantiseerde (gecomprimeerde) vectoren op de index op. Vectorzoekopdrachten metquantizedFlatindexen 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 flatmoeten echter lagere latentie, hogere doorvoer en lagere RU-kosten hebben dan vectorzoekopdrachten in eenflatindex. 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.quantizedFlatwordt 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
diskANNindex 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/?"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Belangrijk
Jokertekens (*, ) en vectorpaden die in matrices zijn genest, []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 VectorDistance in een query. In het volgende voorbeeld ziet u een NoSQL-query die de overeenkomstscore als alias SimilarityScoreprojecteert 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 voorwaarde in de SELECT clausule 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.
-
quantizedFlatendiskANNvoor 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
flatindextype kunnen maximaal 505 dimensies zijn. Vectoren die zijn geïndexeerd met hetquantizedFlatofDiskANNindextype kunnen maximaal 4096 dimensies zijn. - De snelheid van vectorinvoegingen moet worden beperkt. Zeer grote opname (meer dan 5M-vectoren) vereist mogelijk meer indexbuildtijd.
- De vectorzoekfunctie wordt momenteel niet ondersteund voor de bestaande containers. Als u deze wilt gebruiken, moet er een nieuwe container worden gemaakt en moet het beleid voor het insluiten van vectoren op containerniveau worden opgegeven.
- Gedeelde doorvoerdatabases worden niet ondersteund.
- Op dit moment wordt vectorindexering en zoekopdrachten niet ondersteund voor accounts met gedeelde doorvoer.
- Zodra vectorindexering en zoeken is ingeschakeld voor een container, kan deze niet worden uitgeschakeld.
Gerelateerde inhoud
- DiskANN + Azure Cosmos DB - Microsoft Mechanics Video
- .NET : indexeren en query's uitvoeren op vectorgegevens
- Python : vectorgegevens indexeren en opvragen
- Java : vectorgegevens indexeren en opvragen
- VectorDistance systeemfunctie
- Overzicht van vectorindex
- Vectorindexbeleid
- Voorbeelden van vectorindexeringsbeleid
- Integraties: