Sieć pracuje tylko na liczbach: tokeny i kodowanie one-hot
🎯 Po co Ci to?
W Części III sieć dostawała na wejście już liczby: jasności pikseli, kanały RGB, mapy cech. Przy tekście tej wygody nie ma. Litery i słowa nie są liczbami — a sieć umie wyłącznie mnożyć, dodawać i przepuszczać wynik przez funkcję aktywacji (Jednostka 10.1). Zanim więc cokolwiek „przeczyta", ktoś musi zamienić język na reprezentację numeryczną.
Ta jednostka pokazuje najprostszą taką zamianę — i dlaczego, mimo że jest poprawna formalnie, nie nadaje się do uczenia znaczenia. Bez tego nie zrozumiesz, po co wymyślono word2vec.
✅ Czego się nauczysz
Po tej lekcji potrafisz:
- wyjaśnić, dlaczego sieć neuronowa nie przetwarza tekstu bezpośrednio;
- opisać tokenizację, słownik i indeks tokenu;
- zbudować kodowanie z gorącą jedynką (one-hot) dla małego słownika;
- wskazać trzy problemy tej reprezentacji: kolejność, rozmiar, brak podobieństwa znaczeniowego.
🔁 Przypomnij sobie
Z Jednostki 10.1 wiesz, że sztuczny neuron bierze liczby, mnoży je przez wagi i sumuje. Z Jednostki 12.1 wiesz, że obraz staje się tablicą liczb (piksele) — i dopiero wtedy wchodzi do sieci. Tekst wymaga analogicznego kroku, tylko trudniejszego: nie ma oczywistej „jasności litery".
📘 Trzy zdania i pocięcie na tokeny
Załóżmy, że cały tekst, jakim dysponujemy, składa się z trzech zdań:
- Ala ma kota.
- Ja mam psa.
- Marysia ma czerwonego kanarka.

Pierwszą rzeczą, jaką musimy zrobić, jest pocięcie tekstu na mniejsze części — na przykład pojedyncze wyrazy (choć mogą to być też pojedyncze znaki albo sylaby). Nazywamy je tokenami. Sam proces cięcia to tokenizacja. Dla uproszczenia pomijamy znaki interpunkcyjne.
W wyniku tokenizacji dostajemy listę słów-tokenów, którą możemy uporządkować alfabetycznie:
- Ala
- czerwonego
- Ja
- kanarka
- kota
- ma
- mam
- Marysia
- psa
Taką listę wszystkich unikalnych słów z całej kolekcji tekstów nazywamy słownikiem. Każdy token w słowniku ma swój unikalny indeks: „Ala" = 1, „czerwonego" = 2, „Ja" = 3, …
📐 DEFINICJA — token: najmniejsza jednostka, na którą dzielimy tekst przed dalszym przetwarzaniem (słowo, znak, podsłowo — zależnie od metody).
Po ludzku: kawałek tekstu, którym maszyna operuje zamiast „całym zdaniem naraz".
📐 DEFINICJA — tokenizacja: proces dzielenia tekstu na tokeny.
📐 DEFINICJA — słownik: uporządkowana lista wszystkich unikalnych tokenów w kolekcji tekstów; każdy ma indeks.
📘 Reprezentacja: nie byle jaki zapis, tylko użyteczny
Pierwszy pomysł zamiany tekstu na liczby: zastąpić słowa ich indeksami. Zdanie „Ala ma kota" miałoby wtedy reprezentację:
1 6 5
Zatrzymajmy się przy słowie reprezentacja. W informatyce zwykle oznacza ono sposób zapisu, przedstawienia czy uporządkowania danych użyteczny do określonego celu. Dane o sprzedaży czy poparciu partii przedstawiamy wykresami — bo tak szybciej je rozumiemy.

