Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
En vektordatabase gemmer og administrerer data i form af vektorer, som er numeriske matrixer af datapunkter.
Brugen af vektorer muliggør komplekse forespørgsler og analyser, fordi man kan sammenligne og analysere vektorer ved at bruge avancerede teknikker til at finde lignende elementer og organisere data i grupper, herunder klyngedannelse, kvantisering og vektorlighedssøgning.
Traditionelle databaser egner sig ikke godt til at håndtere de højdimensionelle data, som bliver stadig mere almindelige i dataanalyse. Vektordatabaser er dog designet til at håndtere højdimensionelle data, f.eks. tekst, billeder og lyd, ved at repræsentere dem som vektorer. Vektordatabaser er nyttige til opgaver som maskinel indlæring, behandling af naturligt sprog og billedgenkendelse, hvor målet er at identificere mønstre eller ligheder i store datasæt.
Denne artikel giver lidt baggrund om vektordatabaser og forklarer konceptuelt, hvordan du kan bruge en Eventhouse som vektordatabase i Real-Time Intelligence in Microsoft Fabric. Du kan se et praktisk eksempel under Selvstudium: Brug et eventhouse som en vektordatabase.
Nøglekoncepter
Følgende nøglebegreber bruges i vektordatabaser:
Vektorens lighed
Vektorlighed er en måling af, hvor forskellige (eller lignende) to eller flere vektorer er. Søgning efter vektorlighed er en teknik, der bruges til at finde lignende vektorer i et datasæt. Du sammenligner vektorer ved at bruge en afstandsmetrik, såsom euklidisk afstand eller cosinuslighed. Jo tættere to vektorer er, jo mere ens er de.
Integreringer
Integreringer er en almindelig måde at repræsentere data i et vektorformat til brug i vektordatabaser. En integrering er en matematisk repræsentation af en datadel, f.eks. et ord, et tekstdokument eller et billede, der er designet til at fange dets semantiske betydning. Du skaber embeddings ved at bruge algoritmer, der analyserer dataene og genererer et sæt numeriske værdier, der repræsenterer dens nøglefunktioner. En integrering for et ord kan f.eks. repræsentere dets betydning, kontekst og relation til andre ord. Processen med at oprette integreringer er ligetil. Selvom du kan oprette dem ved at bruge standard Python-pakker (for eksempel spaCy, sent2vec, Gensim), genererer Large Language Models (LLM) embeddings af højeste kvalitet til semantisk tekstsøgning. For eksempel kan du sende tekst til en embedding-model i Azure OpenAI, og den genererer en vektorrepræsentation, som du kan gemme til analyse. For mere information, se Forstå indlejringer i Azure OpenAI Service.
Generel arbejdsproces
Den generelle arbejdsproces for brug af en vektordatabase er som følger:
- Integrer data: Konvertér data til vektorformat ved hjælp af en integreringsmodel. Du kan f.eks. integrere tekstdata ved hjælp af en OpenAI-model.
- Gem vektorer: Gem de integrerede vektorer i en vektordatabase. Du kan sende de integrerede data til et Eventhouse for at gemme og administrere vektorerne.
- Integrer forespørgsel: Konvertér forespørgselsdataene til vektorformat ved hjælp af den samme integreringsmodel, der bruges til at integrere de gemte data.
- Forespørgselsvektorer: Brug vektoren lighedssøgning til at finde poster i databasen, der ligner forespørgslen.
Eventhouse som vektordatabase
Kernen i vektorlighedssøgning er muligheden for at lagre, indeksere og forespørge vektordata. Eventhouses leverer en løsning til håndtering og analyse af store mængder data, især i scenarier, der kræver analyse og udforskning i realtid. Denne funktion gør Eventhouse til et fremragende valg til lagring og søgning af vektorer.
Følgende komponenter i Eventhouse gør det muligt at bruge det som vektordatabase:
- Den dynamiske datatype, som kan gemme ustrukturerede data, f.eks. matrixer og egenskabsposer. Brug denne datatype til at gemme vektorværdier. Du kan øge vektorværdien yderligere ved at gemme metadata, der er relateret til det oprindelige objekt, som separate kolonner i tabellen.
-
Kodningstypen
Vector16designet til at lagre vektorer af flydende kommatal med 16-bit præcision. Denne kodning bruger iBfloat16stedet for standard 64 bit. Brug denne kodning til at lagre ML-vektorindlejringer, fordi den reducerer lagringsbehovet med en faktor fire og accelererer vektorbehandlingsfunktioner som series_dot_product() og series_cosine_similarity() med størrelsesordener. - Funktionen series_cosine_similarity, som du kan bruge til at udføre vektorlighedssøgninger oven på vektorerne, der er gemt i Eventhouse.
Optimer til skalering
For mere information om optimering af vektorlighedssøgning, se bloggen.
For at maksimere ydeevnen og de resulterende søgetider, følg disse trin:
- Angiv kodningen af kolonnen embeddings til Vector16, 16-bit kodningen af vektorkoefficienter (i stedet for standard-64-bit).
- Gem embedding-vektortabellen på alle cluster-noder med mindst én shard pr. processor. For at opnå dette mål skal du følge disse trin:
- Begræns antallet af integreringsvektorer pr. skår ved at ændre ShardEngineMaxRowCount for sharding-politikken. Denne indstilling spreder dine data over alle tilgængelige computerressourcer for hurtigere søgninger.
- Rediger RowCountUpperBoundForMerge for flettepolitikken. Flettepolitikken er nødvendig for at undertrykke fletteudvidelser efter indtagelse.
Eksempel på optimeringstrin
I det følgende eksempel definerer du en statisk vektortabel til lagring af 1M vektorer. Du definerer embedding-politikken som Vector16 og sætter sharding- og merging-politikkerne for at optimere tabellen til vektorlighedssøgning. For dette eksempel antages klyngen har 20 noder, og hver node har 16 processorer. Tabellens shards bør højst indeholde 1.000.000/(20*16)=3.125 rækker.
Kør følgende KQL-kommandoer én ad gangen for at oprette den tomme tabel og sæt de nødvendige politikker og kodning:
.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 ingestionIndfødning af dataene i den tabel, der blev oprettet og defineret i det forrige trin.