Слова в числа
Переводчик на границе
Языковая модель никогда не видит текст. Она видит целые числа. Токенизатор находится на пограничном переходе: человеческие слова поступают внутрь, идентификаторы целых чисел выходят наружу. Генерация обращает поток: идентификаторы целых чисел возвращаются, токенизатор отображает текст.
Три задачи:
1. Сегментация. Разделить строку на части (токены).
2. Сопоставление. Назначить каждой части уникальный целочисленный ID из фиксированного словаря.
3. Обратное преобразование. Восстановить текст из ID во время генерации.
Почему части, а не целые слова
Словарь из целых слов взрывается. В английском языке сотни тысяч форм. Хуже того, модель, обученная на целых словах, не может обработать опечатку, новое имя или иностранную фразу: любое неизвестное слово отображается в единственный слот <UNK>.
Токенизация на подслова исправляет это. Словарь из общих фрагментов может составляться в любое слово, включая те, которые никогда не встречались во время обучения. Доминируют две стратегии: BPE (byte pair encoding) и сегментация по распределению. ANDREA выбирает вторую стратегию.
Почему подслова
Где происходит разрыв слова
Зеллиг Харрис, 1955
Лингвист по имени Зеллиг Харрис заметил нечто интересное. Внутри слова количество различных букв, следующих за заданной последовательностью букв, сильно варьируется. После un могут следовать десятки букв: a, b, c, d, e ... После unbel следует лишь крошечное множество: i (затем ievable).
Резкий скачок разнообразия преемников указывает на вероятную границу морфемы. После un (приставки) разнообразие резко возрастает, потому что за ней могут следовать многие корни. Внутри корня вроде believ разнообразие остаётся низким, поскольку буквы предсказывают друг друга. На переходе между морфемами разнообразие снова скачет.
От скачков разнообразия к сегментам
Запустите этот детектор по обучающему корпусу. Каждое слово вносит статистические доказательства. Токенизатор собирает часто встречающиеся сегменты, которые повторяются на границах, имеющих форму морфем: un, re, pre, believ, know, ing, able, ly, tion, ed.
Нет меток. Лингвист не разметил морфемы вручную. Статистика совместного появления букв выполняет работу.
Harris vs BPE
| Свойство | Harris | BPE |
|---|---|---|
| Критерий границы | Пик разнообразия последователей | Частотность пар |
| Лингвистическая форма | Выровненные по морфеме (префикс, корень, суффикс) | Частые пары байтов |
Пример: unbelievably | un + believ + abl + y | unb + eli + eva + bly |
| Обобщение | Сильное (корень + аффикс рекомбинируется) | Слабее (пары не обязаны выравниваться) |
Оба метода производят подслова. Части Харриса склонны выравниваться с тем, что лингвист назвал бы морфемой: наименьшей значимой единицей. Части BPE оптимизируют сжатие: наиболее частая пара байтов объединяется независимо от значения.
Разделите слово на морфемы
Три Слоя Словаря
Анатомия словаря ANDREA
Токенизация Харриса создаёт словарь с тремя слоями:
Слой 1: 256 базовых байтов. Каждый возможный байт UTF-8 (0x00 через 0xFF) получает свой собственный ID токена. Сеть безопасности: любой символ, содержащийся в корпусе, токенизатор может представить как последовательность байтов. <UNK> никогда не срабатывает.
Слой 2: N морфемных сегментов. Общие фрагменты, обнаруженные с помощью распределительного анализа. ANDREA-12M обучена с N = 4096; ANDREA-120M обучена с N = 8192. Каждый сегмент сжимает повторяющуюся много байтовую строку в один токен.
Слой 3: 1 токен BOS. Специальный маркер, размещаемый в начале каждой обучающей последовательности. Позволяет модели выучить «эта позиция не имеет прошлого». ANDREA-12M и ANDREA-120M обе резервируют ровно один ID для BOS.
Размеры словаря
| Модель | Базовые байты | Морфемные сегменты (N) | BOS | Размер словаря |
|---|---|---|---|---|
| ANDREA-12M | 256 | 4096 | 1 | 4353 |
| ANDREA-120M | 256 | 8192 | 1 | 8449 |
256 + N + 1 = размер словаря. Просто. Воспроизводимо. Открыто.
Почему байтовая плита имеет значение
Байтовая запасная схема гарантирует покрытие. Если модель встречает 日本語 и токенизатор не имеет японских морфем, отдельные байты UTF-8 проводят последовательность через. Модель обучается на байтах; качество на редких скриптах зависит от ёмкости и воздействия, но ни один ввод никогда не крашит токенизатор.
Вычислить словарь
Начало последовательности
Почему последовательности нужен маркер
Декодер-only трансформер предсказывает следующий токен на основе предыдущего контекста. Позиция 0 не имеет предыдущего контекста. Без маркера позиция 0 находится в логической дыре: у модели нечему уделять внимание.
BOS решает проблему дыры. Один специальный токен (ID = 256 + N) размещается в начале каждой последовательности во время обучения. Модель учится:
- 'Когда видишь BOS, предсказывай вероятный первый токен естественного текста.'
- 'Когда видишь BOS, за которым следует слово, это слово — начало последовательности, а не продолжение.'
Один токен, множество применений
BOS появляется в:
- Время обучения: добавляется в начало каждого фрагмента текста, подаваемого в модель.
- Время вывода: добавляется в начало промпта, чтобы модель увидела знакомый сигнал «нового начала».
- Разметка границ: в некоторых конвейерах — разделитель между объединёнными документами.
ANDREA резервирует ровно один ID для BOS. Нет EOS, нет PAD, нет специальных токенов сверх того, что нужно словарю. Простота остаётся перманентным значением пермакомпьютера: каждый токен заслуживает своего места.
Продолжение активности 3
Активность 3 (grow_a_language_model_tokenizer_diet) охватывает то, что происходит, когда N слишком велико или корпус токенизатора расходится с корпусом обучения. ANDREA-12M потратила 63,6% своего словаря впустую; ANDREA-120M это исправила. Читайте дальше.