Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Cosmos DB in Fabric 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.
Cosmos DB in Fabric biedt de flexibiliteit die het biedt bij het kiezen van de vectorindexeringsmethode:
Een "platte" of k-dichtstbijzijnde buren exacte zoekopdracht (ook wel brute-force genoemd) kan 100% terughaalprecisie 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.
Vectorzoekopdrachten in Cosmos DB kunnen worden gecombineerd met alle andere ondersteunde NoSQL-queryfilters en -indexen met behulp van WHERE componenten. Met deze combinatie kunnen uw vectorzoekopdrachten de meest relevante gegevens voor uw toepassingen zijn.
Deze functie verbetert de kernmogelijkheden van 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 omvatten Hiërarchische Navigable Small World (HNSW), Inverted File (IVF), DiskANN, enzovoort. Vectorzoekopdracht is een methode waarmee u vergelijkbare items kunt vinden op basis van hun data-eigenschappen in plaats van op basis van 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 datavectoren die zich het dichtst bij uw zoekvector bevinden, zijn degene die het meest semantisch vergelijkbaar zijn.
In de Integrated Vector Database in Cosmos DB in Fabric 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.
Containervectorbeleid
Als u vectorzoekopdrachten uitvoert met Cosmos DB in Fabric, moet u een vectorbeleid voor de container definiëren. Dit beleid 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. Deze configuratie 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: de eigenschap die de vector 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. (standaard1536).distanceFunction: De metrische waarde die wordt gebruikt voor het berekenen van afstand/overeenkomsten. Ondersteunde metrische gegevens zijn:cosine, die waarden van $-1$ (minst vergelijkbaar) heeft met $+1$ (meest vergelijkbaar).dot product, die waarden van $-\infty$ (minst vergelijkbaar) heeft met $+\infty$ (meest vergelijkbaar).euclidean, die waarden van $0$ (meest vergelijkbaar) heeft met $+\infty$ (minst vergelijkbaar).
Opmerking
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
}
]
}
Zie voorbeelden van indexeringsbeleid voor vectoren voor meer informatie en voorbeelden van het instellen van een containervectorbeleid.
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 deze typen vectorindexbeleid opgeven:
| 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 beleid kan latentie en doorvoer verbeteren ten koste van een kleine hoeveelheid nauwkeurigheid. | 4096 |
diskANN |
Hiermee maakt u een index op basis van DiskANN voor een snelle en efficiënte benadering van zoeken. | 4096 |
Opmerking
Voor de quantizedFlat en diskANN indexen moeten ten minste 1000 vectoren worden ingevoegd. Dit minimum 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
flatindextypen enquantizedFlatindextypen gebruiken de index van Cosmos DB om elke vector op te slaan en te lezen tijdens een vectorzoekopdracht. Vectorzoekopdrachten met eenflatindex zijn brute-force zoekopdrachten en produceren 100% nauwkeurigheid of volledigheid. Dat wil gezegd, ze zijn gegarandeerd de meest vergelijkbare vectoren in de gegevensset te vinden. Er bestaat 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. Deze index is een goede optie voor kleinere scenario's of scenario's waarin 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. Deze aanbeveling 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/?"
},
{
"path": "/vector1/*",
},
{
"path": "/vector2/*",
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Belangrijk
Het vectorpad is toegevoegd aan de excludedPaths sectie van het indexeringsbeleid om geoptimaliseerde prestaties voor invoeging te garanderen. Het niet toevoegen van het vectorpad aan excludedPaths resulteert in hogere kosten voor aanvraageenheden en latentie voor vectorinvoegingen.
Belangrijk
Jokertekens (*, []) worden momenteel niet ondersteund in het vectorbeleid of de vectorindex.
Vectorzoekopdrachten uitvoeren met query's met behulp van 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 ingebouwde VECTORDISTANCE functie in een query. Een voorbeeld van een NoSQL-query die de overeenkomstscore als alias scoreprojecteert en sorteert in volgorde van meest vergelijkbaar met minst vergelijkbaar:
SELECT TOP 10
c.title,
VECTORDISTANCE(c.contentVector, [1,2,3]) AS score
FROM
container 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, waardoor de query meer aanvraageenheden (RU's) kost en een hogere latentie heeft dan nodig is.