О чём урок
Мы уже научили GPT-подобную модель обучаться на уровне символов, но настоящие большие языковые модели почти никогда не работают с отдельными символами напрямую. Между текстом и нейросетью стоит токенизатор: он превращает строку в последовательность целых чисел и обратно. В этом уроке вы разберёте алгоритм Byte Pair Encoding (BPE) на байтах и построите собственный токенизатор по коду minbpe: от подсчёта пар до сохранения словаря на диск. После урока вы сможете обучить BPE-токенизатор на любом тексте, объяснить, почему русский текст «дороже» английского в токенах, и понять, как именно encode воспроизводит порядок слияний, выученный на этапе train.
Неофициальный курс AI University по открытому коду (MIT). В уроке приводится код из karpathy/minbpe © Andrej Karpathy, лицензия MIT; комментарии переведены на русский, объяснения написаны нашей командой. Курс не связан с автором кода и не одобрен им.
Нейросеть умеет работать только с числами. У символьной модели из уроков про makemore и nanoGPT словарь маленький: несколько десятков букв, цифр и знаков препинания, поэтому каждому символу просто присваивается индекс. Такой подход работает, но крайне неэффективен для больших моделей: средняя английская «мысль» занимает сотни символов, и модели приходится тратить вычисления и память контекста на кодирование каждой буквы по отдельности, вместо того чтобы сразу оперировать кусками смысла вроде "tion" или "ing".
Альтернатива на другом конце спектра: токенизация по словам. Берём словарь из топ-50000 самых частых слов, каждому даём число. Проблема очевидна: язык не исчерпывается конечным списком слов. Встретится опечатка, неологизм, имя собственное или слово на другом языке, и модель упрётся в токен «неизвестно» (<unk>), теряя информацию.
Компромисс, который использует GPT-2, GPT-3 и большинство современных LLM, это подсловная токенизация (subword tokenization) поверх байтов UTF-8. Идея в двух частях:
- Любой текст в любом алфавите можно представить как последовательность байтов (чисел от 0 до 255) через кодировку UTF-8.
- Поверх этих 256 байтовых токенов алгоритм BPE «выучивает» на обучающем тексте, какие последовательности байтов встречаются часто…
План урока
- Зачем вообще нужен токенизатор
- Алгоритм BPE на пальцах
- Вспомогательные функции: подсчёт пар, слияние и печать токенов
- Печать токенов без поломки терминала
- Класс Tokenizer: общий каркас
- BasicTokenizer: обучение, кодирование, декодирование
- train.py: обучение на реальном тексте
- Свойства кодирования и коэффициент сжатия
Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.