Jak to możliwe, że model AI wie, że „samochód” i „auto” znaczą to samo, choć nie mają wspólnej litery? Odpowiadają za to embeddingi - numeryczne reprezentacje wektorowe tekstu, w których słowa i pojęcia o podobnym znaczeniu zamieniane są na gęste wektory liczb (najczęściej 300-1024 wymiarów) leżące blisko siebie w wielowymiarowej przestrzeni. Dzięki temu przetwarzanie języka naturalnego nie polega na porównywaniu liter, lecz na podobieństwie semantycznym, mierzonym metrykami takimi jak podobieństwo cosinusowe.
Embeddingi są fundamentem modeli text embedding - od klasycznych Word2Vec, GloVe i FastText po kontekstowe architektury oparte na Transformerach, takie jak BERT. Artykuł wyjaśnia, jak wygląda generowanie wektorów z tekstu, czym różni się statyczna wektoryzacja od dynamicznych embeddingów kontekstowych i jak dzięki temu komputer rozumie znaczenie, nie tylko formę słów.
Dlaczego komputery potrzebują liczb do rozumienia języka ludzkiego
Komputery operują wyłącznie na liczbach - procesor nie „czyta” słowa „kot”, lecz wykonuje operacje na jego reprezentacji numerycznej. Zrozumienie tekstu przez AI sprowadza się więc do zamiany słów, fraz i dokumentów na embeddingi - gęste wektory liczb zmiennoprzecinkowych o stałej długości, kodujące treść, ton, sentyment, temat oraz relacje semantyczne i składniowe.
Zanim powstały nowoczesne embeddingi, standardem był One-Hot Encoding - metoda przypisująca każdemu słowu unikalny wektor binarny, w którym tylko jedna pozycja ma wartość 1, a wszystkie pozostałe 0. Podejście to miało trzy blokujące ograniczenia: wysoką wymiarowość wektorów (rozmiar równy liczbie słów w słowniku, często dziesiątki lub setki tysięcy pozycji), słabą skalowalność przy dużych słownikach oraz - najważniejsze - całkowity brak reprezentacji relacji semantycznych. Wektory „samochodu” i „auta” były w tej metodzie równie odległe jak wektory „samochodu” i „banana”.