Podobnie komputer potrzebuje reprezentacji danych dopasowanej do zadania. Przyjmuje się, że przygotowanie dobrej reprezentacji może zajmować 50–80% czasu projektu uczenia maszynowego. To nie jest drobiazg administracyjny — to sedno.
📘 Kodowanie z gorącą jedynką
Reprezentacja „1 6 5" ma praktyczny problem: sieci neuronowe nie lubią dużych liczb — wygodny dla nich zakres to zwykle okolice przedziału [−1, 1]. Możemy więc zrobić coś innego: połączyć indeksy ze słownika z informacją, czy dane słowo występuje w tekście. Występowanie oznaczamy przez 1, niewystępowanie przez 0.
Tekst złożony z samego słowa „Ala":
(1, 0, 0, 0, 0, 0, 0, 0, 0)
— jedynka na pierwszym miejscu, bo „Ala" jest pierwsza w słowniku. Słowo „psa":
(0, 0, 0, 0, 0, 0, 0, 0, 1)
Taki sposób kodowania nazywa się kodowaniem z gorącą jedynką (ang. one-hot encoding).
Całe zdania (znów: porównaj miejsca jedynek z indeksami w słowniku):
| zdanie | wektor |
|---|---|
| Ala ma kota | (1, 0, 0, 0, 1, 1, 0, 0, 0) |
| Ja mam psa | (0, 0, 1, 0, 0, 0, 1, 0, 1) |
| Marysia ma czerwonego kanarka | (0, 1, 0, 1, 0, 1, 0, 1, 0) |
Każdy taki ciąg to wektor o długości równej rozmiarowi słownika (tu: 9). Proces zamiany tekstu na taki wektor to wektoryzacja tekstu.
📐 DEFINICJA — kodowanie z gorącą jedynką (one-hot): reprezentacja tokenu (lub zbioru tokenów) jako wektora zer z jedynką na pozycji odpowiadającej indeksowi w słowniku.
Po ludzku: długa lista przełączników — zapalony jest tylko ten od danego słowa. Czym to NIE jest: to nie jest jeszcze „rozumienie" — to tylko etykieta pozycji w słowniku.
📐 DEFINICJA — wektor / wektoryzacja tekstu: uporządkowany ciąg liczb reprezentujący tekst; proces tworzenia takiej reprezentacji.
📘 Trzy problemy tej reprezentacji
Pierwszy: kolejność. Wektor (0, 1, 0, 1, 0, 1, 0, 1, 0) mówi tylko, że w tekście są tokeny o indeksach 2, 4, 6 i 8 („czerwonego", „kanarka", „ma", „Marysia"). Nie mówi nic o kolejności. „Marysia ma czerwonego kanarka" i „kanarka ma Marysia czerwonego" dają ten sam worek zapaleń.
Drugi: rozmiar. Przy słowniku 9 tokenów wektor ma długość 9. Przy słowniku 10 000 unikalnych słów wektor „Ala" to jedynka i 9999 zer. Zdanie „Ala ma kota" — trzy jedynki i 9997 zer. To mało ekonomiczne — i kosztowne w obliczeniach.
Trzeci, najistotniejszy: zero informacji o znaczeniu. Intuicyjnie „Ala" jest bliższa „Marysi" niż „kanarkowi" czy „kotu", a „kanarka" i „kota" są bliższe sobie niż pozostałym. Z kształtu wektorów one-hot tego nie widać:
| słowo | wektor |
|---|---|
| Ala | (1, 0, 0, 0, 0, 0, 0, 0, 0) |
| Marysia | (0, 0, 0, 0, 0, 0, 0, 1, 0) |
| kanarka | (0, 0, 0, 1, 0, 0, 0, 0, 0) |
| kota | (0, 0, 0, 0, 1, 0, 0, 0, 0) |
Każda para różnych słów jest jednakowo „odległa": różnią się dokładnie dwiema pozycjami. Dla sieci „pies" i „kot" są tak samo różne jak „pies" i „traktor".
Właśnie te trzy problemy — kolejność, rozmiar i brak sensu — sprawiły, że w 2013 roku powstał word2vec: pomysł, który je adresuje i stanowi krok milowy w kierunku modeli, które niespełna dekadę później dadzą ChatGPT.
💭 Pomyśl
Mamy słownik 50 000 słów. Ile zer ma wektor one-hot pojedynczego słowa? A wektor zdania złożonego z 12 różnych słów (przy założeniu, że zapalasz pozycje obecnych tokenów, bez zliczania powtórzeń)? Co to mówi o koszcie takiej reprezentacji?
Sprawdź odpowiedź
Pojedyncze słowo: 1 jedynka i 49 999 zer. Zdanie z 12 różnymi słowami: 12 jedynek i 49 988 zer. Prawie cały wektor to zera — sieć musi mnożyć i sumować ogromną liczbę nic nieznaczących pozycji. Przy milionie zdań treningowych koszt pamięci i czasu rośnie dramatycznie, a model wciąż nie wie, że „pies" i „kot" są do siebie bliższe niż „pies" i „traktor". Dlatego one-hot jest poprawny jako etykieta, ale bezużyteczny jako reprezentacja znaczenia.
⚠️ Uwaga, pułapka
Nie myl indeksu w słowniku z znaczeniem. Numer 1 przy „Ala" i numer 8 przy „Marysia" nie mówią, że te słowa są do siebie podobne — mówią tylko, gdzie stoją na liście alfabetycznej. Relacja numeryczna (1 jest „bliżej" 2 niż 8) to zbieg kolejności nadawania numerów, nie wiedza o języku.
🌍 Powiązania
Problem „dane muszą być liczbami" znałeś już z obrazów (Jednostka 12.1). Różnica: piksel ma naturalną skalę jasności, a słowo — nie. W Jednostce 14.2 zobaczysz próbę ręcznego nadania słowom cech liczbowych, a w 14.3 — jak sieć uczy się tych cech sama.
📐 Definicje tej lekcji
- Token / tokenizacja / słownik — jednostka tekstu, proces cięcia, lista unikalnych tokenów z indeksami.
- Reprezentacja — sposób zapisu danych użyteczny do celu (tu: wejście do sieci).
- Kodowanie z gorącą jedynką (one-hot) — wektor zer z jedynką na pozycji indeksu.
- Wektor / wektoryzacja tekstu — ciąg liczb reprezentujący tekst; proces jego tworzenia.
📌 Najważniejsze w pigułce
- Sieć neuronowa nie czyta liter — pracuje tylko na liczbach; tekst trzeba zamienić na reprezentację numeryczną.
- Tokenizacja tnie tekst na tokeny; słownik zbiera unikalne tokeny z indeksami.
- One-hot zapala jedną pozycję w wektorze długości słownika.
- Trzy problemy: gubi kolejność, rozdyma się przy dużym słowniku, nie koduje podobieństwa znaczeniowego.
- Stąd potrzeba word2vec (Jednostka 14.3).
🎒 Zadania
Zadanie 14.1.1. Zbuduj słownik (alfabetycznie) dla tekstu: „Kot pije mleko. Pies pije wodę." Potem zapisz one-hot dla słowa „pije" oraz wektor obecności dla zdania „Kot pije mleko" (zapal pozycje obecnych tokenów).
Pokaż rozwiązanie
Słownik (unikalne, alfabetycznie): 1. Kot, 2. mleko, 3. Pies, 4. pije, 5. wodę.
„pije": (0, 0, 0, 1, 0).
„Kot pije mleko": (1, 1, 0, 1, 0) — zapalony Kot, mleko, pije.
Zadanie 14.1.2. Wyjaśnij na przykładzie „pies" / „kot" / „traktor", dlaczego one-hot nie nadaje się do mierzenia podobieństwa znaczeniowego — mimo że „zamienia słowo w liczby".
Pokaż rozwiązanie
Każde z trzech słów dostaje wektor z jedynką na innej pozycji. Odległość (np. liczba różniących się pozycji) między każdą parą różnych słów jest taka sama. Model nie ma skąd wiedzieć, że pies i kot są zwierzętami, a traktor — nie: w one-hot nie ma żadnej wspólnej cechy liczbowej, tylko trzy różne etykiety pozycji.
Zadanie 14.1.3. Dlaczego reprezentacja indeksowa „Ala ma kota" →
1 6 5jest zła dla sieci, nawet jeśli jest krótsza niż one-hot?
Pokaż rozwiązanie
Bo indeksy to duże, arbitralne liczby, a sieci lubią wejścia w okolicy małego zakresu (często [−1, 1]). Co gorsza, model mógłby „nauczyć się", że większy numer = „większe" słowo — a numer wynika z alfabetu, nie ze znaczenia. One-hot unika skali indeksu, ale wprowadza własne problemy (rozmiar, brak sensu). Obie reprezentacje naiwne są więc niewystarczające.
🔍 Sprawdź, czy umiesz
- [ ] Wyjaśnić, dlaczego sieć nie przetwarza tekstu bezpośrednio.
- [ ] Opisać tokenizację, słownik i indeks.
- [ ] Zbudować one-hot / wektor obecności dla małego przykładu.
- [ ] Wymienić trzy problemy kodowania z gorącą jedynką.