Перейти к содержанию

Сравнение токенизаций 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.

  1. Начало: разбить текст на символы: ["h", "e", "l", "l", "o", " ", "w", "o", "r", ...]
  2. Итерация 1: найти самую частую пару "l" + "l" → слить в "ll"["h", "e", "ll", "o", " ", "w", "o", "r", ...]
  3. Итерация 2: самая частая пара "o" + "r""or"["h", "e", "ll", "o", " ", "w", "or", ...]
  4. Повторять пока не достигнут целевой размер словаря

BPE Formula

\[\text{Merge} = \arg\max_{(a,b)} \text{count}(a, b)\]

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.

  1. Начало: большой словарь -- все символы + частые подслова: ["a", "b", ..., "the", "ing", "tion", ...]
  2. Шаг 1: для каждого токена вычислить: насколько вырастет loss если его удалить
  3. Шаг 2: удалить токены с минимальным ростом loss
  4. Шаг 3: повторять до целевого размера словаря

Ключевое отличие: вероятностная сегментация -- одно слово может быть разбито несколькими способами, и модель выбирает наиболее вероятный.

Unigram Probability Model

\[P(x) = \prod_{i=1}^{M} p(x_i)\]

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. Выигрыш падает логарифмически -- удвоение словаря не дает удвоения экономии."

Самопроверка

  1. Выполните вручную 3 шага BPE на тексте "low lower lowest". Начните с символов и покажите какие пары сливаются.
  2. Текст на русском "Машинное обучение" токенизируется GPT-4 (cl100k, byte-level BPE) в ~5-7 токенов, а на английском "Machine learning" -- в 2 токена. Объясните почему и как это влияет на стоимость inference для русскоязычного приложения.
  3. Вы проектируете мультиязычный токенизатор для модели, которая должна хорошо работать на русском, английском и китайском. Какой метод выберете (BPE / Unigram / Byte-BPE) и какой размер словаря? Обоснуйте.

Источники

  1. LinkedIn — "BPE vs Unigram Tokenization Strategies in LLMs" (Jan 2026)
  2. Medium — "Byte Pair Encoding vs. Unigram Tokenization"
  3. LetsDataScience — "How LLM Tokenization Actually Works"
  4. arXiv — "Tokenization Multiplicity Study" (2506.06446)
  5. Johal — "SentencePiece: Subword Tokenization for Multilingual NLP"
  6. SpecterOps — "Tokenization Confusion"
  7. CSDN — "HuggingFace LLM Normalization & Pre-tokenization"
  8. Frontiers in AI — "Tokenization Efficiency of LLMs"

See Also