Delen via


Vectordatabases

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 vectoren kunnen worden vergeleken en geanalyseerd met behulp van geavanceerde technieken, zoals vector-overeenkomsten zoeken, kwantisatie en clustering. 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 als vectordatabase in Realtime Intelligence in Microsoft Fabric kunt gebruiken. 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. Vectoren worden vergeleken 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. Insluitingen worden gemaakt 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 ze kunnen worden gemaakt 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 kan worden opgeslagen voor analyse. Zie Inzicht in insluitingen in Azure OpenAI Service voor meer informatie.

Algemene werkstroom

Schematisch voor het insluiten, opslaan en opvragen van tekst die is opgeslagen als vectoren.

De algemene werkstroom voor het gebruik van een vectordatabase is als volgt:

  1. Gegevens insluiten: gegevens converteren naar vectorindeling met behulp van een insluitmodel. U kunt bijvoorbeeld tekstgegevens insluiten met behulp van een OpenAI-model.
  2. 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.
  3. Insluitquery: converteer de querygegevens naar vectorindeling met hetzelfde insluitingsmodel dat wordt gebruikt om de opgeslagen gegevens in te sluiten.
  4. 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 Similarity Search 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, waardoor het een uitstekende keuze is voor het opslaan en doorzoeken van vectoren.

De volgende onderdelen van de functie maken het gebruik van Eventhouse een vectordatabase mogelijk:

  • Het dynamische gegevenstype, waarmee ongestructureerde gegevens, zoals matrices en eigenschapstassen, kunnen worden opgeslagen. Daarom wordt het gegevenstype aanbevolen voor het opslaan van vectorwaarden. 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 Vector16 dat is ontworpen voor het opslaan van vectoren van drijvendekommanummers in precisie van 16 bits, die gebruikmaakt van de Bfloat16 in plaats van de standaard 64 bits. Deze codering wordt aanbevolen voor het opslaan van ML-vector-insluitingen, omdat hiermee de opslagvereisten worden verminderd met een factor van vier en vectorverwerkingsfuncties zoals series_dot_product() en series_cosine_similarity() worden versneld op grootte.
  • De series_cosine_similarity-functie , die vector-overeenkomsten kan uitvoeren op de vectoren die zijn opgeslagen in Eventhouse.

Optimaliseren voor schaal

Lees het blog voor meer informatie over het optimaliseren van vector-overeenkomsten.

Voer de volgende stappen uit om de prestaties en de resulterende zoektijden te maximaliseren:

  1. 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).
  2. Sla de tabel met insluitvectors op alle clusterknooppunten op met ten minste één shard per processor, die wordt uitgevoerd door de volgende stappen:
    1. Beperk het aantal insluitvectors per shard door de ShardEngineMaxRowCount van het sharding-beleid te wijzigen. Het sharding-beleid balancer gegevens op alle knooppunten met meerdere gebieden per knooppunt, zodat de zoekopdracht alle beschikbare processors kan gebruiken.
    2. Wijzig de RowCountUpperBoundForMerge van het samenvoegbeleid. Het samenvoegbeleid is nodig om samenvoegingen na opname te onderdrukken.

Voorbeeld van optimalisatiestappen

In het volgende voorbeeld wordt een statische vectortabel gedefinieerd voor het opslaan van 1M-vectoren. Het insluitbeleid wordt gedefinieerd als Vector16 en het sharding- en samenvoegbeleid is ingesteld om de tabel te optimaliseren voor vector-overeenkomsten zoeken. Voor dit probleem gaan we ervan uit dat het cluster 20 knooppunten heeft die elk 16 processors hebben. De shards van de tabel moeten maximaal 1000000/(20*16)=3125 rijen bevatten.

  1. De volgende KQL-opdrachten worden één voor één uitgevoerd om de lege tabel te maken en de vereiste beleidsregels en codering in te stellen:

    .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 ingestion
    
  2. De gegevens opnemen in de tabel die u in de vorige stap hebt gemaakt en gedefinieerd.

Volgende stap