Robocikowo>ROBOCIKOWO
Inne

BPE

1994AktywnyOpublikowano: 17 maja 2026Aktualizacja: 17 maja 2026Opublikowany
Algorytm tokenizacji podsłownej oparty na iteracyjnym łączeniu najczęściej współwystępujących par symboli w korpusie. Dominujący standard dla LLM (GPT, Llama, Mistral, DeepSeek).
Kluczowa innowacja
Adaptacja algorytmu kompresji danych z 1994 r. do uczenia słownika podsłownego dla modeli neuronowych — iteracyjne łączenie najczęstszych par sąsiednich symboli pozwala automatycznie odkryć skończony słownik podjednostek minimalizujący długość zakodowanej sekwencji.
Kategoria
Inne
Poziom abstrakcji
Primitive
Poziom operacji
DaneTreningInferencja
Zastosowania
Tokenizery wszystkich modeli rodziny GPT (GPT-2, GPT-3, GPT-3.5, GPT-4, GPT-4o, GPT-5) — BBPE.Llama 1/2/3, Mistral, Mixtral, DeepSeek, Qwen — BPE/SentencePiece BPE.Estymacja kosztu API i długości promptu w produkcji (tiktoken).Tokenizatory kodu w modelach Code (Codex, Claude Code) — osobne słowniki BPE optymalizowane pod whitespace i tokeny programistyczne.Wielojęzyczne LLM-y (BLOOM, mT5) — pojedynczy słownik BPE pokrywający dziesiątki języków.

Jak działa

1. Inicjalizacja: korpus jest dzielony na słowa, każde słowo na sekwencję bazowych symboli (znaków lub bajtów). Słownik początkowy zawiera te bazowe symbole.

2. Zliczanie par: dla każdego słowa w korpusie liczone są wszystkie pary sąsiadujących symboli, ważone częstotliwością słowa.

3. Wybór najczęstszej pary: para (a, b) o najwyższej łącznej częstotliwości w korpusie zostaje wybrana jako kandydat do merge'a.

4. Aktualizacja słownika i korpusu: nowy symbol „ab" dodawany jest do słownika; wszystkie wystąpienia pary (a, b) w korpusie zastępowane są tym symbolem. Para zapisywana jest na liście merge'owej.

5. Powtarzanie: kroki 2–4 powtarzane są aż słownik osiągnie zadany rozmiar (lub spadnie częstotliwość najczęstszej pary poniżej progu).

6. Encoding nowego tekstu: tekst jest dzielony na symbole bazowe; lista merge'owa aplikowana jest w kolejności priorytetu — odtwarzając te same merges, które algorytm wykonał na korpusie. Implementacje produkcyjne (tiktoken, HF tokenizers) używają priority-queue dla wydajności O(n log n).

Rozwiązany problem

Tokenizacja słowna nie radzi sobie z OOV (out-of-vocabulary), morfologią i wielojęzycznością; tokenizacja znakowa daje bardzo długie sekwencje. BPE rozwiązuje oba problemy jednocześnie: uczy słownika kompresującego typowe sekwencje (krótsze sekwencje od char-level) przy zachowaniu pokrycia rzadkich słów przez ich podjednostki (brak <UNK> dla zasadniczo dowolnego ciągu).

Kluczowe mechanizmy

Iteracyjne łączenie najczęstszej pary sąsiednich symboli w korpusie.
Zapis uporządkowanej listy merge'owej dla deterministycznego enkodowania.
Encoding nowego tekstu przez priority-queue aplikującą merges w kolejności treningu.
BBPE: operowanie na bajtach UTF-8 zamiast znakach Unicode (eliminacja <UNK>).
Tokeny specjalne dodawane do słownika poza procesem merge'owania.

Mocne strony i ograniczenia

Mocne strony
Brak <UNK> w wariancie BBPE — pokrycie dowolnego ciągu Unicode.
Deterministyczność i odwracalność encoding/decoding.
Battle-tested w produkcji od 2018 r. (GPT, BERT-derivatives, Llama, Mistral).
Szybkie implementacje (tiktoken, HF tokenizers w Rust) — milisekundy dla typowych promptów.
Prosty, łatwy do zaimplementowania i debugowania algorytm.
Ograniczenia
Słownik zamrożony po treningu — nie można łatwo dodać nowych tokenów bez retreningu modelu.
Frekwencja-driven: rzadkie ale ważne słowa dostają długą reprezentację, częste śmieci internetowe — krótką.
Patologie liczbowe (bez wymuszonego digit-splitting) i językowe (over-segmentacja non-English).
Glitch tokens jako wektor ataków typu prompt injection.
Każdy model ma własny, niekompatybilny słownik BPE — brak interoperacyjności.

