Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
En vektordatabase lagrer og behandler data i form av vektorer, som er numeriske matriser med datapunkter.
Bruken av vektorer muliggjør komplekse spørringer og analyser, fordi du kan sammenligne og analysere vektorer ved å bruke avanserte teknikker som vektorlikhetssøk, kvantisering og klynging. Tradisjonelle databaser egner seg ikke godt til å håndtere høydimensjonale data som blir stadig vanligere i dataanalyse. Vektordatabaser er imidlertid utformet for å håndtere høydimensjonale data, for eksempel tekst, bilder og lyd, ved å representere dem som vektorer. Vektordatabaser er nyttige for oppgaver som maskinlæring, behandling av naturlig språk og bildegjenkjenning, der målet er å identifisere mønstre eller likheter i store datasett.
Denne artikkelen gir litt bakgrunn om vektordatabaser og forklarer begrepsmessig hvordan du kan bruke et Eventhouse som vektordatabase i Sanntidsintelligens i Microsoft Fabric. Hvis du vil ha et praktisk eksempel, kan du se Opplæring: Bruke et eventhouse som vektordatabase.
Nøkkelkonsepter
Følgende nøkkelkonsepter brukes i vektordatabaser:
Vektor likhet
Vektorlikhet er et mål på hvor forskjellige (eller lignende) to eller flere vektorer er. Vektor-likhetssøk er en teknikk som brukes til å finne lignende vektorer i et datasett. Du sammenligner vektorer ved å bruke en avstandsmetrikk, som Euklidisk avstand eller cosinuslikhet. Jo nærmere to vektorer er, jo mer lik er de.
Innebygginger
Innebygging er en vanlig måte å representere data på i et vektorformat for bruk i vektordatabaser. En innebygging er en matematisk representasjon av et stykke data, for eksempel et ord, et tekstdokument eller et bilde, som er utformet for å fange opp den semantiske betydningen. Du lager embeddinger ved å bruke algoritmer som analyserer dataene og genererer et sett med numeriske verdier som representerer nøkkelfunksjonene. En innebygging for et ord kan for eksempel representere betydningen, konteksten og relasjonen til andre ord. Prosessen med å opprette innebygginger er enkel. Selv om du kan lage dem ved å bruke standard Python-pakker (for eksempel spaCy, sent2vec, Gensim), genererer Large Language Models (LLM) høyeste kvalitet på embeddings for semantisk tekstsøk. For eksempel kan du sende tekst til en embedding-modell i Azure OpenAI, og den genererer en vektorrepresentasjon som du kan lagre for analyse. Hvis du vil ha mer informasjon, kan du se Forstå innebygginger i Azure OpenAI-tjenesten.
Generell arbeidsflyt
Den generelle arbeidsflyten for bruk av en vektordatabase er som følger:
- Bygg inn data: Konverter data til vektorformat ved hjelp av en innebyggingsmodell. Du kan for eksempel bygge inn tekstdata ved hjelp av en OpenAI-modell.
- Lagre vektorer: Lagre de innebygde vektorene i en vektordatabase. Du kan sende de innebygde dataene til et Eventhouse for å lagre og administrere vektorene.
- Innebyggingsspørring: Konverter spørringsdataene til vektorformat ved hjelp av samme innebyggingsmodell som brukes til å bygge inn de lagrede dataene.
- Spørringsvektorer: Bruk vektor-likhetssøk til å finne oppføringer i databasen som ligner på spørringen.
Eventhouse som vektordatabase
Kjernen i vektorlikhetssøk er muligheten til å lagre, indeksere og spørre i vektordata. Eventhouses gir en løsning for håndtering og analyse av store mengder data, spesielt i scenarioer som krever sanntidsanalyse og utforskning. Denne funksjonaliteten gjør Eventhouse til et utmerket valg for lagring og søk i vektorer.
Følgende komponenter i Eventhouse gjør det mulig å bruke det som en vektordatabase:
- Den dynamiske datatypen, som kan lagre ustrukturerte data, for eksempel matriser og egenskapsposer. Bruk denne datatypen til å lagre vektorverdier. Du kan øke vektorverdien ytterligere ved å lagre metadata relatert til det opprinnelige objektet som separate kolonner i tabellen.
-
Kodingstypen
Vector16er designet for å lagre vektorer av flyttall med 16-bits presisjon. Denne kodingen bruker iBfloat16stedet for standard 64 biter. Bruk denne kodingen til å lagre ML-vektorinnlegginger fordi den reduserer lagringsbehovet med fire ganger og akselererer vektorbehandlingsfunksjoner som series_dot_product() og series_cosine_similarity() med størrelsesordener. - series_cosine_similarity-funksjonen, som du kan bruke til å utføre vektorlikhetssøk oppå vektorene lagret i Eventhouse.
Optimaliser for skalering
For mer informasjon om optimalisering av vektorlikhetssøk, se bloggen.
For å maksimere ytelsen og de resulterende søketidene, følg disse trinnene:
- Angi kodingen av innebyggingskolonnen til Vektctor16, 16-biters koding av vektorkoeffisientene (i stedet for standard 64-biters).
- Lagre tabellen for innbyggingsvektorer på alle cluster-noder med minst én shard per prosessor. For å oppnå dette målet, følg disse stegene:
- Begrens antall innbyggingsvektorer per skår ved å endre ShardEngineMaxRowCount for skåringspolicyen. Hardingspolicyen balanserer data på alle noder med flere omfang per node, slik at søket kan bruke alle tilgjengelige prosessorer.
- Endre RowCountUpperBoundForMerge for sammenslåingspolicyen. Flettepolicyen er nødvendig for å undertrykke sammenslåingsgrader etter inntak.
Eksempel på optimaliseringstrinn
I det følgende eksempelet definerer du en statisk vektortabell for lagring av 1M vektorer. Du definerer embedding-policyen som Vector16, og setter sharding- og merging-policyene for å optimalisere tabellen for vektorlikhetssøk. For dette eksempelet, anta at klyngen har 20 noder og hver node har 16 prosessorer. Tabellens shards bør inneholde maksimalt 1 000 000/(20*16)=3 125 rader.
Kjør følgende KQL-kommandoer én etter én for å lage den tomme tabellen og sett nødvendige policyer og koding:
.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 ingestionInntak av dataene til tabellen som ble opprettet og definert i forrige trinn.