Сравнение токенизаций LLM¶
~8 минут чтения
Предварительно: Токенизация в LLM | BPE токенизатор -- реализация
Зачем это нужно¶
Токенизация -- первый шаг любой LLM: текст разбивается на фрагменты (токены), с которыми работает модель. Выбор метода напрямую влияет на стоимость (больше токенов = дороже), качество (разорванные слова = потеря смысла) и мультиязычность (английский vs китайский). BPE собирает словарь снизу вверх: берет символы и склеивает частые пары. Unigram идет сверху вниз: берет огромный словарь и отрезает лишнее. Byte-level BPE работает на уровне байтов -- гарантируя нулевой OOV для любого языка и эмодзи.
Обзор¶
BPE (bottom-up, детерминированный) -- стандарт для English-first LLM. Unigram (top-down, вероятностный) -- лучше для мультиязычных задач. Byte-level BPE (GPT-4, Llama 3) объединяет предсказуемость BPE и нулевой OOV. Тренд 2026: словари 100K+ для эффективности.
| Метод | Подход | Мультиязычность | Эффективность | Предсказуемость |
|---|---|---|---|---|
| BPE | Bottom-up merge | Good | High | High |
| Unigram | Top-down prune | Excellent | Medium | Medium |
| WordPiece | Merge with ## | Good | High | High |
| Byte-level BPE | UTF-8 bytes | Excellent | Medium | High |
BPE (Byte Pair Encoding)¶
Принцип¶
BPE starts with characters and iteratively merges the most frequent adjacent pairs.
- Начало: разбить текст на символы:
["h", "e", "l", "l", "o", " ", "w", "o", "r", ...] - Итерация 1: найти самую частую пару
"l" + "l"→ слить в"ll"→["h", "e", "ll", "o", " ", "w", "o", "r", ...] - Итерация 2: самая частая пара
"o" + "r"→"or"→["h", "e", "ll", "o", " ", "w", "or", ...] - Повторять пока не достигнут целевой размер словаря
BPE Formula¶
Select pair \((a, b)\) with highest frequency, merge into new token \(ab\).
Свойства BPE¶
| Свойство | Значение |
|---|---|
| Time complexity | O(n log n) for building |
| Encoding | Deterministic (single valid segmentation) |
| Vocabulary growth | Bottom-up (starts small, grows) |
| OOV handling | Falls back to characters |
Варианты BPE¶
| Вариант | Описание | Используется |
|---|---|---|
| Standard BPE | Character-based | GPT-2 |
| Byte-level BPE | Operates on UTF-8 bytes | GPT-4, Llama |
| SentencePiece BPE | Language-agnostic preprocessing | T5, Llama |
Unigram Language Model¶
Принцип¶
Unigram starts with a large vocabulary and iteratively removes tokens with minimal impact.
- Начало: большой словарь -- все символы + частые подслова:
["a", "b", ..., "the", "ing", "tion", ...] - Шаг 1: для каждого токена вычислить: насколько вырастет loss если его удалить
- Шаг 2: удалить токены с минимальным ростом loss
- Шаг 3: повторять до целевого размера словаря
Ключевое отличие: вероятностная сегментация -- одно слово может быть разбито несколькими способами, и модель выбирает наиболее вероятный.
Unigram Probability Model¶
Where \(p(x_i)\) is the probability of token \(x_i\) in the vocabulary.
Свойства Unigram¶
| Свойство | Значение |
|---|---|
| Time complexity | O(n × |
| Encoding | Probabilistic (multiple segmentations) |
| Vocabulary shrinkage | Top-down (starts large, shrinks) |
| OOV handling | Falls back to characters |
Unigram vs BPE¶
| Свойство | BPE | Unigram |
|---|---|---|
| Approach | Bottom-up | Top-down |
| Segmentation | Deterministic | Probabilistic |
| Rare words | May over-segment | Better handling |
| Multilingual | Good | Excellent |
| Training speed | Faster | Slower |
Byte-Level BPE¶
Принцип¶
Byte-level BPE operates directly on UTF-8 bytes, enabling universal coverage.
Standard BPE -- текст "cafe": символы ["c", "a", "f", "e"]. Если символ "e" не в словаре -- OOV ошибка.
Byte-level BPE -- текст "cafe": UTF-8 байты [99, 97, 102, 195, 169]. Байтовые токены ["c", "a", "f", "A", "(c)"] склеиваются в "e". Результат: всегда работает, ноль OOV для любого языка, эмодзи и спецсимволов.
Преимущества Byte-level BPE¶
| Преимущество | Описание |
|---|---|
| Zero OOV | Any UTF-8 text tokenizable |
| Emoji support | Automatic handling |
| Multilingual | Universal coverage |
| Binary safe | Can tokenize arbitrary data |
Больше словарь != всегда лучше
GPT-4o (200K vocab) vs Llama 3 (128K) -- словарь в 1.5 раза больше, но модель не в 1.5 раза лучше. Большой словарь = огромная embedding matrix (200K x d), медленнее softmax, больше памяти. Выигрыш в tokens/text падает логарифмически: с 32K до 100K экономия заметна, с 100K до 200K -- уже минимальна. Выбор словаря -- это tradeoff efficiency vs coverage, а не "чем больше тем лучше".
BPE ломает spelling: strawberry problem
LLM не может посчитать буквы r в слове strawberry потому что BPE склеил его в ["straw", "berry"]. Модель никогда не видит отдельные символы -- она работает с токенами. Это фундаментальное ограничение subword токенизации, не баг конкретной модели.
Компромиссы Byte-level¶
| Компромисс | Влияние |
|---|---|
| Longer sequences | More tokens for non-ASCII |
| Less efficient | Higher token counts for some languages |
| Training cost | Larger initial vocabulary |
Сравнение токенизаторов¶
Токенизаторы основных LLM¶
| Модель | Токенизатор | Словарь | Тип |
|---|---|---|---|
| GPT-4 | cl100k_base | 100K | Byte-BPE |
| GPT-4o | o200k_base | 200K | Byte-BPE |
| Llama 3 | TikToken | 128K | Byte-BPE |
| Claude | Custom | ~100K | Byte-BPE |
| T5 | SentencePiece | 32K | Unigram |
| ALBERT | SentencePiece | 30K | Unigram |
Мультиязычная эффективность¶
| Язык | Эффективность BPE | Эффективность Unigram |
|---|---|---|
| English | Excellent | Excellent |
| Chinese | Good | Excellent |
| Japanese | Good | Excellent |
| Arabic | Good | Very Good |
| Code | Excellent | Good |
Бенчмарки эффективности токенизации¶
| Модель | English | Chinese | Code | Emoji |
|---|---|---|---|---|
| GPT-4 (cl100k) | 1.0x | 1.5x | 1.2x | 2-4x |
| GPT-4o (o200k) | 1.0x | 1.2x | 1.1x | 2-3x |
| Llama 3 | 1.0x | 1.3x | 1.1x | 2-3x |
| Claude 3 | 1.0x | 1.2x | 1.1x | 2-3x |
(1.0x = baseline for English, higher = more tokens needed)
Влияние размера словаря¶
Компромиссы размера словаря¶
| Размер словаря | Плюсы | Минусы |
|---|---|---|
| Small (30K) | Smaller model, faster | More tokens per text |
| Medium (50-100K) | Balanced | Balanced |
| Large (100K+) | Fewer tokens, better efficiency | Larger embeddings |
Влияние на стоимость¶
Пример: текст "The quick brown fox jumps over the lazy dog"
| Словарь | Токенов | Стоимость ($0.01/1K) |
|---|---|---|
| Small (30K) | 12 | $0.00012 |
| Medium (50K) | 9 | $0.00009 |
| Large (128K) | 8 | $0.00008 |
На масштабе: 33% экономия при переходе с маленького на большой словарь.
Проблемы токенизации¶
1. Почему LLM не умеют считать буквы¶
BPE склеивает частые последовательности, и модель теряет доступ к отдельным символам:
- Слово
"strawberry"→ токены["straw", "berry"] - Модель видит 2 токена, а не 10 букв
- Результат: не может посчитать количество
"r"-- она их буквально не видит
2. Множественность токенизации¶
| Проблема | Описание |
|---|---|
| Multiple segmentations | Same text → different tokens |
| Model variance | Different models tokenize differently |
| Cost variance | Same text costs different amounts |
3. Языковой bias¶
| Проблема | Влияние |
|---|---|
| English-optimized | Higher token counts for other languages |
| Training data bias | Tokenizer reflects training corpus |
| Under-resourced languages | Very inefficient tokenization |
Гайд по выбору¶
Дерево решений¶
graph TD
START{"Use case?"} -->|"General English"| BBPE["Byte-BPE<br/>GPT-4 style"]
START -->|"Multilingual / Asian"| UNI["Unigram или large Byte-BPE"]
START -->|"Zero OOV"| BYTE["Byte-level BPE"]
START -->|"Custom domain<br/>(code, medical)"| CUSTOM["Train custom tokenizer"]
START -->|"Constrained compute"| SMALL["Smaller vocabulary<br/>32-50K"]
style BBPE fill:#e8f5e9,stroke:#4caf50
style UNI fill:#e8eaf6,stroke:#3f51b5
style BYTE fill:#e8f5e9,stroke:#4caf50
style CUSTOM fill:#fff3e0,stroke:#ef6c00
style SMALL fill:#fce4ec,stroke:#c62828
Матрица применения¶
| Сценарий | Рекомендация | Размер словаря |
|---|---|---|
| General chatbot | Byte-BPE | 50-100K |
| Multilingual app | Unigram or large Byte-BPE | 100-200K |
| Code assistant | Code-trained BPE | 50-100K |
| Embedded device | Small BPE | 16-32K |
| Research | Custom trained | Varies |
Числа для интервью¶
Статистика токенизации¶
| Показатель | Значение |
|---|---|
| GPT-4 vocab size | 100,256 |
| GPT-4o vocab size | 200,019 |
| Llama 3 vocab size | 128,000 |
| Average English tokens/word | ~0.75 (large vocab) |
| Average Chinese tokens/char | ~0.5-1.5 (varies) |
Эффективность по языкам¶
| Язык | Токенов на 100 слов |
|---|---|
| English | 75-85 |
| Spanish | 85-95 |
| Chinese | 120-180 |
| Japanese | 100-150 |
| Code (Python) | 90-110 |
Влияние на стоимость¶
| Размер словаря | Относительная стоимость | Примечания |
|---|---|---|
| 32K | 1.2x | More tokens |
| 50K | 1.1x | Standard |
| 100K | 1.0x | Baseline |
| 200K | 0.95x | Fewer tokens |
Время обучения¶
| Токенизатор | Время обучения (1B токенов) |
|---|---|
| BPE | 10-30 min |
| Unigram | 30-60 min |
| WordPiece | 20-40 min |
Interview Questions¶
1. BPE vs Unigram: когда что выбирать?¶
Red flag: "BPE лучше потому что его используют GPT и LLaMA"
Strong answer: "BPE -- bottom-up, детерминированный: одна сегментация на вход. Unigram -- top-down, вероятностный: выбирает из нескольких сегментаций оптимальную. Unigram лучше для мультиязычных задач (T5, ALBERT), потому что гибче обрабатывает редкие слова и морфологически богатые языки. BPE проще и предсказуемее -- стандарт для English-first моделей. Byte-level BPE (GPT-4, Llama 3) объединяет преимущества: предсказуемость BPE + нулевой OOV."
2. Почему LLM не могут считать буквы в словах?¶
Red flag: "Это баг в модели, нужно дообучить"
Strong answer: "Это фундаментальное ограничение subword токенизации. BPE склеивает 'strawberry' в ['straw', 'berry'] -- модель видит 2 токена, а не 10 букв. Она не может посчитать 'r', потому что никогда не видит отдельные символы. Решения: character-level fallback, chain-of-thought с побуквенным разбором, или специальный tokenizer с character awareness."
3. Как размер словаря влияет на стоимость и качество?¶
Red flag: "Больше словарь -- всегда лучше"
Strong answer: "Tradeoff: больше словарь → меньше токенов на текст → дешевле inference, НО больше embedding matrix → больше памяти и медленнее softmax. GPT-4o с 200K словарем дает ~5% экономию токенов vs 100K, но embedding matrix вдвое больше. Оптимум для production: 100-128K. Для embedded/mobile: 32-50K. Выигрыш падает логарифмически -- удвоение словаря не дает удвоения экономии."
Самопроверка
- Выполните вручную 3 шага BPE на тексте
"low lower lowest". Начните с символов и покажите какие пары сливаются. - Текст на русском
"Машинное обучение"токенизируется GPT-4 (cl100k, byte-level BPE) в ~5-7 токенов, а на английском"Machine learning"-- в 2 токена. Объясните почему и как это влияет на стоимость inference для русскоязычного приложения. - Вы проектируете мультиязычный токенизатор для модели, которая должна хорошо работать на русском, английском и китайском. Какой метод выберете (BPE / Unigram / Byte-BPE) и какой размер словаря? Обоснуйте.
Источники¶
- LinkedIn — "BPE vs Unigram Tokenization Strategies in LLMs" (Jan 2026)
- Medium — "Byte Pair Encoding vs. Unigram Tokenization"
- LetsDataScience — "How LLM Tokenization Actually Works"
- arXiv — "Tokenization Multiplicity Study" (2506.06446)
- Johal — "SentencePiece: Subword Tokenization for Multilingual NLP"
- SpecterOps — "Tokenization Confusion"
- CSDN — "HuggingFace LLM Normalization & Pre-tokenization"
- Frontiers in AI — "Tokenization Efficiency of LLMs"
See Also¶
- Токенизация в LLM -- основы токенизации
- BPE токенизатор -- реализация -- реализация BPE с нуля
- Сравнение позиционных кодирований -- RoPE, ALiBi, Sinusoidal
- Сравнение нормализаций -- BatchNorm vs LayerNorm vs RMSNorm