Komponenty

Słownik bazowy (base alphabet)
Lista merge'owa
Pre-tokenizer
Tokeny specjalne

Implementacja

Pułapki implementacyjne
Nieoptymalna pre-tokenizacjaWysoka

BPE merges nie powinny przekraczać granic słów ani spacji — bez odpowiedniego regexa pre-tokenizera (GPT-2 pattern) tokenizer uczy się „bezsensownych" merge'ów łączących koniec jednego słowa z początkiem następnego.

Stronniczość językowa korpusuWysoka

Słownik wytrenowany głównie na angielskim daje 2–3× więcej tokenów dla polskiego, japońskiego, arabskiego — co podnosi koszt API i obcina efektywne okno kontekstu.

Patologia tokenizacji liczbWysoka

Bez wymuszonego digit-splitting BPE dzieli liczby na fragmenty zależne od częstotliwości („1234" → „123"+"4" albo „12"+"34"). Llama 3 i GPT-4o rozwiązują to przez wymuszenie pojedynczych cyfr.

Glitch tokensŚrednia

Merges generujące tokeny rzadkie w danych treningowych (np. „SolidGoldMagikarp" w GPT-3) wywołują deterministyczne błędy modelu — wektor ataków typu prompt injection i jailbreak.

Niedeterministyczne encoding implementacjeŚrednia

Implementacje z różnymi tie-breaking dla par o tej samej częstotliwości mogą produkować różne tokenizacje dla tego samego tekstu — co rozjeżdża słownik treningu i inferencji. Zawsze używać oficjalnej implementacji modelu (tiktoken dla GPT, tokenizer.json HF).

Ewolucja

Oryginalny paper · 2016 · ACL 2016 · Rico Sennrich
Neural Machine Translation of Rare Words with Subword Units
Rico Sennrich, Barry Haddow, Alexandra Birch
1994
Philip Gage publikuje BPE jako algorytm kompresji danych w „The C Users Journal" („A New Algorithm for Data Compression").
2016
Sennrich, Haddow & Birch adaptują BPE do NMT (ACL 2016) — narodziny subword tokenization w NLP.
2018
GPT (OpenAI) używa BPE z 40k tokenów na korpusie BookCorpus.
2018
SentencePiece (Kudo & Richardson, Google) udostępnia implementację BPE niezależną od języka, traktującą spację jako zwykły znak.
2019
GPT-2 (Radford et al., OpenAI) wprowadza Byte-level BPE (BBPE) — eliminuje <UNK> i pokrywa pełny Unicode przez operowanie na bajtach UTF-8.
2020
GPT-3 (175B) używa BBPE z 50,257 tokenami — ten sam słownik co GPT-2.
2020
OpenAI udostępnia tiktoken — szybką (Rust) implementację BPE do estymacji kosztów modeli GPT.
2023
Llama 2 (Meta) — SentencePiece BPE z 32k tokenów; krytyka over-segmentacji języków non-English staje się głośna.
2024
Llama 3 zwiększa słownik BPE do 128k tokenów (4× względem Llama 2), wprowadza wymuszone digit-splitting dla poprawy arytmetyki.
2024
GPT-4o używa nowego tokenizera „o200k_base" (200k tokenów) — znacznie lepsza efektywność dla języków non-English (PL, JP, KR, AR).

Paradygmat wykonania

Tryb główny
dense
Wzorzec aktywacji
all_paths_active

Równoległość

Poziom równoległości
fully_parallel
Zakres
traininginference
Ograniczenia
!Encoding pojedynczego słowa jest sekwencyjny (zależności merge'ów), ale tokenizacja batcha dokumentów jest trywialnie równoległa. Trening słownika jest sekwencyjny (każdy merge zależy od poprzedniego stanu korpusu), choć zliczanie par per iteracja może być zrównoleglone.

Wymagania sprzętowe

Podstawowe
Dobry fit