Kolejnym etapem ewolucji stały się sieci rekurencyjne (RNN), a zwłaszcza ich udoskonalona wersja - LSTM (Long Short-Term Memory), zaprojektowana do zapamiętywania informacji z dłuższych fragmentów tekstu. Mimo postępu, tradycyjne jednostki RNN/LSTM analizowały kontekst głównie w jednym kierunku - najczęściej lewostronnie, słowo po słowie. Ten jednostronny przepływ informacji utrudniał pełne zrozumienie zdania, bo sens słowa zależy równie silnie od tego, co po nim następuje, jak od tego, co je poprzedza.
Te dwa ograniczenia - brak semantyki w One-Hot Encoding i jednostronność kontekstu w LSTM - wyznaczyły kierunek dalszego rozwoju modeli embeddingowych, opisany w kolejnych częściach artykułu. Praktyczne konsekwencje tej ewolucji sięgają dziś poza samo przetwarzanie języka naturalnego - mechanizmy semantycznego rozumienia tekstu wykorzystuje się m.in. w pozycjonowaniu AI, gdzie wyszukiwarki oceniają dopasowanie treści do intencji użytkownika na poziomie znaczenia, nie tylko dopasowania fraz.
Krok po kroku: jak działa zamiana tekstu na wektory liczbowe
Wektoryzacja tekstu polega na podzieleniu go na tokeny, a następnie przetworzeniu ich przez model językowy w celu wygenerowania wektora o określonej wymiarowości. Proces przebiega dwuetapowo: najpierw tokenizacja, potem obliczenia w sieci neuronowej - ten drugi etap jest zasobożerny i znacznie wolniejszy niż późniejsze porównywanie gotowych embeddingów, czyli proste operacje matematyczne.
Tokenizacja a reprezentacja wektorowa tekstu
Tokenizacja to pierwszy i konieczny krok każdej wektoryzacji - zamiana słów, części słów lub znaków na numeryczne identyfikatory (tokeny), które model przyjmuje na wejściu.
- Podział tekstu - algorytm tokenizujący (np. WordPiece, BPE) dzieli zdanie na jednostki mniejsze niż całe słowo, dzięki czemu obsługuje także nieznane wcześniej wyrazy złożone czy neologizmy.
- Mapowanie na identyfikatory - każdy token otrzymuje unikalny numer ze słownika modelu; to on, nie samo słowo, trafia dalej do sieci neuronowej.
- Podstawa reprezentacji wektorowej - bez tokenizacji nie ma punktu wejścia do modelu. Sieć neuronowa operuje wyłącznie na liczbach, nie na znakach alfabetu.
Generowanie wektorów przez modele językowe
Po tokenizacji token trafia do warstw sieci neuronowej, gdzie wagi (parametry wyuczone na ogromnych korpusach tekstu) przekształcają go w ciąg liczb zmiennoprzecinkowych.
- Wymiar przestrzeni - wynikowy wektor ma stałą liczbę współrzędnych, typowo 300, 768 lub 1024. Każdy wymiar odpowiada jednej abstrakcyjnej cesze semantycznej lub składniowej wyuczonej przez model.
- Współrzędne wektora - wartości na poszczególnych pozycjach najczęściej mieszczą się w przedziale od -1 do 1, co pozwala kodować złożone, wielowarstwowe cechy znaczeniowe tekstu w jednym punkcie wielowymiarowej przestrzeni.
- Wynik końcowy - efektem jest gęsta reprezentacja wektorowa tekstu, w której dokumenty o zbliżonym znaczeniu zajmują sąsiadujące pozycje w przestrzeni wielowymiarowej, niezależnie od użytych słów czy ich formy gramatycznej.
Ewolucja modeli text embedding: od statycznych słowników do kontekstowego BERT-a
Ewolucja modeli text embedding przebiegła w czterech etapach: od statycznych reprezentacji słownikowych (Word2Vec, GloVe), przez model uwzględniający morfologię (FastText), po przełom architektoniczny (Transformer) i w pełni kontekstowy model BERT.
Word2Vec, GloVe i FastText łączy jedna cecha: każde słowo ma dokładnie jeden, niezmienny wektor niezależnie od kontekstu użycia. Różnią się metodą treningu. Word2Vec przewiduje słowa z lokalnego okna kontekstowego, GloVe faktoryzuje macierz współwystępowania zbudowaną na globalnych statystykach całego korpusu, a FastText, jako jedyny z tej trójki, rozkłada słowo na n-gramy znakowe - dzięki temu tworzy sensowne wektory nawet dla neologizmów i literówek, marginalizując problem out-of-vocabulary, którego Word2Vec i GloVe nie rozwiązują.
Przełom przyniosła architektura Transformer (2017). Jej mechanizm atencji waży wpływ każdego tokenu w zdaniu na każdy inny token równocześnie, zamiast przetwarzać tekst sekwencyjnie jak LSTM. Zrównoleglenie obliczeń i pełny dostęp do dwustronnego kontekstu umożliwiły powstanie modelu BERT (Google, 2018). Trening BERT-a obejmuje dwa etapy: pre-training z zadaniami Masked Language Modeling (odgadywanie zamaskowanych słów) i Next Sentence Prediction (ocena, czy dwa zdania logicznie następują po sobie), a następnie fine-tuning pod konkretne zadanie. Dzięki temu słowo „zamek” otrzymuje różny wektor w zdaniu o budowli obronnej i w zdaniu o zamku błyskawicznym - czego żaden wcześniejszy, statyczny model nie odwzorowywał.
Podobieństwo cosinusowe i matematyczne mierzenie znaczenia tekstu
Sztuczna inteligencja porównuje znaczenie tekstów, obliczając podobieństwo cosinusowe między ich wektorami - wynik bliski 1 oznacza niemal identyczne znaczenie semantyczne, niezależnie od użytych słów. Metryka ta mierzy kąt między dwoma wektorami, nie ich długość, a więc opisuje orientację wektorów względem siebie. Wartość podobieństwa cosinusowego przyjmuje zakres od -1 do 1: 1 oznacza dokumenty semantycznie identyczne, 0 - brak związku znaczeniowego, a -1 - znaczenia przeciwstawne. Uzupełnia ją odległość cosinusowa, obliczana jako 1 minus wartość podobieństwa - im mniejsza odległość, tym bliżej sobie dwa teksty pod względem treści.
Sensowne porównanie wymaga jednego warunku: wektory muszą pochodzić z tego samego modelu embeddingowego. Wymiary przestrzeni wektorowej nie mają uniwersalnego znaczenia między różnymi architekturami, więc mieszanie embeddingów z Word2Vec i BERT-a nie da interpretowalnego wyniku. Odległość między punktami w tej przestrzeni odzwierciedla podobieństwo semantyczne, nie podobieństwo literowe - dzięki temu synonimy takie jak „samochód” i „auto” uzyskują wysoki wynik mimo zupełnie innego zapisu.
Podobieństwo cosinusowe pozostaje jedną z podstawowych metryk w NLP, ale nie jest już jedynym narzędziem porównywania embeddingów. Systemy z lat 2024-2026 stosują równolegle odległość euklidesową, dot product oraz metryki wykorzystywane w indeksach ANN typu IP/IVF. Wybór konkretnej funkcji zależy od architektury modelu i implementacji bazy wektorowej: niektóre modele (np. trenowane z normalizacją wektorów) dają identyczne rankingi dla cosinusa i dot product, inne wymagają metryki zgodnej z procesem treningu. Dokumentacja modelu embeddingowego zwykle wskazuje rekomendowaną metrykę - jej ignorowanie prowadzi do błędnych wyników wyszukiwania semantycznego, nawet gdy wektory zostały wygenerowane poprawnie.
Optymalizacja wyszukiwania: Bi-encoder, Cross-encoder i architektura Re-rankingu
Wydajne systemy wyszukiwania łączą dwa modele: szybki Bi-encoder (SBERT) do wstępnej selekcji dokumentów oraz precyzyjny Cross-encoder do finalnego uszeregowania wyników (Re-ranking). Dwuetapowa architektura rozwiązuje konflikt między szybkością i precyzją, typowy dla każdego systemu wyszukiwania semantycznego działającego na dużych zbiorach dokumentów.

