Bazy wektorowe

Najczęstszym rodzajem wykorzystywanych baz danych są oczywiście bazy relacyjne. Swoją popularność zdobyły również bazy nie relacyjne (noSQL) typu klucz-wartość (jak np Redis), dokumentowe (jak np MongoDB, czy grafowe. Innym przykładem, który przy okazji LLMów zyskuje ogromną popularność są bazy wektorowe, służące do przechowywania wielowymiarowych danych (wektorów).

Nie będę tutaj powielał teorii, czy tłumaczeń jak takie bazy działają. Odsyłam na przykład do tego artykułu: Co to jest wektorowa baza danych?

Bardzo ciekawą wizualizację takiej bazy można zobaczyć w projektorze od TensorFlow.

W przypadku LLM taka baza świetnie nadaje się do przechowywania danych. Jest tak za sprawą embeddingu. Embedding to proces konwersji frazy na wektorową reprezentację liczbową. Wektor ten nie odzwierciedla jednak ciągu znaków, a raczej znaczenie danej frazy. W ten sposób model „rozumie” przesyłane zdania.
Przykład:

POST https://api.openai.com/v1/embeddings
{
  "input": "The food was delicious and the waiter...",
  "model": "text-embedding-ada-002",
  "encoding_format": "float"
}

RESPONSE:
{
    "object": "list",
    "data": [
        {
            "object": "embedding",
            "index": 0,
            "embedding": [
                0.002253932,
                -0.009333183,
                0.01574578,
                -0.007790351,
                -0.004711035,
[..]
                -0.017739397,
                -0.018552084,
                0.014539449,
                0.010431578,
                -0.015288644,
                -0.019364769,
                -0.0027967806
            ]
        }
    ],
    "model": "text-embedding-ada-002-v2",
    "usage": {
        "prompt_tokens": 8,
        "total_tokens": 8
    }
}

Odpowiedź skróciłem, wektor dla tego modelu embeddingu ma 1536 elementów / wymiarów.

Taki wektor możemy wrzucić do bazy wektorowej, aby później móc przeszukiwać bazę w kierunku fraz podobnych (Similarity Search).