То, что ест токенизатор, становится тем, что он знает
Диета токенизатора: Определение
Токенизатор Харриса обучается на выборке корпуса. Он проводит распределительный анализ по этой выборке, выбирает N сегментов, которые повторяются наиболее сильно, и записывает их в словарь. После обучения эти N сегментов становятся фиксированным алфавитом, который языковая модель использует для всего: обучения, инференса, каждого ввода, каждого вывода.
Диета токенизатора = выборка текста, на которой обучается токенизатор.
Тренировочная диета = корпус, на котором обучается языковая модель.
Когда две диеты различаются, токенизатор обучается сегментам, настроенным на текст, который модель никогда не увидит. Емкость эмбеддингов (один слот на запись в словаре) тратится на сегменты, которые не приносят вознаграждения во время обучения.
ОШИБКА ANDREA-12M
ANDREA-12M обучала свой токенизатор Harris на сыром файле megachat-v8.txt. Этот файл содержал образцы кода и данные вызовов инструментов. Однако учебная программа исключала код и вызовы инструментов; ANDREA-12M видела только разговорный текст.
Результат: токенизатор выучил сегменты из ключевых слов Python, фигурных скобок JSON, флагов shell. Модель обучена на словарных статьях и диалогах. Только 36,4% сегментов пересекались с выборкой, взвешенной по учебной программе. Оставшиеся 63,6% слотов словаря были выделены под сегменты, с которыми модель никогда не столкнется во время обучения.
Почему это важно
Каждая запись словаря потребляет параметры эмбеддингов: одну строку матрицы эмбеддингов размером V × d_model (рассматривается в задании 4). При V = 4353 и d_model = 384 каждый слот словаря стоит 384 чисел с плавающей запятой. Трата 63,6% — это трата 63,6% матрицы эмбеддингов на данные, которые модель никогда не видит.
Сформулируйте правило диеты
Насколько большим должен быть N
Обзор науки о словарях
ANDREA-120M провела эксперимент по науке о словарях: обучила токенизаторы Harris с разными значениями N (запрашиваемые сегменты) на одном и том же корпусе из 1,25 млрд символов. Измерила, сколько сегментов токенизатор фактически находит. Построила график результатов.
| Запрошено N | Найдено сегментов фактически | Статус |
|---|---|---|
| 2,048 | 2,048 | Ненасыщенный (есть запас роста) |
| 4,096 | 4,096 | Ненасыщенный |
| 8,192 | 8,192 | Точка насыщения |
| 16,384 | 13,106 | Корпус исчерпан |
Что означает насыщение
При малом N корпус содержит множество повторяющихся паттернов; токенизатор заполняет каждый слот, который запрашивает. При большом N токенизатор исчерпывает статистически значимые границы. Корпус из 1,25 млрд символов содержит примерно 13 106 различных сегментов в форме морфем выше порога частоты. Запрос 16 384 даёт 13 106; оставшиеся 3278 слотов заполняются или остаются пустыми.
Насыщение: точка, где запрошенное N = найденное N. За пределами насыщения токенизатор не может обнаружить больше сегментов без снижения качества (понижения порогов частоты и принятия шума).
Оптимальная точка на 8192
ANDREA-120M выбрала N = 8192. Обоснование:
- Ниже 8192 (например, 4096): словарь недостаточно охватывает распространённые морфемы; последовательности фрагментируются на большее количество токенов; пропускная способность падает.
- При 8192: каждый слот сегмента соответствует реальному, рекуррентному паттерну в корпусе.
- Выше 8192: убывающая отдача; 13,106 < 16,384 означает, что слоты тратятся впустую.
Финальный словарь ANDREA-120M: 256 + 8192 + 1 = 8449 токенов. Среднее сжатие: 5.91 байт UTF-8 на токен, что означает, что каждый токен заменяет ~5.9 байт сырого текста. Это соотношение определяет эффективный контекст модели: при 1024 токенах × 5.91 байт/токен ANDREA-120M читает примерно 6,050 символов контекста за один проход вперед.
Выше или ниже насыщения
Откуда взялись 63.6%
Подсчёт потраченных впустую слотов
Токенизатор ANDREA-12M обучен на сыром megachat-v8.txt (запрошено 4096 сегментов, найдено). Команда взяла выборку, взвешенную по учебному плану: корпус, взвешенный по тому, как часто каждый источник выбирался бандитом. Они заново провели анализ Харриса на этой взвешенной выборке и задали вопрос: сколько из оригинальных 4096 сегментов всё ещё присутствует?
Результат: 36.4% пересечения. 1491 из 4096 сегментов соответствовали взвешиванию по учебному плану. Оставшиеся 2605 сегментов взяты из источников, исключённых моделью.
63,6% слотов словаря были выделены байтам, которые модель никогда не видела.
Стоимость эмбеддингов
Каждая запись словаря занимает одну строку в матрице эмбеддингов размером (V, d_model). Для ANDREA-12M:
- V = 4353 (256 + 4096 + 1)
- d_model = 384
- Параметры эмбеддингов = V × d_model = 4353 × 384 = 1 671 552 параметра
63,6% этих параметров остались неиспользованными для обучения разговору. 1 063 107 параметров выделено, 0 сигналов вознаграждения. ANDREA-12M выживает, потому что 256 базовых байт всегда покрывают любой символ; но ёмкость на параметр резко упала.
Как ANDREA-120M это исправил
Токенизатор ANDREA-120M обучен на полном потоке данных (1,25 млрд символов, 21 источник) при насыщении N = 8192. Корпус для обучения = тот же поток данных. Выравнивание по диете: 100%. Получившееся пересечение на выборке, взвешенной по чату: 36,5%. (Примечание: 36,5% — это пересечение, а не покрытие; чат сам по себе — подмножество полного потока данных, поэтому это число ведёт себя иначе, чем 36,4% у 12M.)
Эффективное сжатие: 5,91 байт UTF-8 на токен. Матрица встраиваний ANDREA-120M: 8449 × 768 = 6 488 832 параметра. Каждый параметр получает сигнал вознаграждения, потому что каждый сегмент отображается на текст, на котором модель действительно обучается.
Покрытие против пересечения
Почему 5,91 байт на токен имеет значение
Коэффициент сжатия
Среднее количество байт UTF-8 на токен измеряет, сколько сырого текста сжимает каждая запись словаря. ANDREA-120M в среднем 5,91. Модель с более короткими кусками (3 байта/токен) читает меньше контекста за проход вперед; модель с более длинными кусками (8 байт/токен) читает больше, но обучается медленнее (каждый кусок требует больше образцов для хорошего обучения).
Эффективный контекст
| Количество | Значение |
|---|---|
| Окно контекста токенов | 1 024 токена |
| Средние байты на токен | 5,91 |
| Эффективный контекст символов | 1024 × 5,91 ≈ 6 050 |
Примерно 6000 символов UTF-8 помещаются в один прямой проход ANDREA-120M. Страница плотной английской прозы содержит ~3000–4000 символов; ANDREA читает около полутора страниц за проход.
Диета улучшает сжатие
Хорошо выровненный токенизатор сжимает лучше. Когда токенизатор обучается на сегментах, которые повторяются в обучающем корпусе, больше текста помещается на токен. Плохо выровненный токенизатор ANDREA-12M сжимал хуже на чате (больше байтов тратилось на фрагменты с fallback на байты, потому что сегменты чата были реже в словаре). Диета-выровненный токенизатор ANDREA-120M держит кусок в форме чата на быстром пути, а редкие скрипты — на fallback на байты.
Активность 4 продолжается
Активность 4 (grow_a_language_model_embeddings) охватывает, что происходит с этими 8449 записями словаря: они становятся строками матрицы эмбеддингов формы V × d_model, затем добавляются обучаемые позиционные эмбеддинги перед поступлением в первый блок трансформера.