Szybka selekcja za pomocą Bi-encodera
- SBERT jako podstawa Bi-encodera - Sentence-BERT (2019) to modyfikacja architektury BERT zoptymalizowana pod generowanie embeddingów całych zdań, nie pojedynczych tokenów. Model koduje każdy tekst niezależnie, tworząc wektor gotowy do porównania bez ponownego przebiegu przez sieć.
- Skok wydajności - porównanie gotowych wektorów miarą cosinusową skraca czas znalezienia najbardziej podobnej pary zdań w zbiorze 10 000 zdań z 65 godzin (klasyczny BERT porównujący każdą parę osobno) do około 5 sekund.
- Zasada działania - zapytanie i dokument trafiają do sieci osobno, generując dwa niezależne wektory, porównywane następnie miarą cosinusową. Dzięki temu całą bazę dokumentów można zakodować offline i przechowywać gotowe embeddingi, a w momencie zapytania wystarczy obliczyć jeden nowy wektor.
- Zastosowanie w praktyce - Bi-encoder odpowiada za pierwszy etap wyszukiwania: z miliona lub więcej dokumentów wybiera niewielki podzbiór (50-100) najbardziej obiecujących kandydatów, przeszukując indeks wektorowy.
Precyzyjny Re-ranking przy użyciu Cross-encodera
- Zasada działania - Cross-encoder analizuje parę tekstów (zapytanie + dokument) jednocześnie, przepuszczając je razem przez jedną sieć neuronową. Model widzi relacje między słowami obu tekstów już na etapie kodowania, co daje dokładniejszą ocenę dopasowania niż porównanie dwóch osobnych wektorów.
- Koszt precyzji - jednoczesna analiza wymaga pełnego przebiegu sieci dla każdej pary tekstów, co czyni Cross-encoder zbyt kosztownym do przeszukiwania całej bazy dokumentów od zera.
- Architektura Re-rankingu - re-ranking łączy oba modele sekwencyjnie: Bi-encoder szybko selekcjonuje ograniczoną listę kandydatów z całego zbioru, a Cross-encoder precyzyjnie szereguje tę zawężoną listę, ustalając finalną kolejność wyników.
- Efekt końcowy - dwuetapowe podejście daje jakość rankingu zbliżoną do przeszukania całej bazy Cross-encoderem, przy koszcie obliczeniowym bliskim samemu Bi-encoderowi - kosztowna analiza par tekstów dotyczy tylko małej, wstępnie odfiltrowanej grupy dokumentów.
Przechowywanie wektorów i wyszukiwanie semantyczne w systemach RAG
Wdrożenie embeddingów na dużą skalę wymaga specjalistycznych baz danych wektorowych - to one umożliwiają błyskawiczne przeszukiwanie milionów rekordów i stanowią fundament systemów Retrieval-Augmented Generation (RAG). Baza wektorowa przechowuje nie surowy tekst, lecz jego liczbową reprezentację wraz z metadanymi, które pozwalają filtrować wyniki i odtworzyć oryginalną treść po znalezieniu dopasowania.
Architektura RAG łączy dwa etapy: wyszukiwanie (retrieval) najbardziej trafnych fragmentów wiedzy z bazy wektorowej i generowanie (generation) odpowiedzi przez duży model językowy, który wykorzystuje te fragmenty jako dodatkowy kontekst zapytania. Dzięki temu RAG rozwiązuje podstawowe ograniczenie modeli językowych - brak dostępu do aktualnej, firmowej lub wyspecjalizowanej wiedzy nieobjętej danymi treningowymi. System nie wymaga dotrenowania całego modelu; aktualizacja wiedzy sprowadza się do wymiany zawartości bazy wektorowej.
Popularne bazy wektorowe - Pinecone, Weaviate, Qdrant, Milvus, pgvector, Chroma - różnią się modelem wdrożenia (usługa zarządzana vs. open-source do samodzielnego hostowania) i strukturą indeksu, ale realizują ten sam cel: minimalizację czasu odpowiedzi przy zachowaniu wysokiej trafności wyników. Dla zbioru rzędu 1 miliona wektorów typowe opóźnienia zapytań wynoszą od kilku do kilkudziesięciu milisekund: mediana (p50) ok. 9-45 ms, percentyl 95 (p95) rzędu 22-89 ms, w zależności od konfiguracji indeksu i sprzętu. Taką szybkość zapewniają algorytmy przybliżonego najbliższego sąsiada (Approximate Nearest Neighbor, ANN) - HNSW czy IVF - które nie porównują zapytania z każdym wektorem w bazie, a przeszukują wyłącznie wyselekcjonowaną strukturę grafową lub klastrową.

