Кто слышал про мем с нейросетями и словом strawberry?

Летом 2024 в интернете появились скриншоты, где человек спрашивает ChatGPT: «Сколько букв R в слове strawberry?» Буквы три, а модель уверенно отвечает: «Две».

Потом это же спросили у Claude и Gemini. Ответ не изменился. Скриншоты распространяются в соцсетях и чатах. Ирония очевидна: нейросеть, которая пишет код и стихи, не смогла сосчитать до трёх.

Сейчас многие модели уже отвечают правильно, но шутка осталась. А вместе с ней остался хороший вопрос: почему тогда это вообще случилось?

Всё дело в токенах. Ну или в том, как они устроены.

Давайте разберёмся, почему нейросеть не видит слово так, как его видим мы, откуда берутся эти самые токены, как текст превращается в числа, которые понимает модель, и почему из-за этого возникают такие странные ошибки.

После этого вам станет понятнее устройство современных LLM и почему модели могут ошибаться в элементарных вещах.

Но начнём мы издалека!

Механика генерации: модель не думает, а угадывает

Многие думают, что нейросеть «понимает» вопрос так же, как человек. На деле всё устроено иначе.

Когда вы задаёте вопрос нейросети, она не думает в нашем привычном понимании. Она делает другое: подбирает, какой кусок текста с большей вероятностью должен идти дальше. Потом следующий и так далее. Так собирается ответ.

Поэтому такие модели называют генеративными. Генеративная — значит, она не ищет готовый правильный ответ в памяти, а каждый раз заново составляет наиболее вероятное продолжение текста, кусок за куском (ну или токен за токеном).

Если в 2024 спрашивали «сколько R в strawberry», то модель не считала буквы. Она угадывала, как обычно выглядят ответы на такие вопросы. Часто получалось «две». Для неё это была не задачка по арифметике. Это продолжение фразы.

Но тут можно спросить: если модель что-то предсказывает, а не считает — то на основе чего она вообще угадывает? Ответ в том, что она предсказывает не буквы одну за другой. Она предсказывает токены — более крупные куски текста. Слово «strawberry» для неё — это не десять букв подряд, а два-три токена, и буквы R могут оказаться спрятаны внутри одного такого куска, будто их и не было по отдельности. Что такое токены и как они устроены — разберёмся дальше.

Что такое токен

Токен — это кусок текста, с которым модель умеет работать. Токены появляются на этапе обучения: специальный алгоритм разбивает огромный массив текста и находит самые частые сочетания символов. Например, для модели GPT-5 слово «привет» разбивается на два токена — «пр» и «ивет», потому что именно такая пара последовательностей встречается в текстах чаще всего. Как именно устроен этот процесс — расскажем дальше.

Токен может совпадать со словом целиком. Может быть обрывком, вроде «ивет», или всего одним знаком — запятой, восклицательным знаком, пробелом.

Модель не видит слово «strawberry» как десять букв подряд. Она видит три куска — и у каждого есть свой номер в словаре. Тот же GPT-5 разбивает его на «st», «raw» и «berry» с номерами 302, 1618 и 19772.

Дальше модель думает уже этими номерами, а не буквами. Букв для неё как бы не существует. Есть только токены из словаря.

Токенизатор

Разбивает текст на токены не сама модель, а токенизатор.

Токенизатор — это переводчик на входе и на выходе. Он не отвечает на вопрос и ничего не генерирует. Он разбивает фразу на токены. У каждого токена уже есть свой номер в словаре — токенизатор его просто находит. Когда модель выдаёт ответ в виде цепочки таких номеров, токенизатор снова собирает из них обычный текст.

Сам словарь с токенами появляется ещё на этапе обучения модели. В него попадают последовательности символов, которые встречались чаще всего в обучающих текстах. Что часто мелькало в интернете — то и стало отдельным токеном. Что редко — то отдельного куска не получило и каждый раз собирается из более мелких.

Токенизатор как раз и пользуется этим словарём: смотрит на ваш текст и ищет в нём самые крупные куски, которые словарь уже знает.

Вот что модель видела вместо strawberry

Возьмём то самое слово. Для одной из самых распространённых моделей strawberry — это не десять букв подряд. Это три куска:

st / raw / berry

Три R спрятаны внутри этих кусков: одна в raw, две в berry. Но модель не разглядывает куски по буквам. Для неё это три карточки с номерами. Спросить «сколько R» — всё равно что показать три штрихкода и спросить, сколько в них палочек. Касса штрихкоды не считает. Она их считывает целиком.

Поэтому задача, которая для человека детская, для модели была неудобной. Она не видела буквы. Она видела куски. И вместо того чтобы считать, подбирала правдоподобное продолжение — часто «две».

С тех пор модели научились обходить эту ловушку. Многие теперь сначала как бы проговаривают слово по буквам и только потом считают. Сам переводчик при этом не изменился: буквы сами по себе модель по-прежнему не видит. Просто она нашла обходной путь.

Заключение

Токены — это своего рода валюта в мире LLM. Куски текста из словаря, который сложился во время обучения по частоте встречаемости. Токенизатор — это обменник: превращает наш текст в токены и обратно. А сама модель генерирует исключительно в токены, предсказывая следующий самый вероятный.