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.
In een vectordatabase worden gegevens opgeslagen en beheerd in de vorm van vectoren, die numerieke matrices van gegevenspunten zijn.
Het gebruik van vectoren maakt complexe query's en analyses mogelijk, omdat u vectoren kunt vergelijken en analyseren met behulp van geavanceerde technieken voor het vinden van vergelijkbare items en het ordenen van gegevens in groepen, waaronder clustering, kwantisatie en vectorgelijkheid zoeken.
Traditionele databases zijn niet geschikt voor het verwerken van de hoogdimensionale gegevens die steeds vaker voorkomen in gegevensanalyse. Vectordatabases zijn echter ontworpen voor het verwerken van high-dimensionale gegevens, zoals tekst, afbeeldingen en audio, door ze weer te geven als vectoren. Vectordatabases zijn handig voor taken zoals machine learning, verwerking van natuurlijke taal en afbeeldingsherkenning, waarbij het doel is patronen of overeenkomsten in grote gegevenssets te identificeren.
In dit artikel vindt u achtergrondinformatie over vectordatabases en wordt uitgelegd hoe u een Eventhouse kunt gebruiken als vectordatabase in Real-Time Intelligence in Microsoft Fabric. Zie Zelfstudie: Een Eventhouse gebruiken als vectordatabase voor een praktisch voorbeeld.
Belangrijke concepten
De volgende belangrijke concepten worden gebruikt in vectordatabases:
Vector-gelijkenis
Vector-gelijkenis is een meting van hoe verschillende (of vergelijkbare) twee of meer vectoren zijn. Vector overeenkomsten zoeken is een techniek die wordt gebruikt om vergelijkbare vectoren in een gegevensset te vinden. U vergelijkt vectoren met behulp van een metrische afstandswaarde, zoals Euclidische afstand of cosinus-gelijkenis. Hoe dichter twee vectoren zijn, hoe vergelijkbaarer ze zijn.
Insluitingen
Insluitingen zijn een veelgebruikte manier om gegevens weer te geven in een vectorindeling voor gebruik in vectordatabases. Een insluiting is een wiskundige weergave van een stukje gegevens, zoals een woord, tekstdocument of een afbeelding, die is ontworpen om de semantische betekenis vast te leggen. U maakt insluitingen met behulp van algoritmen die de gegevens analyseren en een set numerieke waarden genereren die de belangrijkste functies vertegenwoordigen. Een insluiting voor een woord kan bijvoorbeeld de betekenis, de context en de relatie met andere woorden vertegenwoordigen. Het proces voor het maken van insluitingen is eenvoudig. Hoewel u ze kunt maken met behulp van standaard-Python pakketten (bijvoorbeeld spaCy, sent2vec, Gensim), genereren grote taalmodellen (LLM) met de hoogste kwaliteit insluitingen voor semantische tekstzoekopdrachten. U kunt bijvoorbeeld tekst verzenden naar een insluitmodel in Azure OpenAI en er wordt een vectorweergave gegenereerd die u kunt opslaan voor analyse. Zie Ondersluitingen in Azure OpenAI Service voor meer informatie.
Algemene werkstroom
De algemene werkstroom voor het gebruik van een vectordatabase is als volgt:
- Gegevens insluiten: gegevens converteren naar vectorindeling met behulp van een insluitmodel. U kunt bijvoorbeeld tekstgegevens insluiten met behulp van een OpenAI-model.
- Store vectoren: Sla de ingesloten vectoren op in een vectordatabase. U kunt de ingesloten gegevens naar een Eventhouse verzenden om de vectoren op te slaan en te beheren.
- Embed query: Converteer de querygegevens naar vectorformaat met hetzelfde embedding-model dat wordt gebruikt om de opgeslagen gegevens te embedden.
- Queryvectors: Gebruik vector-overeenkomsten zoeken om vermeldingen in de database te vinden die vergelijkbaar zijn met de query.
Eventhouse als vectordatabase
De kern van vector-overeenkomsten zoeken is de mogelijkheid om vectorgegevens op te slaan, te indexeren en op te vragen. Eventhouses bieden een oplossing voor het verwerken en analyseren van grote hoeveelheden gegevens, met name in scenario's die realtime analyse en verkenning vereisen. Deze mogelijkheid maakt Eventhouse een uitstekende keuze voor het opslaan en doorzoeken van vectoren.
Met de volgende onderdelen van Eventhouse kunt u deze als vectordatabase gebruiken:
- Het dynamische gegevenstype, waarmee ongestructureerde gegevens, zoals matrices en eigenschapstassen, kunnen worden opgeslagen. Gebruik dit gegevenstype om vectorwaarden op te slaan. U kunt de vectorwaarde verder uitbreiden door metagegevens op te slaan die betrekking hebben op het oorspronkelijke object als afzonderlijke kolommen in uw tabel.
- Het coderingstype
Vector16dat is ontworpen voor het opslaan van vectoren van drijvendekommanummers in 16-bits precisie. Deze codering maakt gebruik van deBfloat16in plaats van de standaard 64 bits. Gebruik deze codering voor het opslaan van ML-vector-inbeddingen omdat het de opslagvereisten met een factor van vier vermindert en vectorverwerkingsfuncties zoals series_dot_product() en series_cosine_similarity() versnelt met meerdere ordes van grootte. - De functie series_cosine_similarity, waarmee u vectorvergelijkingen kunt uitvoeren bovenop de vectoren die in Eventhouse zijn opgeslagen.
Optimaliseren voor schaal
Zie de blog voor meer informatie over het optimaliseren van vector-similariteitszoekopdrachten.
Voer de volgende stappen uit om de prestaties en de resulterende zoektijden te maximaliseren:
- Stel de codering van de kolom insluitingen in op Vector16, de 16-bits codering van de vectorcoëfficiënten (in plaats van de standaard 64-bits).
- Sla de tabel embeddingvectoren op alle clusterknooppunten op met ten minste één shard per processor. Voer de volgende stappen uit om dit doel te bereiken:
- Beperk het aantal insluitvectors per shard door de ShardEngineMaxRowCount van het sharding-beleid te wijzigen. Met deze instelling worden uw gegevens verspreid over alle beschikbare rekenresources voor snellere zoekopdrachten.
- Wijzig de RowCountUpperBoundForMerge van het samenvoegbeleid. Het samenvoegbeleid is nodig om samenvoegingen na opname te onderdrukken.
Voorbeeld van optimalisatiestappen
In het volgende voorbeeld definieert u een statische vectortabel voor het opslaan van 1M-vectoren. U definieert het insluitingsbeleid als Vector16 en stelt het sharding- en samenvoegbeleid in om de tabel te optimaliseren voor vector-overeenkomsten zoeken. In dit voorbeeld wordt ervan uitgegaan dat het cluster 20 knooppunten heeft en dat elk knooppunt 16 processors heeft. De shards van de tabel moeten maximaal 1.000.000/(20*16)=3.125 rijen bevatten.
Voer de volgende KQL-opdrachten één voor één uit om de lege tabel te maken en stel de vereiste beleidsregels en codering in:
.create table embedding_vectors(vector_id:long, vector:dynamic) // This is a sample selection of columns, you can add more columns .alter column embedding_vectors.vector policy encoding type = 'Vector16' // Store the coefficients in 16 bits instead of 64 bits accelerating calculation of dot product, suppress redundant indexing .alter-merge table embedding_vectors policy sharding '{ "ShardEngineMaxRowCount" : 3125 }' // Balanced data on all nodes and, multiple extents per node so the search can use all processors .alter-merge table embedding_vectors policy merge '{ "RowCountUpperBoundForMerge" : 3125 }' // Suppress merging extents after ingestionDe gegevens opnemen in de tabel die u in de vorige stap hebt gemaakt en gedefinieerd.