Wybór metryki odległości w indeksie musi odpowiadać metryce, na której trenowano dany model embeddingowy - niedopasowanie pogarsza trafność retrievalu nawet gdy infrastruktura bazy działa poprawnie. Skuteczne wdrożenie wyszukiwania semantycznego w RAG - podobnie jak inne działania związane z pozycjonowaniem AI - wymaga równoczesnej optymalizacji jakości modelu embeddingowego, doboru metryki odległości i konfiguracji indeksu ANN. To akurat błąd, który widzimy nagminnie: zespół wybiera bazę wektorową po benchmarkach szybkości, a dopiero po wdrożeniu odkrywa, że wyniki wyszukiwania są słabe, bo nikt nie sprawdził, jaką metrykę zalecał twórca modelu embeddingowego.
Ewaluacja jakości semantycznej za pomocą metryki BERTScore
BERTScore ocenia jakość generowanego tekstu na podstawie podobieństwa semantycznego, nie powierzchniowego pokrycia słów - dzięki temu daje dokładniejszy obraz jakości niż tradycyjne metryki tekstowe. Metoda koduje każdy token zdania kandydującego i referencyjnego za pomocą kontekstowego modelu językowego, a następnie mierzy podobieństwo cosinusowe między odpowiadającymi sobie fragmentami w przestrzeni wektorowej. Nie sprawdza więc, czy tekst zawiera identyczne słowa jak referencja, lecz czy przekazuje ten sam sens.
Tym różni się od klasycznej rodziny metryk ROUGE, opartej na dopasowywaniu n-gramów i wspólnych ciągów słów, która karze każde parafrazowanie - nawet zachowujące pełen sens oryginału. BERTScore, operując na embeddingach tokenów, rozpoznaje semantyczną równoważność sformułowań różniących się leksykalnie, np. „zmniejszyć koszty” i „ograniczyć wydatki”, którym ROUGE przypisałby niski wynik z powodu braku dosłownego pokrycia słów. W badaniach z lat 2024-2025 ROUGE funkcjonuje więc jako punkt odniesienia (baseline) do oceny metryk embeddingowych, a nie jako metryka konkurencyjna operująca na tym samym poziomie abstrakcji.
Obliczenie BERTScore nie wymaga dodatkowego treningu klasyfikatora na oznakowanym zbiorze ocen ludzkich. Metoda wykorzystuje gotowe, wcześniej wytrenowane embeddingi kontekstowe i dopasowuje tokeny na zasadzie największego podobieństwa cosinusowego między parami wektorów - to forma unsupervised learning zastosowana do ewaluacji tekstu. Dzięki temu BERTScore można stosować do oceny tłumaczeń maszynowych, streszczeń czy odpowiedzi systemów RAG bez budowania osobnego zbioru referencyjnych ocen dla każdej nowej domeny. Naszym zdaniem to właśnie ta łatwość wdrożenia - bez etapu budowania własnego zbioru ocen - tłumaczy, dlaczego BERTScore wyparł ROUGE z większości nowych pipeline'ów ewaluacyjnych szybciej, niż wynikałoby to z samej różnicy w jakości metryki.
Wizualizacja i redukcja wymiarowości wielowymiarowych przestrzeni
Algorytmy redukcji wymiarowości - t-SNE, UMAP i PCA - rzutują wielowymiarowe dane na czytelne wykresy 2D lub 3D, umożliwiając człowiekowi interpretację złożonych relacji między wektorami. Embeddingi tekstowe czy grafowe mają zwykle od kilkuset do kilku tysięcy wymiarów, co jest nieprzyswajalne dla ludzkiego oka. Metody redukcji kompaktują tę strukturę, zachowując przy tym relacje odległości i podobieństwa między punktami w możliwie największym stopniu.
Metody różnią się podstawą matematyczną i przeznaczeniem, co przekłada się na odmienne zastosowania praktyczne:
- PCA (Principal Component Analysis) - metoda liniowa, wyznaczająca kierunki (składowe główne) o największej wariancji danych. Jest szybka obliczeniowo i deterministyczna. Dobrze nadaje się do wstępnej redukcji wymiarów przed dalszą analizą lub jako punkt odniesienia, ale słabo odwzorowuje nieliniowe, złożone struktury skupień w danych embeddingowych.
- t-SNE (t-distributed Stochastic Neighbor Embedding) - metoda nieliniowa, koncentrująca się na zachowaniu lokalnych sąsiedztw punktów: elementy podobne w oryginalnej przestrzeni pozostają blisko siebie także po redukcji. Dobrze ujawnia lokalne klastry semantyczne. Globalna struktura odległości między odległymi skupieniami bywa jednak zniekształcona, a wynik zależy od parametrów (np. perplexity) i losowej inicjalizacji.
- UMAP (Uniform Manifold Approximation and Projection) - metoda nieliniowa oparta na teorii rozmytych zbiorów topologicznych. Działa szybciej niż t-SNE i lepiej zachowuje zarówno lokalną, jak i globalną strukturę danych, dzięki czemu jest dziś częściej wybierana do wizualizacji dużych zbiorów embeddingów.
Praktyczne zastosowanie tych algorytmów obejmuje diagnostykę modeli embeddingowych: sprawdzenie, czy dokumenty o podobnej tematyce faktycznie tworzą zwarte skupienia w przestrzeni wektorowej, wykrywanie anomalii czy duplikatów semantycznych, a także prezentację wyników wyszukiwania semantycznego w formie zrozumiałej dla osób nietechnicznych. PCA sprawdza się jako szybki wstępny podgląd lub etap preprocessingu redukujący koszt obliczeniowy przed zastosowaniem t-SNE lub UMAP. Te dwie ostatnie metody dominują tam, gdzie kluczowe jest wierne odwzorowanie struktury skupień semantycznych. Żaden z tych wykresów nie jest jednak dowodem - to narzędzie do formułowania hipotez o strukturze danych, nie do ich ostatecznego potwierdzania, bo sama redukcja wymiarów zawsze coś zniekształca.
Embeddingi grafowe jako rozszerzenie klasycznych wektorów tekstowych
Embeddingi grafowe rozszerzają wektoryzację poza tekst: kodują strukturę połączeń w sieci, gdzie węzły reprezentują obiekty (strony internetowe, użytkowników, dokumenty, produkty), a krawędzie - relacje między nimi. Node2Vec, najpopularniejszy algorytm tej klasy, generuje losowe błądzenia (random walks) po grafie i na ich podstawie uczy się wektorowej reprezentacji każdego węzła - analogicznie do modeli językowych, które uczą się reprezentacji słów z ich kontekstu w tekście. Węzły często sąsiadujące w wygenerowanych ścieżkach otrzymują podobne wektory, nawet gdy nie łączy ich żadna bezpośrednia krawędź.
Node2Vec rozwija wcześniejszy algorytm DeepWalk, pierwszy, który zaadaptował technikę Word2Vec do struktur grafowych, traktując losowe błądzenia jako odpowiednik zdań w korpusie tekstowym. DeepWalk stosuje przejścia czysto losowe, jednorodnie wybierając kolejny węzeł z sąsiedztwa. Node2Vec wprowadza dodatkowo dwa parametry (p i q), które kontrolują, czy błądzenie preferuje eksplorację lokalnego sąsiedztwa (homofilię, podobieństwo strukturalne) czy oddalanie się w głąb grafu (odkrywanie ról strukturalnych węzłów - np. hubów o podobnej funkcji, choć odległych topologicznie). Ta elastyczność pozwala dostrajać reprezentację do konkretnego zadania: klasyfikacji węzłów, przewidywania nowych połączeń (link prediction) lub wykrywania społeczności w sieci.
Embeddingi grafowe stosuje się szerzej niż w zadaniach NLP - także w analizie sieci społecznych, grafów cytowań naukowych, struktur linków między stronami internetowymi czy relacji produkt-użytkownik w systemach rekomendacyjnych. Można je łączyć z klasycznymi embeddingami tekstowymi w jednym potoku: strona internetowa może być reprezentowana jednocześnie przez wektor treści (semantyka) i wektor pozycji w grafie linków (struktura). Taka kombinacja daje pełniejszy obraz niż każda z reprezentacji zastosowana osobno.
FAQ
Czym różnią się embeddingi statyczne od dynamicznych?
Embeddingi statyczne (Word2Vec, GloVe, FastText) przypisują słowu jeden, niezmienny wektor niezależnie od kontekstu, przez co nie radzą sobie z wieloznacznością. Embeddingi dynamiczne, generowane przez modele oparte na Transformerach (np. BERT), tworzą różne wektory dla tego samego słowa zależnie od otaczającego kontekstu.
Jak bazy wektorowe przyspieszają wyszukiwanie semantyczne?
Przechowują wygenerowane embeddingi i optymalizują obliczenia podobieństwa (np. cosinusowego) za pomocą indeksów ANN, umożliwiając wyszukiwanie semantyczne w czasie poniżej 1 sekundy nawet dla milionów wpisów - samo generowanie wektorów jest znacznie wolniejsze niż ich matematyczne porównywanie.





