Токены - это базовые единицы текста для нейросетей, которые не совпадают с привычными словами или символами. Узнайте, как происходит токенизация, почему ChatGPT использует токены вместо слов, от чего зависит лимит и что влияет на количество токенов в разных языках и форматах текста.
Токены в нейросетях - это небольшие фрагменты текста, на которые языковая модель разбивает запрос перед обработкой. Для пользователя фраза выглядит как обычное предложение из слов, а для ChatGPT она представляет собой последовательность отдельных токенов, преобразованных в числа.
Именно поэтому ограничения языковых моделей обычно указывают не в словах или символах, а в токенах. От их количества зависит, сколько текста модель может обработать за один раз, какую часть длинного диалога она способна учитывать и насколько большой ответ может сгенерировать.
Токен - это единица текста, с которой работает языковая модель. Проще всего представить его как небольшой кусочек строки, которому система присваивает определённый числовой идентификатор.
Токеном при этом необязательно становится целое слово. В зависимости от используемого токенизатора одним токеном может быть короткое распространённое слово, часть более длинного слова, последовательность букв, цифры или знак препинания.
Например, простая фраза:
"Кошка сидит на столе."
для человека состоит из четырёх слов и точки. Нейросеть может разделить её иначе: некоторые слова оставить целиком, а другие разбить на несколько частей. Точный результат зависит от словаря и алгоритма токенизации конкретной модели.
После такого разбиения каждому полученному фрагменту соответствует число. Внутри вычислений нейросеть уже работает не со строкой "кошка" или "столе", а с числовыми представлениями этих элементов.
На первый взгляд было бы проще дать каждому слову отдельный номер. Но у такого подхода быстро возникла бы проблема: количество возможных слов практически не ограничено.
У одного русского слова может быть множество форм. Например:
работа → работы → работе → работами → работающий
Если хранить каждую форму как полностью независимый элемент словаря, его размер быстро вырос бы. Ситуацию дополнительно усложняют фамилии, названия компаний, новые термины, опечатки, числа, ссылки и программный код.
Токены позволяют разбивать редкие и длинные слова на более знакомые модели части. Благодаря этому нейросеть может обработать даже последовательность символов, которой в точности не было в словаре как отдельного слова.
Поэтому утверждение "одно слово равно одному токену" неверно. Короткое распространённое слово иногда действительно может занимать один токен, а более редкое или сложное - сразу несколько.
То же относится к знакам препинания и цифрам. Число, дата или адрес сайта тоже могут быть представлены несколькими токенами. Для модели всё это элементы одной последовательности, а не отдельные человеческие категории вроде "слово", "запятая" или "число".
Эта особенность объясняет, почему два текста с одинаковым количеством слов могут сильно отличаться по числу токенов. Реальный размер запроса для нейросети определяется не количеством слов, которое видит человек, а результатом его разбиения токенизатором.
Когда пользователь отправляет сообщение в ChatGPT, текст не передаётся нейросети в исходном виде. Сначала его обрабатывает токенизатор - специальный механизм, который разбивает строку на последовательность токенов.
Упрощённо этот процесс выглядит так:
текст → токенизация → токены → числовые ID → обработка нейросетью
Допустим, пользователь пишет: "Как работает нейросеть?". Для человека это три слова и знак вопроса. Токенизатор может представить эту фразу как несколько фрагментов, причём границы токенов необязательно будут совпадать с границами слов.
Каждому токену соответствует определённый идентификатор из словаря модели. Например, один фрагмент может получить условный ID 4217, другой - 853, третий - 19024. Сами номера не содержат понятного человеку значения: это просто способ однозначно обозначить элементы словаря.
Именно такую последовательность числовых идентификаторов получает модель на следующем этапе обработки.
Нейросеть выполняет математические операции и не умеет воспринимать буквы и слова так, как это делает человек. Фраза "Сегодня хорошая погода" сама по себе ничего не означает для вычислительной системы, пока её элементы не будут представлены в числовой форме.
Можно было бы назначить отдельный номер каждому возможному слову, но такой подход плохо масштабируется. Язык постоянно меняется: появляются новые названия, сленг, фамилии, технические термины и комбинации символов. Кроме того, одно слово может иметь множество грамматических форм.
Токенизация решает эту проблему за счёт промежуточного уровня. Вместо необходимости хранить абсолютно каждое возможное слово модель использует ограниченный словарь распространённых фрагментов текста.
Если нужное слово есть в словаре целиком, оно может стать одним токеном. Если его нет, токенизатор способен разбить слово на несколько более мелких частей, которые модели уже известны.
Так нейросеть может работать не только с обычными предложениями, но и с именами, числами, ссылками, программным кодом и новыми словами.
Состав словаря токенов формируется заранее при создании модели. Часто встречающиеся последовательности символов выгодно хранить как крупные элементы, потому что это уменьшает длину получающейся последовательности.
Редкие комбинации, наоборот, могут разбиваться на несколько токенов. Поэтому популярное слово иногда кодируется одним элементом, а необычный технический термин - несколькими.
Например, модель может хорошо знать часто встречающийся фрагмент слова и использовать его внутри множества разных выражений. Это позволяет не создавать отдельный элемент словаря для каждой возможной формы.
На конкретное разбиение влияют используемый токенизатор, его словарь и язык текста. Поэтому одна и та же строка в разных моделях необязательно будет состоять из одинакового количества токенов.
Подробно устройство токенизаторов, формирование словаря, subword-разбиение и превращение текста в числовые идентификаторы разобраны в отдельном материале "Токенизация текста: как нейросеть превращает человеческий язык в числа".
Использовать слова как базовые единицы для языковой модели неудобно. Язык слишком разнообразен: существуют миллионы словоформ, имён, технических терминов, сокращений и новых выражений. Если каждому из них назначать отдельный элемент словаря, он станет огромным, а незнакомые слова придётся обрабатывать отдельным способом.
Токены дают более гибкий подход. Часто встречающиеся слова или фрагменты можно хранить целиком, а редкие последовательности - собирать из нескольких более мелких элементов. Благодаря этому одна система способна работать с обычным текстом, кодом, числами, адресами сайтов и разными языками.
Такой подход также позволяет ограничить размер словаря. Вместо бесконечного набора возможных слов модель получает фиксированный набор токенов, комбинациями которых можно представить практически любой входной текст.
Именно поэтому ChatGPT считает не слова, а токены. Количество слов удобно человеку, но для модели важна длина той последовательности, которая фактически поступает на обработку.
После обработки запроса модель получает последовательность токенов и использует её как контекст для предсказания продолжения.
Упрощённо процесс можно представить так:
полученные токены → анализ контекста → вероятности следующего токена → выбор продолжения → повтор
Допустим, начало фразы выглядит как "Столица Франции -". На основе контекста модель рассчитывает вероятности возможных следующих токенов. Некоторые варианты получают очень низкую вероятность, а фрагмент, соответствующий слову "Париж", - значительно более высокую.
После выбора следующего токена он добавляется к уже существующей последовательности. Затем модель снова выполняет расчёт, но теперь учитывает и только что сгенерированный элемент.
Этот цикл повторяется много раз. Поэтому ответ не создаётся сразу как готовый абзац. Языковая модель последовательно формирует его токен за токеном, каждый раз выбирая продолжение на основе уже имеющегося контекста.
При этом "следующий токен" не всегда означает следующее полное слово. Им может оказаться часть слова, знак препинания или другой фрагмент текста. Уже после последовательной генерации пользователь видит привычные предложения.
Числовой ID токена ещё не является тем представлением, с которым удобно выполнять основные вычисления. Поэтому перед дальнейшей обработкой каждый идентификатор преобразуется в набор чисел - векторное представление.
Такое представление обычно называют embedding. Оно позволяет нейросети работать с токенами в многомерном математическом пространстве и учитывать связи между элементами последовательности.
После этого векторы проходят через слои модели. Нейросеть анализирует не отдельный токен сам по себе, а его положение и отношения с другими токенами в контексте.
Например, значение слова может зависеть от того, какие элементы находятся рядом или появились значительно раньше в предложении. Благодаря этому одна и та же последовательность символов может интерпретироваться по-разному в зависимости от окружения.
В результате модель получает внутреннее представление контекста и на его основе рассчитывает вероятности следующего токена. Затем процесс повторяется снова - до завершения ответа или достижения ограничения на генерацию.
У токена нет фиксированной длины. Он может состоять из одного символа, нескольких букв, целого слова или даже более длинной последовательности. Поэтому универсального правила вроде "1 токен = 4 символа" не существует.
Такие оценки используют только для приблизительных расчётов. В обычном английском тексте один токен действительно нередко соответствует нескольким символам, но конкретное значение сильно зависит от содержания и токенизатора модели.
Например, распространённое короткое слово может быть представлено одним токеном. Редкий технический термин той же длины способен разбиться сразу на несколько. Числа, необычные обозначения и комбинации символов также могут существенно увеличить количество токенов.
Поэтому два предложения одинаковой длины в символах необязательно займут одинаковое место в контексте нейросети.
Количество слов тоже нельзя точно пересчитать в токены по одному коэффициенту. Иногда одно слово соответствует одному токену, иногда - двум, трём или большему числу.
Особенно хорошо это заметно на длинных и редких словах. Токенизатор может не иметь такого слова в словаре целиком и разбить его на знакомые фрагменты.
Например, условное техническое слово может выглядеть для человека как одна единица:
"микроархитектура"
но внутри модели быть представлено несколькими токенами. При подсчёте слов это всё ещё одно слово, а для лимита контекста учитывается уже несколько элементов.
Обратная ситуация тоже возможна: часто встречающаяся комбинация символов может храниться как единый токен и занимать меньше места, чем можно было бы предположить по её длине.
Поэтому значения вроде "1000 токенов - это примерно столько-то слов" подходят только для грубой оценки. Для точного подсчёта конкретный текст необходимо пропустить через тот же токенизатор, который используется соответствующей моделью.
На итоговое число токенов влияет прежде всего сам текст и словарь токенизатора.
Разница между языками возникает не потому, что нейросеть "хуже понимает" один из них. Причина находится на уровне токенизации.
Словарь модели формируется из большого массива текста. Если определённые последовательности символов встречаются часто, токенизатор может представить их более крупными элементами. Реже встречающиеся комбинации приходится разбивать на меньшие части.
Поэтому перевод одного английского предложения на русский может изменить количество токенов, даже если смысл и примерное число слов остались теми же. В другой модели со своим токенизатором соотношение может быть уже иным.
Из-за этого оценивать размер большого документа только по количеству страниц, слов или символов недостаточно. Для нейросети реальный объём текста определяется количеством токенов после токенизации.
Токенами измеряется не только длина отдельного сообщения. У языковой модели есть контекстное окно - объём информации, который она может учитывать одновременно во время обработки запроса и генерации ответа.
В контекст могут входить:
Все эти данные занимают токены. Поэтому даже короткий новый запрос может обрабатываться вместе с большой историей переписки, которая уже использует значительную часть доступного контекста.
Условно контекстное окно можно представить как рабочую область нейросети. Пока необходимая информация находится внутри неё, модель может учитывать её при формировании следующего токена.
У каждого типа языковой модели существует ограничение на объём контекста. Оно определяет, какое количество токенов система способна обработать в рамках одной операции или диалога с учётом используемой архитектуры и настроек сервиса.
Это ограничение нельзя напрямую переводить в фиксированное количество страниц или слов. Один документ может расходовать токены экономно, а другой при похожей длине - заметно быстрее из-за языка, кода, чисел или сложного форматирования.
Важно и то, что входной текст и генерируемый ответ могут использовать общий доступный объём либо иметь отдельные ограничения в зависимости от конкретной модели и интерфейса.
Например, если значительная часть контекстного окна занята большим документом, историей разговора и инструкциями, для дальнейшего содержимого остаётся меньше пространства. Поэтому максимальный теоретический размер контекста не означает, что пользователь всегда может отправить запрос именно такого объёма и получить столь же длинный ответ.
По мере роста переписки количество информации увеличивается. Если весь разговор перестаёт помещаться в активный контекст, системе приходится управлять историей так, чтобы продолжить работу в пределах доступного лимита.
Конкретный механизм зависит от сервиса и модели. Часть старых сообщений может перестать непосредственно присутствовать в текущем контексте, а отдельные сведения могут сохраняться или передаваться в более компактной форме.
Из-за этого в очень длинном разговоре нейросеть иногда хуже учитывает детали, которые обсуждались значительно раньше. Для пользователя чат выглядит единым непрерывным диалогом, но модель не обязательно обрабатывает каждое сообщение с самого начала переписки при каждом новом ответе.
Это одна из причин, почему токены тесно связаны с тем, насколько хорошо нейросеть удерживает контекст длинного разговора.
Подробнее механика длинных диалогов разобрана в материале "Почему нейросети забывают длинные диалоги: как работают контекст, память и Attention".
Ограничение контекста особенно заметно при работе с большими объёмами информации.
Токены поэтому являются не просто технической единицей подсчёта. Они определяют реальный объём информации, с которым языковая модель способна работать одновременно.
Фиксированного количества символов в токене нет. Один токен может соответствовать отдельному символу, нескольким буквам, целому слову или другой последовательности. Иногда для приблизительных расчётов используют оценку в несколько символов на токен, но для конкретного текста она может заметно отличаться.
Точное количество можно определить только с помощью токенизатора той модели, с которой планируется работать.
Соотношение слов и токенов непостоянно. Короткое распространённое слово может занимать один токен, а длинное или редкое - несколько. Поэтому текст из 1000 слов необязательно будет иметь одинаковое количество токенов в разных языках или даже при разном словарном составе.
Для оценки больших запросов правильнее ориентироваться непосредственно на количество токенов, а не пытаться переводить их в слова по фиксированной формуле.
Да, знаки препинания участвуют в токенизации, но это не означает, что каждый знак обязательно становится отдельным токеном. В зависимости от токенизатора точка, запятая, скобка или другой символ может быть самостоятельным элементом либо входить в токен вместе с соседними символами.
Аналогично обрабатываются пробелы, переносы строк, математические обозначения и другие элементы текста.
Количество токенов зависит от словаря конкретного токенизатора и того, какие последовательности символов в нём представлены наиболее эффективно.
Если распространённые английские слова и части слов чаще встречались в данных, использованных при создании словаря, они могут кодироваться более крупными токенами. Русские слова при этом иногда приходится делить на большее количество частей.
Однако это не универсальное правило. Современные токенизаторы отличаются друг от друга, поэтому соотношение зависит от конкретной модели и текста.
Если необходимый объём информации превышает доступное контекстное окно, модель не может одновременно обработать всю последовательность в исходном виде. В зависимости от конкретного сервиса часть старого контекста может перестать напрямую учитываться, данные могут обрабатываться иначе либо система ограничит объём входа или ответа.
На практике это особенно важно при длинных переписках, работе с крупными файлами и анализе больших фрагментов программного кода.
Токены в нейросетях - это базовые элементы, через которые языковая модель получает и генерирует текст. Они не совпадают напрямую ни со словами, ни с символами: одно слово может оказаться одним токеном или быть разделено на несколько частей.
ChatGPT считает именно токены, потому что такой формат позволяет представить огромный и постоянно меняющийся человеческий язык с помощью ограниченного словаря элементов. После токенизации каждому фрагменту назначается числовой идентификатор, который затем преобразуется в представление, пригодное для вычислений внутри нейросети.
Количество токенов имеет и практическое значение. Именно оно определяет, сколько текста занимает запрос, какой объём истории может попасть в контекстное окно и сколько информации модель способна учитывать одновременно. Поэтому при работе с длинными документами, кодом или большими диалогами важнее смотреть не на количество страниц и слов, а на реальный объём текста после токенизации.