anthropic

Разбор токенизатора Claude: слова в маркерах ^ и $

Claude News

anthropic

Реконструкция токенизатора Claude показывает, что счёт токенов лучше всего описывает схема минимального разбиения в духе MinGram и PathPiece, а не привычный байтовый BPE. Разбор опубликован на Substack: словарь оценён примерно в 49–55 тысяч токенов для версий с v3 по v4.6 и в 16–20 тысяч для более поздних.

Коротко

  • Поводом для разбора автор называет недавний рост стоимости токенов для простого английского текста более чем на 40%, а сам токенизатор, в отличие от решений других разработчиков, не сводится к стандартному байтовому BPE.
  • Слова обёрнуты в маркеры начала и конца, обозначенные автором как ^ и $: «telecommunications» стоит один токен, а «telecommunicationsy» уже четыре, поскольку маркировка целого слова рассыпается.
  • Регистр кодируется отдельным маркером и строчной формой целого слова: NASA превращается в код заглавных и nasa, а GaN и WiFi сохраняются как есть; в версиях v4.7 и новее этот код убран.

Почему это важно. Оценка длины запроса в токенах определяет и стоимость, и запас контекста, а описанная схема означает, что цена текста зависит не только от его объёма, но и от формы: суффикс или смена регистра могут разложить одно слово на полтора десятка токенов. Судя по всему, отказ от отдельных вариантов слова с пробелом и без пробела экономит словарь, и упрощение в v4.7 выглядит как движение к более предсказуемому счёту.

Слог 최 не собирается из двух меньших токенов

Парная сборка BPE требует, чтобы любой неисходный токен складывался из двух меньших элементов словаря, поэтому у односимвольного токена должно быть хотя бы одно внутреннее деление на две части, каждая из которых сама является токеном. Это проверяемо, и корейский слог 최 стал первым найденным контрпримером.

Слог занимает один токен, что объяснимо для распространённой фамилии, однако другие корейские слоги с общим двухбайтовым префиксом или суффиксом стоят три токена, по числу байтов. Ни префикс, ни суффикс сами по себе токенами не являются, и парная сборка такой результат не объясняет.

Отдельную сложность при таких проверках создают фиксированные накладные расходы в 7–8 токенов: строка «a» обходится в 8 токенов, а одна цифра в 9. По оценке автора, причина в окружающем чат-формате, который начинается с маркера ^ и заканчивается двумя переводами строки, плюс неизвестное содержимое.

Слово telecommunications стоит один токен, а telecommunicationsy четыре

Слова заворачиваются в маркеры начала и конца, которые автор обозначает как ^ и $. «tokenizers» разбирается как [^token][izers$], а «semiconduct» и «usercontent» по отдельности стоят два токена, «romagnet» три, и в склейке «semiconductromagnetusercontent» получается ровно три токена, то есть сами последовательности являются токенами только в подходящем окружении.

Аналогично «telecommunications» занимает один токен, а «telecommunicationsy» распадается на четыре: [^telecommun][ic][ation][sy$]. Спаны пунктуации тоже получают маркеры, но только с той стороны, где граничат с пробелом: в строке «a== b» пунктуация кодируется как ==$. По предположению автора, пробел в последовательности $^ удаляется перед кодированием, а при декодировании превращается обратно в пробел.

Есть отдельные токены для спанов пробелов, переводов строки и табуляций. Токенами являются последовательности из 1–30, 32, 33, 40, 48, 64, 98 и 128 переводов строки, тогда как последовательность из 31 перевода строки токеном не является. Благодаря устройству маркеров многие пробелы в коде и обычном тексте оказываются бесплатными.

MERCHANTABILITY занимает один токен, а MERCHANTABILITYq пятнадцать

Заглавные буквы кодируются маркером и строчной формой: Token превращается в маркер сдвига и token, NASA в маркер капса и nasa. Правило применяется только к целому претокену, поэтому GaN и WiFi записываются буквально, без всякого маркера. Сам маркер может входить в состав токена или стоять отдельно, как ^ и $.

Поэтому MERCHANTABILITY укладывается в один токен вида [⇪^merchantability$], а добавление строчной «q» ломает и код заглавных, и разметку слова: строка распадается на пятнадцать токенов, от [^M] до [q$]. В версиях v4.7 и новее схема заметно упрощена, код заглавных из неё удалён.

Иероглифика, корейское письмо, эмодзи и многие редкие системы письма маркеров слова не получают и всегда разбираются посимвольно. Для символов без выделенного токена применяется побайтовый откат UTF-8, но только внутри символа и строго по префиксу. Цифры группируются по три, нормализация NFC с рядом замен символов, среди которых в ранней версии фигурные кавычки.

Что дальше. Автор называет выводы спекулятивными: часть поведения остаётся необъяснённой в письменностях с большим числом маркеров, например в деванагари, где расхождение в счёте доходит до 10%. Основные усилия пришлись на старую версию, у v4.7 и новее погрешность выше. Код реконструкции опубликован на GitHub, разбор опирается на ранние наблюдения @sasuke___420 и на потоки токенов из исходников материала Anthropic «On the Biology of a Large Language Model».

Комментарии

Пока никто не написал. Будьте первым.

Присоединяйтесь к разговору

Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.

Из Google мы используем только имя и аватар. Почту не сохраняем.