Vektordatabase
En vektordatabase er en database som er optimalisert for å finne like objekter, ord, setninger eller andre typer data. Denne forklaringen fokuserer på semantiske vektordatabaser. Med semantisk menes det at systemet prøver å forstå meningen bak ordene.
En vektordatabase lagrer alle elementer ved hjelp av en vektor. Den kan for eksempel se sånn ut:
| Vektor | Data |
|---|---|
| [2,4,1] | "Båt" |
| [1,3,5] | "Bil" |
| [4,2,3] | "Hus" |
Vektoren kan sees på som et koordinat. Den representerer den semantiske verdien av ordet, og bestemmer hvor det blir plassert i databasen.
Eksempel 1: Én dimensjon
Vi kan starte med en vektordatabase med én dimensjon. Denne databasen har kun én dimensjon, altså ett tall i Vektor-kolonnen. I dette eksempelet representerer tallet i vektoren størrelsen på objektet ordet viser til.
På bildet kan du se en database med tre elementer: "telefon", "bil" og "fly". Disse har fått vektorverdier basert på størrelsen sin.
Hvis vi nå vil søke gjennom denne databasen og finne elementet som "ligner" mest på for eksempel "båt", så gjør vi først "båt" om til en vektor. Hvordan man genererer en vektor er beskrevet lenger nede. "Båt" får vektoren [7], og hvis vi plasserer den på linjen, ser man lett at "bil" blir den nærmeste representanten. Det er dette som er magien med en vektordatabase.
Eksempel 2: To dimensjoner
Vi kan legge til en dimensjon til, og noen ekstra elementer i databasen. Dimensjon 2 representerer hvor bråkete et objekt er. Da kan databasen se slik ut:
Her kan du se at objekter som "telefon" og "bok" er nær hverandre. Du kan også se at "fly" og "hus" er like store, men fortsatt ikke ligger så nær hverandre fordi et fly lager mye mer lyd.
Hvis vi vil finne objekter som ligner på for eksempel "puff", med vektorverdien [4, 1], vil grafen se slik ut:
På grafen kan du se at selv om "puff" er like stor som "støvsuger", er det mer likt "bok" fordi det ikke lager støy.
Eksempel 3: 1000 dimensjoner
Vi kan legge til enda en dimensjon, og da får vi en 3D-graf, med for eksempel dimensjonene "fuktighet", "temperatur" eller "hastighet". Når vi legger til en fjerde dimensjon, blir det ikke lenger mulig å representere en vektordatabase på denne måten, siden vi lever i en 3-dimensjonal verden. I en vektordatabase kan det derimot gjerne være 1000 dimensjoner. Hver av dimensjonene representerer en semantisk egenskap ved ordet, og dermed får man en ganske kompleks og detaljert representasjon.
Disse dimensjonene settes ikke manuelt. De settes av en embedder. En embedder er en algoritme som tar inn et ord eller en setning, og genererer en vektor basert på den semantiske verdien av ordet eller setningen. I en semantisk vektordatabase er det vanligst å bruke en embedder som er trent av noen andre. En embedder trenes litt på samme måte som en LLM, og er derfor også en slags "black box". Vi vet altså ikke nøyaktig hva de forskjellige dimensjonene representerer.
["Fly"] -> [EMBEDDER] -> [3, 2, 6, ...]
Resultatet fra embedderen blir til slutt en rekke med tall som representerer betydningen av ordet, ikke bare egenskaper, men også bruksområder og kontekst. En puff kan ligge nær "hus" eller "hjem" i en vektordatabase, ikke fordi objektene er like, men fordi de ofte omtales sammen, for eksempel i samtaler om interiør. Men "puff" kan også ligge nær "bok", fordi man gjerne legger beina opp på en puff før man leser en bok.
Det kan være vanskelig å se for seg flere dimensjoner enn 3, så jeg anbefaler å holde fast ved denne mentale modellen, samtidig som man aksepterer at vi kan ha flere dimensjoner, og at disse ikke alltid har en tydelig definert betydning.
Flyten til en vektordatabase i KI-kontekst
Initialisering
[Kunnskap] -> [Embedder] -> [Vektordatabase]
All tekstbasert kunnskap deles opp i paragrafer, og hver paragraf blir sendt gjennom en embedder som genererer en vektor for den. Disse vektorene blir så lagret i en vektordatabase, sammen med teksten de representerer.
Søk
[Spørsmål] -> [Embedder] -> [Vektordatabase] -> [Tekst]
Når en bruker stiller et spørsmål, blir spørsmålet sendt gjennom en embedder, som genererer en vektor for det. Denne vektoren blir så sendt til vektordatabasen, som returnerer objekter som ligger nær vektoren. Disse blir inkludert i konteksten som sendes til LLM-en.
Avslutning
Denne beskrivelsen er ment å gi en intuitiv forståelse av hva en vektordatabase er, og hvordan den fungerer i en KI-kontekst. Det finnes mange forskjellige typer vektordatabaser, og mange forskjellige måter å bruke dem på.